Skip to content

Instantly share code, notes, and snippets.

@frankrolf
Last active February 6, 2026 15:15
Show Gist options
  • Select an option

  • Save frankrolf/e4ec3e9deb9d32c55717aae2d0fa440b to your computer and use it in GitHub Desktop.

Select an option

Save frankrolf/e4ec3e9deb9d32c55717aae2d0fa440b to your computer and use it in GitHub Desktop.
FDK notes and commands KABK 2026

Unicode

Unicode Checker https://earthlingsoft.net

hexadecimal numbers

counting in hex, decimal, and binary:
counter

Andy Clymer’s explanation of Hexadecimal numbers: http://andyclymer.com/cooper/hexadecimal.html

OpenType features

What goes into a feature file?

https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html

example GSUB feature file (SS4):

https://github.com/adobe-fonts/source-serif/blob/main/Roman/familyGSUB.fea

language tags:

https://learn.microsoft.com/en-us/typography/opentype/spec/languagetags

OpenType Cookbook

https://opentypecookbook.com

mark feature ins & outs

https://github.com/adobe-fonts/source-serif/blob/main/Roman/familyGSUB.fea#L599-L612 https://github.com/adobe-type-tools/mark-feature-helper-rf-ext

Font proofing

other stuff

editable install of git repo

git clone git@github.com:adobe-type-tools/drawBotProofing.git
cd drawBotProofing
pip install -e .

make your own keyboard layouts

https://software.sil.org/ukelele/

alphabets

абвгдежзийклмнопрстуфхцчшщъыьэюя
αβγδεζηθικλμνξοπρστυφχψως
abcdefghijklmnopqrstuvwxyz

for-loops in the Terminal

# NB: this only works for files _without spaces_!
for f in $(find . -name "*.ufo");
do afdko makeotf -r -f $f;
done
# this does work for files with spaces
find . -name "*.ufo" | while read f; do afdko makeotf -r -f $f; done 

grep pattern tester

https://regex101.com/r/0Fajyz/1

replace the hash symbol while using the banner command

banner hallo | sed 's/#/X/g'

install Apple’s command line developer tools

xcode-select --install

install pyenv via curl

curl -fsSL https://pyenv.run | bash
brew install readline xz

find a font’s bounds in RF

f = CurrentFont()
max_bounds = f.bounds
print(max_bounds)

# not needed, just for fon
for i, value in enumerate(max_bounds):
    print(value)
    for g in f:
        # extreme glyphs
        if g.bounds and g.bounds[i] == max_bounds[i]:
            print(g.name)
    print()
import drawBot as db
DIGITS = 8
FONTSIZE = 100
WIDTH = DIGITS * (700 / 1100) * FONTSIZE
if not WIDTH % 2 == 0:
# Exporting to mp4 doesn't support odd pixel dimensions for width and height.
WIDTH += 1
for i in range(256):
db.newPage(WIDTH, 300)
db.fill(0)
db.rect(0, 0, db.width(), db.height())
db.frameDuration(1)
db.font('InputMono-Regular')
db.fill(1)
db.fontSize(FONTSIZE)
number_bin = f'{i:b}'.zfill(DIGITS)
number_hex = f'{i:X}'.zfill(DIGITS)
number_dec = f'{i}'.zfill(DIGITS)
db.text(number_hex, (0, 215))
db.text(number_dec, (0, 115))
db.text(number_bin, (0, 15))
db.saveImage('counter.mp4')
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
PROMPT='%F{magenta}%1~%f '
alias ls='ls -G'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment