Avatar

Ramin Honary

Ramin_HAL9001@lemmy.ml
Joined
7 posts • 64 comments

Software engineer, functional programming enthusiast.

Direct message

I can explain the difference between X11 and Xorg with an analogy to the web and web browsers: X11 is like HTTP, Xorg is like the Chrome browser. X11 is the protocol, Xorg is software that implements that protocol.

X11 is old, it was designed back in the 1980s and includes messages for drawing lines and circles and fonts on the screen. Also, back then there were a lot of “thin clients”, computers that were basically nothing but a browser, since graphics were computationally expensive and could not be done on the client computer, graphics rendering was done server side. There are lots of messages in the protocol for handling screen updates over a computer network.

Nowadays, all personal computers are powerful enough to render their own graphics, and no one needs the display server to draw individual lines or circles on screen. Vector graphics and fonts are done at the application level, not over the network. So these these messages specified in the X11 protocol are hardly ever used. Really, most of X11 (let’s say 90% of it) is not used at all, only the parts where the keyboard and mouse are defined, and how you can allocate memory to buffer a graphic and copy that buffer to the display. But you still need to maintain the Xorg software to handle everything that X11 specifies, and this is just a waste of code, and a waste of time for the code maintainers.

So basically, they decided about 10-15 years ago that since no one uses most of X11, let’s just define a new protocol (called Wayland) that only has the parts of X11 that everyone still uses, and get rid of the 90% of it that no one ever uses. Also, the protocol design takes into account the fact that most modern computers do all of their own rendering rather than calling out to a server to render for them. Also the Wayland protocol design takes into account that a lot of computers have graphics cards for accelerated graphics rendering.

Since the Wayland protocol is much simpler, it is easier for anyone to write their own software which implements the protocol, these software are called “compositors.” Finally, 10 years after some of the first implementations of Wayland, the protocol and compositors are becoming mature enough that they can be used in ordinary consumer PCs.

permalink
report
reply
2 points

Those were the days.

permalink
report
reply

Emacs.

Emacs is an app platform in and of itself, and the vanilla installation comes with dozens of its own apps pre-installed. Like how web apps are all programmed in JavaScript, Emacs apps are all programmed in Lisp. All Emacs apps are scriptable and composable in Lisp. Unlike on the web, Emacs encourages you to script your apps to automate things yourself.

Emacs apps are all text based, so they all work equally well in both the GUI and the terminal.

Emacs comes with the following apps pre-installed:

  • a text editor for both prose and computer code
  • note taking and organizer called Org-mode (sort of like Obsidian, or Logseq)
  • a file browser and batch file renamer called Dired
  • a CLI console and terminal emulator
  • a terminal multiplexer (sort-of like “Tmux”)
  • a process manager (sort-of like “Htop”)
  • a simple HTML-only web browser
  • man-page and info page browser
  • a wrapper around the Grep and Find CLI tools
  • a wrapper around SSH called “Tramp”
  • e-mail client
  • IRC client
  • revion control system, including a Git porcelain called “Magit”
  • a “diff” tool
  • ASCII art drawing program
  • keystroke recorder and playback

Some apps that I install into Emacs include:

  • “Mastodon.el” Mastodon client
  • “Elfeed” RSS feed reader
  • “consult” app launcher (sort-of like “Dmenu”)
permalink
report
reply

I used to like that guy. But the “New Atheist” movement turned out to just be a bunch of reactionary atheist neoliberal YouTubers who were sick of reactionary Christian fascists hogging all the political power for themselves.

permalink
report
reply

I wrote a few articles on my blog for people in your situation, who are mostly only familiar with Windows and/or Mac and want to learn Linux more in depth.

“Advice for people who want to learn linux” – This article is kind of an overview of the Linux learning process. The point of this article is to teach you what it is you need to learn about so that you set your own curriculum. Once you understand what a few of the basic things are, you can look up your own tutorials on how to learn each thing.

“How to pick a Linux distro” – This article is for people who are overwhelmed by the number of choices for Linux distro. The bottom line is: don’t over-think it, just pick a mainstream distro like Mint, Ubuntu, or Fedora. There is like a 99.99% chance that each of these will just work as soon as you install it, no weird issues with audio, graphics, WiFi, BlueTooth, security updates, or anything else. Also, a lot of the “choices” you see among all those distros are only skin deep – differences in the default theming (i.e. the default “desktop environment”, a concept explained in the “advice” article above). But really they are all using the same basic software packages so there very little substantive difference between any of them except in their app stores, and the mechanism they each use install software.

If you have any questions, feel free to ask me here. I can clarify here, and also update my blog posts if you think anything is confusing.

permalink
report
reply

As many here have said, but I will emphasize: learn the Bash programming language. Linux Survival is a very good start, and you can just start experimenting right away in your own terminal on your own computer.

To go more in depth, you can read through the manual on your computer by typing “info bash”. The Info documentation browser is a command line app. You may need to install it using your package manager (“apt-get” or “pacman” or “dnf”).

In the “info” app, you can navigate with the arrow keys, pressing enter on hyperlinks, typing l (lowercase “L”) works like the “back” button in a web browser, typing r (lowercase “R”) works like the “forward” button. Info also lets you search the index by pressing i (lowercase “I”) then entering your search in the prompt, or search the full text by pressing s and entering your search in the prompt. And q quits back to the command line prompt. “Ctrl-Z” pauses the “Info” app and drops you back into the command line, and you can resume your “info” session using the “%” (percent sign) command.

Another thing that can help is to learn about the GNU “Coreutils”, this is a suite of commands usually installed into /usr/bin or /bin which provides helpful command line utilities. These are commands like cat, wc, sort, cut, ls, du, cp, ln, chmod and many others. Read through the Coreutils Info manual by typing “info coreutils”.

And I will also reiterate recommendations from others: learn how to use Vim and/or Emacs. Vim has the more difficult learning curve but is extremely useful for writing scripts. Emacs is better though because it lets you split-screen with manual pages, and copy-paste commands between Man pages, “Infodoc” documents, the shell, and/or a text file, all using only keyboard commands. I think it makes it much easier to learn since everything is integrated together. Ask the Emacs community how to get started if you are interested.

permalink
report
reply

It’s a i3-6006U with just 4.0GiB of RAM.

Emacs is considerably more lightweight than a modern Web browser, or any app based on Electron.js (e.g. VSCode) so a computer with those specs is more than powerful enough to run Emacs. If you use version 29.1 or later, Emacs comes with “libgccgit” which will spend a little time pre-compiling Emacs code to very fast native code.

Emacs used to have a reputation for being slow back in the early 1990s when 32 bit personal computers were just beginning to gain popularity. But nowadays when everyone downloads FlatPak and AppImage and Snap apps which install many hundreds of megabytes of code, Emacs is relatively small and light.

Also, Guile Emacs and Guilemacs are two different projects, right? Because I also happen to come across this, and I’ve been interested in this project as well.

The whole history of Guile and Emacs is here on the Emacs Wiki.

So there are a few projects related to Guile and Emacs. The link you provided me by Ken Raeburn is a fork of older versions of both Guile and Emacs, it seems it has not been worked on in about 20 years, unfortunately.

The project by Robin Templeton is also a little bit out of date, but still somewhat actively developed. You must build it from source from a patched version of (I think?) Emacs 26 or 27, I am not sure which it was. It works by loading libguile (the Guile interpreter/compiler) into Emacs so you can run Scheme code, and it also provides Scheme “foreign function” wrappers to the Emacs C APIs so you can do everything Emacs Lisp does in Scheme by importing the elisp-functions Scheme module. (There is an example of how to use it on the Emacs Wiki.)

I did hear Robin say in a recent Spritely chat that it could be made to work on Emacs 29 with not too much effort, they just haven’t had time to do it.

If you are interested in Scheme, you might also want to check out the Edwin text editor which is built-in to the MIT/GNU Scheme compiler, you launch it from the Scheme REPL with the (edit) function. It is a clone of Emacs 19 (a very old Emacs) written entirely in Scheme, but unfortunately it is a little too old to be useful nowadays, in my opinion. Still, you could learn something by reading the Edwin source code.

Finally there is TeXmacs, which is a full WYSIWYG application with a built-in LaTeX rendering engine designed for writing scientific papers, and it includes the Guile Scheme compiler for writing extensions, although I would not call TeXmacs a general purpose programming text editor the way Emacs is.

permalink
report
parent
reply

Steps are being made toward Guile Emacs integration. The work is mostly being done by Robin Templeton, who (last I heard) works at the Spritely Institute. And as I understand, there are other people pushing on the Guile in Emacs front as well, so you may not have to wait long.

Have you considered trying to setup Kakoune bindings in Emacs? For example like this: https://github.com/jmorag/kakoune.el

permalink
report
parent
reply

That looks like artwork from The Lispy Gopher Show. I love it!

EDIT: yep, artwork by Tomas Prahou a.k.a. @pmjv@lemmy.sdf.org .

permalink
report
reply