Training & courses

Training courses are offered on-site and can be adapted to your needs. Send an email to j@patch.no for a quote or details. If you need a course that not listed, I can develop it for you.

Effective git

A hands-on course on effectively using git as a core programming- and development tool.

Version control, which today is almost synonymous with git, is a centrepiece in the programmer toolkit. It is everywhere, from small solo projects, to infrastructure, to massive code bases with thousands of contributors. Unfortunately, it is often only used as a fast copy-and-sync interface to the shared code base, and many powerful features are left unused. Git is an amazing tool, but it can be daunting, and getting beyond the basics is hard. Thankfully, there is a payoff, and being more familiar with git will supercharge you.

This practical course will demystify some very useful operations with git, give you some good habits that set you up for success, and prepare you for solving complex problems.

Through a mix of examples, stories, and exercises you will learn about and get experience with topics and features like:

  • The art of good commits
  • Effective git log: search, queries, diffs
  • Making use of the staging area
  • Mastering merges: conflict resolution and octopuses
  • Composition with cherry-picks, fixups, and rebase
  • Frequent snapshots and rollbacks
  • Bisecting for bugs: time travel for the cause
  • Recovering not-yet-lost changes
  • Transports, patches, and emails

After the course you will have a renewed appreciation for what git can do for you, and a stronger foundation to build on when maintaining your programs. This course is great for the team as it makes some time for team dialogue on conventions and collaboration with git.

What you should bring

Your favourite git client and programming environment.

There is no substitute for real world examples; you can bring your own code base, or a favourite open source one, to play with. This is fun, but optional; plenty good examples will be provided.

Prerequisites

Some basic exposure to git is very useful, but the course can be extended to a bottom-up course.

Package management with Guix

Guix is a featureful package manager for GNU/Linux systems that takes a rather different approach than the traditional package managers (dpkg/apt for Debian/Ubuntu, rpm/yum/dnf for Red Hat/SUSE). Based on idea from Nix, Guix is a programmable, transactional, and reproducible packaging system. Are you confident that you can rebuild your docker images two years from now? Is it slow and frustratring to onboard new developers, chase dependencies, and getting the build to work on new machines? Chances are Guix offers a better story.

Guix supports features such as:

  • Development environments (think supercharged python virtualenv for all languages)
  • A better container builder than docker
  • Time travel
  • Rollbacks and transactional installation
  • Cross-language dependency resolution

Users and operators should not care about cargo, pip, npm, go, cpan, or maven, etc., but they should, and do, care about the integrity of the supply chain and ease of running programs. All powered by simple package recipes in Scheme (Guile).

This course will be a primer on software packaging and some history, a tour of some very neat guix features, and plenty of time to get our hands dirty by writing some packages of our own.

In this course you will learn:

  • Software packaging basics
  • Basic Guix usage, such as
    • Package installation and generations
    • Disposable shells, development environments
    • Building containers
  • Enough Scheme (Guile) to use Guix
  • Writing custom packages for Guix
    • Simple and slightly complex packages
    • Inherits, package variations

What you should bring

We will be writing packages and need running Guix. Please bring either:

  • A computer with Guix installed
  • A virtual machine with Guix installed
  • A computer that can SSH

If installing Guix is impractical, the instructor will provide a remote system with Guix for you to SSH to.

Prerequisites

None.