Reviews

Published: 2020-12-31
Updated: 2021-04-10
Status: perpetually in-progress

The Elephant in the Brain

(Book written by Robin Hanson and Kevin Simler. Published in 2018.)

This book is excellent. I do not give compliments like that out frivolously, and The Elephant in the Brain deserves it.

It's a rare book that teaches me so much. Especially when the things it teaches are so fundamental. There are parts that are confusing for me, or I think might be mistaken, but the gestalt is a fantastic exploration of its subject mater.

What is this book about? Signaling, self deception, regular deception, evolutionary psychology, and so on.

It's divided into two parts. Part 1 talks about the thesis of the book, part 2 gives examples of where the theses can be used to explain something previously confusing.

The book explains itself far better than I can summarize here. Go read it! It has changed quite a bit about how I few the world, and even more about how I think about politics and how people communicate with each other.

Unix Text Processing

(This section is a work in progress)

Im interested in roff/troff/groff, old computer software, and typography. I found this: https://github.com/larrykollar/Unix-Text-Processing and I'm excited to read it.

These are going to mostly be notes I take while reading instead of a post-hoc review. I'm doing it this way because I want to take notes on groff and typesetting while I'm reading and I thought this would be the best way to do it.

This book was released in 1987. Damn.

So I've already read section 1 and it was interesting, but I'm not so sure that I I should read the chapters about how unix and vi work. I mean, I already know how they work pretty well. In fact I've already skipped those chapters. Suck it.

Really interesting to see that WYSIWYG was an acronym used in 1987. I thought that was a newer term.

I'm interesting in typography, so learning how words are spaced on a line to make things line up is really cool. I feel like I'm learning new things. Which makes sense, considering that I'm learning new things.

Ragged right.

Times Roman. Not, say, Times New Roman.

Oh man talking about old fasshoned printing. Sad thing is that it probably worked better than modern printing.

Using zathura to read it now instead of firefox.

Tried to navigate to /usr/lib/font and nothing was there on my linux system.

Wheels with characters on them. The ways that people did things were crazy. So creative.

This old history is facinating. Like the book was written in a time of great change when things were starting to become crazy different in the field of computer science. And they were! You can practically feel the tension between wanting to get things done and wanting to progress the tech.

(I'm on section 4 by the way)

Wow yeah. No /usr/lib/font over here guys.

And I'm going groff, not ditroff or whatever.

So "driver" and "postprocessor" mean the same thing in roff land?

Let me just make sure I'm not connected to a C/A/T typesetter. Don't want to accidentally cause it to typeset something.

In an alternate universe we use the evolution of XEROX's Interpress instead of Post Script.

The \(bu bullet point thing doesn't seem to work...

I'm sure we're going to go over that massive table of things, right? RIGHT?

.ce centers line.

.br is a line break, and you can use .nf to turn off filling and .fi to turn it back on.

"filling" turns off/on the text joining of the input. Almost like a code block. .br turns off filling for the line. Straight up line break yo.

Note to self: learn the macro packages and whatnot, but focus on the lower level "requests". That's where the real typographic control that you crave lays.

So you need to do something that introduces a line break to interrupt the line buffer thing. Hard to explain, but I guess it makes sense?

Use a backslash \ before a space to make it unpaddable.

Oh my god zathura best software. It updates automatically when the pdf it's pointing at changes. HNNNNNGG.

Alright. Hyphenation. Use .hw hy-phen-at-ed to tell it to hyphenate words at certain places. Or use hy\%phen\%at\%ed for inline escaped of a specific instance. Disable hyphenation with .nh and turn it back on with .hy (.hy has some extra options too).

Oh! That's why we use "points" to measure how large a font is. A pica is 12 points. And a pica is about 1/6th an inch. I wonder how that translates to a PDF document? I guess PDF's have some sort of consistent "inch" that doesn't actually have to mean an inch of screen space.

And an "em" is the size of an "m" in the current typeface. Jesus it's all starting to make sense now.

Default for verticle measures is "lines", while the default for horizontal is ems.

"An en is always half the size of an em"

Apperently an em is always the same size as the points of the font. So a 12 point font always has a 12 point em. Which doesn't seem to match up, since an m can be any size the typesetter wants, right? I'll take their word for it here, but I'm confused.

Number suffixes: c = centimerter, i = inch, m = em, n = en, p (lower case) = point, P = pica, u = device units, v = vertical spaces (lines), none = default.

Aaand of course the units are weird in arethemitic. Just like interger promotion in C! Yay! Software!

Relative value like .ll -.5i.

Indents lol.

I love how this thing just assumes that you've used a typewriter before. Meanwhile I'm over here in 2021 never having used a typewriter in my life.

Oh no tabs. Okay they're not so bad. Just telling where tabs to line up.

Lovely. .ul and .cl do "underlines" which in troff land mean italics. Why does it do it like this? Who knows! I think it has something to do with the way fonts work, at least in the default troff from 1987, which has carried over into 2021 because backwards compatibility reasons.

To do actual underlining you're going to have to look all the way in chapter 15, because the mechanism is more complex than you first expect. Great.

Okay. Now we're getting into the good shit. I can use .sp to do nasty shit to the formatting. Like make it an absolute height from the page with .sp |x or relative to the current line with .sp -x. Mixed with the .in command, you get the ability to basically position text wherever the hell you want.

This is it. This is the power I was searching for. I'm going to use this so fucking irresponsibly.

(Make sure to go back and check the .wh request when I know more about how to make macros. Basically it's used for doing header/footer things automatically on page transitions)

This book is very long. It's going to take forever to go through, isn't it? Especially like this. Maybe it would be best to take less notes at every paragraph.

.pl for page length.

'bp is a page break that doesn't do a line break, so that text filling still works.

.ne used for conditional page breaks, which are more useful when trying to reserve at least some space for an illistration or something. Also check out .sv and .os.

.pn x to change page number, can use .bp x to break and change number, and there's command line options to start page numbers at a specific number.

Fonts. '.ft Iand.ft Bto italic/bold and.ft Rto go back to roman text. Can do inline with\flikeThis is \fIinline italics\fP(make sure to end with\fP` to be more general.

I found the font directory in /usr/share/groff/1.22.4/font. I guess they need a version number of something. Whatever. At least it was written in the groff man page.

I guess all those files are for different output devices. Different devices have different fonts that are available for use. Makes sense.

Changing fonts in the middle of sentences makes me feel like a wizard. .ft H to go to helvetica lololo.

When using a multi-char font name like HB inline you need to write it as \f(HB.

You of course have the CW, or "constant width" font as well. Mixed with .nf you can have code blocks. I even mixed it with .ne so that the code block would fit on the page.

And you have special characters, which start with \(. For some reason \(bu is working for me now.

.ps x to change point size (font size). Use \s for inline, like This is \s5small\s0 text.

.ls for line spacing. .vs for vertical space between font sizes.

And now macros. You can make macros like:

.de P
.sp
.ne 2
.ti 5n
..

Where .de starts the macro and .. ends it. (.ti is a temporary indent for the next line.

Set registers using the .nr command. Like .nr HM 1.75i will set the HM register to 1.75i You can also do it from the command line: groff -mm -rN1 Not in the same namespace as macros.

Predefine strings with the .ds request. Like .ds t tim is the best will define string "t". Use them like \*t for single letter or \*(t for longer. Share the same namespace as macros.

Use the .so file/path/to/macro.tmac to include a macro file.

The ms macros

Yeah we're doing new sections now. This is gonna get long.

So macros made from smaller base requests. Simple enough.

(note: use man groff_ms for complete reference. This is just going to list some cool ideas and whatnot. Basically a reminder of what was in it and less a reference.)

Again using .nr for setting registers for page margins.

Reset macro .RT.

Quoted paragraphs.

Item lists! Aquward syntax, but whatevs.

Relative indents .RS and .RE.