Threads for azzamsa

  1. 19

    +1

    Another useful feature are abbreviations: https://fishshell.com/docs/current/cmds/abbr.html. These are like aliases, except that they expanded in place. That is, you type sw but what you get is git switch. That’s pretty useful to keep the cognitive load low, as what you read are full commands. Also helpful when you want to edit command slightly.

    1. 3

      This looks nice as a replacement for some of my Fish functions. Thanks for sharing!

      1. 1

        I never know such a thing. I might move some alias to abbrev. To keep the cognitive load low. Thanks.

      1. 3

        I did the tournament for 3 times. First with font name shown and the rest are hidden. Out of 3 round. I have no idea why “IBM Plex Mono” always win.

        In the last round the font are very similar, which are “Fira Mono” vs “IBM Plex Mono”. The last details I choose are the looks of g, curly braces, and 0.

        1. 7

          I always read interesting articles to start my day. Today, I am very surprised that my name is on the article. 🤯

          Thanks for the credit.

          1. 7

            Thanks, Dave Herman.

            Keep Rust’s “behind the scenes” article coming. Happy to know it.

            1. 21

              This is a neat backstory, glad to see more “behind the scenes” rust development.

              To me, the person I feel doesn’t get enough credit (though he does get a lot) is Niko Matsakis. As I understand the progression of rust, it started as a higher level, green threaded ML variant of sorts, and ended as this low level systems programming language we know today. But the key thing that defines rust, I think, is the borrow checker ownership model, which I think is thanks mostly to Niko. So while Graydon gets the credit for creating rust, I almost feel that was a different language, and the true “father” of rust as we know it is Niko.

              And then I get wondering what it would have been like had the language been designed around the borrow checker from the start, or if that had been bolted onto a different language. I wonder if a “C with borrowck” is possible and what that looks like. I personally love rust’s ML heritage and traits and iterators and RAII but I think it maybe turns off some hardcore low level and embedded developers, and they more than anyone are who we need to give memory safety to.

              1. 19

                What is the key thing that defines Rust?

                Borrow checker is one candidate, but that’s an implementation. I think the key thing that defines Rust is its value. Rust’s value is Graydon’s contribution. Yes, Rust had an extremely different implementation, but it always had the same value. At least from the first public release to 1.0.

                The current website says “Rust is a language empowering everyone to build reliable and efficient software”, but that’s post-1.0 change. (I actually consider this the most significant post-1.0 change. I think it was almost a coup.)

                The previous website says “Rust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety”. That’s it. That’s Graydon’s contribution. It implies, Rust is not a simple language. Rust is not a language that is easy to learn. Rust is not a language that is fast to compile. To achieve “fast, memory safe, thread safe”, Graydon was ready to trade off everything else.

                To see the value is what defines Rust, consider a counterfactual: what is a simple language that is easy to learn and fast to compile? It is Go. The value is what differentiates Rust and Go, not particular implementation choices.

                1. 6

                  A useful historic link about language values would be the first slide deck on Rust: http://venge.net/graydon/talks/intro-talk-2.pdf

                  1. 1

                    According to these slides, initial Rust was a compiled and statically typed Erlang with C-style syntax and OCaml-style semantics :) I was really excited by that approach, but if I understood correctly, it was incompatible with fast calling to C (because of the GC and the growable stacks required for lightweight threads). Then seamless integration with C was prioritized, and as a consequence the GC and the lightweight threads had to be removed, amd without a GC the language needed another mechanism for automatic memory management which led to the borrow checker. Today’s Rust is very different from what was originally envisioned.

                    1. 2

                      This is… not the whole story. Because Rust borrow checker preceded both removal of GC and green threads. In fact one of the hardest problem faced by design of Rust borrow checker was that it must work with GC. This is why Rust borrow checker is “extensible”, for example working fine with reference counted pointer implemented in the library.

                      1. 1

                        Thanks for following-up on this. I didn’t know and that’s very interesting. What was the purpose of the borrow checked when there is a GC? For non-memory resources like file handles, etc.?

                        1. 2

                          Thread safety

                          1. 1
                2. 7

                  On traits and iterators: hypothetical memory safe C would insert bound checks like everyone else including Rust. The primary motivation behind Rust’s iterators is bound check elision, not syntax sugar. The primary motivation behind Rust’s traits is to support Rust’s iterators. Memory safe C without traits and iterators would be, say, 10% slower than Rust, or have lots of unsafe indexing.

                  I agree about RAII. Zig-style defer would work too. (The difference is that defer is not bound to type.)

                  1. 2

                    I almost feel that was a different language, and the true “father” of rust as we know it is Niko.

                    would like to read the blog post version of this.

                    1. 8

                      I am aware it is almost unintelligible today without context, but Niko’s two posts in 2012 are “at the moment” record of this defining point in Rust history.

                      Imagine never hearing the phrase aliasable, mutable again (November 2012) is about semantics of borrowing, and Lifetime notation (December 2012) is about syntax of borrowing. Note: none of eight(!) options discussed in syntax post is current syntax, although option 6 is close.

                    2. 2

                      I personally love rust’s ML heritage and traits and iterators and RAII but I think it maybe turns off some hardcore low level and embedded developers, and they more than anyone are who we need to give memory safety to.

                      Tbh I’m kind of glad that it remains, and I’d be less enthusiastic about Rust if it wasn’t! I also think it’s really nice to bring these ideas to more systems programmers, who may have never been exposed to ML-style languages. It also makes it easier for languages that come after Rust to bring even more influences from ML into the mainstream (say, module systems for example).

                      1. 2

                        I wonder if a “C with borrowck” is possible and what that looks like.

                        Cyclone was a research “safe C” language that might be of interest. Its region analysis has been cited as a predecessor/influence on the borrow checker, from my understanding.

                        1. 3

                          I already use feature/native-comp branch from ~ Nov 2019, and compile the newest revision regularly. I have no issue with it, my config just plugged in well. I can’t say how much “faster”, because I don’t do any benchmark.

                          Thank you so much, Andrea Corallo.

                          1. 10

                            I built a CI system a while ago; I haven’t quite finished/released it yet, but the concepts are pretty simple:

                            1. GitHub sends a webhook event.
                            2. Clone or update the repo.
                            3. Set up a sandbox.
                            4. Run a script from the repo.
                            5. Report back the status to GitHub.

                            And that’s pretty much it. Responsibility for almost everything else is in the repo’s script (which can be anything, as long as it’s executable). The CI just takes care of setting up the environment for the script to run in. You can build your own .tar images or pull them from DockerHub.

                            Overall there’s very little “magic” involved and actually works quite well. Aside from various minor issues, one of the big things I need to figure out is to at least have a plan to add cross-platform support in the future.

                            Perhaps this won’t cover every CI use case – and that’s just fine; not everything needs to cover every last use case – but it probably covers a wide range of common use case. I just want something that doesn’t require having a Ph.D. in YAML with a masters in GitHub actions. I used Travis before but I ran out of free credits after they changed their pricing strategy a while ago; so I tried using GitHub actions but setting up PostgreSQL for the integration test failed for reasons I couldn’t really figure out, and debugging these kind of things is a horrible time-consuming experience: make a minor change, pray it works, push, wait a few minutes for the CI to kick in, deal with that awful web UI where every click takes >2 seconds, discover it failed again for no clear reason, try something else, repeat 20 times, consider giving up your career in IT to become a bus driver instead. Setting up PostgreSQL and running go test ./... really shouldn’t be this hard.

                            At any rate, writing the initial version of the above literally took me less time than trying to set up GitHub actions. One of the nice things is that you could write a program to parse and run that GitHub Actions (or Travis, Circle-CI, etc.) YAML file if you want to – it’s really flexible because, as you wrote in the article, the basic idea is to just provide “remote execution as a service”.

                            1. 5

                              so I tried using GitHub actions but setting up PostgreSQL for the integration test failed for reasons I couldn’t really figure out, and debugging these kind of things is a horrible time-consuming experience: make a minor change, pray it works, push, wait a few minutes for the CI to kick in, deal with that awful web UI where every click takes >2 seconds, discover it failed again for no clear reason, try something else, repeat 20 times, consider giving up your career in IT to become a bus driver instead. Setting up PostgreSQL and running go test ./… really shouldn’t be this hard.

                              Kinda seems like the point of the article, you should be able to run exactly what’s in the pipelines locally to troubleshoot, but at that point why not collapse it into the local build system and unify them

                              1. 3

                                How does this compare to sourcehut’s CI? They use YAML, but you can mostly avoid it. For example here are Oil’s configs, which mostly invoke shell scripts:

                                https://github.com/oilshell/oil/tree/master/.builds

                                I think you are describing a “remote execution service”, as the blog post calls it. That’s basically what I use sourcehut as.

                                I think such services are complementary to what I described in a sibling comment. Basically a a DAG model (as the OP wants) and an associated language in “user space”, not in the CI system itself. If most of the build is in user space then you can debug it on your own machine.

                                1. 2

                                  I didn’t look too closely at sourcehut as I don’t like sourcehut for various reasons.

                                  I don’t think you need any sort of DAG. If you want that, then implement it in your repo’s build system/script. The entire thing is essentially just “run a binary from a git repo”.

                                  1. 3

                                    I didn’t look too closely at sourcehut as I don’t like sourcehut for various reasons.

                                    Hi, Martin. May I know what are those reasons?

                                    1. 3

                                      I don’t really care much for the sourcehut workflow, and I care even less for the author and his attitude. I don’t really want to expand on that here as it’s pretty off-topic, but if you really want to know you can send me a DM on Twitter or something.

                                      1. 1

                                        but if you really want to know you can send me a DM on Twitter or something.

                                        i will even do it before you reply :)

                                    2. 2

                                      Yes that’s compatible with what I’m doing. Both my Travis CI and sourcehut builds just run shell scripts out of the git repo. And then they upload HTML to my own server at: http://travis-ci.oilshell.org/ . So it could probably run on your CI system.

                                      I want parallelism, so I ported some of the build to Ninja, and I plan to port all of it. Ninja runs just fine inside the CI. So I guess we’re in agreement that the CI system itself can just be a dumb .


                                      Although, going off on a tangent – I think it’s silly for a continuous build to re-clone the git repo every time, re-install Debian packages, PyPI packages, etc.

                                      So I think the CI system should have some way to keep ephemeral state. Basically I want to use an existing container image if it already exists, or build it from scratch if it doesn’t. The container image doesn’t change very often – the git repo does.

                                      Travis CI has a flaky cache: mechanism for this, but sourcehut has nothing as far as I can tell. That makes builds slower than they need to be.

                                      1. 3

                                        Although, going off on a tangent – I think it’s silly for a continuous build to re-clone the git repo every time, re-install Debian packages, PyPI packages, etc.

                                        So I think the CI system should have some way to keep ephemeral state. Basically I want to use an existing container image if it already exists, or build it from scratch if it doesn’t. The container image doesn’t change very often – the git repo does.

                                        Yeah, the way it works is that you’re expected to set up your own image. In my case this is just a simple script which runs xbps-install --rootdir [pkgs], frobs with a few things, and tars the result. You can also use DockerHub if you want, golang:1.16 or whatnot, which should be fine for a lot of simpler use cases.

                                        You can then focus on just running the build. The nice thing is that you can run ./run-ci from your desktop as well, or run it on {Debian,Ubuntu,CentOS,Fedora,macOS,…}, or use mick run . to run it in the CI.

                                        Setting these things up locally is so much easier as well; but it does assume you kind of know what you’re doing. I think that’s a big reason for all these YAML CI systems: a lot of devs aren’t very familiar with all of this, so some amount of abstraction makes it easier for them. “Copy/paste this in your YAML”. Unfortunately, this is a bit of a double-edged sword as it also makes things harder if you do know what you’re doing and/or if things break, like my PostgreSQL not working in GitHub (and besides, you can probably abstract all of the above too if you want, there’s no reason you can’t have an easy-image-builder program).

                                        Splitting out these concerns also makes a lot of sense organisationally; at my last job I set up much of the Travis integration for our Go projects, which wasn’t strictly my job as I was “just” a dev, but it was a mess before and someone had to do it. Then after the company got larger a dedicated sysadmin was hired which would take of these kind of things. But sysadmins aren’t necessarily familiar with your application’s build requirements, or even Go in general, so their mucking about with the build environment would regularly silently break the CI runs. Part of the problem here was that the person doing all of this was extremely hard to work with, but it’s a tricky thing as it requires expertise in two areas. I suppose that this is what “devops” is all about, but in reality I find that a lot of devops folk are either mostly dev or mostly ops, with some limited skills in the other area.

                                        When this is split out, the ops people just have to worry about calling run-ci and make sure it runs cleanly, and the dev people only need to worry about making sure their run-ci works for their program.

                                        Anyway, I should really work on finishing all of this 😅

                                        1. 1

                                          That makes sense, but can you build the image itself on the CI system?

                                          That’s a natural desire and natural functionality IMO. And now you have a dependency: from run-ci to the task that builds the image that run-ci runs on! :) From there it is easy to get a DAG.

                                          Oil has use case discussed above too: you build on say a Debian image, but you want to test on an Alpine image, FreeBSD image, OS X image, etc. And those images need to be built/configured – they’re not necessarily stock images.

                                          That sounds like a DAG too.

                                          So I think there is something like an “inner platform” effect here. If you build a “simple” CI system, and lots of people use it, it will turn into a DAG job scheduler. And if you’re not careful, it might have the unfortunate property of only being debuggable in the cloud, which is bad.


                                          I have noticed a similar design issue with cluster managers. A lot of times people end up building a cluster manager to run their cluster manager: to distribute the binaries for it, authenticate who can do so, to run jobs that maintain the cluster itself, etc.

                                          So a CI is supposed to run build systems, but the it turns into a build system itself. I think a lot of the ones people are complaining about started out small, with tiny configuration (just like sourcehut), and then they grew DAGs and programming languages in YAML :-/ If sourcehut wants to satisfy a lot of use cases, it’s probably going to run into that problem.

                                          1. 1

                                            but can you build the image itself on the CI system?

                                            Sure, there’s nothing really preventing you from doing that.

                                            I suppose you could see it as a DAG; your oil repo depends on oil-images which builds the images, which depends on a base alpine/freebsd image as a bootstrap. Personally I think that’s shoehorning things a little bit; it’s a very “linear” graph: oiloil-imagesalpine|freebsd|macOS and probably not really worth thinking about in terms of a DAG IMHO.

                                            At the end of the day I think that no matter what you do, if your requirements are somewhat complex then your solution will be too. There’s tons of CI systems out there, and while I feel many are a bit lost in the zeitgeist of YAML programming, most are probably built by teams which include people smarter than me and if they haven’t found a good way to solve complex use cases then I probably won’t either. So the best we (or rather, I) can do is let you solve your own complex use case without interfering too much, which will usually be easier than applying a generic solution to a complex use case.

                                            1. 1

                                              Yeah I’m not sure what the right solution is, just nodding my head at the porous line between CI systems and build systems. Neither Travis CI or sourcehut have a DAG, so I think for all practical purposes, it should be kept in “user space”, outside the CI system, and in the build system.

                                              I do think the “ephemeral state” problem is related and real. Travis CI has cache: but it’s flaky in practice. I’m toying around with the idea that images should be stored in something like git annex: https://news.ycombinator.com/item?id=26704946

                                              So it would be cool if the CI system can pull from git annex, and then a CI job can also STORE a resulting image there, for a future job. I’m not sure if any existing systems work that way. I think they mostly have CANNED images – certainly sourcehut does, and I think Travis CI does too.

                                              So in that way maybe you can build a DAG on top, without actually having the DAG in the CI system. If you can “reify” the image as part of the CI system itself.

                                              1. 2

                                                The way I do cache now is mount /cache, which is shared across the repo and you can do with that as you wish. It’s extremely simple (perhaps even simplistic), but gives people a lot of flexibility to implement some cache system based on git annex for example.

                                  2. 3

                                    Run a script from the repo.

                                    This is how I try to use GitHub actions, by keeping the yaml minimal and only launching the single script there. Here’s a representative example: https://github.com/matklad/once_cell/blob/master/xtask/src/main.rs

                                    The bit where this annoyingly falls down is specifying the host environment. I can’t say, from within the script, “run this on windows, mac, and Linux machine”, so this bit still lives in yaml. The script, if needed, contains match current_os.

                                    A more complex case for this failure is if I need coordination between machines. I have a single example for that (in rust-analyzer’s ci). Release binaries for the three OSes are build by three different builders. Than, a single builder needs to collect the three results and upload a single release with multiple artifacts.

                                    Though the last example arguably points to the problem in a different system. Ideally, I’d just cross-compile from Linux to the three OSes, but, last time I checked, that’s not quite trivial with Rust.

                                    1. 3

                                      Ideally, I’d just cross-compile from Linux to the three OSes, but, last time I checked, that’s not quite trivial with Rust.

                                      Back when I maintained a bunch of FreeBSD ports I regularly had people send me patches to update something or the other, and they never bothered to actually run the program and do at least a few basic tests. Sometimes there were runtime errors or problems – sometimes the app didn’t even start.

                                      That it compiles doesn’t really guarantee that it also runs, much less runs correctly. Rust gives some harder guarantees about this than for example C or Python does, but if you try to access something like C:\wrong-path-to-user-profile\my-file on startup it can still crash on startup, and you’ll be shipping broken Windows binaries.

                                      For my Go projects I just set GOOS and hope for the best, but to be honest I have no idea if some of those programs work well on Windows. For example my uni program does some terminal stuff, and I wouldn’t be surprised if this was subtly broken on Windows. Ideally you really want a full Windows/macOS/etc. environment to run the tests, and you might as well build the binary in those environments anyway.

                                      1. 3

                                        I do test in different envs. Testing is comparatively easy, as you just fire three completely independent jobs. Releases add a significant complication though.

                                        You now need a forth job which depends on the previous three jobs, and you need to ship artifacts from Linux/Mac/windows machines to the single machine that does the actual release. This coordination adds up to a substational amount of yaml, and it is this bit that I’d like to eliminate by cross compilation.

                                        1. 1

                                          Can’t you use test job to also build the binaries; as in, IF test succeeded THEN build binary? Or is there a part that I’m missing?

                                          1. 1

                                            Yeah, I feel like I am failing to explain something here :)

                                            Yes, I can, and do(*) use the same builder to test and build release artifacts for a particular platform. This is not the hard problem. The hard problem is making an actual release afterwards. That is, packaging binary artifacts for different platform into a single thing, and calling that bundle of artifacts “a new release”. Let me give a couple of examples.

                                            First, here’s the “yaml overhead” for testing on the three platforms: https://github.com/matklad/once_cell/blob/064d047abd0b76df31b0d3dc88d844c37fc69dd1/.github/workflows/ci.yaml#L5. That’s a single line to specify different builders. Aesthetically, I don’t like that this is specified outside of my CI build process, but, practically, that’s not a big deal. So, if in your CI platform you add an ArpCI.toml to specify just the set of OSes to run the build on, that’d be totally OK solution for me for cross platform testing.

                                            Second, here’s the additional “yaml overhead” to do release:

                                            Effectively, for each individual builders I specify “make these things downloadable” and for the final builder that makes a release I specify “wait for all these other builders to finish & download the results”. What I think makes this situation finicky is the requirement for coordination between different builders. I sort-of specify a map-reduce job here, and I need a pile of YAML for that! I don’t see how this can be specified nicely in ArpCI.toml.

                                            To sum up:

                                            • I like “CI just runs this program, no YAML” and successfully eliminated most of the YAML required for tests from my life (a common example here is that people usually write “check formatting” as a separate CI step in YAML, while it can be just a usual test instead)
                                            • A small bit of “irreducible” YAML is “run this on three different machines”
                                            • A large bit of “irreducible” YAML is “run this on three machines to produce artifacts, and then download artifacts to the fourth machine and run that”.

                                            Hope this helps!

                                            (*) a small lie to make explanation easier. I rather use not-rocket-science rule to ensure that code in the main branch always passes test, and release branches are always branched off from the main branch, so each commit being released was tested anyway.

                                            EDIT: having written this down, I think I now better understand what frustrates me most here. To do a release I need to solve “communication in a distributed system” problem, but the “distributedness” is mostly accidental complexity: in an ideal (Go? :) ) world, I’ll be able to just cross-build everything on a single machine.

                                    2. 1

                                      nektos/act lets you test GitHub Actions locally.

                                      There’s even a (quite large) Ubuntu image available that mirrors the Actions environment.

                                    1. 23

                                      In 2014 I submitted a conference proposal to talk about how to extend the editor-agnostic and language-agnostic nrepl protocol with more operations similar to how the LSP protocol is used today but also a lot broader: http://p.hagelb.org/clojurewest-2014.org.html I had hacked together a prototype using Emacs and the Clojure nrepl server.

                                      The talk didn’t get accepted, and my attempts to convince the tooling maintainers that this was a useful direction didn’t really go anywhere. Now seeing LSP take off across a huge number of languages with a much more limited vocabulary of built-in operations (no eval operation? no test operation? come on!) makes me wish I had pushed harder on that.

                                      1. 5

                                        That hits close to home, my diploma thesis was about getting IDEs better access to CI results, with an example of an eclipse plugin to map errors in Jenkins XML output back to code fragments (think PMD and stuff, less linters and LSP).

                                        The department at the university didn’t find this idea great, I also tried some conferences (not interesting) and years later we see all kinds of nice integration of this stuff in IDEs. Maybe developer experience does matter after all :P

                                        1. 2

                                          This is interesting to me, as I have been thinking about doing something like this for Scheme since last year. Part of the research would require looking into other approaches, such as LSP or nrepl. I would be very interested in hearing your criticisms of LSP, the protocol, and what should have been done better.

                                          1. 4

                                            The protocol itself is OK-ish; the main problems lie around the set of default operations being very anemic and uninspired. Everything is centered around static analysis when you could get so much more out of the protocol if it allowed actually interacting with running code. My understanding is that hypothetically you could add this as an extension of the protocol, but you would lose the benefits of standardization.

                                            The big two protocol-level benefits of nrepl over lsp are A) it’s full duplex instead of request/response; you can send a single command that results in a series of replies over time. Without this you have to resort to some pretty hideous hacks to get a code evaluation command which could print something, wait for a bit, print something, wait, then terminate. The other advantage is that nrepl uses bencode over sockets. The bencode conversion is trivial to implement in ~two pages of code, (66 lines of Lua) vs lsp which uses json+http which is a much more heavyweight stack. Granted in most cases you have a json parser and http client already available, but I still prefer the simpler approach when there aren’t really any technical downsides.

                                            I actually wrote an nrepl server for Racket a few years ago but I didn’t end up using it much so it might be kinda janky: https://gitlab.com/technomancy/ogion

                                          2. 1

                                            Sorry to hear this. this is a valuable lesson for me in the future

                                          1. 2

                                            You can use jhelvy/splitKbCompare to compare with many useful filter

                                            1. 24

                                              I’m the original designer of the Atreus; happy to answer any questions.

                                              1. 1

                                                Why do you choose a fixed Split keyboard, instead of an adjustable split keyboard?

                                                I can’t find the reason in your blog post neither in Atreus repository.

                                                Notes:

                                                • Fixed split, I mean such Atreus.
                                                • Adjustable split, I mean such ErgoDox.
                                                1. 1

                                                  Found. https://technomancy.us/172 Thanks for a very thorough history, reasoning, and decision.

                                                  I work from local coffee shops frequently, and the Advantage is just too clunky to toss in a bag and tote around.

                                                  Update: I’ve designed by own keyboard, which is meant to be a smaller, more travel-friendly complement to the Ergodox that shares a lot of its characteristics.

                                                2. 1

                                                  Do you find it difficult to switch back and forth between the Atreus and a standard keyboard? I would be concerned that, given time, that it would be problematic given how many keys on the Atreus require using a layer. Would switch between keyboard types cause me to focus too much on the typing and not what I am typing.

                                                  1. 4

                                                    I’ve found that the weirder the weird keyboard is, the easier it is to switch between the weird one and a normal one. I used to use a standard qwerty 60% keyboard at work, with lots special bindings/layers, and a normal laptop at home. This was constantly problematic because I’d try to use my special arrow key bindings and they obviously didn’t work anywhere.

                                                    I’ve since switched to a kinesis for “work” (now my desk) and I no longer have any problems typing on my laptop because it’s so much different in every way. I also got an atreus and played around with it for a bit and I feel like it is likely in the “weird enough to be okay” territory due to the non-staggered key layout (forgot the technical term for this)

                                                    The only exception to this rule is that I can hardly use a computer if caps-lock isn’t bound to control, but that’s a different problem.

                                                    1. 1

                                                      I actually do this. Surprisingly enough, switching is mostly painless. I use Colemak on all keyboards, and muscle memory works itself out somehow, at least 95%.

                                                      1. 1

                                                        My experience as a laptop user is that even though I greatly prefer the Atreus, having to plug it into my laptop means that I don’t use it 100% of the time; sometimes I’ll open my laptop for something really quick and won’t get the external keyboard plugged in. This is infrequent, but for me it has been enough for me to maintain my ability to type on a conventional keyboard.

                                                        However, if you only very rarely use a laptop, this might not apply; can’t speak to that.

                                                      2. 1

                                                        How easy is it to use a three-finger chord key? I have a keyboardio model 1 and find that three-finger chords - in particular the alt-shift-arrows that I use all the time in Eclipse - become an effectively impossible to type four-finger chord (since arrow keys need a modifier).

                                                        1. 1

                                                          Depends on which three fingers! I’ve been using ctrl-alt-letter chords since long before building the Atreus, because I’m an Emacs user. I don’t use any programs which require you to hold down shift while moving the cursor, so I can’t really say authoritatively, but alt-shift-arrows sounds like a key chord I would like to rebind to something less awkward even on a conventional keyboard.

                                                          If that was a combo I had to use a lot and could not fix in software for some reason, I would probably remap my keyboard so that the alt key was adjacent to the shift key so that a single thumb could hit both.

                                                        2. 1

                                                          Got mine one month ago and I’m experimenting different layouts. I’m quite happy with just the main layer and a symbols+numbers+f-keys layer, and I still have a bunch of unused keys in the second layer.

                                                          The software is nice, but I wish it allowed sending macros (for typing accented characters using a non-international US keymap, for instance). I might try menelaus at some point if you think it can handle that.

                                                          The article mentions it was designed with a resting position for the pinkies at Z and ‘/’ in mind. Is that correct? I might experiment with that configuration using them also as shift modifiers when pressed.

                                                          1. 1

                                                            The software is nice, but I wish it allowed sending macros (for typing accented characters using a non-international US keymap, for instance).

                                                            I’m like … 99% sure that this limitation is part of the GUI frontend, not the underlying firmware implementation itself. So the path of least resistance would be to build Kaleidoscope.

                                                            I might try menelaus at some point if you think it can handle that.

                                                            It definitely can’t handle that out of the box, but depending on your relative familiarity with C++ toolchains vs Scheme, it could conceivably be easier to implement that functionality to Menelaus vs configuring that as existing functionality in Kaleidoscope. Only one way to find out!

                                                            1. 1

                                                              What about the last bit? Do you rest the pinkies at Z and /?

                                                              1. 1

                                                                Oh, no I keep them on A and semicolon normally, but I hit the outermost top keys with my ring finger instead of the pinky. The pinky only hits A/Z and semicolon/slash (well, the dvorak equivalents of where those are on qwerty) and occasionally enter/esc; tho I usually use Ctrl-m instead of the enter key since it sends the ASCII equivalent of enter.

                                                        1. 6

                                                          Using Linode:

                                                          Some said that self-hosted email will not reach Gmail. It just takes time, My self-hosted email reaches straight to Gmail Inbox. I just need to ask 4-5 of my friend to mark it as “not spam”.

                                                          1. 1

                                                            Whatr do you use thelounge for?

                                                            Looks interesting.

                                                            1. 1

                                                              I am a SoureHut user. Sometimes I ask a question in IRC. I don’t have a fiber connection (I use my phone for tethering). So I need thelounge to always connect to IRC. If I turn off my phone. I can still come back and see people’s answers.

                                                            2. 1

                                                              How are you running thelounge? Whenever I try to run it in docker, the container fills up and craps itself.

                                                              Maybe it’s because I don’t stay logged in all the time.

                                                              1. 2

                                                                I use this compose config. Then I just run docker-compose up -d. To add user, I need to do login into that container and add a user there

                                                              2. 1

                                                                (Your firefly-iii link seems to be a mis-paste. I found it via websearch, though.) How do you find Firefly compares to gnucash? (other than, obviously, one is server-side, the other is a local app)

                                                                1. 3

                                                                  Oh my bad, Yes it firefly-iii.

                                                                  I use GnuCash for a year on-and-off, unfortunately, It’s very hard to recall what I bought (where was my money) after some days. It’s very hard to make a daily entry. I switch to GnuCash for android.

                                                                  It works well for me. I can make an entry directly after purchase. Besides being unmaintained and buggy, but I have no other choice. I keep using it for a year. Until I have so many debits/withdraw. I keep asking:

                                                                  • How much of my salary goes to the foo account?
                                                                  • How many percent this foo account takes my money this month?
                                                                  • tl;dr: GnuCash is limited in its report. It looks like just an add-on for me. I need a more detailed and interactive report.

                                                                  firefly-iii also releasing many features (while keeping its principle) often. So I thought it will be easy if I need a more complex report.

                                                              1. 1

                                                                Use this in fish shell. Love its default. Easy to customize.

                                                                1. 2
                                                                  • Doing first Desk setup: Monitor, Chair, Desk, Cable. After moving to my independent residence.
                                                                  • Dig Kafka more
                                                                  1. 5

                                                                    Same tool I use to track most things - orgmode. For goals with historical measures (like waist measurement) I use org plot to graph them.

                                                                    1. 1

                                                                      I put everything in orgmode. Thanks for mentioning org_plot. It news to me.

                                                                    1. 20

                                                                      I just have been fired, so I think I will take some time to set back and enjoy my newborn.

                                                                      1. 6

                                                                        Sorry to hear that. May better opportunities come your way

                                                                        1. 3

                                                                          That is life. I will survive and come out stronger.

                                                                        2. 3

                                                                          Congratulations!

                                                                          1. 1

                                                                            Thanks

                                                                          2. 2

                                                                            Ouch, hope that doesn’t put you in a difficult situation financially.

                                                                            1. 3

                                                                              No, I have some savings, I am left with generous additional month of payment, so I will manage. With my skillset I think that I will find next job within a month.

                                                                            2. 2

                                                                              Wow that’s rough; I’m sorry to hear that.

                                                                              1. 1

                                                                                It isn’t that bad. I am not bragging, just answering the question ;) I would say it is mild inconvenience, nothing to be worried about. With my skillset I think I will find another gig soon.

                                                                              2. 1

                                                                                Sorry for that, but in the other hand, congrats!

                                                                              1. 1

                                                                                Previously I use encrypted .org files. Now I have migrated to pass. I love that it’s being a plain text format. I cat put anything there however I want. And, it’s free software all around.

                                                                                1. 34

                                                                                  Disclaimer: I represent a GitHub competitor.

                                                                                  The opening characterization of GitHub detractors is disingenuous:

                                                                                  The reasons for being against GitHub hosting tend to be one or more of:

                                                                                  1. it is an evil proprietary platform
                                                                                  2. it is run by Microsoft and they are evil
                                                                                  3. GitHub is American thus evil

                                                                                  GitHub collaborated with US immigration and customs enforcement under the Trump administration, which is a highly controversial organization with severe allegations of “evil”. GitHub also recently fired a Jewish employee for characterising armed insurrectionists wearing Nazi propeganda as Nazis.

                                                                                  It’s not nice to belittle the principles of people who have valid reasons to cite ethical criticisms of GitHub. Even if you like the workflow and convenience, which is Daniel’s main justification, other platforms offer the same conveniences. As project leaders, we have a responsibility to support platforms which align with our values. There are valid ethical and philosophical complaints about GitHub, and dismissing them because of convenience and developer inertia is cowardly.

                                                                                  1. 27

                                                                                    GitHub collaborated with US immigration and customs enforcement under the Trump administration

                                                                                    This makes it sound worse than it actually was, ICE bought a Github Enterprise Server license through a reseller. Github then tried to compensate by donating 500.000$ to “nonprofit organizations working to support immigrant communities”.

                                                                                    … other platforms offer the same conveniences.

                                                                                    Maybe, but they definitely lack the networking effect that was one of main points for curl to use Github.

                                                                                    1. 24

                                                                                      The inconsistency is what kills me here. Allowing ICE to have an account became a heinous crime against neoliberalism, meanwhile how many tech companies openly collaborated with the US military while we killed a million innocent people in Iraq? Or what about Microsoft collaborating with our governments surveillance efforts?

                                                                                      I’m not even engaging in what-about-ism here in the sense that you must be outraged at all the things or none. I’m suggesting that ICE outrage is ridiculous in the face of everything else the US government does.

                                                                                      Pick less ridiculous boogeymen please.

                                                                                      1. 20

                                                                                        I see a lot of the same people (including myself) protesting all of these things…

                                                                                        I feel like I should say something to make this remark longer, and less likely to be taken as hostile, but that’s really all I have to say. Vast numbers of people are consistently opposing all the things you object to. If you’re attempting to suggest that people are picking only one issue to care about and ignoring the other closely related issues, that’s simply wrong - factually, that is not what is happening. If you’re not trying to suggest that, I don’t understand the purpose of your complaint.

                                                                                        1. 13

                                                                                          The inconsistency is what kills me here.

                                                                                          Also:

                                                                                          1. Free Software and Open Source should never discriminate against fields of endeavour!
                                                                                          2. GitHub should discriminate against this particular organisation!

                                                                                          and:

                                                                                          1. We need decentralised systems that are resistant to centralised organisation dictating who can or can’t use the service!
                                                                                          2. GitHub should use its centralised position to deny this service to this particular organisation!

                                                                                          Anyway, how exactly will curl moving away from GitHub or GitHub stopping their ICE contract help the people victimized by ICE? I don’t see how it does, and the entire thing seems like a distraction to me. Fix the politics instead.

                                                                                          1. 14

                                                                                            Is some ideological notion of consistency supposed to weigh more heavily than harm reduction in one’s ontological calculus? Does “not discriminating against a field of endeavor” even hold inherent virtue? The “who” and “on what grounds” give the practice meaning.

                                                                                            If I endeavor to teach computer science to under-served groups, and one discriminated against my practice due to bigotry, then that’s bad. If I endeavor to make a ton of money by providing tools and infrastructure to a power structure which seeks to violate the human rights of vulnerable populations, you would be right to “discriminate” against my endeavor.

                                                                                            Anyway, how exactly will curl moving away from GitHub or GitHub stopping their ICE contract help the people victimized by ICE?

                                                                                            I don’t think anyone here has suggested that if curl were to move away from github that it would have an appreciable or conclusive impact on ICE and it’s victims. The point of refusing to work for or with with ice or their enablers is mainly to raise awareness of the issue and to build public opposition to them, which is a form of direct action - “fixing the politics” as you put it. It’s easy to laugh at and dismiss people making noise online, or walking out of work, or writing a heated blog post, but as we’ve seen over the last decade, online movements are powerful forces in democratic society.

                                                                                            1. 8

                                                                                              Is some ideological notion of consistency supposed to weigh more heavily than harm reduction in one’s ontological calculus?

                                                                                              If you’re first going to argue that 1) is unethical and should absolutely never be done by anyone and then the next day you argue that 2), which is in direct contradiction to 1), is unethical and should absolutely never be done by anyone then I think there’s a bit of a problem, yes.

                                                                                              Because at this point you’re no longer having a conversation about what is or isn’t moral, and what the best actions are to combat injustices, or any of these things, instead you’re just trying to badger people in to accepting your viewpoint on a particular narrow issue.

                                                                                              1. 3

                                                                                                If you’re first going to argue that 1) is unethical and should absolutely never be done by anyone and then the next day you argue that 2), which is in direct contradiction to 1), is unethical and should absolutely never be done by anyone then I think there’s a bit of a problem, yes.

                                                                                                does anyone say that though

                                                                                            2. 12

                                                                                              Your first two points are a good explanation of the tension between the Open Source and Ethical Source movements. I think everyone close to the issue is in agreement that, yes, discriminating against militant nationalism is a form of discrimination, just one that ought to happen.

                                                                                              There was some open conflict last year between the Open Source Institute, and the group that became the Organization for Ethical Source. See https://ethicalsource.dev/ for some of the details.

                                                                                              Your second two points, also, highlight a real and important concern, and you’ve stated it well. I’m personally against centralized infrastructure, including GitHub. I very much want the world to move to decentralized technical platforms in which there would be no single entity that holds the power that corporations presently do. However, while centralized power structures exist, I don’t want those structures to be neutral to injustice. To do that is to side with the oppressor.

                                                                                              (Edit: I somehow wrote “every” instead of “everyone”. Too many editing passes, I guess. Oops.)

                                                                                              1. 11

                                                                                                To clarify: this wasn’t really intended as a defence of either the first or second points in contradictions, I just wanted to point out that people’s views on this are rather inconsistent, to highlight that the issue is rather more complex than some people portray it as. To be fair, most people’s worldviews are inconsistent to some degree, mine certainly are, but then again I also don’t make bold absolute statements about these sort of things and insult people who don’t fit in that.

                                                                                                I think that both these issues are essentially unsolvable; similar to how we all want every criminal to be convicted but also want zero innocent people to be convicted unjustly. This doesn’t mean we shouldn’t try, but we should keep a level head about what we can and can’t achieve, and what the trade-offs are.

                                                                                                I don’t want those structures to be neutral to injustice. To do that is to side with the oppressor.

                                                                                                In Dutch we have a saying I rather like: “being a mayor in wartime”. This refers to the dilemma of mayors (and journalists, police, and so forth) during the German occupation. To stay in your position would be to collaborate with the Nazis; but to resign would mean being replaced with a Nazi sympathizer. By staying you could at least sort of try to influence things. This is a really narrow line to walk though, and discussions about who was or wasn’t “wrong” during the war continue to this day.

                                                                                                I don’t think GitHub is necessarily “neutral to injustice”, just like the mayors during the war weren’t. I know people love to portray GitHub as this big evil company, but my impression is that GitHub is actually not all that bad; I mean, how many other CEOs would have joined youtube-dl’s IRC channel to apologize for the shitty situation they’re in? Or would have spent time securing a special contract to provide service to Iranian people? Or went out of their way to add features to rename the default branch?

                                                                                                But there is a limit to what is reasonable; no person or company can be unneutral to all forms of injustice; it would be debilitating. You have to pick your battles; ICE is a battle people picked, and IMO it’s completely the wrong one: what good would cutting a contract with ICE do? I don’t see it, and I do see a lot of risk in alienating the government of the country you’re based in, especially considering that the Trump administration was not exactly know for its cool, level-headed, and calm responses to (perceived) sleights. Besides, in the grand scheme of injustices present in the world ICE seems small fries.

                                                                                                And maybe all tech companies putting pressure on ICE would have made an impact in changing ICE’s practices, I don’t really think it would but let’s assume it would. But what does that mean? A bunch of undemocratic companies exerting pressure to change the policy of a democratically elected government. Yikes? Most of the time I see corporate influence on government it’s not for the better and I would rather we reduce this across the board, which would also reduce the potential “good influences”, but the bad influences vastly outnumber the good ones that this is a good trade.

                                                                                                1. 6

                                                                                                  Yes, those are all fair and thoughtful points. I agree very much that with any system, no matter how oppressive, if one has a position of power within the system it’s important to weigh how much good one can do by staying in, against how much they can do by leaving. I rather wish I were living in times that didn’t require making such decisions in practice so frequently, but none of us get to choose when we’re born.

                                                                                                  On the strategic point you raise, I disagree: I do think the GitHub/ICE issue is a valuable one to push on, precisely because it prompts conversations like this. Tech workers might be tempted to dismiss our own role in these atrocities; I think it’s important to have that reminder. However, I very much acknowledge that it’s hard to know whether there’s some other way that might be better, and there’s plenty of room for disagreement, even among people who agree on the goals.

                                                                                                  When I was young, I was highly prone to taking absolute positions that weren’t warranted. I hope if I ever fall back into those old habits, you and others will call me out. I do think it’s really important for people who disagree to hear each other out, whenever that’s feasible, and I also think it’s important for us all to acknowledge the limits of our own arguments. So, overall, thank you for your thoughts.

                                                                                                  1. 2

                                                                                                    I recently read a really approachable article article from Stanford Encyclopedia of Philosophy (via HN), which I found really interesting and balanced in highlighting the tensions between (in this case study) “free speech” and other values. To me it also helps to understand that those apparent “conflicts of interest” are still rather possible to balance (if not trivially) given good will; and IMO that the “extreme positions” are something of a possibly unavoidable simplifications - given that even analyzing the positions of renowned philosophers, skilled at precise expression, it’s not always completely clear where they sat.

                                                                                                    https://plato.stanford.edu/entries/freedom-speech/

                                                                                                    edit: though I am totally worried when people refuse to even discuss those nuances and to explore their position in this space of values.

                                                                                                    1. 7

                                                                                                      Anyone with a sincere interest in educating themselves about the concept of free speech and other contentious issues will quickly learn about the nuances of the concepts. Some people will however not give a fig about these nuances and continue to argue absolutist positions on the internet, either to advance unrelated political positions or simply to wind people up.

                                                                                                      Engaging with these people (on these issues) is generally a waste of time. It’s like wrestling with a pig - you’ll get dirty and the pig enjoys it.

                                                                                                      1. 3

                                                                                                        I’m not sure I agree that anyone who makes a sincere effort will learn about the nuances. The nuance is there, but whether people have the chance to learn it is largely a function of whether the social spaces they’re in give them the chance to. I’m really worried about how absolutist, reactionary positions are the bulk of discussion on social media today. I think we all have an obligation to try to steer discussions away from reductive absolutism, in every aspect of our lives.

                                                                                                        With that said, it’s clear you’re coming from a good place and I sympathize. I only wish I felt that not engaging is clearly the right way; it would be easier.

                                                                                                        1. 5

                                                                                                          I’ll have to admit that my comment was colored by my jaundiced view of the online conversation at this point in time. “Free speech” has become a shibboleth among groups who loudly demand immunity from criticism, and who expect their wares to be subsidized in the Marketplace of Ideas, but who would not hesitate to restrict the speech of their enemies should they attain power.

                                                                                                          I’m all for nuanced discussion, but some issues are just so hot button it’s functionally useless in a public forum.

                                                                                                          1. 4

                                                                                                            I completely understand, and that’s very fair.

                                                                                                            I agree with your assessment but, purely for myself and not as something I’d push on others, I refuse to accept the outcome of stepping back from discussion - because that would be a win for reactionary forms of engagement, and a loss for anyone with a sincere, thought-out position, wherever they might fall on the political spectrum.

                                                                                                            It’s fine to step back and say that for your own well being, you can’t dedicate your efforts to being part of the solution to that. You can only do what you can do, and no person or cause has a right to demand more than that. For myself, only, I haven’t given up and I’ll continue to look for solutions.

                                                                                                2. 6

                                                                                                  There are a lot of people in the OSS community who don’t agree with your first point. You might find it contradictory, or “wrong” (And sure, I guess it wouldn’t be OSI certified if you codified it in a license). But it’s what a decent part of the community thinks.

                                                                                                  And the easy answer to your comment about helping, let’s do the contrary. ICE has policies. Selling them tools to make it easier is clearly helping them to move forward on those policies. Just like AWS was helping Parler exist by offering its infrastructure. You can have value judgements or principles regarding those decisions, but you can’t say that it doesn’t matter at all.

                                                                                                  And yeah, maybe there’s someone else who can offer the services. But maybe there are only so many Github-style services out there! And at one point it starts actually weighing on ICE’s ability to do stuff.

                                                                                                  Of course people want to fix the politics. But lacking that power, people will still try to do something. And, yeah, people are allowed to be mad that a company is doing something, even they probably shouldn’t be surprised.

                                                                                                  1. 4

                                                                                                    And yeah, maybe there’s someone else who can offer the services. But maybe there are only so many Github-style services out there! And at one point it starts actually weighing on ICE’s ability to do stuff.

                                                                                                    I’d expect ICE to be more than capable of self-hosting GitLab or some other free software project.

                                                                                                    Of course people want to fix the politics. But lacking that power, people will still try to do something.

                                                                                                    I don’t think it’s outside of people’s power to do that, but it is a lot harder, and requires more organisation and dedication. And “doing something” is not the same as “doing something useful”.

                                                                                                    As for the rest, I already addressed most of that in my reply to Irene’s comment, so I won’t repeat that here.

                                                                                                3. 12

                                                                                                  no disagreement with your main point, but… a crime against neoliberalism?

                                                                                                  1. 4

                                                                                                    I think they mean against the newest wave of liberal politics in the US. Not the actual term neoliberalism which—as you clearly know—refers to something completely different, if not totally opposite.

                                                                                                  2. 10

                                                                                                    there are active campaigns inside and outside most companies about those issues. It’s not like https://notechforice.com/ exists in a bubble. Amazon, Google, Microsoft, Palantir, Salesforce and many others have been attacked for this. Clearly the DoD created the Silicon Valley and the connections run deep since the beginning, but these campaigns are to raise awareness and build consensus against tech supporting imperialism, concentration camps and many other crimes committed by the American Government against its citizens or foreign countries. But you have to start somewhere: political change is not like compiling a program, it’s not on and off, it’s nuanced and complex. Attacking (and winning) stuff like Project Maven or ICE concentration camps is a way to show that you can achieve something, break the tip of the iceberg and use that to build bigger organizations and bigger support for bigger actions.

                                                                                                    1. 1

                                                                                                      Clearly the DoD created the Silicon Valley and the connections run deep since the beginning

                                                                                                      Oh, I’d love to be red-pilled into that!

                                                                                                  3. 22

                                                                                                    This makes it sound worse than it actually was, ICE bought a Github Enterprise Server license through a reseller.

                                                                                                    LA Times:

                                                                                                    In a fact sheet circulating within GitHub, employees opposing the ICE contract wrote that the GitHub sales team actively pursued the contract renewal with ICE. The Times reviewed screenshots of an internal Slack channel after the contract was renewed on Sept. 4 that appear to show sales employees celebrating a $56,000 upgrade of the contract with ICE. The message, which congratulated four employees for the sale and was accompanied by emojis of a siren, bald eagle and American flag, read “stay out of their way. $56k upgrade at DHS ICE.” Five people responded with an American flag emoji.

                                                                                                    It was not as at arm’s length as they’d like you to believe. Several prominent organisations rejected offers of parts of the $500k donation because they didn’t want to be associated with the ICE contract. Internally the company was shredded as it became clear that GitHub under MSFT would rather be torn apart inside than listen to employees and customers and commit to stop serving ICE in the future.

                                                                                                    There were plenty of calls to cancel the contract immediately, which might’ve been a pipedream, but even the more realistic “could we just not renew it in future” was met with silence and corporatespeak. Long-serving employees asking “well, if this isn’t too far for us, what concretely would be over the line?” in Q&A’s were labelled hostile, and most certainly not answered.

                                                                                                    1. 16

                                                                                                      We could debate the relative weight of these and other grievances here, but I’d rather not. My point is simply that the ethical concerns are based on reason, and Daniel’s blithe dismissal of them is inappropriate.

                                                                                                      1. 7

                                                                                                        Could you elaborate on the reasons?

                                                                                                        You state that the reasons exist, and you give an example of someone you think github should reject as a customer. But you don’t talk about what those reasons are, or really go into principles, rationales or philosophy at all.

                                                                                                        I worry that without a thought-through framework, your attitude degenerates into mindless shitstorms.

                                                                                                        1. 4

                                                                                                          He has not engaged with the ethical concerns you raise. That may well be because he is simply not aware of them. You are overinterpreting that as “blithe dismissal”.

                                                                                                      2. 10

                                                                                                        The firing of the employee has been reversed.

                                                                                                        1. 10

                                                                                                          Just a honest question: does this poop management actually makes them look better to you? Despite this being a reaction to public outrage that would have hurt the company? Like, do you think they that out of guilt or something like that?

                                                                                                          1. 3

                                                                                                            Considering the fired employee was reinstated and the head of HR resigned, this looks like a much more substantive concession than the employment status Ctrl-Z that internet outrages usually produce.

                                                                                                            1. 3

                                                                                                              how? isn’t the “let’s sacrifice a scapegoat without fundamentally changing anything” a quite common strategy?

                                                                                                              1. 2

                                                                                                                None of us know the details of this case. It’s way too easy to form a conclusion from one party, especially if they’re not bound by law from discussing sensitive HR details openly.

                                                                                                                So while I can project a hope that this is a lasting change at GH, you are free to cynically dismiss it as window dressing. The facts, as we know them, support either view.

                                                                                                          2. 17

                                                                                                            Aye, and I commend them for that. But that doesn’t change the fact that “retaliated against an employee who spoke out against Nazism” is a permanent stain on their reputation which rightfully angers many people, who rightfully may wish to cease using the platform as a result. Daniel’s portrayal of their concerns as petty and base is not right.

                                                                                                            1. 2

                                                                                                              Not only that but the HR person who fired him was fired.

                                                                                                              1. 4

                                                                                                                Probably out of convenience and not actually the person who gave the order. At least, I think that’s the case more than we know.

                                                                                                                1. 5

                                                                                                                  The person who resigned was the head of HR. It almost certainly wasn’t the person who made the call, or even their manager, it was likely their manager’s manager. That sends a pretty strong signal to the rest of HR that there will be consequences for this kind of thing in the future.

                                                                                                                  1. 1

                                                                                                                    Damn, the head of HR!? What a turnover. Maybe that means they’re taking this more seriously than I thought at first.

                                                                                                            2. 7

                                                                                                              Every time someone asked me to move away from GitHub it’s been because “it’s not Free Software” and various variants of “vendor lock-in” and “it’s centralized”. I am aware there are also other arguments, but those have not been stated in the two instances people asked me to move away from GitHub. What (probably) prompted this particular Twitter thread and that doesn’t mention ICE or anything like that (also: 1 2). Most comments opposed to GitHub on HN or Lobsters don’t focus on ICE either.

                                                                                                              That you personally care a great deal about this is all very fine, but it’s not the most commonly used argument against GitHub.

                                                                                                              There are valid ethical and philosophical complaints about GitHub

                                                                                                              According to your view of ethics, which many don’t share.

                                                                                                              1. 2

                                                                                                                I think that asking someone to change their infrastructure based solely on personal preferences is a step or two too far, be it based on ethics or ergonomics (“all the other code I use is on GitHub, yours should be too”).

                                                                                                                It’s at the very least a bunch of work to move, and the benefit is likely small. You’ve already made a choice when deciding to put your code where it is, so why would you want to change it?

                                                                                                                If asked, I’d recommend using something other than Github to work against the monoculture we’re already pretty deep in, but I don’t see myself actively trying to persuade others to abandon them.

                                                                                                              2. 4

                                                                                                                Isn’t sr.ht hosted and incorporated in the US? Or are only points (1) and (2) valid? :-D

                                                                                                                GitHub also fought the US Gov to get the Iranian developer access to their platform, which is also helping your platform as far as I know. https://github.blog/2021-01-05-advancing-developer-freedom-github-is-fully-available-in-iran/

                                                                                                                Any organization that is large enough will have some incidents which, when cherry-picked, can be used to paint the organization as evil. But really what happens is that they represent humanity. In terms of evil, you don’t have to look far to see much worse groups of people than GitHub.

                                                                                                                IMO a more compelling argument would be centered around how he is an open-source developer, depending on a closed platform. Daniel’s utilitarian view is understandable but also short-thinking. He is contributing towards building this monolith just by using it.

                                                                                                                1. 21

                                                                                                                  Or are only points (1) and (2) valid? :-D

                                                                                                                  None of the points Daniel raises are valid, because they’re strawmen, and bad-faith portrayals of actual positions.

                                                                                                                  Actual argument: “GitHub, an American company, is choosing to cooperate with ICE, an American instutition which is controversial for its ethical problems”

                                                                                                                  Bad faith re-stating: “GitHub is American thus evil”

                                                                                                                  There is nuance here, and indeed you’ve found some of it, but a nuanced argument is not what Daniel is making.

                                                                                                                2. 6

                                                                                                                  collaborated with US immigration and customs enforcement

                                                                                                                  I think “is American and thus evil” definitely covers this.

                                                                                                                  1. 2

                                                                                                                    Why are two [1, 2] of your most popular projects primarily hosted on github?

                                                                                                                    1. https://github.com/swaywm/sway

                                                                                                                    2. https://github.com/swaywm/wlroots

                                                                                                                    1. 19

                                                                                                                      I have been gradually moving off of GitHub, but not all at once. A few months ago I finished migrating all of the projects under my user namespace (github.com/ddevault) to SourceHut. Last week I also announced to my GitHub Sponsors supporters that I intend to leave the program, which is almost certain to cause me to lose money when many of them choose not to move to my personal donation platform (which has higher payment processing fees than GitHub does, so even if they all moved I would still lose money). If you intend to imply that I am a hypocrite for still using GitHub, I don’t think that holds very much weight.

                                                                                                                      Regarding those two projects in particular, some discussion was held about moving to gitlab.freedesktop.org last year, but it was postponed until the CI can be updated accordingly. In any case, I am no longer the maintainer of either project, and at best only an occasional contributor, so it’s not really my place nor my responsibility to move the projects elsewhere. I think that they should move, and perhaps a renewed call for doing so should be made, but it’s ultimately not my call anymore.

                                                                                                                      1. 10

                                                                                                                        If you intend to imply that I am a hypocrite for still using GitHub, I don’t think that holds very much weight.

                                                                                                                        Nope, I was just genuinely curious since I don’t follow you that closely, and hadn’t heard any explanation or reasoning why those repos are still on github when I have heard you explain your position regarding github multiple times. So it seemed odd, so I asked.

                                                                                                                        In any case, thanks for explaining! I hope those projects are moved off too (@emersion !)

                                                                                                                        1. 6

                                                                                                                          Cool, makes sense. Thanks for clarifying.

                                                                                                                        2. 2

                                                                                                                          I love that you represent another point of view here. I firmly believe that free software needs free tools. We don’t want history to repeat. And Yes, there will be some sacrifice for the switch.

                                                                                                                          Watching your actions closely for months, You represent how a free software leader should be.

                                                                                                                    1. 3

                                                                                                                      I learn rust mostly from easy_rust. It covers most of the topic but only at the surface level. I am very happy to have possiblerust.com around. Very depth but easy to follow. Thanks!

                                                                                                                      1. 4

                                                                                                                        Thanks so much! That’s basically the goal with the site, to make things which thread that needle of in-depth but still accessible to newer-to-intermediate Rust programmers.