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

PortaWiki

Implementing AF-independent applications

Lessons in Packaging Linux Applications

The Common Gateway Interface

Computer Programming Algorithms Directory

Languages

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).

C

Recommended C Style and Coding Standards

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

The Glib Object system

C++

Industrial Strength C++ (local copy).

Python

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

Style Guide for Python Code

git

git distributed version control system

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

Tips

Push existing local repository into newly created remote one

git remote add origin git@git.example.com:/path/to/example.git
git push --set-upstream origin --all

Migrate repository to new server

git clone --mirror git@oldgit.example.com:/path/to/example.git
cd example.git
git remote set-url origin git@newgit.example.com:/path/to/example.git
git push --mirror

Maintain upstream branch

Add upstream repository
git remote add upstream git@git.example.com:/path/to/example.git
git fetch upstream
Optionally add upstream branch
git checkout -b upstream upstream/master
git config branch.upstream.remote origin
Update upstream branch (pull upstream master into upstream branch)
git checkout upstream
git pull upstream master

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'

Misc

The Joel Test: 12 Steps to Better Code

ASCII and Unicode quotation marks