summaryrefslogtreecommitdiffstats
path: root/content/pages/notes.rst
diff options
context:
space:
mode:
Diffstat (limited to 'content/pages/notes.rst')
-rw-r--r--content/pages/notes.rst154
1 files changed, 154 insertions, 0 deletions
diff --git a/content/pages/notes.rst b/content/pages/notes.rst
new file mode 100644
index 0000000..19f6850
--- /dev/null
+++ b/content/pages/notes.rst
@@ -0,0 +1,154 @@
+:title: Notes
+:status: published
+
+This is a collection of useful free software and commands for various purposes.
+
+.. contents::
+
+Debian
+######
+
+Live image
+----------
+
+Sometimes it's quite useful to have your own custom live system image on a USB stick or a CD, e.g. to save a broken installation or to do maintenance work that cannot be done when the system is running. Building a custom image makes it possible to include software packages that are not included by default and to change the general configuration to your liking.
+
+Set up a basic config according to the `manual <https://debian-live.alioth.debian.org/live-manual/stable/manual/html/live-manual.en.html>`_. If the correct directory structure is there and you are able to build the default image, add a `list with additional packages you want <https://debian-live.alioth.debian.org/live-manual/stable/manual/html/live-manual.en.html#864>`_.
+
+My config command looks like this:
+
+.. code-block:: shell
+
+ lb config --bootappend-live \
+ "boot=live config locales=de_DE.UTF-8 keyboard-layouts=de username=wolfi" \
+ --debian-installer live
+
+This command ensures a that the image has a German locale and keyboard layout. I also specify a custom user name to login. The default password is "live". With this config, it's possible to install the system to a disk.
+
+Package building
+----------------
+
+When I build a Debian package from its sources, I only sometimes want to make actual changes to the source code. In most cases, I want to do a `simple backport <https://wiki.debian.org/SimpleBackportCreation>`_ of a newer package from Testing or Unstable. So it's very annoying if the package build includes test cases that take quite some time to run. You can add ``DEB_BUILD_OPTIONS=nocheck`` to your ``dpkg-buildpackage`` command to skip the test cases.
+
+
+Emacs
+#####
+
+I do nearly all my text editing in Emacs. I write all my code in Emacs, edit configuration files in Emacs, write Latex documents with the great `AUCTEX <https://www.gnu.org/software/auctex/>`_ package and do my email with `mu4e <https://www.djcbsoftware.nl/code/mu/mu4e.html>`_. You can find a partially cleaned up version of my Emacs config file `here <https://code.fossencdi.org/config.git/tree/emacs>`_. I use the `"tomorrow" theme <https://github.com/purcell/color-theme-sanityinc-tomorrow>`_. Packages are maintained with `El-Get <http://tapoueh.org/emacs/el-get.html>`_.
+
+To securely send email in Emacs, I do certificate pinning with GnuTLS as described `here <https://blogs.fsfe.org/jens.lechtenboerger/2014/03/10/certificate-pinning-with-gnutls-in-the-mess-of-ssltls/>`__. My mail server uses `Let’s Encrypt <https://letsencrypt.org/>`_, so I have to do the pinning every two months. The procedure is as follows:
+
+.. code-block:: shell
+
+ $ gnutls-cli --tofu --crlf --starttls -p 587 example.com
+ EHLO localhost
+ STARTTLS
+
+Then press ``Ctrl-D``.
+
+If you work with others on a software project or if you want to write clean code in general, it's important to properly use whitespace. With the command ``whitespace-cleanup``, you can get rid of unnecessary whitespace at the end of lines or in otherwise empty lines.
+
+Open a file as root in Emacs:
+
+.. code-block:: shell
+
+ C-x C-f /sudo::/path/to/file
+
+
+Files
+#####
+
+Count number of words in a PDF document:
+
+.. code-block:: shell
+
+ pdftotext <FILE> - | tr -d '.' | wc -w -
+
+
+Network
+#######
+
+View network connections continously:
+
+.. code-block:: shell
+
+ netstat -t -u -c
+
+List the programs that currently use a specific network interface:
+
+.. code-block:: shell
+
+ sudo nethogs <INTERFACE>
+
+
+
+Profiling applications
+######################
+
+Collect function calls with callgrind without fancy options:
+
+.. code-block:: shell
+
+ valgrind --tool=callgrind <APP>
+
+Results can be viewed in KCachegrind.
+
+
+Media
+#####
+
+I do all my video editing with the allrounder `Blender <https://www.blender.org/>`_. Vector graphics are created in `Inkscape <https://inkscape.org/en/>`_.
+
+Photos
+------
+
+`Geeqie <http://geeqie.sourceforge.net/>`_ is a really nice and fast program to browse the RAW image files of your camera. I get the best out of my RAW images by editing them with `Rawtherapee <http://www.rawtherapee.com/>`_. `Gimp <https://www.gimp.org/>`_ is used for everything else that Rawtherapee can't do. HDR images can be created with `Luminance HDR <http://qtpfsgui.sourceforge.net/>`_.
+
+If I want to publish an image on the web, I first export it as JPEG, remove EXIF data with ``exiftool -all= IMAGE.jpg`` and optimize it with ``jpegoptim -s IMAGE.jpg``.
+
+Record screen
+-------------
+
+Set the screen size with the ``-s`` option: wuxga for 1920x1200 and wxga for 1366x768.
+
+.. code-block:: shell
+
+ avconv -f x11grab -s wuxga -r 25 -i :0.0 -qscale 5 -an OUTPUT.avi
+
+
+Openwrt
+#######
+
+I build the `Openwrt <https://openwrt.org/>`_ images for my routers from source. This way I can benefit from the security updates that are backported to the stable branches. The official prebuilt images are normally not updated when there are security issues. Additionally, I can add packages to the image, so I don't have to rely on the binary package manager. This also saves space. To update the sources, a few steps are needed:
+
+.. code-block:: shell
+
+ git pull
+ ./scripts/feeds update -a
+ ./scripts/feeds install -a
+
+The newly build images can be found in the ``bin`` folder in a directory with the name of the platform the router is based on.
+
+I use `Unbound <https://unbound.net/>`_ as a recursive DNS resolver on my routers for all devices that are behind it. After upgrading the routers, it's necessary to sync the time. Otherwise, resolving DNS entries will fail.
+
+
+Replicant
+#########
+
+The phone's storage can be manually mounted with ``jmtpfs /media/phone/`` and unmounted with ``fusermount -u /media/phone``.
+
+I work on a `Replicant version based on CyanogenMod 13 <https://redmine.replicant.us/boards/21/topics/12057>`_. Alpha releases are tagged on the stable branch. There are too many git repositories in order to do the tagging manually, so I came up with two commands. First to add signed tags to all the repos that are directly mirrored from CyanogenMod:
+
+.. code-block:: shell
+
+ repo forall $(repo forall -c ' echo "$REPO_REMOTE$REPO_PROJECT" | grep cm-mirror | cut -c10-') \
+ -c ' git tag -s replicant-6.0-alpha-0002 -m "second alpha release of Replicant 6.0" && \
+ git push git@fossencdi.org:cm-mirror/$REPO_PROJECT replicant-6.0-alpha-0002 '
+
+Then sign all the modified repos:
+
+.. code-block:: shell
+
+ repo forall $(repo forall -c ' echo "$REPO_REMOTE$REPO_PROJECT" | grep fossencdi | cut -c10-') \
+ -c ' git tag -s replicant-6.0-alpha-0002 -m "second alpha release of Replicant 6.0" && \
+ git push git@fossencdi.org:$REPO_PROJECT replicant-6.0-alpha-0002 '