Good talk.
I recently used systemd “in anger” for the first time on a raspi device to orchestrate several scripts and services, and I was pleasantly surprised (but also not surprised, because the FUD crowd is becoming more and more fingerprintable to me). systemd gives me lifecycle, logging, error handling, and structure, declaratively. It turns out structure and constraints are really useful, this is also why go has fast dependency resolution.
It violates unix philosohpy
That accusation was also made against neovim. The people muttering this stuff are slashdot markov chains, they don’t have any idea what they’re talking about.
The declarative units are definitely a plus. No question.
I was anti-systemd when it started gaining popularity, because of the approach (basically kitchen-sinking a lot of *NIX stuff into a single project) and the way the project leader(s) respond to criticism.
I’ve used it since it was default in Debian, and the technical benefits are very measurable.
That doesnt mean the complaints against it are irrelevant though - it does break the Unix philosophy I think most people are referring to:
Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new “features”.
If you believe composability (one program’s output is another program’s input) is an important part of The Unix Philosophy, then ls violates it all day long, always has, likely always will. ls also violates it by providing multiple ways to sort its output, when sort is right there, already doing that job. Arguably, ls formatting its output is a violation of Do One Thing, because awk and printf exist, all ready to turn neat columns into human-friendly text. My point is, The Unix Philosophy isn’t set in stone, and never has been.
Didn’t ls predate the Unix Philosophy? There’s a lot of crufthistory in unix. dd is another example.
None of that invalidates the philosophy that arose through an extended design exploration and process.
nobody said it’s set in stone; it’s a set of principles to be applied based on practicality. like any design principle, it can be applied beyond usefulness. some remarks:
i don’t see where ls violates composability. the -l format was specifically designed to be easy to grep.
People have written web pages on why parsing the output of ls is a bad idea. Using ls -l doesn’t solve any of these problems.
As a matter of fact, the coreutils people have this to say about parsing the output of ls:
However ls is really a tool for direct consumption by a human, and in that case further processing is less useful. For futher processing,
find(1)is more suited.
Moving on…
the sorting options are an example of practicality. they don’t require a lot of code, and would be much more clumsy to implement as a script (specifically when you don’t output the fields you’re sorting on)
This cuts closer to the point of what we’re saying, but here I also have to defend my half-baked design for a True Unix-y ls Program: It would always output all the data, one line per file, with filenames quoted and otherwise prepared such that they always stick to one column of one line, with things like tab characters replaced by \t and newline characters replaced by \n and so on. Therefore, the formatting and sorting programs always have all the information.
But, as I said, always piping the output of my ls into some other script would be clumsier; it would ultimately result in some “human-friendly ls” which has multiple possible pipelines prepared for you, selectable with command-line options, so the end result looks a lot like modern ls.
about formatting, i assume you’re referring to columniation, which to my knowledge was not in any version of ls released by Bell Labs. checking whether stdout is a terminal is indeed an ugly violation.
I agree that ls shouldn’t check for a tty, but I’m not entirely convinced no program should.
just because some people discourage composing ls with other programs doesn’t mean it’s not the unix way. some people value the unix philosophy and some don’t, and it’s not surprising that those who write GNU software and maintain wikis for GNU software are in the latter camp.
your proposal for a decomposed ls sounds more unixy in some ways. but there are still practical reasons not to do it, such as performance and not cluttering the standard command lexicon with ls variants (plan 9 has ls and lc; maybe adding lt, lr, lu, etc. would be too many names just for listing files). it’s a subtle point in unix philosophy to know when departing from one principle is better for the overall simplicity of the system.
With all due respect[1], did your own comment hit your fingerprint detector? Because it should. It’s extrapolating wildly from one personal anecdote[2], and insulting a broad category of people without showing any actual examples[3]. Calling people “markov chains” is fun in the instant you write it, but contributes to the general sludge of ad hominem dehumanization. All your upvoters should be ashamed.
[1] SystemD arouses strong passions, and I don’t want this thread to devolve. I’m pointing out that you’re starting it off on the wrong foot. But I’m done here and won’t be responding to any more name-calling.
[2] Because God knows, there’s tons of badly designed software out there that has given people great experiences in the short term. Design usually matters in the long term. Using something for the first time is unlikely to tell you anything beyond that somebody peephole-optimized the UX. UX is certainly important, rare and useful in its own right. But it’s a distinct activity.
[3] I’d particularly appreciate a link to NeoVim criticism for being anti-Unix. Were they similarly criticizing Vim?
[3] I’d particularly appreciate a link to NeoVim criticism for being anti-Unix. Were they similarly criticizing Vim?
Yes, when VIM incorporated a terminal. Which is explicitly against its design goals. From the VIM 7.4 :help design-not
VIM IS... NOT *design-not*
- Vim is not a shell or an Operating System. You will not be able to run a
shell inside Vim or use it to control a debugger. This should work the
other way around: Use Vim as a component from a shell or in an IDE.
A satirical way to say this: "Unlike Emacs, Vim does not attempt to include
everything but the kitchen sink, but some people say that you can clean one
with it. ;-)"
Neo-VIM appears to acknowledge their departure from VIM’s initial design as their :help design-not has been trimmed and only reads:
NVIM IS... NOT design-not
Nvim is not an operating system; instead it should be composed with other
tools or hosted as a component. Marvim once said: "Unlike Emacs, Nvim does not
include the kitchen sink... but it's good for plumbing."
Now as a primarily Emacs user I see nothing wrong with not following the UNIX philosophy, but at it is clear that NeoVIM has pushed away from that direction. And because that direction was an against their initial design it is reasonable for users that liked the initial design to criticism NeoVIM because moving further away from the UNIX philosophy.
Not that VIM hadn’t already become something more than ‘just edit text’, take quickfix for example. A better example of how an editor can solve the same problem by adhering to the Unix Philosophy of composition through text processing would be Acme. Check out Acme’s alternative to quickfix https://youtu.be/dP1xVpMPn8M?t=551
akkartik, which part of my comment did you identify with? :) FWIW, I’m fond of you personally.
I’d particularly appreciate a link to NeoVim criticism for being anti-Unix
Every single Hacker News thread about Neovim.
Were they similarly criticizing Vim?
Not until I reply as such–and the response is hem-and-haw.
To be fair I don’t think the hacker news hive mind is a good judge of anything besides what is currently flavour of the week.
Just yesterday I had a comment not just downvoted but flagged and hidden-by-default, because I suggested Electron is a worse option than a web app.
HN is basically twitter on Opposite Day: far too happy to remove any idea even vaguely outside what the group considers “acceptable”.
Indeed, I appreciate your comments as well in general. I wasn’t personally insulted, FWIW. But this is precisely the sort of thing I’m talking about, the assumption that someone pushing back must have their identity wrapped up in the subject. Does our community a disservice.
OTOH, I spent way too much of my life taking the FUD seriously. The mantra-parroting drive-by comments that are common in much of the anti-systemd and anti-foo threads should be pushed back. Not given a thoughtful audience.
https://news.ycombinator.com/item?id=7289935
The old Unix ways are dying… … Vim is, in the spirit of Unix, a single purpose tool: it edits text.
https://news.ycombinator.com/item?id=10412860
thinks that anything that is too old clearly has some damage and its no longer good technology, like the neovim crowd
Also just search for “vim unix philosophy” you’ll invariably find tons of imaginary nonsense:
Please don’t make me search /r/vim :D
thinks that anything that is too old clearly has some damage and its no longer good technology, like the neovim crowd
That’s not saying that neovim is ‘anti-Unix philosophy’, it’s saying that neovim is an example of a general pattern of people rewriting and redesigning old things that work perfectly well on the basis that there must be something wrong with anything that’s old.
Which is indeed a general pattern.
That’s not saying that neovim is ‘anti-Unix philosophy’
It’s an example of (unfounded) fear, uncertainty, and doubt.
rewriting and redesigning old things that work perfectly well on the basis that there must be something wrong with anything that’s old.
That’s a problem that exists, but attaching it to project X out of habit, without justification, is the pattern I’m complaining about. In Neovim’s case it’s completely unfounded and doesn’t even make sense.
It’s not unfounded. It’s pretty obvious that many of the people advocating neovim are doing so precisely because they think ‘new’ and ‘modern’ are things that precisely measure the quality of software. They’re the same people that change which Javascript framework they’re using every 6 weeks. They’re not a stereotype, they’re actual human beings that actually hold these views.
Partial rewrite is one of the fastest ways to hand off software maintainership, though. And vim needed broader maintainer / developer community.
Vim’s maintainer/developer community is more than sufficient. It’s a highly extensible text editor. Virtually anything can be done with plugins. You don’t need core editor changes very often if at all, especially now that the async stuff is in there.
You don’t need core editor changes very often if at all, especially now that the async stuff is in there.
Which required pressure from NeoVim, if I understood the situation correctly. Vim is basically a one-man show.
Thanks :) My attitude is to skip past crap drive-by comments as beneath notice (or linking). But I interpreted you to be saying FUD (about SystemD) that you ended up taking seriously? Any of those would be interesting to see if you happen to have them handy, but no worries if not.
Glad to have you back in the pro-Neovim (which is not necessarily anti-Vim) camp!
What is FUD is this sort of comment: the classic combination of comparing systemd to the worst possible alternative instead of the best actual alternative with basically claiming everyone that disagrees with you is a ‘slashdot markov chain’ or similar idiotic crap.
On the first point, there are lots of alternatives to sysvinit that aren’t systemd. Lots and lots and lots. Some of them are crap, some are great. systemd doesn’t have a right to be compared only to what it replaced, but also all the other things that could have replaced sysvinit.
On the second point, it’s just bloody rude. But it also shows you don’t really understand what people are saying. ‘I think [xyz] violates the unix philosophy’ is not meaningless. People aren’t saying it for fun. They’re saying it because they think it’s true, and that it’s a bad thing. If you don’t have a good argument for the Unix philosophy not matter, or you think systemd doesn’t actually violate it, please go ahead and explain that. But I’ve never actually seen either of those arguments. The response to ‘it violates the Unix philosophy’ is always just ‘shut up slashdotter’. Same kind of comment you get when you say anything that goes against the proggit/hn hivemind that has now decided amongst other things that: microsoft is amazing, google is horrible, MIT-style licenses are perfect, GPL-style licenses are the devil-incarnate, statically typed languages are perfect, dynamically typed languages are evil, wayland is wonderful, x11 is terrible, etc.
claiming everyone that disagrees with you is a ‘slashdot markov chain’ or similar idiotic crap
My claim is about the thoughtless shoveling of groundless rumors. Also I don’t think my quip was idiotic.
there are lots of alternatives to sysvinit that aren’t systemd
That’s fine, I never disparaged alternatives. I said: systemd is good and I’m annoyed that the grumblers said it wasn’t.
It’s not good though, for all the reasons that have been said. ‘Better than what you had before’ and ‘good’ aren’t the same thing.
seriously. If you don’t like systemd, use something else and promote its benefits. Tired of all the talking down of systemd. It made my life so much easier.
seriously. If you like systemd, use it and shut up about it. Tired of all the talking up of systemd as if it’s actually any better than its alternatives, when it is objectively worse, and is poorly managed by nasty people.
Have you watched the video this thread is about? Because you really sound like the kind of dogmatist the presenter is talking about.
If you like systemd, use it and shut up about it
Also, isn’t this a double-standard, since when it comes to complaining about systemd, this attitude doesn’t seem that prevalent.
No, because no other tool threatens the ecosystem like systemd does.
Analogy: it wasn’t a double-standard 10 years ago to complain about Windows and say ‘if you like Windows, use it and shut up about it’.
I see this kind of vague criticism when it comes to systemd alot. What ecosystem is it really breaking? It’s all still open source, there aren’t any proprietary protocols or corporate patents that prevent people from modifying the software to not have to rely on systemd. This “threat”, thr way I see it, has turned out to be at most a “ minor inconvenience “.
I suppose you’re thinking about examples like GNOME, but on the one hand, GNOME isn’t a unix-dogmatist project, but instead they aim to create a integrated desktop experience, consciously trading this in for ideal modularity – and on the other, projects like OpenBSD have managed to strip out what required systemd and have a working desktop environment. Most other examples, of which I know, have a similar pattern.
I think that the problem is fanboyism, echo chambers and ideologies.
I might be wrong, so please don’t consider this an accusation. But you writing this sounds like someone hearing that systemd is bad, therefore never looking at it, yet copying it. Then one tries it and finding out that baseless prejudices were in fact baseless.
After that the assumption is that everyone else must have been doing the same and one is enlightened now to see it’s actually really cool.
I think that this group behavior and blindly copying opinions is one of the worst things in IT these days, even though of course it’s not limited to this field.
A lot of people criticizing systemd actually looked at systemd, really deep, maybe even built stuff on it, or at least worked with it in production as sysadmin/devop/sre/…
Yes, I have used systemd, yes I understand why decisions we’re taken, where authors if the software were going, read specs of the various parts (journald for example), etc.
I think I have a pretty good understanding compared to at least most people that only saw it from a users perspective (considering writing unit files to be users perspective as well).
So I could write about that in my CV and be happy that I can answer a lot of questions regarding systemd, advocate its usage to create more demand and be happy.
To sum it up: I still consider systemd to be bad on multiple layers, both implementation and some ideas that I considered great but then through using it seeing that it was a wrong assumption. By the way that’s the thing I would not blame anyone for. It’s good that stuff gets tried, that’s how research works. It’s not the first and not the last project that will come out sounding good, to only find out a lot of things either doesn’t make a difference or make it worse.
I am a critic of systemd but I agree that there’s a lot of FUD as well. Especially when there’s people that blame everything, including own incompetence on systemd. Nobody should ever expect a new project to be a magic bullet. That’s just dumb and I would never blame systemd for trying a different approach or for not being perfect. However I think it has problems on many levels. While I think the implementation isn’t really good that’s something that can be fixed. However I think some parts of the concept level are either pretty bad or have turned out to be bad decisions.
I was very aware that especially in the beginning the implementation was bad. A lot got better. That’s to be expected. However next to various design decisions I consider bad I think many more were based on ideas that I think to most people in IT sound good and reasonable but in the specific scenarios that systemd is used it at least in my experience do not work out at all or only work well in very basic cases.
In other words the cases where other solutions are working maybe not optimal, but that aren’t considered a problem worth fixing because the added complexity isn’t worth it systemd really shines. However when something is more complex I think using systemd frequently turns out to be an even worse solution.
While I don’t wanna go into detail because I don’t think this is the right format for an actual analysis I think systemd in this field a lot in common with both configuration management and JavaScript frameworks. They tend to be amazing for use cases that are simple (todo applications for example), but together with various other complexities often make stuff unnecessarily complicated.
And just like with JavaScript frameworks and configuration management there’s a lot of FUD, ideologies, echochambers, following the opinion of some thought leaders, and very little building your own solid opinion.
Long story short. If you criticize something without knowing what it is about then yes that’s dumb and likely FUD. However assuming that’s the only possible reason for someone criticizing software is similarly dumb and often FUD regarding this opinion.
This by the way also works the reverse. I frequently see people liking software and echoing favorable statements for the same reasons. Not understanding what they say, just copying sentences of opinion leaders, etc.
It’s the same pattern, just the reversal, positive instead of negative.
The problem isn’t someone disliking or liking something, but that opinions and thoughts are repeated without understanding which makes it hard to have discussions and arguments that give both sides any valuable insides or learnings
Then things also get personal. People hate on Poetteing and think he is dumb and Poetteing thinks every critic is dumb. Just because that’s a lot of what you see when every statement is blindly echoed.
That’s nice, but the implication of the anti-systemd chorus was that sys v init was good enough. Not all of these other “reasonable objections” that people are breathless to mention.
The timbre reminded me of people who say autotools is preferrable to cmake. People making a lot of noise about irrelevant details and ignoring the net gain.
But you writing this sounds like someone hearing that systemd is bad, therefore never looking at it, yet copying it.
No, I’m reacting to the idea that the systemd controversy took up any space in my mind at all. It’s good software. It doesn’t matter if X or Y is technically better, the popular narrative was that systemd is a negative thing, a net-loss.
In your opinion it’s good software and you summed up the “anti-systemd camp” with “sys v init was good enough” even though people from said “anti-systemd camp” on this very thread disagreed that that was their point.
To give you an entirely different point of view, I’m surprised you don’t want to know anything about a key piece of a flagship server operating systems (taking that one distro is technically an OS) affecting the entire eco system and unrelated OS’ (BSDs etc.) that majorly affects administration and development on Linux-based systems. Especially when people have said there are clear technical reasons for disliking the major change and forced compliance with “the new way”.
you summed up the “anti-systemd camp” with “sys v init was good enough” even though people from said “anti-systemd camp” on this very thread disagreed that that was their point.
Even in this very thread no one has actually named a preferred alternative. I suspect they don’t want to be dragged into a discussion of details :)
affecting the entire eco system and unrelated OS’ (BSDs etc.)
BSDs would be a great forum for demonstrating the alternatives to systemd.
Well, considering how many features that suite of software has picked up, there isn’t currently one so that shortens the conversation :)
launchd is sort of a UNIX alternative too, but it’s currently running only on MacOS and it recently went closed source.
It violates unix philosohpy
That accusation was also made against neovim. The people muttering this stuff are slashdot markov chains, they don’t have any idea what they’re talking about.
i don’t follow your reasoning. why is it relevant that people also think neovim violates the unix philosophy? are you saying that neovim conforms to the unix philosophy, and therefore people who say it doesn’t must not know what they’re talking about?
are you saying that neovim conforms to the unix philosophy, and therefore people who say it doesn’t must not know what they’re talking about?
When the implication is that Vim better aligns with the unix philosophy, yes, anyone who avers that doesn’t know what they’re talking about. “Unix philosophy” was never a goal of Vim (”:help design-not” was strongly worded to that effect until last year, but it was never true anyways) and shows a deep lack of familiarity with Vim’s features.
Some people likewise speak of a mythical “Vim way” which again means basically nothing. But that’s a different topic.
vim does have fewer features which can be handled by other tools though right? not that vim is particularly unixy, but we’re talking degrees
The people muttering this stuff are slashdot markov chains, they don’t have any idea what they’re talking about
I’ll bookmark this comment just for this description.
@PuercoPop you got me to try to play with vc-annotate-file, but when I try to hit something simple like C-x v = it says “File ___ is not under version control” Strange that it doesn’t prompt me to configure it. Any idea where it may be caching this stuff? I have no .emacs (normally a *Vim user).
With no configuration, you should go the file in question, then enter C-x v g
C-x v g Display an annotated version of the current file: for each line, show the latest revision in which it was modified (vc-annotate).
From there you can navigate the history with ease using the single letter actions listed later in the manual
Thanks. My stock emacs on Mac was staler than I thought. Worked out of the box after an upgrade. (Folks on #lobsters helped me figure it out.)
I nearly always just use git log --all --decorate --oneline --graph in the terminal rather than anything in vim, which I have aliased to git adog. Or I just use plain old git log. If I really wanted to navigate the history of a file I guess I would use :Glog from Tim Pope’s vim-fugitive plugin, the documentation for which I will quote:
Load all previous revisions of the current file into the quickfix list. Additional git-log arguments can be given (for example, --reverse). If "--" appears as an argument, no file specific filtering is done, and previous commits rather than previous file revisions are loaded.
I’ve never actually needed to do this, but I did :help fugitive when I saw the thread. It seems very useful. I have <F3> and <F4> globally bound to :cprev<CR> and :cnext<CR> so I can flick through revisions with them. It’s all very fast as well.
I’ve never actually needed to do this,
I wouldn’t call it a need either. But since I found out about vc-annotate-file. I’ve found it pretty useful and a quicker way to get around the project’s history. Especially in FLOSS context’s when the author is not readily available for you to ask about why the code was written this or that way. Especially when the changes are not recent (for those the log buffer works best) as navigating a file’s history only takes a couple of keystrokes.
I have the theory that part of the reason of the decline of commit messages is because people don’t read them, so why waste time in something no-one, not even oneself will read? And that the reason people don’t read them is because it is cumbersome to do so. Especially from the CLI, which is what I see most people using. So I was curious to. There a some graphical tools that are pretty good, like Tower or Gitk mentioned in another thread but I don’t see them used very often. Also Editor specific integrations like :fugitive, which solve the problem as well.
Git via email sounds like hell to me. I’ve tried to find some articles that evangelize the practice of doing software development tasks through email, but to no avail. What is the allure of approaches like this? What does it add to just using git by itself?
I tried to collect the pros and cons in this article: https://begriffs.com/posts/2018-06-05-mailing-list-vs-github.html
I also spoke about this at length in a previous article:
While my general experience with git email is bad (it’s annoying to set up, especially in older versions and I don’t like it’s interface too much), my experience of interaction with projects that do this was generally good. You send a patch, you get review, you send a new, self-contained patch, attached to the same thread… etc, in parallel to the rest of the project discussion. It’s a different flavour, but with a project that is used to the flow, it can really be quite pleasing.
What does it add to just using git by itself?
I think the selling point is precisely that it doesn’t add anything else. Creating a PR involves more steps and context changes than git-format-patch git-send-mail.
I have little experience using the mailing list flow, but when I had to do so (because the project required it) I found it very easy to use and better for code reviews.
Creating a PR involves more steps and context changes than
git-format-patchgit-send-mail.
I’m not sure I understand. What steps are removed that would otherwise be required?
Simply, it’s “create a fork and push your changes to it”. But also consider that it’s…
In this workflow, you switched between your terminal, browser, mail client, browser, terminal, and browser before the pull request was sent.
With git send-email, it’s literally just git send-email HEAD^ to send the last commit, then you’re prompted for an email address, which you can obtain from git blame or the mailing list mentioned in the README. You can skip the second step next time by doing git config sendemail.to someone@example.org. Bonus: no proprietary software involved in the send-email workflow.
Also github pull requests involve more git machinery than is necessary. Most people, when they open a PR, choose to make a feature branch in their fork from which to send the PR, rather than sending from master. The PR exposes the sender’s local branching choices unnecessarily. Then, for each PR, github creates more refs on the remote, so you end up having lots stuff laying around (try running git ls-remote | grep pull).
Compare that with the idea that if you want to send a code change, just mail the project a description (diff) of the change. We all must be slightly brainwashed when that doesn’t seem like the most obvious thing to do.
In fact the sender wouldn’t even have to use git at all, they could download a recent code tarball (no need to clone the whole project history), make changes and run the diff command… Might not be a great way to do things for ongoing contributions, but works for a quick fix.
Of course opening the PR is just the start of the future stymied github interactions.
In my case I tend to also perform steps:
man git-remote to see how to point my local clone (with the changes) to my GitHub forkgit remote commandsman git-push to see how to send my changes to the fork rather than the original repoTo send email, you also have to have an email address. If we are doing a fair comparison, that should be noted as well. Granted, it is much more likely that someone has an email address than a GitHub account, but the wonderful thing about both is that you only have to set them up once. So for this reason, it would be a bit more fair if the list above started from step four.
Now, if I have GitHub integration in my IDE (which is not an unreasonable thing to assume), then I do not need to leave the IDE at all, and I can fork, push, and open a PR (case in point, Emacs and Magithub can do this). I can also do all of this on GitHub, never leaving my browser. I don’t have to figure out where to send an email, because it automatically sends the PR to the repo I forked from. I don’t even need to open a shell and deal with the commandline. I can do everything with shortcuts and a little bit of mousing around, in both the IDE and the browser case.
Even as someone who is familiar with the commandline, and is sufficiently savvy with e-mail (at one point I was subscribed to debian-bugs-dist AND LKML, among other things, and had no problem filtering out the few bits I needed), I’d rather work without having to send patches, using Magit + magithub instead. It’s better integrated, hides uninteresting details from me, so I can get done with my work faster. It works out of the box. git send-email does not, it requires a whole lot of set up per repo.
Furthermore, with e-mail, you have to handle replies, have a firm grip on your inbox. That’s an art on its own. No such issue with GitHub.
With this in mind, the remaining benefit of git send-email is that it does not involve a proprietary platform. For a whole lot of people, that’s not an interesting property.
To send email, you also have to have an email address. If we are doing a fair comparison, that should be noted as well.
I did note this:
then you’re prompted for an email address, which you can obtain from git blame or the mailing list mentioned in the README
Magit + magithub […] works out of the box
Only if you have a GitHub account and authorize it. Which is a similar amount of setup, if not more, compared to setting up git send-email with your SMTP info.
git send-email does not, it requires a whole lot of set up per repo
You only have to put your SMTP creds in once. Then all you have to do per-repo is decide where to send the email to. How is this more work than making a GitHub fork? All of this works without installing extra software to boot.
then you’re prompted for an email address, which you can obtain from git blame or the mailing list mentioned in the README
With GitHub, I do not need to obtain any email address, or dig it out of a README. It sets things up automatically for me so I can just open a PR, and have everything filled out.
Only if you have a GitHub account and authorize it. Which is a similar amount of setup, if not more, compared to setting up git send-email with your SMTP info.
Lets compare:
e-mail:
magithub:
The first two steps are pretty much the same, both are easily assisted by my IDE. The difference starts from step 3, because my IDE can’t figure out for me where to send the email. That’s a manual step. I can create a helper that makes it easier for me to do step 4 once I have the address, but that’s about it. For the magithub case, step 3 is SPC g h f; step 4 SPC g s p u RET; step 5 SPC g h p, then edit the cover letter, and , c (or C-c) to finish it up and send it. You can use whatever shortcuts you set up, these are mine. Nothing to figure out manually, all automated. All I have to do is invoke a shortcut, edit the cover letter (the PR’s body), and I’m done.
I can even automate the clone + fork part, and combine push changes + open PR, so it becomes:
Can’t do such automation with e-mailed patches.
I’m not counting GitHub account authorization, because that’s about the same complexity as configuring auth for my SMTP, and both have to be done only once. I’m also not counting registering a GitHub account, because that only needs to be done once, and you can use it forever, for any GitHub-hosted repo, and takes about a minute, a miniscule amount compared to doing actual development.
Again, the main difference is that for the e-mail workflow, I have to figure out the e-mail address, a process that’s longer than forking the repo and pushing my changes, and a process that can’t be automated to the point of requiring a single shortcut.
Then all you have to do per-repo is decide where to send the email to. How is this more work than making a GitHub fork?
Creating a GitHub fork is literally one shortcut, or one click in the browser. If you can’t see how that is considerably easier than digging out email addresses from free-form text, then I have nothing more to say.
And we haven’t talked about receiving comments on the email yet, or accepting patches. Oh boy.
With GitHub, I do not need to obtain any email address, or dig it out of a README. It sets things up automatically for me so I can just open a PR, and have everything filled out.
You already had to read the README to figure out how to compile it, and check if there was a style guide, and review guidelines for contribution…
Lets compare
Note that your magithub process is the same number of steps but none of them have “so I won’t have to figure it out ever again”, which on the email process actually eliminates two of your steps.
Your magithub workflow looks much more complicated, and you could use keybindings to plug into send-email as well.
Can’t do such automation with e-mailed patches
You can do this and even more!
You already had to read the README to figure out how to compile it, and check if there was a style guide, and review guidelines for contribution…
I might have read the README, or skimmed it. But not to figure out how to compile - most languages have a reasonably standardised way of doing things. If a particular project does not follow that, I will most likely just stop caring unless I really, really need to compile it for one reason or another. For style, I hope they have tooling to enforce it, or at least check it, so I don’t have to read long documents and keep it in my head. I have more important things to store there than things that should be automated.
I would likely read the contributing guidelines, but I won’t memorize it, and I certainly won’t try to remember an e-mail address. I might remember where to find it, but it will still be a manual process. Not a terribly long process, but noticeably longer than not having to do it at all.
Note that your magithub process is the same number of steps but none of them have “so I won’t have to figure it out ever again”, which on the email process actually eliminates two of your steps.
Because there’s nothing for me to figure out at all, ever (apart from what repo to clone & fork, but that’s a common step between the two workflows).
Your magithub workflow looks much more complicated
How is it more complicated? Clone, work, fork, push, open PR (or clone+fork, work, push+PR), of which all but “work” is heavily assisted. None of it requires me to look anything up, anywhere.
and you could use keybindings to plug into send-email as well.
And I do, when I’m dealing with projects that use an e-mail workflow. It’s not about shortcuts, but what can be automated, what the IDE can do instead of requiring me to do it.
You can do this and even more!
You can, if you can extract the address to send patches to automatically. You can build something that does that, but then the automation is tied to that platform, just like the PRs are tied to GitHub/GitLab/whatever.
And again, this is just about sending a patch/opening a PR. There’s so much more PRs provide than that. Some of that, you can do with e-mail. Most of it, you can build on top of e-mail. But once you build something on top of e-mail, you no longer have an e-mail workflow, you have a different platform with which you can interact via e-mail. Think issues, labels for them, reviews (with approvals, rejection, etc - all of which must be discoverable by programs reliably), new commits, rebases and whatnot… yeah, you can build all of this on top of e-mail, and provide a web UI or an API or tools or whatever to present the current state (or any prior state). But then you built a platform which requires special tooling to use to its full potential, and you’re not much better than GitHub. You might build free software, but then there’s GitLab, Gitea, Gogs and a whole lot of others which do many of these things already, and are almost as easy to use as GitHub.
I’ve worked with patches sent via e-mail quite a bit in the past. One can make it work, but it requires a lot of careful thought and setup to make it convenient. I’ll give a few examples!
With GitHub and the like, it is reasonably easy to have an overview of open pull requests, without subscribing to a mailing list, or browsing archives. An open PR list is much easier to glance at and have a rough idea than a mailing list. PRs can have labels to help in figuring out what part of the repo they touch, or what state they are in. They can have CI states attached. At a glance, you get a whole lot of information. With a mailing list, you don’t have that. You can build something on top of e-mail that gives you a similar overview, but then you are not using e-mail only, and will need special tooling to process the information further (eg, to limit open PRs to those that need a review, for example).
With GitHub and the like, you can subscribe to issues and pull requests, and you’ll get notifcations about those and those alone. With a mailing list, you rarely have that option, and must do filtering on your own, and hope that there’s a reasonable convention that allows you to do so reliably.
There’s a whole lot of other things that these tools provide over plain patches over email. Like I said before, most - if not all - of that can be built on top of e-mail, but to achieve the same level of convenience, you will end up with an API that isn’t e-mail. And then you have Yet Another Platform.
How is it more complicated? Clone, work, fork, push, open PR (or clone+fork, work, push+PR)
Because the work for the send-email approach is: clone, work, git send-email. This is fewer steps and is therefore less complicated. Not to mention that as projects become more decentralized as they move away from GItHub, the registration process doesn’t go away and starts recurring for every new forge or instance of a forge you work with.
But once you build something on top of e-mail, you no longer have an e-mail workflow, you have a different platform with which you can interact via e-mail. Think issues, labels for them, reviews (with approvals, rejection, etc - all of which must be discoverable by programs reliably), new commits, rebases and whatnot…
Yes, that’s what I’m advocating for.
But then you built a platform which requires special tooling to use to its full potential, and you’re not much better than GitHub
No, I’m proposing all of this can be done with a very similar UX on the web and be driven by email underneath.
PRs can have labels to help in figuring out what part of the repo they touch, or what state they are in. They can have CI states attached.
So let’s add that to mailing list software. I explicitly acknoweldge the shortcomings of mail today and posit that we should invest in these areas rather than rebuilding from scratch without an email-based foundation. But none of the problems you bring up are problems that can’t be solved with email. They’re just problems which haven’t been solved with emails. Problems I am solving with emails. Read my article!
but then you are not using e-mail only, and will need special tooling to process the information further (eg, to limit open PRs to those that need a review, for example).
So what? Why is this even a little bit of a problem? What the hell?
With GitHub and the like, you can subscribe to issues and pull requests, and you’ll get notifcations about those and those alone.
You can’t subscribe to issues or pull requests, you have to subscribe to both, plus new releases. Mailing lists are more flexible in this respect. There are often separate thing-announce, thing-discuss (or thing-users), and thing-dev mailing lists which you can subscribe to separately depending on what you want to hear about.
Like I said before, most - if not all - of that can be built on top of e-mail, but to achieve the same level of convenience, you will end up with an API that isn’t e-mail.
No, you won’t. That’s simply not how this works.
Look, we’re just not on the same wavelength here. I’m not going to continue diving into this ditch of meaningless argument. You keep using whatever you’re comfortable with.
Your magithub workflow looks much more complicated, and you could use keybindings to plug into send-email as well.
I just remembered a good illustration that might explain my stance a bit better. My wife, a garden engineer, was able to contribute to a few projects during Hacktoberfest (three years in a row now), with only a browser and GitHub for Windows at hand. She couldn’t have done it via e-mail, because the only way she can use her email is via her smart phone, or GMail’s web interface. She knows nothing else, and is not interested in learning anything else either, because these perfectly suit her needs. Yet, she was able to discover projects (by looking at what I contributed to, or have starred), search for TODOs or look at existing issues, fork a repo, write some documentation, and submit a PR. She could have done it all from a web browser, but I set up GitHub for Windows for her - in hindsight, I should have let her just use the browser. We’ll do that this year.
She doesn’t know how to use the command-line, has no desire, and no need to learn it. Her email handling is… something that makes me want to scream (no filters, no labels, no folders - one big, unorganized inbox), but it suits her, and as such, she has no desire to change it in any way.
She doesn’t know Emacs, or any IDE for that matter, and has no real need for them, either.
Yet, her contributions were well received, they were useful, and some are still in place today, unchanged. Why? Because GitHub made it easy for newcomers to contribute. They made it so that contributing does not require them to use anything else but GitHub. This is a pretty strong selling point for many people, that using GitHub (and similar solutions) does not affect any other tool or service they use. It’s distinct, and separate.
Not all projects have work for unskilled contributors. Why should we cater to them (who on the whole do <1% of the work) at the expense of the skilled contributors? Particularly the most senior contributors, who in practice do 90% of the work. We don’t build houses with toy hammers so that your grandma can contribute.
I’m not saying we shouldn’t make tools which accomodate everyone. I’m saying we should make tools that accomodate skilled engineers and build simpler tools on top of that. Thus, the skilled engineers are not slowed down and the greener contributors can still get work done. Then, there’s a path for newer users to become more exposed to more powerful tools and more smoothly become senior contributors themselves.
You need to get this point down if you want me to keep entertaining a discussion with you: you can build the same easy-to-use UX and drive it with email.
I’m not saying we shouldn’t make tools which accomodate everyone. I’m saying we should make tools that accomodate skilled engineers and build simpler tools on top of that.
I was under the impression that git + GitHub are exactly these. Git and git send-email for those who prefer those style, GitHub for those who prefer that. The skilled engineers can use the powerful tools they have, while those with a different skillset can use GitHub. All you need is willingness to work with both.
you can build the same easy-to-use UX and drive it with email.
I’m not questioning you can build something very similar, but as long as e-mail is the only driving power behind it, there will be plenty of people who will turn to some other tool. Because filtering email is something you and I can easily do, but many can’t, or aren’t willing to. Not when there are alternatives that don’t require them to do extra work.
Mind you, I consider myself a skilled engineer, and I mainly use GitHub/GitLab APIs, because I don’t have to filter e-mail, nor parse the info in them, the API serves me data I can use in an easier manner. From an integrator point of view, this is golden. If, say, an Emacs integration starts with “Set up your email so mail with these properties are routed here”, that’s not a good user experience. And no, I don’t want to use my MUA to work with git, because magit is a much better, much more powerful tool for that, and I value my productivity.
I’m not questioning you can build something very similar, but as long as e-mail is the only driving power behind it, there will be plenty of people who will turn to some other tool.
I’m pretty sure the whole point would be that the “shiny UI” tool would not expose email to the user at all – so the “plenty of people” wouldn’t leave because they wouldn’t know the difference.
So…. pretty much GitHub/GitLab/Gitea 2.0, but with the added ability to open PRs by email (to cater to that workflow), and a much less reliable foundation?
Sure. What could possibly go wrong.
I don’t think you can count signing up for GitHub if you’re not counting signing up for email.
If you’re using hub, it’s just hub pull-request. No context switching
If you’re counting signing up for email you have to count that for GitHub, too, since they require an email address to sign up with.
Using GitHub requires pushing to different repository and then opening the PR on the GitHub Interface, which is a context change. The git-send-mail would be equivalent to sending the PR.
git-send-email is only one step, akin to opening the PR, no need to push to a remote repository. And from the comfort of your development environment. (Emacs in my case)
re standard libraries
One idea I had when looking at transpilers and C-like LISP’s was to make a Python-like LISP. Also thought of Nim since they look similar. Anyway, the idea is to embed a Python-compatible language in a well-tooled LISP or Scheme where Python code could be easily ported. Start porting its standard library. Automate this process with Python semantics matched to the LISP. Eventually, one can do most things in the LISP using all those Pythonic libraries with the extra benefit of native, code compiler. Maybe also do it in reverse where one can extract idiomatic Python for distribution to those that don’t know the LISP version. Last part of that brainstorm was possibly doing it in Racket so people who started with or know Python can go to How to Design Programs to learn Scheme then to the Pythonic Scheme to get its power reusing their existing knowledge and libraries.
Just a brainstorm folks might find interesting. Python has gotten pervasive and critical enough that I do keep thinking back on automated methods to optimize it, secure it, etc.
Not quite like what you’re describing, but have you seen Hy?
I haven’t. Excerpting this:
“This is pretty cool because it means Hy is several things:
That looks like it’s at least half of what I was aiming for. Cool stuff. Bookmarking it. Thanks for the link!
There is a python implementation in Common Lisp, https://github.com/metawilm/cl-python. There is also a library to run a CPython interpreter inside a Common Lisp image and interface with it: https://github.com/mmontone/burgled-batteries
Also Marijn Haverbeke, of code-mirror fame, had a similar idea but with JavaScript instead of Python so cl-javascript was born.
I find their example weird for a couple of reasons:
They are complaining about a type error on a dynamic language, which the is caught and reported as such at compile time by SBCL, the most popular FLOSS implementation.
scratch-2.lisp:10:7:
warning:
Derived type of (LAMBDA (X) :IN ADD-TEXT-PADDING) is
(FUNCTION (T) (VALUES NULL &OPTIONAL)),
conflicting with its asserted type
(FUNCTION * (VALUES CHARACTER &REST T)).
...
compilation failed
The important bit is (values null ...) vs (values character ..) for those unfamiliar with type declarations in Lisp.
The mistake is the result of they not reading the documentation for map, even looking at the message from eldoc would hint as to what is their mistake, first argument is the result-type. Btw although most libraries are poorly documented, the language itself is very well documented and easy to open the documentation for the function at point from SLIME/SLY, C-c C-d C-h.
(map ’string …) is used to loop through characters in a string. Note that here we use map function as a helper for a rather imperative procedure
What is worse is that they seem to double down by mistakenly stating that (map 'string ...) is used to loop through the characters in string. It is (map ...). Why would I need to declare the type of an argument in Lisp? And if I did, why wouldn’t it be with the (declare ...) form. Seems that they were ‘in a Haskell mind-set’ while writing the code.
Additionally, it is is not idiomatic Common Lisp to use map when traversing a string when you only care for a the side-effect of the function. MAP takes the result-type precisely because you care about what the function returns! It would be idiomatic to use the LOOP construct
(loop :for char :across string
:do (princ x out)
:when (char= x #\Newline)
:do (dotimes (i padding)
(princ #\Space out)))
The code earlier in the function hints that they dislike non-functional aspects of Lisp, like LOOP and FORMAT. Worse they claim there is no syntax for ‘\n’ in Lisp while pointing to said syntax, ~%. Instead of concatenate idiomatic common lisp would use (format nil "~A~%" str), or they could do away with the entire if and move it to the format control string, (format nil "~:[~;~%~]~A" newline str). In fact there is no need for (dotimes (i padding ...) they can use FORMAT for that.
(format nil "~VT~A" padding line)
Just git?
I was kind of hoping that if we’re going to break the github hegemony, we might also start to reconsider git at least a little. Mercurial has so many good ideas worth spreading, like templates (DSL for formatting the output of every command), revsets (DSL for querying commits), filesets (DSL for querying files and path) and changeset evolution (meta-graph of commit rewriting).
Don’t forget pijul!
Seriously, though, I don’t think there is any “github plus something” that is going to break the github hegemony. Github won because it offered easy forking while Sourceforge was locked in a centralized model. Sourceforge won because it was so much easier than hosting your own repo + mailing list.
The thing that will get people away from github has to have a new idea, a new use case that isn’t being met by github right now, and which hasn’t been proposed before. That means that adding hg won’t do it – not because hg is worse than git (honestly, git’s terrible, and hg is fine), but because hg’s already been an option and people aren’t using it.
Adding email commits won’t do it, because that use case has been available for a long time (as pointed out elsewhere in these comments) and people aren’t using it.
Until something new is brought to the table, it’s all “let’s enter a dominated market with a slight improvement over the dominant tech”, and that’s just not going to be enough.
So, one thing that I would use a new contender for is being able to put my work under my own domain.
The “new thing” here is “have your personal branding on your site” (which is clearly fairly popular given how common personal domain/sites are among developers).
If I could CNAME code.daniel.heath.cc to your host to get my own github, I’d do it today (as long as any issues/wiki/PR state/etc remained usefully portable).
That’s a really neat idea. I don’t think I can prioritize it right now but it’s definitely something I would consider implementing.
I actually think that GitHub’s lack of branding and customization is a big reason for its success. When I go take a look at a new project on GitHub, I don’t have to figure out how to navigate a new site’s design, and this makes the GitHub ecosystem as a whole easier to use.
I don’t mean corporate/design branding.
I want to use my own name (and be able to move providers without breaking links).
I want to use my own name (and be able to move providers without breaking links).
But that will happen anyway, unless your new provider uses the same software as the old one.
That makes sense actually. sr.ht supporting the ability to use your own domain name (presumably a subdomain of your personal domain name for personal projects?) would make it really easy to migrate away from sr.ht in the future if you felt it was more cost-effective to host your own. Although I don’t know what the pricing model is intended to be.
You can do that with Gitlab (or Gitea if you prefer something lightweight). Only thing is you need to take care of the hosting yourself. But I’m sure there are companies offering a one-click setup, to which you can later point your own domain.
If you host your own gitlab instance, can you fork and submit patches to a project that’s hosted on gitlab,com, as easily/seamlessly as if you were hosted there?
Centralization has benefits that self-hosting can’t always provide. If there were some federation which allowed self-hosting to integrate with central and other self-hosting sites, that seems like a new and interesting feature.
Git is already federated with email - it’s specific services like GitHub which are incompatible with git’s federation model (awfully conveniently, I might add). sr.ht is going to be designed to accomodate git’s email features, both for incoming and outgoing communication, so you’ll be able to communicate easily between sr.ht instances (or sr.ht and other services like patchworks or LKML).
As I mention earlier, though, federation by email has been available for a long time and hasn’t been used (by enough people to replace github). The (vast) majority of developers (and other repo watchers) prefer a web UI to an email UI.
The gitlab, gitea, and gogs developers are working on this but it’s still very much in the discussion stage at this point. https://github.com/git-federation/gitpub/
I don’t know exactly what he was looking for, but It seemed like one of:
The latter sounds to me like it would need federation.
It’s currently awkward to run multiple domains on most OSS servers which might otherwise be suitable.
hg isn’t really an option right now, though. There’s nowhere to host it. There’s bitbucket, and it’s kind of terrible, and they keep making it worse.
If you can’t even host it, people won’t even try it.
I’m afraid you’re not going to find a sympathetic ear in sr.ht. I am deeply fond of git and deeply critical of hg.
The GitHug hegemony has nothing to do with its basis on git. If git were the product of GitHub, I might agree, but it’s not. If you really want to break the GitHub hegemony you should know well enough to throw your lot in with the winning tool rather than try to disrupt two things at once.
Perhaps some day I’ll write a blog post going into detail. The short of it is that git is more Unixy, Mercurial does extensibility the wrong way, and C is a better choice than Python (or Rust, I hear they’re working on that).
because hg‘s command-line interface was “designed”, whereas git’s command-line interface “evolved” from how it was being used.
The GitHug hegemony has nothing to do with its basis on git.
Exactly; it’s the other way around. Git got popular because of github.
Git was much worse before github made it popular. It’s bad now and difficult to use now, but it was much worse before 2008. So if you just want to get away from Github, there’s no need to stay particulary enamoured with git either.
And whatever criticisms you may have about hg, you have to also consider that it has good ideas (those DSLs above are great). Those ideas are worth spreading, and git for a long time has tried to absorb some of them and hasn’t succeeded.
A rose by any other name would be known as a runtime platform or environment. See also Erlang/OTP.
A hosted operating system punts on all the distracting/interesting/useful parts of OS stuff in order to focus on the aesthetic of the programming environment.
A hosted operating system punts on all the distracting/interesting/useful parts of OS stuff in order to focus on the aesthetic of the programming environment.
This might an appropriate description of a virtual machine.
Inferno is a distributed operating system.
It’s rather different from a mainframe OS, such as Windows or Linux: all services of a network are served to the user with a uniform interface and programs can be distributed over the network transparently, moving data or computations as required.
The network as a whole is your computing device.
Now, once you understand this, you might wonder if it’s really so important who write the drivers for a single node.
Turns out it doesn’t matter that much: as long as the interface is uniform the system works as a whole.
Now I agree that an OS running on top of an OS is weird. Much more an OS running on top of a browser!
But sadly, it’s what your cloud vps do. And what any OS that target WASM want to do.
Guess what? Inferno did both things several years ago!
And better, with an uniform interface.
Try this on your mainframe of choice! ;-)
I’m not sure what you mean by mainframe OS, though it seems like it’s an attempt at derision?
Virtual machines like those you might rent from a cloud provider are much more a partitioning technology these days. Though there is another operating system running on the same hardware (in the “hypervisor” role), the guest operating system is also interacting directly with quite a lot of CPU management, and increasingly other hardware devices via passthrough mechanisms. Critically, that same software can also run outside the emulation/hypervisor environment: it can take control of an entire computer, providing services to other software, and is thus an operating system.
In the case of software that isn’t able to (or perhaps even intended to) run on a computer directly without other scaffolding, it’s really not an operating system. If it’s really a network service or programming environment built to run on top of other things (“hosted”, if you will!) it would be less confusing to call it that. There’s obviously no shame in building an amazing new platform for constructing distributed applications – it’d just be best to avoid hijacking existing terminology while doing so.
I’m not sure what you mean by mainframe OS, though it seems like it’s an attempt at derision?
Absolutely no!
I was trying to distingush the OSes that are designed for a single computer (thus in the ancient and noble tradiction of mainframes) from the OSes that are designed for a network of eterogenous computers.
When we talk about distributed operating systems, the focus is not in the control of the hardware of a single pc, but in the control of a whole network.
In the case of Inferno, you can run it on bare metal, on Windows, on Linux, on Plan9, on some game platforms and on IE8 (if I remember correctly).
This covers a variety of architectures that few mainstream OS could compete with.
Without an hardware emulator.
it’d just be best to avoid hijacking existing terminology while doing so
I’m afraid Inferno was defined as a distributed operating system before “existing terminology” was conceived.
So one might argue that existing terminology was designed by people either ignoring previous art or meaning something different.
In both cases, I will keep calling Inferno an OS.
I’m afraid Inferno was defined as a distributed operating system before “existing terminology” was conceived.
I don’t think that’s true at all. Even the Wikipedia page for Inferno suggests it was released in 1996, and links to at least one paper from the authors from around that time. I think we’d kind of settled on an operating system being a body of software chiefly responsible for controlling an actual machine and providing services to software and users by then.
By way of contrast, the Amoeba distributed operating system is another attempt (and seemingly prior to Inferno!) that is both distributed (providing network transparency as a core system primitive) and an operating system (Amoeba includes a microkernel base which runs on all of the machines throughout a deployment). Sprite is another similar project, also late 1980s to early 1990s, in which some level of network transparency was achieved in addition to the base job of an operating system: controlling the machine.
I’m not sure if this count as an objection. :-)
Fine, Amoeba and Sprite are distributed operating systems.
Plan 9 is a distributed operating system too. So is Inferno, that can run on bare metal AND hosted by another OS.
You mean different from a centralized mainframe. The CTOS system looks pretty close to a distributed OS. Customers were loving it, too.
Far as OS on an OS, IBM invented that (I think…) in VM/370 in the 1970’s. VM could even run itself mainly for debugging. Mainframes also supported multiple users and metered CPU/memory. The cloud reinvents mainframes on cheaper hardware with more flexible software. The core concepts were a mainframe advantage, though.
Right, it definitely doesn’t feel like an especially appropriate use of the term until it’s also in control of the actual machine. If it’s a runtime environment and library, it seems clearer to just call it that.
The point at which services are provided to programs by “the operating system” versus other programs present but not considered part of the “operating system” is blurry, and getting blurrier all the time in a distributed world. “Control of the actual machine” sounds like the definition of a kernel, which can certainly be part of an operating system, but isn’t the whole thing.
tl;dr: what you’re referring to as Linux is actually GNU/Linux,,,
Not all of the control of the machine is in the hands of the kernel in every operating system. For instance, in illumos we perform some amount of interrupt configuration from a privileged process running in usermode (intrd(1M)) – but it’s still part of the operating system.
Words have a meaning, and I think eroding the term operating system does us a terrible disservice. There are already loads of other terms that better describe a program that runs on top of an operating system and provides services to other programs, whether over local IPC mechanisms or through some network protocol.
It’s true that a distribution of Linux may include quite a lot of software that isn’t really “operating system” software per se; e.g., chat clients or drawing software. But if your software doesn’t have the ability to take a computer from cold start up to running some other workload, it’s really not, itself, an operating system.
I think eroding the term operating system does us a terrible disservice.
I’m totally for a precise and clear technical language!
But, why we write hardware emulators like qemu, xen, virtual box and so on… if we cannot run operating systems on them?
And if what run on qemu is an operating system when it provides the user all the tools she needs, why a software that does the same but run without the hardware emulator is that different?
Because they mention Inferno on the description they probably mean that in addition to running on ‘bare metal’ it can also run in an emulator inside another OS. Same as Inferno.
Never use “typedef struct foo FOO”
My C-fu is pretty weak, occasionally write it in hobby code, but I’ve seen it done in projects from Suckless and code from the Vis editor, which are my references for ‘good c code’. Why do they recommend against it?
Linus spells out the Linux approach in these emails.
The short version is: don’t use a type abstraction where you don’t need one, nothing is wrong with typing ‘struct xxx’.
One of the emails in the link, on where typedefs are useful:
(a) totally opaque objects (where the typedef is actively used to _hide_
what the object is).
Example: "pte_t" etc opaque objects that you can only access using
the proper accessor functions.
NOTE! Opaqueness and "accessor functions" are not good in themselves.
The reason we have them for things like pte_t etc is that there
really is absolutely _zero_ portably accessible information there.
I was thinking of writing this blog post too. Maybe I still will, because I want to emphasise something different about this topic.
Mailing list workflows also make people write a different sort of commit, where the diffs are short and readable and the commit messages are persuasive as to why the diff should be accepted. That’s because these diffs and commit messages are going to be much more prominent in people’s mailboxes, so both should be as readable as possible. Extraneous things such as style fixes or whitespace changes within the same diff are frowned upon because they bring clutter and hinder readability (it’s okay to throw those into a separate commit and thus a separate email, though).
I find this style of commits immensely useful when reading the project’s history, but their value is hard to convey to someone raised on Github, which strongly discourages this style of commits. Most Github users I’ve seen never read the project’s history, because they value neither writing nor reading it.
Most Github users I’ve seen never read the project’s history, because they value neither writing nor reading it.
My impression as to why that is that because navigating the history of a particular code segment in GitHub is hard to do, people do it less often. Because they seldom read the history, they don’t value writing it (why waste effort in something that no-one will read?), instead they worry about the pull request message, which is out of band information for the VCS.
Because commits are easy to navigate using Emacs’ vc-annotate mode, I’ve found valuable information written down 7+ years when working in FLOSS projects where the original author was long gone. And since then I tend to value well written commit messages.
As I was saying in HN, I think Github did to commits and commit messages what Gmail did to email and top-posting: hide most of it so that nobody has to bother with writing it properly and thus doesn’t have to read it either.
I’m 100% with you on this. I think this is a consequence of GitHub’s “code first” attitude; the UI presents code front and center, so that’s what people come to care about. Commit messages and project history are second class citizens on GitHub, which saddens me - there’s a lot of useful information locked away in there! If you get around to writing that post, I would very much like to read it!
This fun macro has been in Arc Lisp from the start under the name accum, and I find it extremely useful. For example, I recently added support for list comprehensions using it: http://akkartik.name/post/list-comprehensions-in-anarki
One difference between the two: gathering uses a hardcoded function name gather, whereas accum takes a first arg that’s the function you call to ‘accumulate’ new item. Often we use acc, so calls begin (accum acc ...).
Interesting posr about list comprehensions!
It is commonly use collect or with-collector in Lisp. The named variant is also common.
https://github.com/jscl-project/jscl/blob/master/src/utils.lisp
There is even a variant to collect into multiple queues, in which case one has to provide a name for each collector.
Serapeum has a version called collect too. I didn’t call it collect because that conflicts with iterate’s collect clause, and I tend to use iterate pretty heavily in my personal stuff..
Thanks for that pointer! I wasn’t aware, but in my toy lisp I called the pair collect and yield. Glad I was on the right track!
Terminal within vim now?
From the article:
The main new feature of Vim 8.1 is support for running a terminal in a Vim window. This builds on top of the asynchronous features added in Vim 8.0.
Pretty cool addition. :-)
I wonder if the new Vim terminal used any code from the NeoVim terminal. I know NeoVim was created in part because Bram rejected their patches for adding async and other features.
I have to say, I really don’t care to see this in a text editor. If anything it’d be nice to see vim modernize by trimming features rather than trying to compete with some everything-to-everybody upstart. We already had emacs for that role! I just hope 8.2 doesn’t come with a client library and a hard dependency on msgpack.
Edit: seems this was interpreted as being somewhat aggressive. To counterbalance that, I think it’s great NeoVim breathed new life into Vim, just saying that life shouldn’t be wasted trying to clone what’s already been nailed by another project.
Neovim isn’t an upstart.
You can claim that Vim doesn’t need asynchronous features, but the droves of people running like hell to more modern editors that have things like syntax aware completion would disagree.
Things either evolve or they die. IMO Vim has taken steps to ensure that people like you can continue to have your pristine unsullied classic Vim experience (timers are an optional feature) but that the rest of us who appreciate these changes can have them.
Just my $.02.
Things either evolve or they die.
Yeah, but adding features is only one way to evolving/improving. And a poor one imho, which results in an incoherent design. What dw is getting is that one can improve by removing things, by finding ‘different foundations’ that enable more with less. One example of such path to improvement is the vis editor.
Thanks, I can definitely appreciate that perspective. However speaking for myself I have always loved Vim. The thing that caused me to have a 5 year or so dalliance with emacs and then visual studio code is the fact that before timers, you really COULDN’T easily augment Vim to do syntax aware completion and the like, because of its lack of asynchronous features.
I know I am not alone in this - One of the big stated reasons for the Neovim fork to exist has been the simplification and streamlining of the platform, in part to enable the addition of asynchronous behavior to the platform.
So I very much agree with the idea that adding new features willy nilly is a questionable choice, THIS feature in particular was very sorely needed by a huge swath of the Vim user base.
It appears we were talking about two different things. I agree that async jobs are a useful feature. I thought the thread was about the Terminal feature, which is certainly ‘feature creep’ that violates VIM’s non-goals.
From VIM’s 7.4 :help design-not
VIM IS… NOT design-not
- Vim is not a shell or an Operating System. You will not be able to run a shell inside Vim or use it to control a debugger. This should work the other way around: Use Vim as a component from a shell or in an IDE.
I think you’re right, and honestly I don’t see much point in the terminal myself, other than perhaps being able to apply things like macros to your terminal buffer without having to cut&paste into your editor…
Emacs is not as fast and streamlined as Neovim-QT, while, to my knowledge, not providing any features or plugins that hasn’t got an equivalent in the world of vim/nvim.
Be careful about saying things like this. The emacs ecosystem is V-A-S-T.
Has anyone written a bug tracking system in Vim yet? How about a MUD client? IRC client? Jabber client? Wordpress client, LiveJournal client? All of these things exist in elisp.
Sometimes I wonder why recent languages don’t support multiple [return] values. We are even using destructuring assignment as a poor man’s multiple values. It solves the problem described in the article w/o cluttering the functions code with conditionals
Most recent languages honestly do (Python, Elixir, Go, Rust, Kotlin, and Swift (I think) to name a few), and they’re getting backported in some others (C# 7 and C++17, for example) by improving tuples.
I think the bigger issue with most of these languages is they don’t have anything like ML/Rust/Erlang-style fail-if-the-return-looks-like-this mode that lets you effectively use them as if they were exceptions when you want—e.g., the frequent pattern in Erlang/Elixir of Foo, ok = some_fun(), or Rust’s let v = bar()?;. Without that, you either do what Ruby’s doing here (throw an exception if exception: true is passed), or you have to explicitly check yourself (where Go is the extreme example of if foo, err := bar(); err != nil { ... } being a constant refrain).
I don’t now about Elixir, Go or Kotlin, but neither Python or Go support multiple-values. In Go you have to accept to assign all the values the function returns, which kinda defeats the whole purpose of having multiple return values in the first place! (I checked in a REPL just to be sure). I haven’t kept up with recent developments in Python3 but AFAIK Pythonistas use lists or dictionaries to mimic multiple-values. Similarly in ES6 people use dictionaries + destructuring assignment in ES6. For Example
const foo = () => ({a: 1, b: 2})
const {a} = foo()
console.log(a)
Prints 1. The ES6 approach is better than Golangs and Python solution but it still forces the caller to reuse the name the callee decided on[0] plus all the return values are allocated on the stack.
AFAICT Rust again doesn’t support multiple value but uses pattern matching (which destructuring assignment is one example of) to mimic them.
Multiple values are useful for more than exception handling btw, one example is the division operator
[0]: Yeah I know one can rebind the name, but the syntax is cumbersome to use and one still have to remember the name of the value as opposed to its purpose, which is easier to remember).
Well, now I’m confused. On the one hand, you say,
…neither Python [n]or Go support multiple-values
…and then immediately link to a REPL that starts with “Go supports multiple return values,” and even shows an example of ignoring some of the returned values. Likewise, while I agree with you that Python uses sequences for multiple returns behind-the-scenes, the use in practice looks like
def foo(a, b): return b, a
c, d = foo(1, 2)
which is indistinguishable in practice from what I do in an ML. (And in Python 3.5 and later, you can even do things like a, b, *rest = foo().) Python even has multiple-return division operations (see math.fmod from as far back as Python 2.7).
Could you give an example of a language that does what you want, and how it differs from the previous? I feel as if we’re using the same words, but for radically different things.
I’m sorry I wasn’t more clear in my previous reply.
Could you give an example of a language that does what you want, and how it differs from the previous?
Common Lisp.
and how it differs from the previous?
which is indistinguishable in practice from what I do in an ML.
Yes, and to the best of my knowledge MLs don’t support multiple values. Pattern matching enables one to mimic multiple values, which is what most recent language are doing and it provides at least 90% of the value of having multiple values.
The Go REPL example shows that the caller must be aware of the amount of values the callee is returning, which leads to clumsy UX. I’m guessing you wanted to link to modf but I’m not sure what you were getting at. The CL example of / shows how we can re use the same function instead of having mod and div. Similarly be taken advantage retrieving the value in a map where nil indicates absence without affecting the UX of the ‘happy path’ (ie. nil is not possible a value in the map).
–––––––
It is kinda ironic that my comment was motivated out of the idea of less is more in language design, in light of all the feature creep I’m seeing recently in JS and Ruby, but it appears that the approach of recent languages is better example of less is more ¯_(ツ)_/¯
to the best of my knowledge MLs don’t support multiple values
Returning multiple values (like in Go) is just a special case of tuples, which most MLs support. So you don’t need an extra language feature for this. But I wouldn’t use this for errors like Go does - it makes more sense to use a variant/sum type for this.
I’m glad to see this trend of standing up against poltiical exclusion in Open Source.
I assume that the Code of Conduct for llvm was written in good faith, but the continued demonization of political groups (and to some extent, white men) is troubling. Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/
Who is being excluded? How is Outreachy preventing someone from contributing to llvm?
I remember those days too. “No one” cared because “everyone” assumed you were white, male, and college educated. “There are no women on the Internet” dates back, at least, to the early ’90s.
As a black male dropout, that was fine for me— I could get involved. No one questioned my capabilities. And as long as I kept up a good impression of being fluent in upper-middle to upper-class white culture, I could build my skills and social capital.
I also got beat up on the street in front of my grandmother for “showing off” how I could “talk white” at school.
I also remember, when Pentiums were out, using a pawn shop purchased Apple IIc with a gifted modem. I also remember hacking into dial-up pools to get telnet— haha, as if my machine could talk SLIP or PPP. I remember begging friends from MOOs and IRC for a shell account. I remember having no concept of the disparity between myself and the people with whom I played games, chatted, wrote code, and made friends. They simply had things, and I didn’t.
I don’t see a problem with choosing to give their time and their money to mentor people who otherwise might not be able to participate. There certainly hasn’t been a problem with people choosing to give their time and their money to people who look like them, sound like them, grew up with them, attend the same church as them, went to the same school as them, are friends with them, enjoy the same movies as them, play the same sports as them, and just happen to be a well-off straight white male. Just. Like. Them.
I also remember hacking into dial-up pools to get telnet
Holy crap, you and I are kindred spirits. The terminal-concentrator at the local university dropped you into a command line…you were supposed to then immediately telnet to the VAX on campus, but they didn’t enforce that. I was 13 years old and certainly not a student at said university but boy did I get around using that little trick.
(This would’ve been like 1993. I’m old.)
It was an eight year old Amiga 1000 that my dad got at an estate sale for like $20 because it would only boot up about half the time and shut down and random intervals, hooked up to a black and white TV, with an old external 1200 baud modem and a terminal program I got off a disk on the cover of a magazine. I felt like the lord of all creation.
Man I’m nostalgic now.
I remember when internet arrived at my hometown. It was 1996. I am not sure such delay was related to skin color.
There is no whitemend.
Outreachy isn’t out to make a monster out of you. It’s trying to correct for GSoC. You don’t like Outreachy’s policies, a much smaller, less well-funded org than Google, then go through GSoC and Google. You have lots of other options other than Outreachy.
The code of conduct doesn’t say anything about how white men are bad. Reading the CoC, if you object that strongly to it that you must leave, then please do! That’s the CoC working as intended. You are deciding to exclude yourself by deciding that what the CoC forbids (i.e. being an asshole) is something that you must be and defend.
Also, one more thing.
I wish I could explain to people who are privileged one way or another, that it doesn’t mean your entire life is handed to you in a silver platter. Being a white male doesn’t mean you can’t be poor or can’t be gay (thus discriminated) or that you can’t have a slew of other problems.
It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.
Reading the CoC, if you object that strongly to it that you must leave, then please do! That’s the CoC working as intended. You are deciding to exclude yourself by deciding that what the CoC forbids (i.e. being an asshole) is something that you must be and defend.
I would disagree with that notion. I think it’s certainly possible to disagree with the CoC or parts of it without being an “asshole as the CoC forbids”. Personally and for example, I would say the “Be welcoming” clause is too exhaustive and could be shortened to “Be welcoming to everyone regardless of who they are and choose to be” which would IMO cover the same topics as it does now. The fifth clause is also way too broad and vague. A simple note that discussion not furthering the the project or it’s software, being NSFW or otherwise non-productive would have achieved the same goal and would give moderators more leeway to deal with troublemakers.
I specifically wonder why number 6 was necessary. It’s a community of coders, if they can’t understand disagreement I seriously question what is going on behind the scenes that warrants such a rule. Does discussion derail so often into low level sand-flinging?
Not too long ago I was member of a forum focused around LEGO robots. There were no rules of any kind but plenty of electricians and programmers around, men, women, kids and teens, etc. Everyone was happy to participate and be happy to exchange ideas and code. When there was drama the moderators enacted unspoken rules of the clearly obvious kind. If you insulted someone for no reason you got banned. Same for insulting someone based on their gender. We didn’t need rules for that. It was obvious as day that such behaviour was not something you’d do to have a productive conversation with someone about the intricacies of rubber bands vs gearing.
I specifically wonder why number 6 was necessary. It’s a community of coders, if they can’t understand disagreement I seriously question what is going on behind the scenes that warrants such a rule. Does discussion derail so often into low level sand-flinging?
Speaking as someone who has over the course of many years, moderated things on the internet. Things like this exist because otherwise someone will come along and say “but you didn’t say”. It’s an unwinabble battle, there will always be a “but you didn’t say” response to something. You try to cover the big things in a broad way so that people have a general idea.
I’ve answered many emails as a member of the Pony core team where well meaning people write in to ask “if I do X, would that be against the CoC”. I can’t say that is how every CoC operates, but its how I like them to operate:
Here are some ground rules. If you aren’t sure if what you are going to do violates those ground rules, maybe don’t it or ask whoever enforces the CoC.
CoC’s are far from perfect. A large amount of that lack of perfection is that they are administered by people. Establishing some ground rules for a community is better than having none. Most communities have a CoC whether they call it that and whether its explicit. Take HackerNews, its called “Guidelines” there. It’s still a statement of some behavior that isn’t acceptable.
I think if someone goes down the route of “but you didn’t say” that would be grounds for getting a mute from the poor moderator they annoyed. At least back in the forum that was how it was handled. Nitpickers aren’t people who tend to keep around once the people in charge hammer them on the fingers.
I don’t think Hackernews’ Guidelines are comparable to a Code of Conduct. HN’s book of laws is much more vague and subjective, the word “guideline” already implies a certain amount of softness. Moderators won’t stick to that word-by-word and rather apply common sense on top of the rules. A “Code of X” for me implies a certain rigidness and thoroughness that isn’t present in most of them.
The code of conduct doesn’t say anything about how white men are bad.
And yet that is how it has been applied. The organisation is funding a scholarship which is very explicitly open to people of some race/gender combinations and not others. I don’t think finding that unconscionable makes someone an “asshole”; quite the opposite.
I wish I could explain to people who are privileged one way or another, that it doesn’t mean your entire life is handed to you in a silver platter. Being a white male doesn’t mean you can’t be poor or can’t be gay (thus discriminated) or that you can’t have a slew of other problems.
It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.
Put it this way: I would lay money that, in practice, the average Outreachy scholarship ends up going to someone who has had an easier life than the average open-application scholarship (GSoC or similar). The rhetoric of inclusion is all about underprivileged groups, but somehow the beneficiaries always end up being middle-class college-educated liberals.
The organisation is funding a scholarship which is very explicitly open to people of some race/gender combinations and not others. I don’t think finding that unconscionable makes someone an “asshole”; quite the opposite.
Races and genders which are significantly unrepresented in the field they are trying to get them into.
There are campaigns and organisations here to try and get more male primary school teachers, because males are significantly unrepresented in primary education. Are the people running those organisations and campaigns “assholes” for discriminating against women, who represent over 84% of primary school teachers?
He said although he made hiring decisions based on who was the best teacher, irrespective of gender, it would be great to see more men giving teaching a go.
That’s what the non-asshole version of this kind of thing looks like. Marketing the career to a particular demographic is fine. Giving that demographic an unfair advantage is not fine.
It’s an unfair advantage that’s not even managing to negate the pre-existing unfair disadvantages that certain groups face.
It’s Simpson’s paradox in reverse: picking an advantaged member of a disadvantage group over a disadvantaged member of an advantaged group is a negative step for equality that sounds like a pro-equality move.
The outreachies I’ve seen have gone to Indian and Eastern bloc girls. You don’t see a lot of those in GSoC.
Sure. That doesn’t contradict what I said: that the beneficiaries of these efforts end up being disproportionately people from the international college-educated liberal middle class (a group that’s far more homogenous in the ways that matter than most races or genders, though that’s a separate discussion), people who have had an easier life with fewer problems than the people they are displacing, even when those people are white and male.
Let’s assume you’re right.
How does Outreachy working with international college-educated liberal middle class Indian and Eastern bloc girls displace anyone?
If LLVM is choosing to fund a scholarship with Outreachy in place of funding one with GSoC, the recipient of that scholarship is displacing the person who would’ve received the GSoC one.
Please correct me if I’m wrong, but as I understand it:
So, neither LLVM nor Outreachy are “displacing” anyone from GSoC.
Moreover, no one even signed up for LLVM’s Outreachy! So this is hypothetical “displacement.”
Outreachy doesn’t fund internships, you need to bring your own funding to them. I’m not sure how LLVM is funding their outreachy internships.
[citation needed]
Because, from their front page:
Outreachy provides three-month internships for people from groups traditionally underrepresented in tech. Interns are paid a stipend of $5,500 and have a $500 travel stipend available to them.
And their sponsor page:
Outreachy internship stipends, travel fund, and program costs are supported by our generous donors.
Same page, “Commonly Asked Questions”:
Q: Who pays the interns? A: The Outreachy parent organization, the Software Freedom Conservancy, handles payments to interns.
Not to make too fine a point:
Q: We have a company internship program. How does that work with Outreachy internships? A: Outreachy internships are completely separate from any other internship program. Outreachy organizers find FOSS communities that are willing to provide mentorship and use corporate sponsorship to fund the internships.
I guess I don’t see how you’re disagreeing with what I wrote. You need to have funding arranged before you can set up an outreachy internship.
FOSS community provides mentorship. Corporate sponsor provides funding. Internship = mentorship + funding. Outreachy provides internships.
The money from corporate sponsors goes into a pool that is used for all internships. Outreachy is a funds aggregator.
When you say “you need to bring your own funding to them,” who is the “you?” It’s not the FOSS community. It’s not the internship applicant. Who is it?
Perhaps the policy changed. When I looked this up in November it was the responsibility of whoever wanted to start an outreachy program for a project to identify a source of funding.
According to the Internet Archive, in September of 2017, their policy was exactly the same. It’s the same at least back through the last GNOME Outreachy, over a year ago.
Update: I deleted my follow-on questions. This is the kind of back and forth @pushcx warned about.
Did you see my other comment? Each org needs to find a coordinator who needs to find funding for their org (see under coordinator, here: https://www.outreachy.org/mentor/). That might be in terms of corporate sponsorhip, but outreachy won’t do that for you.
No I didn’t, I missed your self-reply. Sorry about that!
And, yeah:
Coordinator Duties Before Application Period Opens
- Finding funding for at least 1 intern ($6,500)
That’s clear and conflicts with their other pages. “Perhaps the policy changed” indeed. I put more weight on that page, though, than their more advertise-y ones.
mea culpa!
I understood LLVM was funding the scholarship but could easily have misunderstood. In any case it’s beside the point: my point goes through exactly the same if we’re talking about the person a hypothetical open-application scholarship would have selected or a person who was displaced as such.
Moreover, no one even signed up for LLVM’s Outreachy! So this is hypothetical “displacement.”
Isn’t it just the opposite? If choosing to offer an Outreachy scholarship rather than some other scholarship meant that instead of getting a likely-less-privileged individual they got, not a more-privileged individual but no-one, that’s an even bigger loss.
If choosing to offer an Outreachy scholarship rather than some other scholarship […]
They also offer a GSoC scholarship, and there’s nothing to imply Outreachy replaced an alternative rather than being an addition.
Scholarships don’t grow on trees; surely the fairest comparison to make is offering a scholarship versus offering a slightly different scholarship. (Would you apply the same reasoning if someone wanted to offer a scholarship that was only for white people, say?)
I can play this game too, where “displaced” is entirely hypothetical:
THE INJUSTICE
Um, yes, it’s 100% fair to compare gcc to llvm, tea to beer, or your mother and father to other people?
It just means you don’t have those problems in addition to also being discriminated for being a woman, for being black, for being anything else.
That’s incorrect in any environment where whites or men are the minority. Human nature dictates that all groups favor those like them and penalize those unlike them. Examining the politics of non-white nations in World History or current affairs confirm those groups are just as racist in the social systems they create. Examining the actions of black administrators or elected officials show they mostly bring in people like them regardless of what the mix is in their area. The kind of political beliefs behind these Codes of Conduct and privilege assume this doesn’t happen on a large scale by non-whites to whites. The wealth of evidence disagrees with that so strongly that believing in it anyway and suppressing alternative views is comparable to a religious faith. One that damages specific groups while propping up others.
Another point folks in favor of those beliefs and CoC’s never bring up is how many minority members disagree with them. The surveys they usually take are almost never worded to assess how many people believe it’s something all groups do to each other. That’s because they’re biased enough to try to just reinforce their own beliefs. In my surveys, I always present both sides asking which they think it is. I rarely meet black or Latino people, majority of minority members in my area, that think structural oppression is only a white thing. It’s so rare out here. Most think all groups do it but that whites are doing it the most. That’s reasonable. Yet, under CoC’s and associated beliefs, their views would be censored as well since they’d be construed as racist (in their definition) or contributing to reinforcement of it. Likewise, any “language” or “terms” that are racist, sexist… scratch that, which their political beliefs without supporting evidence label as inherently racist, sexist, etc. That too.
So, I object to these CoC’s that act like a good chunk of minority members’ opinions don’t matter, that ignore the fact that minorities do structural racism/sexism all the time (by default like people in general?), ignore the fact that whites/men they’re addressing might have been the oppressed minority in previous environment (or current), and then build social structures and enforcement mechanisms on top of those damaging, faith-based beliefs. I also say this as a white guy who spent years in black-run schools living a long time in many areas of black-run city working in black-run departments and companies. If I write about my experiences or tell it like a 3rd party, the black people always think the person in the story is black saying the feelings and obstacles are what they endure. When I say they’re white, then type of people I’m countering say, poof!, none of it counts as evidence of racism. That shows it’s politically-motivated maneuvering, not consistent logic.
These should be fought in favor of CoC’s that don’t require everyone in America or the World to believe and speak as if one, smaller, vocal group is unconditionally right in all political claims about these matters.
That’s incorrect in any environment where whites or men are the minority. Human nature dictates that all groups favor those like them and penalize those unlike them. Examining the politics of non-white nations in World History or current affairs confirm those groups are just as racist in the social systems they create.
I’m sorry, what are you talking about? I’m from Peru where ‘whites’ are a minority. They are most certainly not discriminated against, quite the contrary. Whiteness is equated to privilege to the extent we have a saying here: ‘El dinero blanquea’, which roughly translates to ‘Money bleaches’.
The discrimination comes from factual power, not a head count. Power which was built upon centuries of enslavement and exploitation. Exploitation most members of the white elite minimize and/or are oblivious to.
It is the same in other places of South America. Certainly in Brazil, where the author is from.
I’m from Peru where ‘whites’ are a minority. They are most certainly not discriminated against, quite the contrary. Whiteness is equated to privilege to the extent we have a saying here: ‘El dinero blanquea’, which roughly translates to ‘Money bleaches’.
I appreciate you sharing your example where one of the minorities has power. That supports my view that it’s highly conditional. Power is one thing that ties into discrimination. Group identity is another. You don’t need centuries of enslavement or exploitation to get one group working for themselves more or against another. It can be a factor, though. Often is. I also noticed you’re mentioning countries where white armies invaded them and their upper classes, not whites in general, did coercive negotiations for trade that benefits them. In this case, it’s real but tied to who did what. You can bet a group invaded by non-whites will also develop some reaction to that group.
Whereas around Memphis TN, being white in specific areas won’t get them respect or power due to the slavery that happened in the South. They’ll just get a warning to leave, beat down, robbed, and/or killed. No power. Like with those that invaded Latin America, the power was with a subset of them in high places or any that could get them to act on their behalf. As a civil rights proponent in America, I assure those powerful, white people would try to squash or minimize white people like me when our interests conflict. They hate outsiders even more but I would be treated more like them than your scenario would lead you to expect. I’m still in the outgroup. Just not as far out as Latin America. Same with local blacks or latinos that control specific areas, organizations, businesses, and so on. Being white conveys me large benefits in some contexts, about none in others, kind of negative in others, and violence/death in others.
It varies by context is my overall point. It’s not “If white, always this. If non-white, always that.” It’s really complicated. I’m sure I have plenty more to learn about the dynamics of the many groups. Thing is, countering it my way is much simpler than trying to trace it all: being civil, going out of your way to bring in others, accepting each other despite differences, and randomizing/blinding where possible selections/promotions. Increased fairness without further discrimination or hate. It’s simple, but not easy.
Edit to all: Other replies will be delayed since I have to work a late shift tonight. Heading out now. Hope yall have a good day and appreciate all the civil replies so far. :)
Thank you for the thoughtful response. I get a better sense of what you were getting at. I don’t think I’m qualified to say much more on the matter, I don’t think I have a proper grasp of the dynamics of structural exploitation. But I’d like to add a couple of not fully developed ideas.
– Whiteness is sometimes used as a proxy for privilege.
– Whiteness is context dependent. My cousin from the US grew up on Pensilvania. Here he is a ‘gringo’, where he grew up he was considered far from white, being called racial slurs when growing up.
– It may be a better idea to talk more in other terms w/o proxies. Class politics are more relevant today than race IMHO.
– Even in Perú there are some contexts where you can be subject to specific instances of discrimination, but they pale in comparison to the structural discrimination that happens in the day to day basis. Which is why (in the context of Latin America at least) I view focusing on ‘reverse racism’ as a mechanism to distract from the larger and more important problem of structural discrimination.
also noticed you’re mentioning countries where white armies invaded them and their upper classes, not whites in general, did coercive negotiations for trade that benefits them.
I understand and empathize and partially agree with what you are getting at. Certainly you can’t be held personally accountable for everything action your government does. But at the same time they have to some extent the support of the general public. At best, you are turning a blind eye to the pain and suffering that supports your economy. But then again, it is our (Latin American) governments which are complicit and also responsible for said exploitation.
I’m the words of a mining worker, when talking to a college student:
– You speak of the gringos you’ve seen in Morococha and Cerro (Mines in Perú). But they are millions. Don’t generalize…
– So why do they send those how look down on us, cholos, not like people but like dogs.
Another thing, the exploitation of Latin America is not limited to ‘economic deals’ and is not something of the past (But there is more than a fair share to blame on our obsequent governments). In the 90’s US Companies hired henchmen to kill union leaders. The US Goverment (through US-‘AID’) provided logistic support for the mass forced sterilization of millions of women in Perú. Or even this decade, the US government, through the DEA, determines the policy and funds the forceful eradication of coca leaves further contributing to the impoverishment of Peruvian farmers. The Coca plant is legal here and is consumed by many in their day to day.
I thank you for your detailed response. That was a mix of interesting and pretty sad. I’m going to back up a bit first on one issue since I was using a simplification that you and @stephenr are showing I probably shouldn’t use maybe here or in general. I’ll have to think on it. The actual belief I have about the ingroup vs outgroup dynamic is that they’re just treated differently in a way where it’s often positive to first and negative to second. It doesn’t have to be. I was just going with common pattern since it fits both my experiences and minorities in the U.S. which is mostly the topic around this thread. You’ve both given examples where a white outgroup can be benefit from their status in other countries. Likewise, there’s examples where the ingroup is a rough position with expectations for man or women coming to my mind easiest. One of the worst examples I’ve seen is the tribe that covers people in bullet ants to prove they’re men. I’d rather be the outgroup they look down on forever. ;)
On to your comments on exploitation. Far as unions, sterilization, and so on, that’s a side effect of the elites controlling America. They use the media to keep folks under control fighting enemies that aren’t the main enemy. You won’t see the stuff you described on American media much. Instead, it’s stuff that shocks or lets people point fingers temporarily for quick reactions. Next wave of shock happens making them forget what came before that. Americans can’t keep track of history. They can only focus collectively a moment at a time with what’s carefully put in front of them. The parts of the government doing things like you describe are mostly autonomous working for rich and powerful. Those that get voted in do a mix of things they said they’d do and things that appear to benefit their voters with lots of publicity for both. The choices are few with the non-participation and apathy so high that government doesn’t worry about rebellion. It’s kind of a constant rehash of the same games and corruption with businesses getting laws passed benefiting them more and more every year mostly under Americans’ noses since media barely reports on it.
So, that’s how that works if you were wondering. When I was young, I never thought handfuls of companies and some government organizations could really control most of several hundred million people with the presence of the Internet, activists getting word out, and so on. Yet, they actually can. They’re also intelligent, focused, well-staffed, and relentless in their pursuits vs masses that are hit and miss on these things with more scattered beliefs, goals, and participation. Just like in this, those fighting over the CoC’s and such aren’t investing effort in joining together against the elites like folks did in MLK days which truly scared them enough to plot murders. If they beat the corruption, they could work law by law, reg by reg, case by case to get a lot done starting with something as simple as due process for workers (I’m union). It takes unity and focus on where the foundational problems are, though, to achieve something like that. Not to knock efforts to improve things elsewhere but we really should be almost all in on dealing with people paying bribes for damaging laws to be passed that give corrupt jurisdictions and companies impunity in their evils. It seems like so much starts right there.
Anyway, there’s a lot of people pulling for the folks you describe. They just feel powerless to do anything about it. Also, those that care are so few that giving up products that come from there will change nothing. So, everyone from the consumers to the traders ignore their fleeting thoughts since they need some cheap copper.
I’m not sure how anything you’ve written is relevant to LLVM’s code of conduct. It says; be welcoming of everyone, be considerate, be respectful, don’t make violent threats. All very basic, common sense stuff that the vast majority of people don’t need to a checklist to accomplish. I’m not sure how you went from what is actually written there, to this:
The kind of political beliefs behind these Codes of Conduct and privilege assume this doesn’t happen on a large scale by non-whites to whites.
Which part of LLVM’s CoC do you think is saying this? Do you think the part about being welcoming of everyone regardless of race is non-white people discriminating against white people?
“Violent threats or language directed against another person. Discriminatory jokes and language. especially those using racist or sexist terms Advocating for, or encouraging, any of the above behavior.” (my emphasis added)
It’s those words that are used to block people based on political beliefs. The kinds of people that push CoC’s often have specific views about what is considered racist, sexist, etc that there’s not a wide consensus on. Any words or behavior will be interpreted in the light of their views. This is double true when they get into the moderation positions, which they often aim for. I don’t have to speculate as I’ve been banned from forums for quoting under my own name minority member’s opinions on minority issues. They were racist, sexist, etc. by their definitions. These policies interpreted however they want are the leverage they use to reinforce their own groups or eject other groups. Advocating for is the last term where anyone even debating whether something was racist or sexist might be construed as supporting the racist or sexist person. That’s happened plenty, too.
So, it’s the intent behind the terms along with whose enforcing them, what their beliefs are, and if they’re willing to exclude people with different beliefs on contentious topics. They usually are. So, I oppose those in favor of CoC’s without enforcement of political ideology that focus on people just staying civil, friendly, etc. Those parts of the CoC’s I have no problem with.
EDIT to add what I’m fine with since I’d rather not be overly critical of something that’s mostly good:
“be friendly and patient, be welcoming, be considerate, be respectful, be careful in the words that you choose and be kind to others, and when we disagree, try to understand why.”
Most of the weaseling is built into that “be careful in the words you chose” part. Minus the weaseling, even quite a few points in that section are good. Also note that we don’t have to speculate given Lobsters already has enforcement that’s similar to what I’m advocating for. Our moderators may agree or disagree with people’s political views but haven’t ejected anyone for stating their views with data in a civil way. Our community is still a thriving, functioning community despite any political scuffles.
That’s incorrect in any environment where whites or men are the minority.
I guess you’ve never been to Thailand. Whites are a ridiculous minority, but they’re held in such high regard by a large percentage of the population.
Edit: and to clarify, this isn’t the same situation as @PuercoPop’s:
Thailand was never colonised, has never been under ‘white’ or ‘western’ rule and was not a ‘source’ for slavery by whites, Heck, whites (without getting Thai citizenship, which, holy shit is that a long process) can’t own land, can’t own more than 49% of a company, etc.
Try to find some Thai soap operas on YouTube - notice how all the actors are very pale skinned: they’re all half-Thai, half-white. If they want to show a ‘poor brown girl’ (believe me, their stereotype, not mine) they literally take a Thai/White actress, and use makeup/body paint/whatever to show their version of what anyone else would think of as a ‘natural’ brown skin.
I’ve been stopped at police licence checkpoints, and the cop has been so excited just to say hello to a white guy he doesn’t even care if I have a licence.
Of course structural oppression isn’t a white only thing. Anyone can discriminate against anyone. And sure, in localized areas some groups can oppress others in different ways than the average. That doesn’t mean CoCs shouldn’t try to prevent racist / sexist conduct.
What things do you see in CoCs that minority members disagree with, that unfairly construes their beliefs as racist? Or disregards their opinions? Or ignores that whites/men may have been the oppressed minority in their environment?
That doesn’t mean CoCs shouldn’t try to prevent racist / sexist conduct.
I didn’t say that. I said it’s usually interpreted in a way where racist and sexist conduct has definitions that usually mean whites/males can’t experience the negatives, are often responsible for them (supported point in general case), and inherently have the positives. Evidence strongly counters two of those showing it has to be judged case by case, place by place, etc. For instance, the forums dominated by the types of people with that ideology make them the majority with the structural power to include, exclude, oppress, and so on. By their own definitions this is true. Yet, any person in a different group dissenting in such a place will be told they’re the “majority” with “privilege” who wouldn’t understand the… blah blah blah. Actually, at least in that context, they’re a minority getting treated worse than its majority at risk of damaging affects of discriminatory treatment. This plays out in other contexts like school, work, etc. where non-whites or non-males in the majority positions reinforce themselves at others expense. A general pattern.
Far as minority members disagree with, who are the minority members? That’s exactly what I mean. It depends on who you’re talking about in what context. Someone who is a minority member in one environment might be part of the privileged majority in another. The very definitions of who constitutes a minority (absolute vs conditional), what defines racism, who has privilege… these are in dispute across the nation. Many non-white and non-males dispute some of same points, too. So, starting from a specific set of views on it being true with enforcement working from there is already discriminating against all who disagree. They’ve not proven these views with evidence either.
Note: You can try to cheat with legal terms that one side or a group of them got in but treating the law as truth or moral is dangerous. Slavery and women not having rights were legal. So, my definitions are about reasonable categories people are in with their numbers or influence compared to groups of other categories.
The evidence collected on a global scale indicates that all groups in power reward their own and oppress others. So, if by evidence, this stuff will be conditional with every group monitoring themselves for bias boosting their outgroups when they don’t get a fair shake: not just whites or males being monitored with everyone boosting non-whites or non-males in all scenarios. In this country or in tech scene, the results would mostly be boosting non-whites or non-males to correct existing imbalances just on the numbers alone. No argument there. Yet, other things wouldn’t be taboo or inconsistent with the rules: a mostly black or women organization in mixed area with people in other categories having skills would be said to give more privilege to blacks/women, possibly structurally racist/sexist in hiring if ratios of workers vs supply were really skewed, encouraged to diversify, and activist action taken if they didn’t. Just like such people would do with white or male majority structurally reinforcing their own groups.
We don’t see this. Most of the types that push and want to enforce CoC’s frame it as one thing by definition with whites or males on high-privileged/victim-creating side in all situations. That’s dishonest. I’ll take “this happens more often than that” but not “this never happens or we should act like it doesn’t exist.” With that, they can’t eject people for disagreeing with them on what counts as discriminatory language or behavior if it’s something there’s no consensus on by people who otherwise are against a lot of clearly-discriminating behavior. Further, they might be more likely to go with diverse inclusion plus blind evaluation/selection to correct imbalances instead of ignore whites/males much as possible to only focus on everyone else. One is inherently more fair achieving a similar goal.
But don’t you think that being the privileged majority in the society you live in will have more to do with shaping your experience and fortune in the world than being the privileged majority in an online message board or OSS project?
In the spaces I live with, my lack of privilege as a white minority in many contexts has cost me likely mental health, plenty humiliation, confusion, physical beatings, missed dates, missed jobs, missed promotions, and so on. Coworkers locally were just telling me recently about black-run classes singling them out for opposing beliefs. Things they say get an entire room screaming at them to intimidate them into silence on top of whatever penalties teacher might give. More extreme versions of this ideology are going campus to campus all over the place taking on life of their own where students are doing things like holding up signs protesting inferred problems in words or ideas of instructors that are there to help them during class.
Again, I”m white male who doesn’t or can’t have such problems in a structural way according to specific groups in the United States despite the evidence of such things happening with non-white or non-male majorities. The forum example was just easier for people to see where you can tell the white male is not in control, is subject to the whims of others, and can be damaged for that. People causing outgroups problems is totally predictable in my model. That’s not the interesting thing. The interesting thing about the forum example is that the people in control who are the majority continue to describe their limited, powerless target in the same terms like powerful and majority. It doesn’t usually change as the circumstances change. It’s usually politics or religion when people’s beliefs or dictated rules don’t change when data flips by 100%.
So, it’s not what they say it is or consistent. That’s enough reason to resist it. That following it would damage more innocent whites or males making them suffer as so many of us did is even more reason. You could say what motivates me to write these posts isn’t much different as what motivates those on the other side with personal experiences in racism or sexism to write their posts. It’s not “reverse (ism)” so much as all the same evil to me. Once we see and experience the evils, we have to stop them from continuing in any form they’ll take. Another thing I noticed is we seem to do it for others’ sake more than ourselves as we can’t undo what we experienced. We’ll always be a bit fucked up by it. We can maybe stop someone else from having to experience that, though. I want someone else to be everyone instead of “everyone but whites and males.”
As usual, that’s on top of all the non-whites and non-males I care about and try to help. They just get a lot more attention and support than this other cause. Hence it being a focus area you’ll see me on. Plus, having been affected so strongly, that’s a motivational bias of mine on top of it.
@nickpsecurity, that sucks. You’ve been a victim of structural discrimination. Worse, because it’s not a politically sexy or easily visible form, people continually reject your experience. That. Sucks.
In the past, if I’d heard your narrative, I’d have dismissed you by thinking something like “this white dude forgets he always has the option to leave, unlike …” But that’s unfair.
You’ve been a member of these communities, for years. You’ve been a decent person. You have family, friends, colleagues, social capital, and memories in these communities. To tell you “get up, leave, move on” is to ignore the simple reality that we’re social animals and structural discrimination harms everyone.
Thank you for your repeated posts on this point. At the very least, you got through my thick head. Hopefully, in the future, I can be a better person for it.
Damn. That means a lot to me you saying that. I sent a private message not long ago about your comments being interesting as usual on these discussions. More than usual with one comment about you getting beat up for talking white to presumably get ahead whereas I was learning early to talk or act black to attempt inclusion in my environment. It’s because some of what you wrote seems like you might have started in similar circumstances as me going in an opposite direction to find yourself with opposite views. Maybe a stretch to say two sides of same coin but that metaphor popped into my head at least. Then, we end up here in this moment on this forum. A trip, eh?
It’s why I fight for flexibility on these topics in these discussions in wherever places I can. It’s painful and costly but the moments I learn from or reach people are worth it to me. I think those moments are critical. Probably gotta get to sleep now as I intended to. I just had to respond to that comment. :)
Edit: Oh yeah, sleepy enough I forgot to say Good Night.
demonization of political groups (and to some extent, white men)
I’m a white man in tech and I can count the number of times I’ve been demonized on zero fingers.
demonization of political groups
The dominant political party in this country has in black and white in its party platform a desire to make same-sex marriage illegal (while simultaneously claiming “government overreach” is a bad thing). If hearing that we shouldn’t punish gay people just for being gay makes you uncomfortable, well…it’s supposed to.
(That same party has in its platform a denial of anthropogenic climate change, an existential threat to our civilization; the denial of which has zero scientific backing….but no, we can’t tell them that they’re wrong.)
More importantly, the stuff I’m talking about above is also banned. You can’t go to a conference and talk about how “Republicans are stupid”. You’d be asked to leave or at least tone it down.
The problem is that a lot of people hear “don’t be an asshole” and they think “man when I tell transgender folks they’re stupid and make jokes about gay people I get called an asshole (totally unjustifiably!) and I might get in trouble. Ugh, SJW’s!”
Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/
I’ve been on the Internet since around 1992. That’s only three years after the very first consumer ISP served its first customer.
Was there a large contingent of people who really did believe that? Absolutely, I mean, I was one of them. Were there plenty of racists, sexists, homophobes, and bigots of all stripes? Absolutely. Go look at old Usenet archives from the 80’s and 90’s. Racism, sexism, homophobia abound. There was a long diatribe against same-sex marriage on a Perl newsgroup for some damn reason around 1996; there were plenty of people who chimed in and agreed. Various big names in the early hacker community were famously bigoted (often hiding behind “libertarianism” while simultaneously claiming women and black folks are just inherently inferior and it’s “just science”).
The “good old days” are very often viewed through rose-colored glasses. People were people back then too, for all the good and the bad.
Remember when no one on the internet cared what you looked like, believed, or who you loved? I want to go back to that :/
This was never true. People on the internet have always cared about who you are in ways that factor these things in. The fact that the (largely white) nerd culture contingent who had a lot of influence on the early internet has decided to tell this utopian story does not make it any more true than stories your grandpa tells about respectful children and walking both ways uphill in the snow.
It’s less that “No one cared what you looked like” and more “Everyone assumed you were a white dude with roughly conformal beliefs, behaviors, and similar.”
Remember when no one on the internet cared what you looked like, believed, or who you loved?
And look where it got us. Toxic subcultures, huge gender inequality in the workplace, software products that simply don’t work for many groups people… The field was biased towards white male hackers from the very beginning, and “not caring” only increased this bias. No, I don’t want to go back to that, I want to fix it.
Updated:
Also, “no one one the Internet cared what you looked like” simply because they technically couldn’t: nicknames and plain text don’t divulge much. As soon as we got real names and YouTube it became obvious that the majority of people care very much about how you look like. So a young girl making a guitar cover or an Ubuntu installation walk-through mostly gets “you’re hot” and “nice boobs” comments.
People with privilege have been getting more and more outraged that the world is discriminating against them. They see it as unfair. Yes, it’s discrimination and that sucks. But it’s infuriating when they paint it as unfair, because that implies they’re somehow being disproportionately discriminated against, that the discrimination is unfairly balanced against them. And of course that’s nonsense. These privileged people, intentionally or not, feel they’re entitled to live free from any and all discrimination at the expense of those less privileged.
Remove yourself from the politics and think about a simple model instead of race, sex, gender, or orientation. Just group A and group B.
Members of group A develop a belief system that they are entitled to their 120 points. When some members of group B try to increase their points to 85, and that lowers the group A points to 119, the members of group A become angry. They say the members of group B are being unfair.
Group A believes that group B should not take any action that decreases their daily points. Group A compares their loss of 1 point to group B’s initial 40 point deficit, drawing a false equivalency. Some subset of A, group A’ deliberately take points from group B members around them to restore their original 120 points. Group A’ claims this is fair.
Group A’ bands together to institutionalize the 40 point difference. Some extreme members of group A’ even try to widen the 40 point difference. Group A’ comes to believe at an institutional level that the 40 point deficit either doesn’t exist, or is somehow natural and fair. Group A’ believes they hold the moral superiority by defending their 120 points.
Members of group B continue to try to elevate themselves, but A’ demands that all work done by group B must benefit group A’ equally. A’ considers this fair. Groups A and B focus on elevating group B rather than bickering with group A’ about whether 1 equals 40. Some members of both groups A and B institutionalize polite exclusion of group A’ just to simplify the whole thing, because they’re tired of bickering.
A vocal minority demonizes group A’ for their actions. Some members of group A find this demonization troubling. A larger and less vocal group of A and B think group A’ is a bunch of fucking douchebags, and start to actively exclude A’ rather than deal with their asinine bullshit. A surprising amount of group A wonders if this exclusion is fair or reasonable. Group B, and an increasing amount of group A, respond “are you fucking joking my ass what the actual fuck?”
If you’re a member of group A, please try to empathize with group B. Next time you feel discriminated against for your group A membership, take a step back and reflect on how you’re feeling in that moment. Try to imagine what it’s like to feel that way every single day of your life, at work, on the street, or in your own home through the media.
But it’s infuriating when they paint it as unfair, because that implies they’re somehow being disproportionately discriminated against
I think there is more to this implication than you’re letting on, because it makes assumptions about what “fairness” actually means from the person wielding the term. You’ve assumed one definition, but perhaps someone else has another in mind. As a nominal example, consider this implication in different ethical frameworks (say deontological or Kantian ethics versus utilitarian). Is it true in all of them? Alternatively, do you dismiss ethical frameworks in which it isn’t true as nonsense or intractable? Either way, those are important assumptions to state, because your entire comment appears to rest on them.
(I do wholeheartedly agree with your final paragraph, but try my best to perhaps apply it as much as possible, with a healthy dose of perspective taking on all sides. I don’t always succeed!)
I’m glad to see this trend of standing up against poltiical [sic] exclusion in Open Source.
Me too, I just wish more people would up and leave, instead of stick around and yell about “reverse discrimination” and such. I’m definitely coming at it from a selfish angle (and concern for my friends,) I’m just really tired of people who “disagree” with us existing, at best, and actively harass us at worst. The only way I can participate in open source is anonymously, which means it’s mostly uncredited work. It’s just not worth the toll it takes on my mental health. Of course, whenever possible, I contribute to projects/communities who show that they are aware of these issues, and are actively doing something about it.
Looking forward to the Incorrect, Off-topic, and Troll downvotes.
I think it’s a loss when someone who can write code leaves a OSS project. I also think that discrimination, which you refer to as “reverse discrimination” in certain contexts, is bad, end of story. I don’t want anyone to be discriminated against. “Contribute good code” is all I ask off people looking to work with me. Politics are boringly unproductive towards that goal.
I think it’s a loss when someone who can write code leaves a OSS project.
I don’t, if they keep other people away who can also write code. I honestly can’t understand what’s wrong with participating in this, unless you believe (actual) discrimination isn’t real.
I do believe actual discrimination is real but I think discriminatory internships aren’t the solution as they only lead to problems down the road. It’s great that outreachy is doing it and I believe they honestly think it’s the correct solution but I simply can’t agree on that.
You basically copy-pasted the article I wrote from http://2f30.org/guides/openbsd-httpd-cgit.html .
The referenced link in your post is wrong (typo 2c30 -> 2f30). Booo!
Here is the most up-to-date version (as linked from 2f30): https://codemadness.org/openbsd-httpd-and-cgit.html . It has some notes to make cgit tarball snapshots working.
A related article for git hosting: https://codemadness.org/setup-git-hosting.html
Edit: thanks hir0 for updating the article! It is totally fine now.
I will admit I used a lot of the advice on your blog post to help me set up my server. I’m sorry it came across so copy-pasted. I’ve added a section to the top of the post to make it very clear that this post wouldn’t exist without your work. Also, sorry about the typo, that’s fixed now.
Quickly comparing the two, the submission is actually less helpful than the parent comment’s article, which says what stuff to install. The submission leaves that exercise to the reader.
Just wanted to drop by to say thank you for writing that article. I’ve been running my own git server for a couple of months now.
Now I only have to find one for setting up an email server ^_^.
I agree that how we write GUIs could be improved. An alternative approach to writing GUI is CLIM. The gist of the CLIM is that interactions with application are structured around a command loop. They are recorded in an output record (which is a/like a stream). Some similarities with redux can be drawn. This article gives a short overview of how is CLIM is different: http://random-state.net/files/how-is-clim-different.html
As other lispers have already mentioned, the code in the article is not idiomatic. It is not common to use lists as product types. Nor is it common to use structs. It is common to use classes. It has been so for a long time. I’m wondering what code the author has read? The MIT AI code from the 90’s? And even there, there is not much code that uses lists how they suggest.
But worse, even if one wanted to use lists as a record, one can define ‘setf’able accessors and a constructor to improve legibility. And if the code is going to be more than 20 lines one would expect people to do so.
One can write unreadable code in any language.
Btw, regarding exploratory/prototyping, Classes in lisp can be redefined, and redefining them updates the classes of all the instances of that class that are in the running image. So little flexibility is gained by using lists instead of classes.
One can write unreadable code in any language.
I think that there’s an argument about difficulty to write unreadable code though.
For example, in Javascript, you end up working with dictionaries most of the time. Dictionaries have the advantage (compared to lists/tuples) of giving names to all the data within. It would be a bit surprising to see JS code using lists in the same way that Python uses tuples, for examples (Python tuples can take advantage of destructuring)
This is a bit trite, of course. There’s definitely messy JS.
If anything this discussion has made me more curious about what idiomatic lips (common lisp mainly) looks like. Lots of people seem to have seen it
I think that there’s an argument about difficulty to write unreadable code though.
Yes, though not in that article.
For example, in Javascript, you end up working with dictionaries most of the time. Dictionaries have the advantage (compared to lists/tuples) of giving names to all the data within.
In lisp we cover that space with alists as /u/jlarocco hinted at when they said It is common to use a cons as a pair (because that’s what a cons is). Alists are a list of pairs. Which, if you are writing out the items of the dictionary by hand, most likely performs better than a hash-table(good dev UX). But more importantly, one can decide at run-time which function to use to retrieve, among other things allows you to almost keep your alist sorted by MRU w/o allocating additional memory.
If anything this discussion has made me more curious about what idiomatic lips (common lisp mainly) looks like. Lots of people seem to have seen it
That is hard to come by because as /u/glutenfreebytes said the community is more like an archipelago, so everyone has their own variations (some people prefer to use structs a lot f/e). Also idiomatic lisp has some archaisms like the -p suffix convention instead of using ?. With that said, two lispers that write straight forward lisp code imho would be are ruricolist and orthecreedence. Check out the repos below
Coleslaw is a static site generate designed to be updated with git, it is also written in idiomatic Lisp.
And cl-6502, the project that brought me to Lisp is also fairly readable.
Thank you for this detailed reply! Seeing some of this code is really interesting. Lots of these projects feel like an alternate universe into computing, somehow.
I will look more deeply into this code later on, but even skimming in it has been valuable
I think it is very good that they are working on coming up to new solutions to avoid digital surveillance. But I remember reading that they already get the identity of logged out users using fingerprints like battery life. Using the techniques like the aforementioned one they could tie the two ‘browsing contexts’ together.
Still, glad that they are fighting the good fight.
This is very true. I would be interested to see how Panopticlick performs in a Firefox container tab. There’s a reason Tor Browser patches Firefox so heavily (but to be fair, that goodness is coming upstream!)
I think that the idea behind using Lodash is to avoid having to rewrite many functions. Yes, with the new ECMA standards you can actually write them in a neat way. But, it doesn’t mean that we should be reinventing the wheel every time.
Also, I replaced Lodash with Ramda a long time ago. Maybe because I came from Haskell and I really needed the base library functions.
ES6 features also allow to do away with the need to use a function altogether, for example omit is unnecessary in the presence of destructuring. They are even removing it from lodash in the upcoming version.
The code has been written presumably by something learning Common Lisp, so with that in mind I’ve taken the liberty written down some feedback and some style adjustments.