1. 3

    I have been using KeePass for the last couple of years (since 2012, if not a bit earlier), with SyncThing keeping it synced across my devices.

    It has been quite reliable. Sometimes I’ll get a sync conflict, but it’s rare enough that I fix it manually, and I like the fact that I don’t need Internet access - hotspot on airplane mode is enough - for it to work.

    1. 1

      I… don’t. Mind you, I have been trying, but I’d probably need to have at it for a week straight to remove/organize all the cruft that has been accumulating over the last few years.

      I have sketched a tentative folder layout, though, which is in use on my netbook (and partially on my laptop):

      • doc/: assorted personal documents (PDF scans/JPEG photos + org-mode notes)
        • academy/
        • archive/
        • finance/
        • journal/
        • medical/
      • dev/: my own repositories, what I am actively developing
      • dat/: miscellaneous data files, minus books
      • etc/: assorted scripts & dotfiles, installed in their proper place via stow
      • lib/: books & assorted reading material, organized according to the Universal Decimal Classification - e.g.,
        • 0.Science_and_Knowledge/
          • 02.Librarianship/
            • 025.450.Decimal_classifications/
        • 1.Philosophy_Psychology/
        • 2.Religion_Theology/
        • 3.Social_sciences/
        • A.Fiction/
          • Pratchett_Terry/
      • tmp/: temporary files, including browser downloads and repos that I’m just checking out

      I name most files according to the following pattern, while taking care to not include “weird characters” (or even just spaces) in my filenames:

      [Author.][Date.][Series-NN.]Title[--tag-tag].ext
      

      It can be a bit of an hassle, but it makes locate actually useful.

      1. 1

        I know this is a really old thread, but thank you for the UDC idea! My $HOME/bib/text/ is the messiest part of my computer; I’ve been using a tentative author-name-title format, but it never struck me to use an actual indexing system. I’m going to implement this over the coming days.

      1. 4

        The DCPU-16 comes to mind. It should have been part of the sci-fi game 0x10c, but that project died. The CPU spec stuck around.

        1. 3

          Oh I remember this, it saddened me that the whole 0x10c project got cancelled. Incidentally I just found an extension on the original that someone made https://fail0verflow.com/media/files/dcpu16-proposal.txt

        1. 10

          While I agree with the practical suggestions of this article in principle, what’s being suggested here effectively sounds like “host your own git repositories so you’re free of all criticism and can let your toxic behavior go unchecked”? I think there’s a difference between GitHub taking action on things that are legitimately offensive and would go against any Code of Conduct, and the true political censorship GitHub has been enforcing over the last months, such as barring users to access their site based on their location.

          1. 16

            Presumably, people disagree with Github about the what constitutes “toxic” and “legitimately offensive”.

            Or (like me) they are uncomfortable with a service enforcing their views, even if the views themselves are reasonable.

            1. 14

              Personally, I would like it if the services I used barred people who don’t think I deserve to exist from participating in the same things I participate in.

              1. 7

                I would like it if the services I used barred people who don’t think I deserve to exist

                FWIW, I have strong issues with people who think other categories of people should not exist, and it sucks that you have to deal with them.

                However, I don’t think this is a very good long term practical solution, especially when the moral compass of a lot of SV companies seems to be directly related to the amount of social media pressure a given issue garners. I would perhaps have a different viewpoint if companies had a well articulated, solid set of moral principles that they stuck to.

                Even then, I see services such as code hosting as completely orthogonal to political/moral judgement. I see no reason why they should be intertwined.

                1. 13

                  I don’t want to retread the same ground that we’ve been on 100 times before for the sake of winning an argument online, so I’ll just say that my opinion is that all social spaces are political and therefore require moderation (codes of conduct, etc) in order to be welcoming to newcomers. GitHub has a much larger precedent on this than almost all other code hosting platforms I’ve seen.

                  1. 9

                    I don’t see how every social space being political logically leads to the conclusion that they should be welcoming to newcomers. And every social space being moderated sounds like a totalitarian nightmare.

                    I can see that ‘social’ aspect of github does potentially shift it towards more of a political space, especially as they do position themselves as a place for newcomers. I would say, though, that people like the author of the article wanting to move away from that social aspect and the attendant rules is not necessarily a sign that they want create a den of free-for-all abuse and horror. Perhaps they just don’t want every space they inhabit to be political.

                    1. 12

                      Professional social spaces (that is: places where some of the people have to be there in order to keep a roof over their head) need very different rules from other kinds of space.

                      1. 5

                        Indeed; github is in some ways more like a workplace than, say, a cafe or a park.

                        Thinking about it in those terms helps me to clarify my objection. Github is more analogous to an office building than to an organisation. It’s a piece of infrastructure within which individuals and organisations come to work. It would seem rather bizarre if the owner of an office building enforced rules about the speech of their tenants.

                        It’s obviously an imperfect analogy.

                        1. 4

                          If Github is analogous to an office building, surely a project within it is analogous to the group of people operating within it.

                          If those people put up a sign saying “You’re welcome to come in, but don’t do X”, and you decide to do that anyways, don’t whinge when they call security (github) and ask to have you escorted from the premises (banned).

                          (that is: projects have codes of conduct; github has very lax rules other than ‘behave on other peoples projects’)

                          1. 4

                            (that is: projects have codes of conduct; github has very lax rules other than ‘behave on other peoples projects’)

                            The original article has examples of github enforcing their own set of standards.

                            1. 3

                              If GitHub’s own rules are that minimal, then to respond to @marisa’s original point, the relevant distinction isn’t between GitHub and self-hosted projects, but projects with an appropriate (and enforced) code of conduct and those without one. And AFAIK, there’s no reason why more project maintainers who conscientiously apply and enforce a CoC shouldn’t leave GitHub and host their repo, issue tracker, etc. under their own domain.

                              1. 3

                                I agree, but that’s not what the blog post sounded like :)

                            2. 4

                              It would be bad if every cafe and park was required to enforce the same rules as a workplace, just in case you encountered someone you knew at work there.

                        2. 2

                          I’ll just say that my opinion is that all social spaces are political and therefore require moderation (codes of conduct, etc) in order to be welcoming to newcomers.

                          Even if you take this as read, and I think this statement taken in isolation is reasonable, you still need platform diversity because some platforms will settle on codes of conduct which you see as wrong, perhaps even horribly wrong. One example is TERFs: They see trans women as males invading female spaces and will work extremely hard to police that kind of thing, which is inherently unfriendly to trans people. Unless you’re absolutely sure none of the kinds of platform you want to participate in (code hosting, web hosting, issue tracking, etc.) will go a pro-TERF route, you need some kind of backup plan to avoid dealing with them.

                          Self-hosting is simply the ultimate backup plan.

                      2. 10

                        It’s getting annoying to have to keep a list of the services I shouldn’t use due to overly pedantic/prescriptive definitions of sex/gender.

                        1. 1

                          That is confusing: How sex/gender came into question with Git Hosting?

                          Of course it is a social network that tries to map account to social identities. That is the source of the problem: Github being not only a git service but also aiming to be a part of our “lifestyle”.

                          1. 19

                            It’s common for queer activists, particularly trans activists, to argue that people who disagree with them on political issues related to sex and gender “think they don’t deserve to exist”, using that specific phrasing. I think this kind of rhetoric is nearly always disingenuous, designed to make it seem like their attempts to censor opposing rhetoric are unquestionably-righteous, rather than themselves a kind of true political censorship. If you think that your own freedom to publish things on the internet is important, then you should try to avoid centralized services like Github precisely because they can be co-opted by political activists (who you might not agree with) who think that advancing their cause and suppressing their opponents is more important than your freedom to publish things on the internet.

                            1. 6

                              I think this kind of rhetoric is nearly always disingenuous, designed to make it seem like their attempts to censor opposing rhetoric are unquestionably-righteous, rather than themselves a kind of true political censorship.

                              There is a difference between censorship and trying to maintain a level of basic human decency in a community.

                              In order for a larger community to function you need to set at least some rules in place to determine what kind of behavior and speech is not welcome. The worst you allow sets the bar. I can think of at least one genuinely “censorship”-free place and we all know how pleasant of a corner of the internet that is.

                              So assuming we can agree that at least some rules are needed, the question – and I’m by no means saying it’s an easy one – is where to draw the line. For me, unsolicited opinions about trans people are very far from simply “disagreeing on political issues”. They’re actively harmful. How can you “disagree” with someone’s lived experience? Is that not, in itself, a form of invalidation, of erasure?

                              The kind of behavior and speech you allow also effectively silences people who would otherwise like to be part of the community by forcing them out or discouraging them from joining in the first place. But somehow, people are more worried about censorship. I’m more concerned about the people who didn’t even get to say anything in the first place.

                              1. 5

                                When I become king, this will be stapled to the doors of GitHub, Twitter, the BBC…

                                I might run out of staples.

                                1. 10

                                  I think this kind of rhetoric is nearly always disingenuous, designed to make it seem like their attempts to censor opposing rhetoric are unquestionably-righteous, rather than themselves a kind of true political censorship.

                                  Whenever I hear or read someone saying “trans people are too pushy” I mentally substitute them saying “women are too shrill”, or “black people are too uppity”, and I afford their utterance precisely the amount of respect it deserves.

                                  1. 9

                                    You’re proving @Hail_Spacecake’s point.

                                    What you just said can be logically reduced to “whenever I hear someone say x, I substitute that with some y that they didn’t actually say.”

                                    This is exactly the kind of straw-manning disingenuous argument style that we’ve all become accustomed to when engaging this specific flavour of political activist.

                                    1. 4

                                      I’m saying that there’s no qualitative difference in the arguments against trans rights than in past arguments against the rights of women, gays, or people of color.

                                      1. 9

                                        A criticism of an underhanded debate tactic used by a group is not a tacit denial of that group’s rights.

                                        I mean, look at it the other way around: You’re arguing against me. Does that mean you don’t believe I deserve equal rights?

                                    2. 4

                                      trans people are too pushy

                                      But that’s really not what @Hail_Spacecake is saying, is it? He points out that there are queer/trans activists who reduce opposition to the personal attack that one “don’t deserve to exist”, which if it is a “common” thing, would be a legitimate criticism. Other than that, I don’t see how what you say related to the discussion? If anything, you would want decentralised systems so that those who do actually say “X are too Y” don’t control you, or inhibit you in acting according to your intentions.

                                    3. 4

                                      It’s common for queer activists, particularly trans activists, to argue that people who disagree with them on political issues related to sex and gender “think they don’t deserve to exist”, using that specific phrasing

                                      Do they? Do they, really?

                                      Might it be that those people who “merely” “disagree with them on political issues related to sex and gender” are actually opposing their existence? Like, say, by supporting bathroom bills - which are aimed at removing gender non-conforming folks from the public eye - by opposing anti-discrimination laws, or by trying to make access to treatment more difficult?

                                      Might it be that their “disagreement on political issues” is also, most of the time, accompanied by behaviours that go beyond mere disagreement, and that “I just disagree with [homosexuality|transsexuality]” is never just that?

                                      designed to make it seem like their attempts to censor opposing rhetoric

                                      Is it really censorship if someone says “you suck” at the Westboro Baptist Church because of what they say? I thought both had a right to express their opinion.

                                      Oh, sure, maybe hearing “you suck!” over and over again might make them think twice before opening their mouth.

                                      Is that censorship? In any case, is it wrong? And, do you think that LGBT+ people are immune to it?

                                      I feel like getting told, over and over again, “trans people are mentally ill”, “there is only two genders”, “they are just doing it for the attention”, might have a chilling effect on that population.

                                      1. 1

                                        Is it really censorship if someone says “you suck” at the Westboro Baptist Church because of what they say? I thought both had a right to express their opinion.

                                        No, but it is censorship for github to bar them from using their SaaS product because of what they say. It’s definitely censorship for trana activists to attack the entire concept of decentralized github alternatives for the specific reason that it would make it harder for github to enforce a code of conduct requiring that they be barred from github for what they say, which is what several people in this thread about decentralized alternatives to github have done. We’re all the Westboro Baptist Church in someone’s eyes, and I don’t want Github making that judgment call for everyone who writes open source software.

                                        1. 3

                                          It’s definitely censorship for trana activists to attack the entire concept of decentralized github alternatives

                                          Where, exactly, are they doing that?

                                          Because I’m looking pretty hard at this thread and I can’t seem to find “trans activists attacking the entire concept of decentralized github alternatives”, or doing so because “[decentralized alternatives] would make it harder for github to enforce a code of conduct”.

                                          I saw a few people expressing their worry and disappointment, how they felt unwelcome in some spaces because of petty, discriminatory asshats, and how an article starting with “controversy resulting from GitHub censoring” - listing events often described as “those damned S-J-Ws want to destroy open source” - might be read as endorsing alternative spaces as free from censorship and, by extension, free from “SJWs” and “political correctness drama”.

                                          As one example of a censorship-free, “SJW”-free spaces is Voat, you can see how it might be concerning to some.

                                          There wasn’t much else here, which is both disappointing and funny. Why, “those spaces cannot be censored and might become a free-for-all” sounds more like an endorsement than an attack.

                                          We’re all the Westboro Baptist Church in someone’s eyes,

                                          Yes, yes, yes. Trivially true, and yet irrelevant.

                                          We are all the Westboro Baptist Church in someone’s eyes. We are all monsters in someone’s eyes. We can also avoid trite platitudes such as this one.

                                          1. 0

                                            Where, exactly, are they doing that?

                                            https://lobste.rs/s/s0s8fu/why_not_github#c_g1rymt

                                            1. 3

                                              The only argument against decentralization I can see there is this mild statement:

                                              decentralization can be harmful in unexpected ways (see: all of Bitcoin)

                                              And I really don’t see how you determined that @rebecca is a “trana*(sic!)* activist”. I certainly could not from her About page.

                                    4. 5

                                      It matters when you are a gender/sexual minority and want to avoid being shat on for factors beyond your control

                                      1. 7

                                        It is easy to people in the majority to say “it’s not that painful to be in the minority”. Until they face another situation, for which they belong to the minority and suddenly change the reaction toward “it’s a nightmare everyday”.

                                        We all are in one majority for some topic. We all are in a minority for some other topic.

                                        If one hesitate between “Do I include the minority and be frown upon by the majority” and “Do I exclude the minority and be safe with the majority”, then it’s all about asking to ourselves: “in that other case in which I am the minority, would I appreciate to be included by the majority?”.

                                        Then the choice becomes obvious to me: treat the 10% minority as a first class citizen and fully give it the 10% it deserves without reserve.

                              2. 6

                                For other readers’ info: https://help.github.com/en/articles/github-and-trade-controls

                                GitHub themselves don’t really have much choice in the matter, but if you live outside the US, it makes perfect sense wanting to host in your same country, so that you don’t have to deal with two different sets of laws at once.

                                1. 2

                                  Author here. Added this link to an update to the article. Thanks.

                                2. 2

                                  barring users to access their site based on their location.

                                  They and everyone else have to follow the law.

                                  1. 4

                                    While that is true not everyone using GitHub lives in the US. So in many cases it really is using GitHub rather than being more independent causing that particular issue.

                                    Of course that applies to similar central hosting platforms and other countries and therefor laws as well. I’d also not read that as anti-GitHub in particular, but to a large part anti-centralization.

                                  2. 2

                                    Interesting, I hadn’t heard about that. Looking into it, though, I do agree it’s a much bigger concern than those mentioned in the article.

                                  1. 28

                                    The thing I like about Iosevka is that you can build it with different sets of ligatures, and I’ve configured my Emacs to use the version of Ioseveka specific to the language in the buffer. That’s sort of cool. Of course, I’ve now officially spent more time setting Emacs up to write Haskell and OCaml in than I have actually writing Haskell or OCaml, but, you know, you gotta start somewhere.

                                    1. 48

                                      I think you’re doing fine. I’ve spent more time reading about people setting up their Emacs than I ever used Emacs

                                      1. 3

                                        I always try to teach Haskell using nano otherwise everyone is like “ooo what are you using?” and “can I get something like that but for jEdit/Sublime/Atom/VS?”

                                        1. 3

                                          Hah! Nice. I can certainly empathise with spending more time configuring Emacs than actually using it to write things. Do you have your configuration published anywhere? I’d be interested in seeing the font set-up :)

                                          In the interest of sharing, here’s mine: https://github.com/cmacrae/.emacs.d

                                          1. 1

                                            Here’s some horrible elisp, assuming “Iosevka Haskell P” and “Iosevka ML P” are proportionally spaced versions of Iosevka with the appropriate ligatures defined:

                                            (defun jfb/frame-is-displaying-?-buffer (frame mode)
                                              (interactive)
                                              (eq mode (buffer-local-value 'major-mode (car (buffer-list frame))))) ;; this assumes that the first buffer in a frame's list of buffers is the visible one. Sigh.
                                            
                                            (defun jfb/frames-that-? (predicate)
                                              (interactive)
                                              (require 'seq)
                                              (seq-filter predicate (visible-frame-list)))
                                            
                                            (defun jfb/assign-font-to-frame (predicate-to-pick face-to-assign)
                                              (interactive)
                                              (setq frames (jfb/frames-that-? predicate-to-pick))
                                              (if frames   (set-frame-font face-to-assign
                                                                           nil
                                                                           frames)
                                                nil))
                                            
                                            
                                            (defun jfb/define-haskell-font ()
                                              (interactive)
                                              (jfb/assign-font-to-frame (lambda (f) (jfb/frame-is-displaying-?-buffer f 'haskell-mode)) "Iosevka Haskell P:weight=ultra-light:slant=normal:width=normal:spacing=100:scalable=true"))
                                            
                                            (defun jfb/define-ocaml-font ()
                                              (interactive)
                                              (jfb/assign-font-to-frame (lambda (f) (jfb/frame-is-displaying-?-buffer f 'tuareg-mode)) "Iosevka ML P:weight=ultra-light:slant=normal:width=normal:spacing=100:scalable=true"))
                                            
                                            (defun jfb/fixup-fonts ()
                                              (interactive)
                                              (jfb/define-haskell-font)
                                              (jfb/define-ocaml-font))
                                            
                                            (global-set-key [f9] 'jfb/fixup-fonts)
                                            
                                          2. 2

                                            How are you handling ligatures? AFAIU emacs doesn’t render opentype ligatures?

                                            1. 3

                                              On MacOS it does!

                                              1. 1

                                                It doesn’t out of the box, no - even if the new shaping engine might help on that front? - but you can tell it to use different glyphs for arbitrary character combinations. There’s apparently at least three different ways to tackle this, by using prettify-symbols-mode, a composition table, or font-lock. All of them, though, are specific to a single font, but there should be instructions for most of them nowadays.

                                              2. 1

                                                Ligatures are some of the finest things known to man. Are you familiar with Chartwell? Are you doing that sort of thing in emacs?

                                                http://image.linotype.com/files/fontshop/FF%20Chartwell%202.0%20User%20Manual.pdf

                                              1. 4

                                                An aside: The SVG is quite big and didn’t load directly, maybe compress it using https://github.com/svg/svgo

                                                1. 4

                                                  It’s pretty small actually, file size and image dimensions both. Are you doing something odd with your web browser?

                                                  1. 5

                                                    Loading it was noticeably slow on my end, too, and I wouldn’t call 171 kB pretty small - not when a PNG version at the same resolution is ~14 kB, as converted by ImageMagick.

                                                    1. 4

                                                      You’re right, I ran it through svgo and got it down to 80K.

                                                1. 10
                                                  Speed is Stellar

                                                  The speed of the system is stellar. I feel like it is faster than the Linux and FreeBSD installations, but I don’t have proof of it. I suspect there is less bloat to weight things down and the hardware support for Thinkpads is super in OpenBSD.

                                                  I find this rather surprising, because the last time I installed OpenBSD this (or rather the fact that it was too slow) was my main issue. I’m not sure, but as far as I understood this was because of the global kernel lock that inhibits some parallelism, where Linux permits it. Was really shocked me was the difference in time needed for Emacs to start for the first time, it was something like 1-2 seconds on Linux vs 15-20 seconds on OpenBSD.

                                                  1. 4

                                                    Was really shocked me was the difference in time needed for Emacs to start for the first time, it was something like 1-2 seconds on Linux vs 15-20 seconds on OpenBSD

                                                    Not really certain about much of this and not much of an Emacs user myself, but I recall that Emacs uses some awful build hack where it pre-loads a bunch of stuff (Emacs-lisp macros I guess) and serialises it out by simply writing a chunk of memory out to disk. I vaguely recall that this needed a special Glibc hack to work properly and as a result couldn’t be done on non-Glibc systems. Ultimately I guess what I’m trying to say is, I’m not sure that Emacs launch time is a great benchmark for OS performance generally. (But again, I’m not willing to make any firm claims here).

                                                    1. 4

                                                      Everyone knows Emacs stands for “Eight megabytes and constantly swapping”…

                                                      1. 2

                                                        You recall correctly. It basically starts from a minimal executable (temacs), loads a bunch of elisp files, and then dumps the resulting memory image out to create what the manual calls a “pure Emacs”:

                                                        The command temacs -l loadup would run temacs and direct it to load loadup.el. The loadup library loads additional Lisp libraries, which set up the normal Emacs editing environment. After this step, the Emacs executable is no longer bare.

                                                        Because it takes some time to load the standard Lisp files, the temacs executable usually isn’t run directly by users. Instead, as one of the last steps of building Emacs, the command temacs -batch -l loadup dump is run. The special dump argument causes temacs to dump out an executable program, called emacs, which has all the standard Lisp files preloaded. (The -batch argument prevents temacs from trying to initialize any of its data on the terminal, so that the tables of terminal information are empty in the dumped Emacs.)

                                                        The dumped emacs executable (also called a pure Emacs) is the one which is installed. The variable preloaded-file-list stores a list of the Lisp files preloaded into the dumped Emacs. If you port Emacs to a new operating system, and are not able to implement dumping, then Emacs must load loadup.el each time it starts.

                                                        Emacs on Android - via Termux - has the same issue: it takes more than six seconds to start on my phone, and it loads far more files than what I see on my laptop (or even my netbook, which has a comparable startup time “thanks” to its 2011 Atom CPU and 5400 rpm HDD).

                                                        1. 2

                                                          Hmm, it makes sense. This is the phenomenon you’re mentioning, and all I knew about that and OpenBSD was that they couldn’t compile Emcas to be fully ASLR (?) compatible. But it would make sense that that could slow down the start-up time.

                                                          But that didn’t change the general issue, it was just very pronounced when it came to booting Emacs. Anything like opening a file, generating an overview, etc. was noticeably slower, which saddened me, since I like OpenBSD but my primary allegiance is to Emacs :(

                                                        2. 3

                                                          I love OpenBSD but yeah, speed is not it’s strong suit nor the focus of the project. But to me it was always fast enough with the exception of youtube (which I rarely use so things might have changed there)

                                                          1. 1

                                                            global kernel lock that inhibits some parallelism

                                                            If I remember correctly, there’s been a lot of development recently to get rid of this. Last I heard the networking stack was being refactored to be lock free, so OpenBSD might be significantly more performant in the near future. Someone who’s more involved with OpenBSD dev would know more…

                                                            1. 1

                                                              That would most certainly be nice to see!

                                                          1. 6

                                                            Sure, it may be hard, but it is possible to give up graphical interfaces entirely—even in 2019.

                                                            Graphical browsers have the benefit of presenting a readable layout. Most webpages are difficult to navigate in w3m, unless they are extremely barebones. Looks like w3m is not fully pledged, either.

                                                            I live in the terminal for most non-browser things and being able to SSH from my wimpy laptop/desktop to a beast of a server is my killer feature.

                                                            Editing images, audio and video from the commandline is something I rarely do but I have seen people do it.

                                                            1. 7

                                                              Editing images, audio and video from the commandline is something I rarely do but I have seen people do it.

                                                              I’m not sure command line tools are capable of editting images and video in any useful or meaningful sense. Adjusting color, touching up areas, checking focus, etc. are innately visual thing to do, and by their nature don’t lend themselves to bulk processing and automation in most situations.

                                                              1. 3

                                                                Depends on the edit, doesn’t it? If you have two images and you just want to place one next to the other, that’s easy. If you have an audio file and you want to splice out the section from 1:30 to 1:45 and cut the volume on everything after 3:00 to 50%, you don’t need anything visual for that.

                                                                1. 6

                                                                  I didn’t mention audio, and it does seem more amenable to command line processing than images and video because it doesn’t really have a visual component.

                                                                  For images and video it does depend somewhat on what the task is. Certainly specific edits lend themselves to command line tools, but it’s such a small subset of possible edits I don’t think it’s very useful.

                                                                  The image editting I’m most familiar with is photo touch up and RAW conversion, and even the most basic adjustments like white balance or exposure would be incredibly tedious and error prone with command line tools.

                                                                  In a sense the whole concept of image editting is pointless without a way to view the results anyway.

                                                                  1. 1

                                                                    I agree with you, for an image here or there, when you aren’t quite sure exactly what you want done, a GUI image editor is generally easier.

                                                                    When you need to edit more than 10 images… or automate your editing(as part of some application/website) then a CLI interface to do these things is beautiful.

                                                                    If you know exactly what you want done, regardless of file count, then a CLI might be easier. Like @technomancy said, or stripping JPEG metadata or something.

                                                                    So I think it has a lot more to do with what you are doing and why, as to the CLI being better or not for editing of images, movies, etc.

                                                                    1. 1

                                                                      When you need to edit more than 10 images… or automate your editing (as part of some application/website) then a CLI interface to do these things is beautiful.

                                                                      Interesting. Do you have any suggestions for a tool to do these things that is more amenable to the task of on-the-fly image editing than, say, GIMP or Photoshop?

                                                                      1. 3

                                                                        I use python’s pil/pillow[0] for automation stuff, and for CLI imagemagick[1].

                                                                        Both are great ways to mess around with images. There is ffmpeg[2] and vlc[3] for video, etc.

                                                                        As I mentioned before none of these CLI tools are particularly great for on-the-fly, not sure what you want done sort of tasks. But they are great tools to have in your toolbelt for automation or repetition.

                                                                        0: https://pillow.readthedocs.io/

                                                                        1: https://imagemagick.org/script/command-line-tools.php

                                                                        2: https://ffmpeg.org/

                                                                        3: https://www.videolan.org/

                                                                      2. 1

                                                                        or automate your editing(as part of some application/website) then a CLI interface to do these things is beautiful.

                                                                        I feel like the ideal here is a gui tool with an internal shell without its own language just with several new shell builtins to handle the work.

                                                                2. 4

                                                                  One thing I’ve been experimenting with – very preliminarily, just for personal use, and not entirely in the terminal, to add some caveats – is moving some of my browser usage out of the browser. I don’t really like any of the textmode browsers, but when there is some kind of alternative API, you can interface with things in non-browser ways. For example, two websites I use very frequently are Wikipedia and OpenStreetMap, and they both have APIs.

                                                                  For various reasons most of the experimentation with alternative interfaces seems to be on mobile. Wikipedia has an official app (which loads faster and has a nicer UI than the browser version), and there are various OSM apps. I don’t necessarily want to write full-fledged native apps on the desktop, but it’s nice that I have the option to bypass the browser layer if I want to look up a Wikipedia article by name and then display the text somewhere.

                                                                  1. 4

                                                                    I have been doing the same, but on the terminal. There’s dict for dictionary lookups, translate-shell for Google Translate (and a few other translation services), I wrote my own scripts to get DuckDuckGo and Google search results, Wikipedia summaries, and I use rtv pretty often.

                                                                    I still have a browser open most of the time, but just having them be an option is pretty nice - it cuts down on unnecessary searches, I have not needed to write translate.google.com in years, and it makes even very underpowered machines usable.

                                                                    I don’t necessarily want to write full-fledged native apps on the desktop, but it’s nice that I have the option to bypass the browser layer if I want to look up a Wikipedia article by name and then display the text somewhere.

                                                                    You could throw Tcl/Tk at the problem. Put a search bar at the top, add an htmllib widget, and bask in the HTML 2.0, browserless goodness.

                                                                  2. 1

                                                                    are there fully pledged graphical browsers?

                                                                  1. 8

                                                                    Maybe I’m missing something, but I don’t see how this is the first draft of an HTML successor? Isn’t this just a meta language to abstract over HTML in its current form?

                                                                    1. 2

                                                                      Today this compiles to HTML.

                                                                      But in the future browser engines could just parse this directly. I also have one for CSS called Hakon, http://treenotation.org/sandbox/build/#hakon, and there are a few in progress for Javascript. So in the future you could have 1 syntax for all the languages. Your HTML IDs would leverage the same typing information used by your CSS and your Javascript–no more bugs due do having to duplicate that kind of information.

                                                                      So I see this in the long term as the beginning of the successor to the HTML/CSS/JS stack.

                                                                      1. 12

                                                                        That looks like a DTD, except with a Pythonesque syntax instead of SGML.

                                                                        I don’t see where there’s value in it for HTML. It may be a neat macro language, but it seems quite presumptuous to call it a successor. HTML survived browser wars, pre-WHATWG useless specs, XHTML and XHTML2. It’s used for interoperability and compatibility with the massive amount of existing content. Such strong network effects are generally impossible to break with same-but-better things.

                                                                        1. 1

                                                                          Thank you for the comments and all very fair points.

                                                                          “HTML survived browser wars….”

                                                                          HTML, created by Berners-Lee, came out around 1990. XHTML in 2000. So HTML is about 30 years old.

                                                                          Binary Notation, as formulated by Leibniz, came out in 1689. So over 300 years old.

                                                                          Tree Notation is more like “Binary Notation” than it is a programming language. Just as binary is the simplest way to encode information, Tree Notation is the simplest way to encode abstraction. You cannot improve upon it, and in trying to improve upon HTML/XML/Lisp/any other language people will keep reducing until they reach Tree Notation.

                                                                          HTML survived for 30 years but I don’t think in 30 years we’ll be using it. We’ll have switched to Tree Languages. (Or perhaps, in 30 years will have switched to Tree Languages and then to something else even better that I can’t foresee).

                                                                          “Such strong network effects”

                                                                          Tree Notation will also have very strong network effects over time. A few years ago it was just an idea, but now in an hour you can create a whole new Tree language in Tree Notation and get a parser, compiler, VM, syntax highlighting, autocomplete, program synthesis, type checking, visualization, and a whole lot more.

                                                                          “it seems quite presumptuous”

                                                                          When you discover what is comparable to a new fundamental law of physics, and confirm your discovery over many years with immense amounts of data and experiments, you have 3 options: 1) don’t tell anyone, 2) tell people but lie and say it will not cause a massive paradigm shift 3) tell people the truth and be accused of madness/arrogance/presumptuousness. I’ve decided option 3 is the lesser of 3 evils. It’s a long and lonely road but a few people have been immensely helpful and we are making great progress!

                                                                          1. 13

                                                                            You cannot improve upon it,

                                                                            Reminds me of the kind of language used in all those advertisements for quack medicinal products in centuries past.

                                                                            HTML survived for 30 years but I don’t think in 30 years we’ll be using it. We’ll have switched to Tree Languages.

                                                                            This is so incredibly off-base it verges on delusion.

                                                                            in an hour you can create a whole new Tree language in Tree Notation and get a parser, compiler, VM, syntax highlighting, autocomplete, program synthesis, type checking, visualization, and a whole lot more.

                                                                            I don’t think anyone would want to use them, and it’s not possible to generalise the creation of usefully distinguishable VMs.

                                                                            There are no actual evils in your three options, but the third will certainly lead to people ignoring you. If you consider the opposite of evil to be people enjoying and appreciating your creation, then it’s definitely not the lesser of the three; try option 2.

                                                                            1. 2

                                                                              Reminds me of the kind of language used in all those advertisements for quack medicinal products in centuries past.

                                                                              I think this is a very healthy attitude to have. Probably 99/100 times someone says something like that they are full of it, so it is safe to ignore them. I’m not asking you to believe. I’m asking people to try your best to prove me wrong.

                                                                              Can you improve upon binary notation? Can you come up with a simpler way to represent all information than just using 2 markings? If you can, you may win a Nobel or Turing Prize. If not, then it shouldn’t be too controversial to say that binary notation is the best notation for storing information.

                                                                              Likewise, can you improve upon tree notation? Can you come up with a simpler way to represent all abstractions than just using horizontal and vertical spacing? I can’t, have been trying for 7 years, and at this point have code that turns more than 10,000 different languages into Tree Notation, covering hundreds of languages concepts. If you can figure out something better, please, please, share it with me so I can move on to other things and you may win a Nobel or Turing Prize.

                                                                              This is so incredibly off-base it verges on delusion.

                                                                              You are right! E pur si muove!

                                                                              I don’t think anyone would want to use them

                                                                              This is a great criticism, and my only answer is we are making progress! The Tree Language powering Ohayo is getting quite good, and could be the first killer language, in a few weeks to months. I did underestimate (by 10x+) the amount of infrastructure and data we needed to build before we had killer-app Tree Languages. It is not as simple as coming up with a set of words that compiles to the language of interest. That does not get you a great language. Even though the base of Tree Notation is so simple, you still need to think through dozens to hundreds of design decisions to make a great language. Luckily, we’re automating a ton of that through a huge data gathering and machine learning effort. More to show on that front in 6 - 9 months.

                                                                              it’s not possible to generalise the creation of usefully distinguishable VMs.

                                                                              This is a good insight. However, we can indeed make the building of “usefully distinguishable VMs” 10x easier through both the rules of the language itself coupled with a huge dataset of languages, machines, and patterns.

                                                                              There are no actual evils in your three options,

                                                                              Yes, there are.

                                                                              1. If I tell no one, people die, diseases remain harder to cure, and a whole host of other problems remain more difficult because we are wasting incredible amounts of time and energy using suboptimal tools.
                                                                              2. If I tell people but say “this only applies to some small domain”, not only am I going against my code of being honest, but we miss out on the huge network affects that come from people utilizing the universality of Tree Notation, leading again to problem #1 above.
                                                                              3. Personally it’s not fun to invest so much of my time and resources into this, but there’s nothing I can do more that would have a more positive impact on the world than this. Until other people “get it”, and the community grows, I feel a responsibility to keep pushing the ball forward.

                                                                              the third will certainly lead to people ignoring you.

                                                                              People ignore Tree Notation (and me) no matter what. I’m not worried about the majority of people. They’ve got their own lives to worry about. My strategy is to reach people who understand “exponential thinking”. If there’s a 1% chance I’m right, and let’s say software productivity goes up 30% in 10 years. We are talking about an annual value in the trillions. Even at 99% odds of me being wrong this is a many-billion-dollars idea in expected value for the world.

                                                                              1. 5

                                                                                One negative side-effect you may be missing is that people might ignore you and tree notation who would otherwise be interested. E.g. I’m curious about the word “bern” in your example – does that have meaning? But I’m guarded against engaging and asking because I’m worried I’ll have a crazy person following me around and not going away.

                                                                                1. 3

                                                                                  I’m curious about the word “bern” in your example – does that have meaning?

                                                                                  It’s a placeholder for that keyword that I added a long time ago and haven’t revisited. At the time I couldn’t think of a word for “content” that wasn’t so generic and so went with a unique word that will be easy to find/replace later. Looking at it now my first though was a reference to Bernie Sanders, but then looking back I realized it was a nod to Tim Berners-Lee, which makes more sense. Anyway, I added a todo to the Grammar file for Stump with a clarification there.

                                                                                  But I’m guarded against engaging and asking because I’m worried I’ll have a crazy person following me around and not going away.

                                                                                  Haha this made me laugh out loud. (And then cry a little bit inside.)

                                                                                  It is true though. I strive to be a good scientist. Marketing and community organizing are not my thing. I often jump on the chance to have a conversation about an exponential phenomenon which online can come across as crazy (in person I can quickly assess if someone wants to talk exponential or the more calm here and now). The best decision I made at my last startup was removing myself from the CEO role and recruiting a guy to take over the business and marketing so I could just focus on the code and science. With the Tree Notation Lab I started, I hope to do the same–find a good manager and a good community organizer to lead the “people” efforts so I can focus on the science.

                                                                            2. 7

                                                                              You cannot improve upon it, and in trying to improve upon HTML/XML/Lisp/any other language people will keep reducing until they reach Tree Notation.

                                                                              There have been many proposals over the years for “improving” upon s-expression notation for Scheme and Lisp, including indentation-based “tree notation”. This has never caught on. In the Ruby/Rails scene there has been HAML for a long time, which is basically this notation. That never really became massively embraced by the Rails community either. Sass did catch on massively, even outside the Ruby community, but only after it grew a more traditional CSS-like syntax.

                                                                              Given this history, I have no reason to believe yet another indentation-based notation for HTML is going to change the world.

                                                                              Besides, there are downsides to indentation-based notation for communication. I experience this several times a week when I try to copy/paste some Python code and the indentation gets lost in translation. At least with s-expressions the layout may be messy, but it’ll still work when you copy and paste stuff.

                                                                              1. 2

                                                                                There have been many proposals over the years for “improving” upon s-expression notation for Scheme and Lisp, including indentation-based “tree notation”

                                                                                I currently track 38 of these, which is a shockingly small number of languages (~99% of languages are not indentation-based). The one closest to Tree Notation is I-Expressions, created in 2003 by Egil Möller. It has not gained traction, yet.

                                                                                The difference between Tree Notation and these, like HAML/SASS/etc, are network effects. Currently if I write a tool for editing HTML, it only helps HTML authors. But if I write a tool for editing a Tree Language that targets HTML, it also helps people using Tree Notation to target assembly, C++ , TypeScript, Java, et cetera.

                                                                                Most of my time goes into work on some new very high level Tree languages. All of the syntax highlighting, autocomplete, error suggestions, etc, that are now present in this Stump HTML language, weren’t built for that at all. That’s why these indentation languages will be different than the 38 that have come before.

                                                                                1. 3

                                                                                  I’d be very interested in the references you mention, do you have a document somewhere that lists them?

                                                                                  1. 2

                                                                                    I don’t have it online yet (I’m slowly getting around to open sourcing my programming language database), but here they are as CSV:

                                                                                    id,wikipedia,appeared,website,reference
                                                                                    abc,ABC_(programming_language),1980,,
                                                                                    aldor,Aldor,1990,http://www.aldor.org,
                                                                                    boo,Boo_(programming_language),2003,https://github.com/boo-lang,
                                                                                    buddyscript,BuddyScript,2002,,
                                                                                    cobra,Cobra_(programming_language),2006,http://cobra-language.com/,
                                                                                    coffeescript,CoffeeScript,2009,http://coffeescript.org,
                                                                                    csl,,1966,,https://doi.org/10.1093/comjnl/5.3.194
                                                                                    curry,Curry_(programming_language),1990,,
                                                                                    elixir,Elixir_(programming_language),2011,https://elixir-lang.org,
                                                                                    f-sharp,F_Sharp_(programming_language),2005,http://fsharp.org,https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/index
                                                                                    genie,Genie_(programming_language),2008,,
                                                                                    haml,Haml,2006,http://haml.info/,
                                                                                    haskell,Haskell_(programming_language),1990,https://www.haskell.org,
                                                                                    i-expressions,,2003,,https://srfi.schemers.org/srfi-49/srfi-49.html
                                                                                    inform,Inform,1993,http://inform7.com/,
                                                                                    iswim,ISWIM,1966,,
                                                                                    literate-coffeescript,,2013,https://coffeescript.org/#literate,https://news.ycombinator.com/item?id=5277916
                                                                                    livescript,LiveScript,2011,,
                                                                                    madcap-vi,,1972,,https://semanticscholar.org/paper/edb9d7f3c18ad47f1c4879434a784a3d17dbea6f
                                                                                    madcap,,1960,,https://semanticscholar.org/paper/4bef4a1b67016e569ca7ef57bfc356829c2152ba
                                                                                    makefile,Makefile,1976,,
                                                                                    markdown,Markdown,2004,,
                                                                                    miranda,Miranda_(programming_language),1985,,
                                                                                    nemerle,Nemerle,2003,http://nemerle.org,
                                                                                    net-format,,2006,,https://genome.ucsc.edu/goldenPath/help/net.html
                                                                                    nim,Nim_(programming_language),2008,https://nim-lang.org/,
                                                                                    occam,Occam_(programming_language),1983,,
                                                                                    org,Org-mode,2003,https://orgmode.org/,https://orgmode.org/org.html#Document-structure
                                                                                    promal,PROMAL,1986,,
                                                                                    purescript,,2013,http://www.purescript.org/,
                                                                                    python,Python_(programming_language),1991,https://www.python.org/,https://www.programiz.com/python-programming/keyword-list
                                                                                    restructuredtext,ReStructuredText,2002,,http://docutils.sourceforge.net/rst.html
                                                                                    sass,Sass_(stylesheet_language),2006,http://sass-lang.com/,
                                                                                    scss,,2006,http://sass-lang.com/,https://en.wikipedia.org/wiki/Sass_(stylesheet_language)
                                                                                    spin,,2006,,https://learn.parallax.com/educators/teach/spin-programming-multicore-propeller
                                                                                    stylus,Stylus_(stylesheet_language),2010,http://stylus-lang.com/,
                                                                                    xl-programming-language,XL_(programming_language),2000,,
                                                                                    yaml,YAML,2001,http://www.yaml.org/spec/1.2/spec.html#Introduction,
                                                                                    
                                                                                    1. 3

                                                                                      There’s also wisp, which seems to be a separate project from sweet-expressions.

                                                                                      1. 3

                                                                                        Another nice catch! Thanks. Flipped that bit in my DB. Looking at this now, I’m realizing that my crawler/ML code was not pulling out indentation languages and that bit was only getting set manually over the years.

                                                                                      2. 3

                                                                                        This list is missing sweet-expressions aka SRFI 110 aka t-expressions, which is an evolution on i-expressions (be sure to read the design rationale, it has some criticism of i-expressions you might want to consider).

                                                                                        1. 1

                                                                                          Good catch, thank you. I track Sweet Expressions but mistakenly omitted the hasSemanticIndentation? flag.

                                                                                          I actually think Sweet Expressions were a regression on I-Expressions.

                                                                            3. 2

                                                                              Hakon doesn’t work correctly. Try setting border to value “1px solid red”.

                                                                              I’m probably missing something, but this looks more like a proof of concept than a proof of an idea to me.

                                                                              1. 1

                                                                                I wrote this in Hakon:

                                                                                .someClass
                                                                                 border 1px solid red
                                                                                

                                                                                It compiled to this:

                                                                                .someClass {
                                                                                  border: 1px solid red;
                                                                                }
                                                                                

                                                                                Is that incorrect?