Software Development Documentation

The Art of Unix Programming

Recursive Make Considered Harmful This paper talks about the build process for large projects, and some of the pitfalls when using Make (local copy).

UNIX Security

Secure Programming for Linux and Unix HOWTO

Secure Portability (local copy)

Setuid Demystified (local copy)
The murky issue of changing process identity: revising "setuid demystified" (local copy)

Linux Programming Resources

Linux Kernel Newbies

Basic X Concepts


Implementing AF-independent applications

Lessons in Packaging Linux Applications

The Common Gateway Interface

Computer Programming Algorithms Directory


PLEAC The Programming Language Examples Alike Cookbook, a suite of common programming problems solved in various programming languages.

Assembly Language

The Art of Assembly Language Programming (local copy of AoA/Linux).


Recommended C Style and Coding Standards

How to Write Shared Libraries
Good Practices in Library Design, Implementation, and Maintenance

The Glib Object system


Industrial Strength C++ (local copy).


Dive Into Python 3, Python for experienced programmers (local copy).
(Dive Into Python local copy)

Style Guide for Python Code


git distributed version control system

A Visual Git Reference
git merge vs. rebase
Changing history, or How to Git pretty


Push existing local repository into newly created remote one

git remote add origin
git push --set-upstream origin --all

Diff of entire branch since fork

git diff $(git merge-base --fork-point master)


git diff master...

Maintain upstream branch

Add upstream repository
git remote add upstream
git fetch upstream
Update (local) master to (remote) upstream master branch
git fetch upstream
git checkout master
git pull
git rebase upstream/master master
Optionally add (local) upstream branch
git checkout -b upstream upstream/master
git config branch.upstream.remote origin
Update (local) upstream branch (pull upstream master into upstream branch)
git checkout upstream
git pull upstream master

Delete remote branch only

git push origin --delete branch

Make current branch identical to another

git pull
git reset --hard branch
git push --force

Make current branch identical to another (without git push --force)

git merge --strategy=ours branch
git diff --binary branch | git apply --reverse --index
git commit --amend

Migrate repository to new server

git clone --mirror
cd example.git
git remote set-url origin
git push --mirror

Remove unreferenced objects

git gc --aggressive --prune=now

Get list of commit hashes starting at the initial one

git log --topo-order --reverse --pretty='format:%H'


Drawing in GTK+

GSK Demystified (I) — A GSK primer
GSK Demystified (II) — Rendering
GSK Demystified (III) — Interlude


The Joel Test: 12 Steps to Better Code

ASCII and Unicode quotation marks