psi-slides · typefaces

The typefaces that ship with psi-slides

A lecture sets its text in three typefaces – a serif, a sans and a mono – and may give its cover and section dividers a fourth. Nine text faces and 32 display faces come with psi-slides, each drawn here the way a lecture draws it.

The faces a lecture uses are embedded into its views, so a deck sent by mail keeps its type, and naming one is a line in the frontmatter. The text faces come first, the display faces after them.

Nine faces for the text

Nine faces in three roles: five serifs, two sans faces and two monos. Literata, IBM Plex Sans and JetBrains Mono are the default and need no line in the frontmatter. A deck embeds one face per role, 279 KB in each view for the default three. Pick one per role to see the pairing on a slide and on a page of the handout.

Each one fills a role. On a slide the serif sets the heading and the prose, the mono sets code, and the sans sets the slide number and the labels in a figure; on the printed page the sans also sets the type word and the caption. During a talk, F switches the slide text between the deck’s serif, its sans and its mono, and Shift F back again – the three faces the deck already carries, in the projection and the speaker view at once. font: sans in the frontmatter says which of the three a lecture opens in.

Serif
Sans
Mono
Slide text · F
Show

In the frontmatter: nothing, the default three need no line · 279 KB of type in each view.

audience.html · the projection
7

A fast hash is the wrong place for a password

A graphics card tries a billion guesses per second against a fast hash.

So the password goes through bcrypt, which is slow on purpose.

import bcrypt
salt = bcrypt.gensalt(rounds=12)
digest = bcrypt.hashpw(pw, salt)
assert digest != pw  # -> keep only this
password 12 rounds digest
print.html · the handout
7

example

A fast hash is the wrong place for a password

A graphics card tries a billion guesses per second against a fast hash. Against a leaked list of short passwords that is an afternoon’s work, and a salt only keeps the attacker from reusing one table for every account.

So the password goes through bcrypt, which is slow on purpose: each step of its cost factor doubles the work, for the attacker on every guess as much as for the server once per login.

import bcrypt
salt = bcrypt.gensalt(rounds=12)
digest = bcrypt.hashpw(pw, salt)
assert digest != pw  # -> keep only this
password 12 rounds digest
The cost factor stands between the two.

Literata

Handgloves Handgloves Handgloves 0O Il1 äöüß

serif default 104 KB per view OFL-1.1

The default serif.

fonts: {serif: Literata}

Source Serif 4

Handgloves Handgloves Handgloves 0O Il1 äöüß

serif 100 KB per view OFL-1.1

Finer hairlines than Literata, and the bold sits closest to the regular of the five.

fonts: {serif: Source Serif 4}

Bitter

Handgloves Handgloves Handgloves 0O Il1 äöüß

serif 66 KB per view OFL-1.1

A slab with the lowest stroke contrast of the five, and the smallest file.

fonts: {serif: Bitter}

Noto Serif

Handgloves Handgloves Handgloves 0O Il1 äöüß

serif 83 KB per view OFL-1.1

The highest stroke contrast of the five.

fonts: {serif: Noto Serif}

Roboto Serif

Handgloves Handgloves Handgloves 0O Il1 äöüß

serif 136 KB per view OFL-1.1

8 % wider than Literata, so a finished deck re-wraps; the widest step from regular to bold.

fonts: {serif: Roboto Serif}

IBM Plex Sans

Handgloves Handgloves Handgloves 0O Il1 äöüß

sans default 94 KB per view OFL-1.1

The default sans. Figure label widths are measured against it.

fonts: {sans: IBM Plex Sans}

Inter Tight

Handgloves Handgloves Handgloves 0O Il1 äöüß

sans 91 KB per view OFL-1.1

The sans up to 1.0.0: condensed, narrower than Plex.

fonts: {sans: Inter Tight}

JetBrains Mono

Handgloves Handgloves Handgloves 0O Il1 äöüß

mono default 81 KB per view OFL-1.1

The default mono. Its code ligatures stay off unless the deck says ligatures: all.

fonts: {mono: JetBrains Mono}

Noto Sans Mono Condensed

Handgloves Handgloves 0O Il1 äöüß

mono 55 KB per view OFL-1.1

0.50 em a character where JetBrains Mono takes 0.60, so a long listing fits. Upright only.

fonts: {mono: Noto Sans Mono Condensed}

32 faces for a title slide

A cover, a closing slide and the section dividers are the one place in a lecture where a loud typeface is not a mistake. These are the faces that ship with the tool for that job, each one drawn into a real cover and a real divider, with the title you type into it.

fonts: {display: Anton} in the frontmatter is the whole of it, and it reaches those three slides and nothing else – an ordinary heading, a card lead, a figure label all keep the body type. What the role does is on the decoration page.

They come in three kinds: 6 hand, 8 machine and 18 graphic. Median 21 KB each, 824 KB for the whole set, but a deck embeds one of them: the figure on a card is what naming that face costs a lecture in every view.

Four numbers decide most of these, and they are on every card. The kind is the pairing rule: a display serif is drawn here over a sans body and a display sans over a serif body, because a display serif over the deck's own serif reads as one typeface set badly rather than as two – lint.js warns when a deck does the opposite. The percentage is that face's measured advance width against the body serif, emitted as a size-adjust descriptor: these faces disagree about width by a factor of three, and without it Press Start 2P simply ran off the slide. The KB is the payload. A no ß badge means the face has no eszett and a German title gets a fallback glyph mid-word; exactly one face here does.

Flavour
Slide
Look

Caveat

hand over either 139 % 73 KB OFL-1.1 wght 400 700

A ballpoint note. The one hand face with a weight axis, so a heading can be pressed harder than a subtitle.

fonts: {display: Caveat}

Shantell Sans

hand over either 88 % 77 KB OFL-1.1 wght 300 800

Marker-drawn but built as a text face: it holds a two-line title where the looser hands fall apart.

fonts: {display: Shantell Sans}

Caveat Brush

hand over either 134 % 66 KB OFL-1.1

The loud hand of the set – a brush pen at speed. One volume only, and the volume is high.

fonts: {display: Caveat Brush}

Patrick Hand

hand over either 133 % 23 KB OFL-1.1

The tidiest hand here – a neat person writing on a whiteboard, not a scrawl.

fonts: {display: Patrick Hand}

Kalam

hand over either 106 % 22 KB OFL-1.1

A brush-pen hand with real weight – the bold cut, because 400 is too thin to carry a divider.

fonts: {display: Kalam}

Amatic SC

hand over either 145 % 27 KB OFL-1.1

Very tall, very narrow capitals. Fits a long title where no other hand does, and is nearly weightless.

fonts: {display: Amatic SC}

Press Start 2P

machine over either 55 % 12 KB OFL-1.1

An arcade cabinet. Twice the width of anything else here – three words is a full line.

fonts: {display: Press Start 2P}

Silkscreen

machine over either 62 % 7 KB OFL-1.1

A finer pixel grid than Press Start, and it sets far shorter – the bitmap face a real title fits in.

fonts: {display: Silkscreen}

Pixelify Sans

machine over a serif 96 % 12 KB OFL-1.1 wght 400 700

Pixels with a weight axis, and proportional rather than gridded. The readable end of the pixel idea.

fonts: {display: Pixelify Sans}

VT323

machine over either 119 % 18 KB OFL-1.1

A DEC VT320 terminal, phosphor and all. Pairs with the terminal-amber and terminal-green themes.

fonts: {display: VT323}

Space Mono

machine over either 78 % 16 KB OFL-1.1

A monospace with an attitude – the bold cut is a display face rather than a code face.

fonts: {display: Space Mono}

Rubik Mono One

machine over either 56 % 12 KB OFL-1.1

A monospace at poster weight, and the one face here with NO ß – a German title gets a fallback glyph mid-word. Lowercase draws as capitals.

fonts: {display: Rubik Mono One}

Chakra Petch

machine over a serif 101 % 10 KB OFL-1.1

Cut corners and squared bowls: technical without being a terminal. Sets tighter than any mono here.

fonts: {display: Chakra Petch}

Orbitron

machine over a serif 87 % 12 KB OFL-1.1 wght 400 900

Geometric and square – the one that reads as a machine rather than as a computer.

fonts: {display: Orbitron}

Bodoni Moda

graphic over a sans 92 % 25 KB OFL-1.1 wght 400 900

A true didone with a weight axis: a hairline eyebrow over a black headline out of one family.

fonts: {display: Bodoni Moda}

Prata

graphic over a sans 100 % 19 KB OFL-1.1

A quiet didone – the restrained answer where Bodoni is the theatrical one.

fonts: {display: Prata}

DM Serif Display

graphic over a sans 108 % 24 KB OFL-1.1

The dependable display serif: high contrast, tight fit, no mannerisms. Start here if unsure.

fonts: {display: DM Serif Display}

Abril Fatface

graphic over a sans 103 % 13 KB OFL-1.1

A fat didone: hairlines against very thick stems. Handsome on paper; watch the hairlines on a weak lamp.

fonts: {display: Abril Fatface}

Alfa Slab One

graphic over a sans 89 % 19 KB OFL-1.1

A heavy slab serif – a fairground poster. Reads at the back of any room.

fonts: {display: Alfa Slab One}

Young Serif

graphic over a sans 95 % 26 KB OFL-1.1

Chunky, low-contrast, slightly odd. The warm one, and the one that survives a bad projector best.

fonts: {display: Young Serif}

Instrument Serif

graphic over a sans 142 % 21 KB OFL-1.1

Tall, narrow, editorial. The quietest of the graphic set – a magazine opener, not a poster.

fonts: {display: Instrument Serif}

Yeseva One

graphic over a sans 93 % 17 KB OFL-1.1

Art-nouveau flare in the terminals. Decorative in a way none of the others are; use it or do not.

fonts: {display: Yeseva One}

Anton

graphic over a serif 120 % 18 KB OFL-1.1

Condensed, black, no alternatives. Three words fill a slide and that is the point.

fonts: {display: Anton}

Oswald

graphic over a serif 116 % 28 KB OFL-1.1 wght 200 700

Anton with a weight axis and better manners. The condensed face to reach for when the title is long.

fonts: {display: Oswald}

Archivo Black

graphic over a serif 87 % 18 KB OFL-1.1

A grotesque at maximum weight, not condensed. The least mannered way to be loud.

fonts: {display: Archivo Black}

Bebas Neue

graphic over a serif 142 % 13 KB OFL-1.1

Capitals only – lowercase draws as capitals. Tracking is doing half the work; give it some.

fonts: {display: Bebas Neue}

Big Shoulders Display

graphic over a serif 122 % 35 KB OFL-1.1 wght 100 900

Very tall and very narrow, with a full weight axis. The most title you can fit on one line.

fonts: {display: Big Shoulders Display}

Syne

graphic over a serif 61 % 34 KB OFL-1.1 wght 400 800

Art-school display: the heavy weights widen rather than thicken. Distinctive to the point of being a signature.

fonts: {display: Syne}

Bricolage Grotesque

graphic over a serif 97 % 40 KB OFL-1.1 wght 200 800

A grotesque with deliberate irregularities. Reads contemporary-editorial rather than loud.

fonts: {display: Bricolage Grotesque}

Space Grotesk

graphic over a serif 99 % 22 KB OFL-1.1 wght 300 700

The technical sans that is not a monospace – the quiet option for a computing lecture.

fonts: {display: Space Grotesk}

Unbounded

graphic over a serif 73 % 50 KB OFL-1.1 wght 200 900

Wide geometric display. Deliberately overbearing, and the closest thing here to a brand face.

fonts: {display: Unbounded}

Staatliches

graphic over a serif 128 % 16 KB OFL-1.1

Condensed capitals with a poster-stencil feel. Bebas with more character and less polish.

fonts: {display: Staatliches}

Every face here is embedded the way the build embeds it, so nothing on this page is fetched from anywhere else – which is also what a lecture naming one of them ships. The decoration page shows what the role does to a deck, and Getting started is the two ways to have one. The faces are all under the SIL Open Font License, and the build emits that licence text beside them into every view.