# my favorite (GNU/Linux) tools

I have been working with GNU/Linux since the beginning of 2010. Since then, I discovered a couple of nice tools that I would like to share with you.

Some of them are available on other operating systems as well, so even if you do not use GNU/Linux, you might find something handy.

## Bash

The default shell on most UNIX systems is a handy tool that allows you do to complex task pretty easily.

Say you have a folder of many (so many that converting them manually would take you days) pictures that you want to resize to 1000 by 1000 pixels to send someone via email. Sure, you can find some program that lets you batch process your pictures. But what happens if you want to rename them at the same time, putting the number of pixels into it?

In bash, you could do this:

for pic in *.jpg
do
echo "Converting $pic." convert "$pic" -resize 1000x1000 "${pic/.jpg/-1000.jpg}" done  On a GNU/Linux computer, there is so much you can do with bash scripts, I definitely recomment to look into it. ## Git Git is a version control (or source code management) tool that takes snapshots of a directory and lets you go back to previous versions and show the differences. So instead of having multiple copies of files or even whole directories laying around, git just lets me work in that single directory and keeps track of the changes. It has a steep learning curve to it, but in the long run it seems to be just a clear cut tool without a layer of “easy interface” that actually hides most of the program's potential. ## Java Java is an object oriented programming language. I like it because it runs on all major platforms and comes with a complete GUI toolkit. Together with the Eclipse IDE, even larger projects are still manageable. Hello World: public class Hello { public static void main(String[] argv) { System.out.println("Hello, World!"); } }  ## LaTeX LaTeX is a professional typesetting package that lets me easily create gorgeous documents with nice math formulas. I use it for my university homework since it lets me write down all the formulas and document my train of thought easily. Its syntax is kind of a finger breaker on a German keyboard with all its \ and {}, though. I mapped the capslock key to „Alt Gr“, so that I can type those easier. This is what a LaTeX formula can look like. This needs JavaScript to work. \exists \epsilon \in \mathbb R^+ \colon \; \left| 0, \epsilon \right| = \aleph_0  \begin{equation*} \exists \epsilon \in \mathbb R^+ \colon \; \left| 0, \epsilon \right| = \aleph_0 \end{equation*} ## Make Makefiles are something that are mostly use in programming with C, but one can use them for all different kind of things. Wherever you have some files and you can convert or compile it into something else, you might find yourself typing rst2man git-changelog.1.rst git-changelog.1 over and over again. You can write this into a makefile: git-changelog.1: git-changelog.1.rst rst2man$< \$@


Now you have to type make and it will see whether the .1 is older than the .1.rst and needs to be redone. It will execute the command and update your target file. If it does not need to be updated, it will not do anything.

## Markdown

There are a couple of markup languages for plain text, like the famous HTML. The problem with HTML is that it is not easy to read and to write either. If you post in a bulletin board and have to work with the HTML inspired [QUOTE] and [/QUOTE] tag, you know what I mean.

Instead, Markdown orients itself at intuitive things: _italic_ becomes italic, **bold** becomes bold and a heading is just:

Markdown
========


For creating text with markup, markdown is a very neat simplification. You can either use the original markdown.pl as a Markdown to HTML conversion script, or the great converter pandoc.

## GNU Octave

Octave is an array oriented programming language and interpreter for numeric math problems. I use it for my Physics experiments at university to analyse my data.

A = [1 2; 3 4]
det(A)


## PHP

PHP was a template language. Then it became a programming language. Then it became object oriented.

The neat thing about it that it is available on most web servers. As a tool, I often use it, although I find Python neater to use.

<?php
echo "Hello, World!\n";
?>


## Python

There are many programming languages out there, all of them have some special purpose. For easy, general purpose programming, I like to use Python. It is dynamically and strictly typed, so you do not have to declare variables, but it does not let you add characters and letters directly.

It is summed up in this:

“Batteries included.”

It is not as fast as C or C++ or even Java, but it does not take much to get you started programming and if something fails you get a relatively helpful error message.

The interpreter runs on the major desktop operating systems and on some it is already installed.

If you want to try programming, I encourage you to start with Python. Their tutorial is pretty good.

The Hello, World! is just easy as this:

print "Hello, World!"


## reStructuredText

Just like Markdown, reStructuredText is a lightweight markup language for plain text. It has more features than the latter, is a little more complex, but has a wider support and more conversion tools. You can easily make UNIX man pages or HTML5 slide shows, even LaTeX documents out of it with rst2man, rst2s5, rst2latex and even OpenDocument (for LibreOffice and OpenOffice.org) with rst2odt.

These pages are written in reStructuredText and then converted into HTML. For every page, there should be a .rst version around as well. For this page, check out the source for this page.

There are countless to do list tools out there. I think Taskwarrior is special because it has a text based user interface. That way, I can use it in the terminal. And it features a nice sync feature over the network.

## Vim

Vim is a text editor that is definitely different compared to the common text editors. Because of that, a lot of people do not like it, others love it.

For instance, you navigate with the hjkl keys in normal mode, if you want to enter text, you need to press i to get into insert mode. Some say that this is needless confusing, I like the idea of using just the keys at your fingertips for everything.

Ever needed a Greek letter in your text? Ever wanted to sort some lines? Ever needed to alter text that was in a rectangle? I suggest you give Vim a try :-)

## Xournal

I work paperless for several years now, but I still need a software to take notes on. Math derivations are just faster with hand writing than writing LaTeX or reStructuredText directly. So when thinking, I use a note taking program. Since I did not find Xournal directly, I developed jscribble, which I do not use too often now.

In split screen it is really neat to work on a theoretical physics problem: