Regarding how computers work under the hood, i can recommend Nand2Tetris.
494 karma · joined September 6, 2022
Regarding how computers work under the hood, i can recommend Nand2Tetris.
Yes, it has an info manual and, I agree, info is the superior documentation viewer. However, a good browser is no replacement for bad writing.
The Guile manual is not well written. The organization seems almost random. The text emphasizes minutia while glossing over fundamental details. It off-loads much to RnRSs and SFRIs (whatever those are). Basically, it suffers badly from The Curse of Expertise.
The documentation's shortcomings might be okay except that Guile is, or was, the premier extension language for the whole of the GNU project.
I considered trying to improve the manual, but why would I dedicate time and effort to a language that I don't know and whose community can't follow it's own advice?
Consider the following:
"Make sure your manual is clear to a reader who knows nothing about the topic and reads it straight through. This means covering basic topics at the beginning, and advanced topics only later. This also means defining every specialized term when it is first used." https://www.gnu.org/prep/standards/html_node/GNU-Manuals.htm...
Most of these points: https://www.fsf.org/campaigns/gnu-press/GNU-Press-styleguide...
Maybe at FOSDEM this year, people could do a Hackathon and knock out some basics, like defining acronyms or using terms only after they're defined.
PS: every Python tarball for quite a while has instructions for building the documentation, including in info format
Is it some Viktor Frankl level acceptance or should I buy a copy of the Art of Electronics or what?
Advice welcome.
It just says "decades of neglect". It gives little vignettes of bad experiences and a quote from a French person saying the French would revolt.
Any actual explanation?
I speak specifically of the UI. Obviously the underlying system works. Yet it's totally within reason that the UI has wasted trillions of money and many person years in lost productivity.
Napkin math. It's easy to waste 30 minutes figuring out what the heck is going on after a command didn't work, or explaining what a detached head is to a newbie, or any number of completely avoidable issues were the UI better.
Consider the 26.9 million developers in North America[1]. How does one estimate the average salary across NA? Some in SV make 3x that. Elsewhere, it's conceivable that people make considerably less. Let's just say 100k. That's 100,000÷52÷40=48/hr or 24 per half hour. Anyone with git, I think it's safe to say, has had at least one stupid issue that took 30 minutes because of the UI. That's 26.9×24=645,600,000 monies.
In my experience and what I've seen of anyone who'a used git, 30 minutes is a gross underestimate. And people use git outside of NA. It's easily trillions in waste.
https://en.wikipedia.org/wiki/Software_engineering_demograph...
Would writing a CHIP-8 emulator be such a project? It seems non-trivial, yet not too big, the kind of thing that if you implemented it once, implementing it again in another language would be much faster (apart from the language learning).
I don't know who first uses the asbestos analogy, but it's 1000% on point.
I think Cory Doctrow says it best,
"AI is the asbestos we're shoveling into the walls of our society — and our descendants will be digging it out for generations."
I believe that's exactly the language to combat AI hype.
If you do want Termux, a signed and compatible version is provided by the Emacs devs. It should all be in the README (at least it always has been, through various updates, since I started using the Emacs on Android before it was merged into the main branch).
This reads as a testament to how far the Emacs GUI has progressed!
(global-set-key (kbd "<volume-down>") 'fill-paragraph)
You can use the usual C-h k <key> to see what Emacs calls the key.There are several developer oriented keyboards. I found the Unexpected Keyboard quite good.
This is my Unexpected layout:
<?xml version="1.0" encoding="utf-8"?>
<keyboard bottom_row="false" name="Emacs-rev1" script="latin">
<row>
<key c="q" sw="1" nw="loc esc"/>
<key c="w" sw="2" nw="~" ne="\@"/>
<key c="e" sw="3" nw="!" ne="\#" se="loc €"/>
<key c="r" sw="4" ne="$"/>
<key c="t" sw="5" ne="%"/>
<key c="y" sw="6" ne="^"/>
<key c="u" sw="7" ne="&"/>
<key c="i" sw="8" ne="\*"/>
<key c="o" sw="9" ne="("/>
<key c="p" sw="0" ne=")"/>
</row>
<row>
<key shift="0.4" c="a" nw="loc tab" ne="`"/>
<key c="s" ne="loc §" sw="loc ß"/>
<key c="d"/>
<key c="f"/>
<key c="g" ne="-" sw="_"/>
<key c="h" ne="=" sw="+"/>
<key c="j" ne="}" nw="{"/>
<key c="k" nw="[" ne="]"/>
<key c="l" nw="|" ne="\\"/>
</row>
<row>
<key width="1.5" c="shift" ne="loc capslock"/>
<key c="z"/>
<key c="x" ne="loc †"/>
<key c="c" sw="<" ne="."/>
<key c="v" sw=">" ne=","/>
<key c="b" sw="\?" ne="/"/>
<key c="n" sw=":" ne=";"/>
<key c="m" ne=""" nw="'"/>
<key width="1.5" c="backspace" ne="delete"/>
</row>
<row height="0.95">
<key width="1.7" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key3="loc switch_clipboard" key4="switch_numeric"/>
<key width="1.7" key0="alt" key1="loc change_method" key2="fn" key3="switch_emoji" key4="config"/>
<key width="3.5" key0="space" key7="loc home" key8="loc end"/>
<key width="1.6" key0="loc compose" key7="up" key6="right" key5="left" key8="down" key1="loc page_up" key3="loc page_down"/>
<key width="1.5" key0="enter" key1="loc voice_typing" key2="action"/>
</row>
</keyboard>The Unexpected Keyboard is a great addition, but even with the stock Android keyboard, it's totally usable. Of course, it helps to add things to menus and remap the volume keys.
You can add buttons to the toolbar with something like:
(tool-bar-add-item "spell"
'eval-last-sexp
'eval-last-sexp
:help "Eval last sexp")
(tool-bar-add-item "back-arrow"
'xref-pop-marker-stack
'xref-pop-marker-stack
:help "Previous Definition")
(tool-bar-add-item "fwd-arrow"
'xref-find-definitions
'xref-find-definitions
:help "Find Definitions")
There are many icons bundled with Emacs that you can reuse: https://cgit.git.savannah.gnu.org/cgit/emacs.git/tree/etc/im...You can remove toolbar buttons:
(tool-bar-add-item-from-menu 'find-file "")
Otherwise, you can add to menus: (define-key global-map
[menu-bar edit expand]
'("Expand word" . dabbrev-expand))
Remapping the volume keys is super handy, especially when you change the behavior by mode or buffer: (global-set-key (kbd "<volume-down>") 'fill-paragraph)
(global-set-key (kbd "<volume-up>") 'my-runner)
(defun my-runner ()
(interactive)
(cond ((equal major-mode 'org-mode)
(call-interactively (local-key-binding (kbd "C-c C-c"))))
((equal major-mode 'emacs-lisp-mode)
(save-buffer)
(call-interactively 'eval-defun))
((string= (my-get-file-name)
"/data/data/org.gnu.emacs/files/.emacs.d/my_python_file.py")
(save-buffer)
(with-current-buffer (shell "*shell*")
(my-send-string
"python /data/data/org.gnu.emacs/files/.emacs.d/my_python_file.py"
t
"*shell*")
))
(t
(message "Undefined action"))
))
Redefining the fill column is handy to set appropriate text wrapping:C-x f runs the command set-fill-column
Otherwise, the menu for Lime Wrapping in this buffer is super helpful.
I set my init to load up Dired so that I'm met with my project directory and am ready to go.
It's hard for me to think of another editor having my back like Emacs has. Again, amazing work by the community!
The only others who compare are his contemporaries, Steve McConnell, Timothy Lister, Tom DeMarco, and Barry Boehm.
Unfortunately, they're all basically retired. It feels like this kind of interest in software development, at least the publishing, ended around the mid-2000s.
My guess is the shift to blogs from books, adoption of Agile (in whatever form), and a shift in industry focus to getting rich rather than getting good ended the efforts to come up with resources like Glass put together.
Understandably, some people complain that it shouldn't need a tutorial or the defaults are bad. There's validity to that angle. There's also validity to Emacs pre-dating GUIs, the IBM keyboard, and the x86 instruction set. Once you get past the history of windows and killing, you can explore. The history is also super interesting!
https://www.emacswiki.org/emacs?EmacsHistory
https://dl.acm.org/doi/abs/10.1145/3386324
After you've read the tutorial, go wild. Try stuff out. Break things. Fix them. Learn your limits. Learn that there are very few limits imposed by Emacs itself.
Hands down, the best resource for Emacs is Emacs itself. Especially, the Emacs manual and the Elisp manual. The "An Introduction to Programming in Emacs Lisp" is also excellent if you're not familiar with Lisp. Learn to read Info files and learn the help system (basically C-h f and C-h v)
https://www.gnu.org/software/emacs/manual/
Emacs really is a flagship of Freedom, with all its pain and glory. It lets you exist at the threshold of your zone of proximal development. Every bit you put into Emacs, you get a return on investment.
Welcome to the Emacs community! It's full of weirdos and wizards, as well as regular folk. Stick around and I'm sure you'll make friends in no time.
Democratic governments clearly are about addressing community needs and coordinating efforts that require pooled resources (at least). I'm not denying there may be a monopoly on violence. However, in a democratic system, such a monopoly would be voted on, giving the monopoly some legitimacy (not saying it's necessarily moral).
Yet in reality, the US, for example, has the Second Amendment, which grants citizens the right to bear arms and form militias. That doesn't sound like the government has a monopoly on violence.
I guess the weasel word is "legitimate"? But is that legal or moral legitimacy (or something else)? By whose definition and arrived at how?
It feels like such a pithy comment, "a monopoly on legitimate violence", like it's expressing something deep. Yet I get the sense that supporting it requires some contortion of logic and language. Maybe I'm missing something but it doesn't seem self-evident to me at all.
What do you mean by this? One can look at Emacs itself as a crusty event loop with some slightly annoying behavior. But seriously, I am curious what you mean.
You may already know (and others may not):
- `M-x toggle-debug-on-error` throws you into the debugger on any error (note this isn't "visual" the edebugger!). Use C-h m to see the navigation commands/keys
- Use (debug) to set a breakpoint in Lisp code
- depending on the circumstances, the edebugger may be more helpful. I always instrument the function to debug with `C-u C-M-x` from within the function's form and use `C-M-x` to interpret it (sorry, I forget the underlying commands)
Of course, there's great documentation for both the debugger and edebugger.
Like, as a user downloading packages, or a person packaging an application?
As a user downloading a package, it's been super easy for me and it's been years of running Guix with little to no issue (yet the benefits of rolling release, rollbacks, installing multiple versions of a given software etc.).
As for using it to package an application, I found the challenges mainly in the documentation. This was years ago and a lot of work has gone into improving the docs.
I'm curious what your experience has been.