tDecrease all title levels by 1 - monochromatic - monochromatic blog: http://blog.z3bra.org
 (HTM) git clone git://z3bra.org/monochromatic
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit 167d6041409999f3bebbcce77970596064cc3d24
 (DIR) parent f0ea11e7d19b23e1080884a83202d1887fab7e86
 (HTM) Author: Willy Goiffon <dev@z3bra.org>
       Date:   Fri, 27 Dec 2019 15:56:01 +0100
       
       Decrease all title levels by 1
       
       Diffstat:
         M 2013/08/test-your-css.txt           |       8 ++++----
         M 2013/08/the-hard-way.txt            |       6 +++---
         M 2013/09/java-without-eclipse.txt    |       8 ++++----
         M 2013/10/home-sweet-home.txt         |       4 ++--
         M 2013/11/plain-old-mails.txt         |      10 +++++-----
         M 2013/12/love-me-some-latex.txt      |       8 ++++----
         M 2014/01/images-in-terminal.txt      |      10 +++++-----
         M 2014/03/toolbox.txt                 |       4 ++--
         M 2014/03/unleash-your-desktop.txt    |       4 ++--
         M 2014/04/meeting-at-the-bar.txt      |      30 +++++++++++++++---------------
         M 2014/04/pop-it-up.txt               |      20 ++++++++++----------
         M 2014/05/grok-that-workflow.txt      |      16 ++++++++--------
         M 2014/07/name-that-domain.txt        |       8 ++++----
         M 2014/08/im-back-up.txt              |      10 +++++-----
         M 2014/08/shred-configh.txt           |       6 +++---
         M 2014/09/backup-someone.txt          |      10 +++++-----
         M 2014/11/avoid-workspaces.txt        |       8 ++++----
         M 2014/12/so-tox-me-maybe.txt         |       6 +++---
         M 2015/01/you-are-the-wm.txt          |      14 +++++++-------
         M 2015/02/do-you-gopher.txt           |      10 +++++-----
         M 2015/03/under-wendys-dress.txt      |       8 ++++----
         M 2015/08/cross-compiling-with-pcc-a… |       8 ++++----
         M 2016/01/make-your-own-distro.txt    |      10 +++++-----
         M 2016/03/hand-crafted-containers.txt |      32 ++++++++++++++++----------------
         M 2016/08/desktop-streaming.txt       |       6 +++---
         M 2016/09/pack-it-up.txt              |       8 ++++----
       
       26 files changed, 136 insertions(+), 136 deletions(-)
       ---
 (DIR) diff --git a/2013/08/test-your-css.txt b/2013/08/test-your-css.txt
       t@@ -2,7 +2,7 @@
        
        8 August, 2013
        
       -### Text Formatting
       +## Text Formatting
        
        Yay ! Here we are. Here is something _important_. There is also something
        **strong**.  
       t@@ -16,17 +16,17 @@ But... What about blockquotes ?! Let's test :
        
        That was a fine quote. Now, go on !
        
       -### Long texts
       +## Long texts
        
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
        
       -### Images
       +## Images
        
        [![ratpoison screenshot](http://pub.z3bra.org/monochromatic/img/thumb/2013-08-ratpoison.jpg)](http://pub.z3bra.org/monochromatic/img/2013-08-ratpoison.jpg)
        *Ratpoison screenshot  
        Uses "ratpoison -c set border 28" to make the shot sexier*
        
       -### Tables and code
       +## Tables and code
        <table>
          <thead>
            <tr>
 (DIR) diff --git a/2013/08/the-hard-way.txt b/2013/08/the-hard-way.txt
       t@@ -24,7 +24,7 @@ ones. I've come to the point where grabbing the mouse to click on a button is a
        _real_ pain.  
        But let's go back to **the hard way**.
        
       -### What is that ? Can I eat it ?
       +## What is that ? Can I eat it ?
        
        Learning stuff the hard way is (talking about computers), starting using tools
        or learning stuff, without a formation, any piece of help, or any hack to make
       t@@ -62,7 +62,7 @@ I forced myself to use it this way, and after a week or two, I was putting
        ":wqjk{wB" in every other text editor, because I were finally comfortable with,
        and used to Vim.
        
       -### Drawbacks
       +## Drawbacks
        
        I see you raising the <q>I can't have a productivity loss at my work</q> card,
        and you are right.  This method is not shipped with only advantages, and
       t@@ -83,7 +83,7 @@ not, and if you want to make your life easier. (Show me one Vim user that has
        choosen to enable the mouse because it enhance his productivity... I dare you
        ;) ).
        
       -### Homeworks
       +## Homeworks
        
        There are a lot of place in the UNIX domain where the hard way can be applied,
        here are a few examples:
 (DIR) diff --git a/2013/09/java-without-eclipse.txt b/2013/09/java-without-eclipse.txt
       t@@ -20,7 +20,7 @@ Why would java escape the rules ?!
        Of course, there are advantages ! And if these are good enough for you. Go with
        eclipse And have some fun !  
        
       -### Throwing Eclipse away
       +## Throwing Eclipse away
        
        For that to be clear, **I am not saying that IDEs are evil ! I am just showing
        how you can avoid them, in favor of your daily tools**.  
       t@@ -82,7 +82,7 @@ bin/. Each source has it's own package.
        
        Let's see how to handle this project, using UNIX as your IDE !
        
       -### Compilation
       +## Compilation
        
        It probably is the hardest part. Java is hard to compile properly, so tools
        like Ant are used in IDEs.  
       t@@ -166,7 +166,7 @@ And it will compile your code only if it has changed (thanks GNU/make !).
        
        It there you need more explaination on this, mail me your questions !
        
       -### Running
       +## Running
        
        Running your program will be a lot more easier. And you probably know What I'm
        going to tell you: _shell script_.  
       t@@ -191,7 +191,7 @@ application. It will probably (in its simplest form) look like this:
        
        Isn't that easy ?
        
       -### Conclusion
       +## Conclusion
        
        **YOU. DON'T. NEED. ECLIPSE. AT ALL.**
        
 (DIR) diff --git a/2013/10/home-sweet-home.txt b/2013/10/home-sweet-home.txt
       t@@ -2,7 +2,7 @@
        
        28 October, 2013
        
       -### Summary
       +## Summary
        
        Yes, a summary, because that's gonna be a LONG article.
        
       t@@ -445,7 +445,7 @@ Finally, here is my own xinitrc
        *That shot show off the whole setup, with prompt, bar,
        applications, etc...  I hope you will like it!*
        
       -### Conclusion
       +## Conclusion
        
        The end, finally. That is a damn long article. I have deliberately not expanded
        some point by lack of "space". I want this article to end someday.  It will
 (DIR) diff --git a/2013/11/plain-old-mails.txt b/2013/11/plain-old-mails.txt
       t@@ -16,7 +16,7 @@ local mail directory under `$HOME/var/mail/INBOX/`
        Because we all need that bearded touch, we will use `mail` as our **main mail
        user agent**.
        
       -### The environment
       +## The environment
        
        As any of the standard UNIX tool, `mail` integrates well in a UNIX environment,
        and is able to interact with external tools to perform specific action (assume
       t@@ -62,7 +62,7 @@ Before continuing with mail, we will take a look at two mail related programs,
        [fdm](http://fdm.sourceforge.net/) and [msmtp](http://msmtp.sourceforge.net/),
        that we will use to fetch and deliver emails.
        
       -### Fetching mails
       +## Fetching mails
        
        FDM stands for <q>Fetch and Deliver Mails</q>, so it basically get mails from a
        server, and place them in your local filesystem based on regex rules.  
       t@@ -90,7 +90,7 @@ own (simplified) config file:
        check that mail fetching works with `fdm -kv fetch`.
        If it works, you could place `fdm fetch` in your cron entries.
        
       -### Sending mails
       +## Sending mails
        
        `MSMTP` is as simple to use as `fdm`. Check its
        [documentation](http://msmtp.sourceforge.net/documentation.html).
       t@@ -118,7 +118,7 @@ at the end of  your `~/.mailrc`:
            # use msmtp instead of sendmail
            set sendmail="/usr/bin/msmtp"
        
       -### Writing a new mail
       +## Writing a new mail
        
        Back to the topic!  
        Now that tools we are going to interact with are set up, let's write
       t@@ -150,7 +150,7 @@ As you might guess, the `-s` can be used to specify the subject. There are also
        `-c <CC-field>`, `-b <BCC-field>` for copy/carbon copy, and so on. Just
        read the manpage for more options.
        
       -### Reading your mails
       +## Reading your mails
        
        To read your mail, it's quite simple. Just type `mail` to get an output like:
        
 (DIR) diff --git a/2013/12/love-me-some-latex.txt b/2013/12/love-me-some-latex.txt
       t@@ -9,7 +9,7 @@ company, as an apprentice. As a fellow Linux user, I don't want to
        use that fucking text processor. I love my vim
        setup, and I want to use it to write that report.
        
       -### Introduction
       +## Introduction
        
        So i came to [LaTeX](http://www.latex-project.org/).  
        Latex (side note: I will not write "LaTeX" everytime in this post.
       t@@ -116,7 +116,7 @@ write it, and what to do with that file.
        Don't worry, that ain't difficult. 
        
        
       -### Writing latex
       +## Writing latex
        
        Latex files basically looks like any source file. First come the
        definitions, and then the source (document) itself.  
       t@@ -187,7 +187,7 @@ So, the most simple body is the following:
        You're still there ? Fine. Now, what should we do with that file ?
        
        
       -### Compilation
       +## Compilation
        
        Yeah, you read it right. You compile a Latex file, because it has to
        generate many other files in order to understand your whole
       t@@ -305,7 +305,7 @@ Easy to use!
        
        Maybe... To get the "eps" part, see the [tips section](#tips)
        
       -### Enjoy !
       +## Enjoy !
        
        There you go, you are now ready to write your own latex documents,
        and browser the web to find help about what is not explained in
 (DIR) diff --git a/2014/01/images-in-terminal.txt b/2014/01/images-in-terminal.txt
       t@@ -20,7 +20,7 @@ the "dependencies" section:
        
        [w3m](http://w3m.sourceforge.net). That was my answer.
        
       -### the package
       +## the package
        
        w3m is a text-based web browser. It means that you can use it to browse the web
        from within your terminal (good stuff!). There are many like it (lynx, links,
       t@@ -35,7 +35,7 @@ manpage many, many times, searching for keywords like <q>image</q>,
        <q>preview</q>, <q>gimme my f\*\*cking image rendering, damn software!</q>. Every
        usefull keyword I could find. **Nothing**.
        
       -### the pursuit
       +## the pursuit
        
        A few minutes (when all the buckets were fullfilled with my tears), I finally
        tough: <q>Use the source, z3bra</q>. That's how I installed ranger.
       t@@ -56,7 +56,7 @@ the tool it uses to do so. Here is how I managed to find it:
        **HOORAY!** A binary ! Next step will be to understand how to make it render
        images in the terminal..
        
       -### the trials
       +## the trials
        
        Obviously, running `w3mimgdisplay --help` would've been too easy.. But I
        finally managed to understand a few things using the ranger source I just
       t@@ -120,7 +120,7 @@ the ranger source, I ended up with this line:
        200x100px, at offset +0+0 in the terminal.  I'm sure you're already trying it
        ;)*
        
       -### the wrapping
       +## the wrapping
        
        Okay, we can now display an image in the terminal, at the offset and size we
        want. Let's wrap it up in a script, to be more adaptive!  We will need some
       t@@ -169,7 +169,7 @@ is hardcoded.
        
        Aaaaaaaaand it's cool !
        
       -### the end
       +## the end
        
        There you are. You have a tool to preview images in your terminal, in an easy
        way. The dependency is not huge, and you can script it the way you want.  
 (DIR) diff --git a/2014/03/toolbox.txt b/2014/03/toolbox.txt
       t@@ -24,7 +24,7 @@ Let's start with my current setup ! Every tool in this list is installed on my
        main computer (a desktop one). I'll avoid mentioning server administration
        tools, because that's too specific.
        
       -### Computer
       +## Computer
        
        * CRUX 3.0
        * AMD A10-5800k
       t@@ -32,7 +32,7 @@ tools, because that's too specific.
        * Roccat Kone Pure
        * Razer Vespuala
        
       -### Tool list
       +## Tool list
        
        * [2bwm](#2bwm)
        * [9menu](#9menu)
 (DIR) diff --git a/2014/03/unleash-your-desktop.txt b/2014/03/unleash-your-desktop.txt
       t@@ -3,7 +3,7 @@
        
        31 March, 2014
        
       -### Introduction
       +## Introduction
        
        Hi everybody ! This post is more or less the continuation of my previous one:
        [Home, sweet home](/2013/10/home-sweet-home.html). We will take desktop
       t@@ -12,7 +12,7 @@ the base of linux system administration.
        
        Here we go!
        
       -### Summary
       +## Summary
        
        * [head-up display](#hud)
        * [fetching informations](#grab)
 (DIR) diff --git a/2014/04/meeting-at-the-bar.txt b/2014/04/meeting-at-the-bar.txt
       t@@ -2,7 +2,7 @@
        
        02 April, 2014
        
       -### Introduction
       +## Introduction
        
        Hi everybody ! This post is more or less the continuation of my previous one:
        [Home, sweet home](/2013/10/home-sweet-home.html). We will take desktop
       t@@ -14,7 +14,7 @@ useful to us. We will learn how to display system informations on your screen.
        
        Here we go!
        
       -### Summary
       +## Summary
        
        * [head-up display](#hud)
        * [fetching informations](#grab)
       t@@ -39,7 +39,7 @@ doing it (understand, I've not tried the alternatives):
        * tmux
        * bar
        
       -#### dzen
       +### dzen
        
        From the official website:
        
       t@@ -58,7 +58,7 @@ with dzen, just check [earsplit's dekstop](http://i.imgur.com/bZegioR.gif), but
        I discovered a new tool that is basically dzen simplified, and written on top of
        XCB (see the fourth alternative: bar).
        
       -#### conky
       +### conky
        
        Here comes the king of HUDs, ladies and gentlemen, please put a knee to the
        ground!  
       t@@ -91,7 +91,7 @@ useful to build informations lines to feed a bar with. To have a quick idea of
        how this works, check this
        [nice forum post](http://nixers.net/showthread.php?tid=117) by jmbi.
        
       -#### tmux statusbar
       +### tmux statusbar
        
        This one is a bit out of competition, but worth mentionning. TMux stands for
        terminal multiplexer. Short story, you can have multiple terminal within a
       t@@ -108,7 +108,7 @@ display some infos:
        Phyrne wrote a [nice article](http://calummacrae.blogspot.co.uk/2012/12/dropping-status-bars-for-tmux-as-im.html)
        about it. Just read it.
        
       -#### bar
       +### bar
        
        My last and prefered option, the bar made by LemonBoy !  
        This small piece of software is a stripped down clone of dzen, written on top
       t@@ -157,14 +157,14 @@ expressions](https://en.wikipedia.org/wiki/Regular_expression), because we are
        going to use them _a lot_ with `sed`.  
        So, here we go!
        
       -#### current date / time
       +### current date / time
        
        There is nothing hard with it. The `date` utility has a parameter to format its
        output. So we'll just use that:
        
            date '+%Y-%m-%d %H:%M' # print current date and time: yyyy-mm-dd HH:MM
        
       -#### battery level
       +### battery level
        
        There is this tool, `acpi` that can be used to output some infos on your system
        power. But that's just not fun! We'll be messing with the `/sys` directory
       t@@ -190,7 +190,7 @@ on the battery state. To get the info:
            # print out the content (forced myself to use `sed` :P)
            sed -n p $BATC
        
       -#### sound level
       +### sound level
        
        This one is always a pain.. I will assume that you use ALSA as your sound
        system (because I have no idea how OSS or PulseAudio works).
       t@@ -218,7 +218,7 @@ That will make things easier.
            # "Front Left" and Front Right" (because laptop speakers I guess)
            amixer get Master | sed -n 's/^.*\[\([0-9]\+\)%.*$/\1/p'| uniq
        
       -#### CPU load
       +### CPU load
        
        There are many way to get the current CPU load. `iostat` is one of them, and as
        it's easy to parse its output, i'll go with a trickier approach, using `ps` and
       t@@ -260,7 +260,7 @@ with `grep` and `sed`. See the comparison [here](http://i.imgur.com/Aefbl8U.png)
        
            ps -eo pcpu | awk 'BEGIN {sum=0.0f} {sum+=$1} END {print sum}'
        
       -#### RAM used
       +### RAM used
        
        To display RAM usage (percentage of RAM actually by the system), we will use
        another place of the filesystem: `/proc`. This will be easier to find memory
       t@@ -304,7 +304,7 @@ know exactly how much the applications are taking:
            # then, calcultate the percentage of memory used
            bc <<< "100($t -$f -$c -$b) / $t"
        
       -#### network connection state
       +### network connection state
        
        Mmh, this one can be tricky! Ther are two cases here:
        
       t@@ -355,7 +355,7 @@ would do the trick:
            ping -c 1 8.8.8.8 >/dev/null 2>&1 && echo "connected" || echo "disconnected"
        
        
       -#### window manager groups
       +### window manager groups
        
        Aaah, the information that has the most way to be fetched! The problem with
        this, is that every window manager provide a different way to fetch the number
       t@@ -415,7 +415,7 @@ variable with the 'group line', and then output it. It goes like this:
            # don't forget to print that line!
            echo $line
        
       -#### mpd's current playing song
       +### mpd's current playing song
        
        After all that we did alredy, printing the current playing should bequite easy
        as:
       t@@ -439,7 +439,7 @@ So now, our output has just become:
        A small drawback with this approach: you can't put other infos in the same bar
        as a `skroll`ing output, because it uses a `\n` or a `\r` to print the output.
        
       -#### wrap it all !
       +### wrap it all !
        
        Now that we have a whole bunch of informations, it's time to put them all in a
        script, that we will pipe later to our HUD.
 (DIR) diff --git a/2014/04/pop-it-up.txt b/2014/04/pop-it-up.txt
       t@@ -8,7 +8,7 @@ That's **cute**. How about bringing it to the next level?
        Let's go through another way to display informations from your lovely
        computer: popup notifications !
        
       -### What's that ?
       +## What's that ?
        Popup notifications (I'll call them "popup" from now) are a tiny window that
        will appear on your screen with an informative text on it, and then disappear
        after a certain amount of time, or a user interaction.
       t@@ -16,7 +16,7 @@ after a certain amount of time, or a user interaction.
        The important part is that the popups show up when an event occur, not upon user
        request (well, if the user request a popup, it can still appear, obviously).
        
       -### Usefulness
       +## Usefulness
        Well, most of the popup we have to deal with are annoying most of the time
        (except those that notify me that I won an IPad by being the visitor number
        1 000 000, it's nice to tell me!). But if you choose wisely the content and the
       t@@ -38,7 +38,7 @@ Moreover, you can use popups to notify you when a task running in the
        background has finished, or that a torrent has finished downloading, or
        whatever weird usage you can find!
        
       -### Existing software
       +## Existing software
        There are in fact, many notification systems that you can use:
        [libnotify](http://library.gnome.org/devel/notification-spec/),
        [notify-osd](https://launchpad.net/notify-osd),
       t@@ -53,7 +53,7 @@ I love this one, because it's really light and simple to use. Moreover, I
        contributed to it to complete the geometry setting. You can now create a window
        of any size and place it wherever you want!
        
       -### Popup itself
       +## Popup itself
        This part is the most simple in fact. `bar` will do anything for us.
        
        All you have to do is to create a script that will take a serie of argument and
       t@@ -108,7 +108,7 @@ You could then just pop notifications using:
            popup $(~/bin/volume)
        
        
       -### Automate the popups
       +## Automate the popups
        The best thing about popups is that they spawn when it's relevent, eg: when a
        new mail arrived, volume is changing or battery is low.
        
       t@@ -118,7 +118,7 @@ To catch those event there are many way. We will run through three of them:
        * inotify event
        * key presses
        
       -#### infinite loop
       +### infinite loop
        This one is easy. We just check whatever we want at regular interval, and
        depending on some conditions, we raise a notification. That's what I use for my
        battery:
       t@@ -144,7 +144,7 @@ running low. You can put it in your `.xinitrc` or as a cron job:
            */2 * * * * DISPLAY=0 ~/bin/battery_check
        
        
       -#### inotify event
       +### inotify event
        [Inotify (inode notify) is a Linux kernel subsystem that acts to extend
        filesystems to notice changes to the
        filesystem](https://en.wikipedia.org/wiki/Inotify). That strange sentence means
       t@@ -176,7 +176,7 @@ at each new mail. It's done like this in my `~/.xinitrc`
        And there we go. each time `fdm` will fetch mails to your inbox, a wild popup
        will appear!
        
       -#### key presses
       +### key presses
        The last type of popup I use is those that occur when a key is pressed. The best
        exemple for that are the volume keys. I don't know how you handle this, but
        personnally, <s>I use `xbindkeys` for that. It's a software that let the user map
       t@@ -244,7 +244,7 @@ Back to the topic. Here is my `.xbindkeysrc`
        There, simple. The popup command is bound to my volume keys, so each time I
        press them, the notification comes up! It's quite simple.
        
       -### Improvements
       +## Improvements
        This system is not perfect at all, because popup overlap, the width and timing
        is fixed, ... But it's also a bare simple system, easily hackable. You could use
        it to build a more complex system on top of that. For example, you can easily
       t@@ -298,7 +298,7 @@ Here are a few other ideas I had (but did not bother trying :P):
        * ...
        * Be creative, as usual!
        
       -### Good bye
       +## Good bye
        I hope this will be helpful to someone. It's not meant to make you throw your
        status bar away, or switch from libnotify and such. It's just a bare simple
        alternative to those, as I like to have :)
 (DIR) diff --git a/2014/05/grok-that-workflow.txt b/2014/05/grok-that-workflow.txt
       t@@ -2,7 +2,7 @@
        
        30 May, 2014
        
       -### Introduction
       +## Introduction
        > A workflow consists of an orchestrated and repeatable pattern of business
        > activity enabled by the systematic organization of resources into processes
        > that transform materials, provide services, or process information. It can be
       t@@ -21,7 +21,7 @@ links to software I use, piece of relevant config files, and animated images to
        illustrate some points.
        Now, shall we begin ?
        
       -### Summary
       +## Summary
        
        * [GNU/Linux distribution](#os)
        * [Managing windows](#wm)
       t@@ -31,7 +31,7 @@ Now, shall we begin ?
        * [FAQ](#faq)
        
        <h3 id='os'>GNU/Linux distribution</h3>
       -#### crux
       +### crux
        I'm a fairly new [crux](http://crux.nu) user. But I must say that I love it
        already.. Crux is the kind of distro you build with your bare hands in a whole
        week, while other would just it the "*install*" button, and watch the magic
       t@@ -69,7 +69,7 @@ special `config.h` file.
        
        Here is how my keybinds are organised:
        
       -#### Managing windows
       +### Managing windows
        
        <table>
        <tr>  <th>prefix</th>         <th>key</th>     <th>function</th>          </tr>
       t@@ -92,7 +92,7 @@ windows](http://pub.z3bra.org/monochromatic/img/thumb/2014-05-27-windows.jpg)](h
        more features, but that's the one I use the most (other are just combination of
        those)*
        
       -#### Managing groups
       +### Managing groups
        
        Before using 2bwm, I was using [cwm](http://monkey.org/~marius/pages/?page=cwm),
        which is itself a rewrite of [evilwm](http://www.6809.org.uk/evilwm/). `Cwm` has
       t@@ -127,7 +127,7 @@ The shell is a really powerfull toy. Not only because it looks badass, but
        because you can automate boring tasks by writing shell scripts. Here are my
        prefered:
        
       -#### detach applications
       +### detach applications
        Sometimes, I need to start an application, and then detach it from my current
        terminal (to reattach it somewhere, or later). To solve this, `tmux` or `screen`
        could cut it, but I decided to use [dtach](http://dtach.sourceforge.net/)
       t@@ -152,7 +152,7 @@ let me create and attach sessions easily:
            # attach the "irc" session
            ─── dm irc
        
       -#### compile softwares
       +### compile softwares
        This one might be specific to me, but when I'm programming, I often encounter
        the following issue:
        
       t@@ -330,7 +330,7 @@ Talking about this, Reihar wrote a nice
        about converting document using libreoffice. I use it from time to time to
        convert spreadsheets to CSV files, it's handy!
        
       -### Bonus
       +## Bonus
        
        And there ends that narcissic article. I hope you found it interesting, even if
        everything I present here is totally specific to me. As a bonus, to thank you
 (DIR) diff --git a/2014/07/name-that-domain.txt b/2014/07/name-that-domain.txt
       t@@ -13,7 +13,7 @@ explaining the step to get this working (If you're aware of one, please send me
        a link, I'll be glad to share it). So here is a full tutorial !
        
        
       -### TL;DR
       +## TL;DR
        
        1. create tinydns zone file
        2. make `tinydns` listen on 127.0.0.1
       t@@ -23,7 +23,7 @@ a link, I'll be glad to share it). So here is a full tutorial !
        6. Enjoy.
        
        
       -### The whole installation
       +## The whole installation
        
        First of all, I had to find out what were my needs. It seems stupid to say so,
        but I have the bad habit to dive into configuration, barely knowing what I'm
       t@@ -49,7 +49,7 @@ Here's how I see it:
        Let's set this up then!
        
        
       -### tinydns
       +## tinydns
        
        `tinydns` is fairly simple to use, and even more simple to configure. But it's
        nothing you've ever seen before. You can configure tinydns from a single file:
       t@@ -97,7 +97,7 @@ To check if it's correctly running, you can use `nslookup`.
        It works ! Don't use tinydns as a resolv.conf entry though. Because it's
        authoritative and ONLY serves our domain.lan zone, it would not be efficient...
        
       -### dnscache
       +## dnscache
        
        No DNS server can answer all the queries, so in most case, if the DNS can't
        provide an answer, it will just forward the query to another depending on some
 (DIR) diff --git a/2014/08/im-back-up.txt b/2014/08/im-back-up.txt
       t@@ -7,7 +7,7 @@ In the past few days, my whole server (and thus, my website) was down.
        Everything is now back to it's normal state, so I'll give you a quick
        explanation about what happened.
        
       -### TL;DR
       +## TL;DR
        Quickly, here's what happenned (the whole process took approximately 2 weeks):
        
        1. Changed distribution
       t@@ -17,12 +17,12 @@ Quickly, here's what happenned (the whole process took approximately 2 weeks):
        5. Fallback to old hardware
        6. Reinstalled distribution
        
       -### I'm sorry
       +## I'm sorry
        As you can imagine, I did not plan such a long downtime. It was, at first, only
        a matter of 2 or 3 days, but ended up being almost 2 weeks. So first of all,
        please accept my apologizes.
        
       -### The situation
       +## The situation
        Now, let me tell you what happened. Some relatives gave me an old PC they were
        not using anymore. It had a dual core and 2GB of RAM !!
        
       t@@ -34,7 +34,7 @@ powered by musl libc and busybox.
        The install went fine and I brought the server online again. And then, it
        began...
        
       -### The problem
       +## The problem
            ─── ssh z3bra.org
        
                     __   __
       t@@ -69,7 +69,7 @@ or the whole mother board.
        I decided to boot the drive from my old server, and I did not have any problem
        from it. Looks like I could only rely on my good ol' hardware.
        
       -### The solution
       +## The solution
        
        I finally decided to buy a new hard drive, and to run it from my old
        hardware. The motherboard of the "*new*" one was on the end of its life,
 (DIR) diff --git a/2014/08/shred-configh.txt b/2014/08/shred-configh.txt
       t@@ -10,7 +10,7 @@ The problem is that configuring this kind of software can be really frustrating,
        so I'll show you a way to make these a bit more bearable.
        
        
       -### Some background
       +## Some background
        
        Since the beginning, many programs running on Linux have been written in C. C is
        a low-level programming language, which means that the machine can *almost*
       t@@ -31,7 +31,7 @@ But in some special cases, such a file can't be used for configuration. the
        reason behind that is: speed, simplicity, stability and reliability.
        
        
       -### How does it work ?
       +## How does it work ?
        
        In order to make things easier for the user, the developpers (usually) create a
        file named `config.h` where the configuration happens. You don't need
       t@@ -68,7 +68,7 @@ package, recompile the package for you... *sigh* It's **really** boring !
        
        
        
       -### Deal with it
       +## Deal with it
        
        First of all, I had to find an easy way to recompile and reinstall the software
        on my computer. I use source-based distributions on my computers (Archlinux,
 (DIR) diff --git a/2014/09/backup-someone.txt b/2014/09/backup-someone.txt
       t@@ -21,7 +21,7 @@ backup your data. All you need is the following:
        * A compressor (gzip, bzip2, xz, ...)
        * Some shell glue
        
       -### Preparation
       +## Preparation
        
        First, you need to figure out what you want to backup: configs ? multimedia ?
        code ? For the purpose of this article, Let's say I want to backup all my
       t@@ -40,7 +40,7 @@ will create a user dedicated to the backup process:
        
        Now the drive is ready to accept backups. Let's see how to create them.
        
       -### Backing up
       +## Backing up
        
        What's a backup already ?
        
       t@@ -60,7 +60,7 @@ So what's the plan ? First, we'll create an archive containing all the files we
        want. Then, compress the said archive to gain some space, and finally, manage
        those backups to keep multiple copies.
        
       -#### Archiving
       +### Archiving
        
        For this task, I chose `cpio`, which takes filenames on stdin, and creates an
        archive to stdout. The fact it outputs to stdout give the ability to compress
       t@@ -74,7 +74,7 @@ can check your pipe buffer with `ulimit -a`. Anyways:
        And the archive is created and compressed ! Pretty easy isn't it ? Let's see how
        to manage them now.
        
       -#### Managing
       +### Managing
        
        Be creative for this part ! you can either use `$(date +%Y-%m-%d)` as a name for
        the backup, write a crawler to change names based on their timestamp, or maybe
       t@@ -197,7 +197,7 @@ start:
        
        Should be enough for now. But here comes the most important part...
        
       -### Restoring
       +## Restoring
        
        This is the most important one, but not the trickiest, don't worry. We're on
        friday, and your friends are arriving in a few minutes to see the photos from
 (DIR) diff --git a/2014/11/avoid-workspaces.txt b/2014/11/avoid-workspaces.txt
       t@@ -4,7 +4,7 @@
        
        > Virtual desktops considered harmful
        
       -### Virtual desktops
       +## Virtual desktops
        
        If you're used to the Linux desktop, you might already know what virtual
        desktops (usally called "workspaces" too) are. If not, then
       t@@ -28,7 +28,7 @@ same time without rendering the desktop unusable.
        
        But this behavior do not give an answer to the main problem!
        
       -### Nothing but a hack
       +## Nothing but a hack
        
        Using virtual desktop because you lack space is like scooping water out of a
        boat instead of putting your finger in the hole. Sure it does the work, but it'll
       t@@ -94,7 +94,7 @@ switch from one desktop to another, send windows to specific desktop and then
        sending them back. What's the point of having a powerfull operation system if it
        require so much efforts to run it ?
        
       -### A better window management
       +## A better window management
        
        <q>I arrange my windows in groups. Then I send them back and forth whenever I
        need them</q>
       t@@ -125,7 +125,7 @@ about doing them when they're relevant**. Monitoring your system and testing a
        program are two different tasks. But those two might be linked at some point,
        and it should not be painfull to work on both of them at the same time.
        
       -### Final word
       +## Final word
        
        Maybe I convinced you, maybe not. Either way, it should not stop you from trying
        it, at least once. The groups I'm speaking about are fully implemented in the
 (DIR) diff --git a/2014/12/so-tox-me-maybe.txt b/2014/12/so-tox-me-maybe.txt
       t@@ -12,7 +12,7 @@ add friends on it, and chat with them around the world. The idea behind it is
        quite nice.
        But as for many softwares, the implementation sucks.
        
       -### The itch
       +## The itch
        
        Skype relies on a centralised platform, which means that ALL your
        conversations go through a few servers around the world, and get re-routed to
       t@@ -25,7 +25,7 @@ sent directly to your friend.
        There is an advantage though: it makes your conversations easier to [record by other
        entities](http://www.zdnet.com/article/fbi-nsa-said-to-be-secretly-mining-data-from-nine-u-s-tech-giants/).
        
       -### The antidot
       +## The antidot
        
        I'm not putting forward the griefs I have against skype without providing a
        solution. Some people concerned about freedom and privacy decided to provide a
       t@@ -50,7 +50,7 @@ client of choice.
        friend list is on the right, and the chat happens on the right pane. Fairly easy
        :)*
        
       -### The Unix way
       +## The Unix way
        
        Now that you know what tox is, what about trying a client that will turn your
        whole system into an interface to the tox library ?
 (DIR) diff --git a/2015/01/you-are-the-wm.txt b/2015/01/you-are-the-wm.txt
       t@@ -11,7 +11,7 @@ bottom left hand-corner of your screen, unable to switch between them.
        
        But guess what...
        
       -### You don't need it !
       +## You don't need it !
        
        It's a fact. A
        [study](http://www.nytimes.com/2005/01/11/health/11anim.html) determined that
       t@@ -36,7 +36,7 @@ small tools to perform all the task a window manager is supposed to do.
        
        We ended up with [wmutils](http://github.com/wmutils/core).
        
       -### Coreutils, for Xorg
       +## Coreutils, for Xorg
        
        `wmutils` stands for "window **manipulation** utilities".
        
       t@@ -121,7 +121,7 @@ I use a few scripts of my own:
        + `corner` - move windows to screen's corner
        + `fullscreen` - put a window in fullscreen mode
        
       -### vroum
       +## vroum
        
        It can take 3 arguments: "next, prev, $wid". "next" will focus the next
        window on the stack, previous will focus the previously focused window, and
       t@@ -133,7 +133,7 @@ active window. I use this script to cycle between them:
            alt {, + shift} + tab
                vroum {next, prev}
        
       -### groaw
       +## groaw
        
        This is my "group" manager (think of it as workspaces on steroid). By
        default, new windows are not assigned any groups. Without much explaning how
       t@@ -158,7 +158,7 @@ This result in the following entries:
            super + Backspace
                groaw -d all
        
       -### focus
       +## focus
        
        A script I'm really proud of! It focus windows besed on their cardinal
        positions. It takes exactly 4 different arguments:
       t@@ -178,7 +178,7 @@ edge of the window) It's bound like so
            alt + {left,down,up,right}
                  focus {west, south, north, east} $(pfw)
        
       -### corner
       +## corner
        
        There's nothing special about it. It put the window in the corner passed as
        argument (Top-Left, Top-Right, Bottom-Left, Bottom-Right, MiDdle)
       t@@ -187,7 +187,7 @@ argument (Top-Left, Top-Right, Bottom-Left, Bottom-Right, MiDdle)
            super + {y,u,b,n,g}
                corner {tl, tr, bl, br, md} $(pfw)
        
       -### fullscreen
       +## fullscreen
        
        Set a window in fullscreen mode (change its size to the size of the monitor, and
        remove borders. The previous position/size of the window is saved to a file, so
 (DIR) diff --git a/2015/02/do-you-gopher.txt b/2015/02/do-you-gopher.txt
       t@@ -30,7 +30,7 @@ How does it looks?
        
        We'll come back on this later. First, how does it works?
        
       -### gopher indexes
       +## gopher indexes
        
        Gopher is a text based protocol, where each line either points to an index
        (directory), or an item (items being files).
       t@@ -70,7 +70,7 @@ Pretty simple. You could however create a more difficult architecture by making
        `.gph` point to other files not in their directories and such.. but that's not
        the point here.
        
       -### the protocol
       +## the protocol
        
        To put it simply, each gopher "line" is composed of 5 distinct parts:
        
       t@@ -88,7 +88,7 @@ A gopher index is then just a list of links, each one pointing to a file which
        can be anywhere accross the world. And you don't need any unreadable markup
        language for this!
        
       -### file types
       +## file types
        
        The gopher protocol implements a rudimentary filetype thingy, by putting a
        character at the beginning of each line, indicating what the "item" points to.
       t@@ -108,7 +108,7 @@ only used to display text:
            Icat3.png        /img/cats/3.png        domain.tld        port
            Icat4.png        /img/cats/4.png        domain.tld        port
        
       -### gopher holes
       +## gopher holes
        
        Gopher spaces are commonly named "holes". All you need now is a gopher to crawl
        this huge gallery. Here are a few I recommend:
       t@@ -118,7 +118,7 @@ this huge gallery. Here are a few I recommend:
        
        Or you could use an HTTP proxy : http://gopher.floodgap.com/gopher/
        
       -### final thoughs
       +## final thoughs
        
        As you might have noticed (or not), I run my own gopher hole. I first wanted to
        move this whole blog over gopher, but finally decided to keep it as is (because
 (DIR) diff --git a/2015/03/under-wendys-dress.txt b/2015/03/under-wendys-dress.txt
       t@@ -4,7 +4,7 @@
        
        I've been meaning to write this post for a long time.
        
       -### who's that chick?
       +## who's that chick?
        
        [`wendy`](http://git.z3bra.org/wendy/log.html) is an inotify based directory and
        file watch. It is by far the project I'm the most proud of.  
       t@@ -30,7 +30,7 @@ Now that it was working, I finally decided to make it more and more general, and
        it finally reached its current state: a _general purpose node watcher_.
        
        
       -### how does it work?
       +## how does it work?
        
            wendy -m 768 -f $HOME/directory -e popup "~/directory content updated"
        
       t@@ -44,7 +44,7 @@ triggered.
        Wendy can also read filenames from stdin, to add to its awesomeness ;)
        
        
       -### play with her!
       +## play with her!
        
        Get a popup when you receive a new e-mail
        
       t@@ -74,7 +74,7 @@ View manpages on the fly, as you write them
        the only limit.. Wait, there is no limit! Just let it go (I know you hate me for
        saying that...)
        
       -### contribution
       +## contribution
        
        If you find any bug, or weird behavior, or anything else, do not hesitate to
        drop me an [email](mailto:contact@z3bra.org), or submit it on the
 (DIR) diff --git a/2015/08/cross-compiling-with-pcc-and-musl.txt b/2015/08/cross-compiling-with-pcc-and-musl.txt
       t@@ -20,7 +20,7 @@ The process is (in theory) pretty simple:
        5. build pcc/pcc-libs
        6. (optionnal) add a pkg-config wrapper
        
       -### 1. grabbing sources
       +## 1. grabbing sources
        
        This part is pretty simple. You just need to choose which version of the
        software you want to use. Here is my list at the time of writing:
       t@@ -39,7 +39,7 @@ https://www.kernel.orghttp://pub.z3bra.org/monochromatic/linux/kernel/v4.x
        
        Once you have all your tarballs, extract them somewhere.
        
       -### 2. patch everything
       +## 2. patch everything
        
        Everything doesn't need patching, but when you're playing with musl, you'll
        quickly realise how heavily softwares rely on the GNU libc.
       t@@ -58,7 +58,7 @@ targets, and fix the default library pass of the compiler.
        + [pcc-libs-1.1.0-musl.diff](http://pub.z3bra.org/monochromatic/misc/pcc-libs-1.1.0-musl.diff)
        + [pcc-1.1.0-deflibdirs.diff](http://pub.z3bra.org/monochromatic/misc/pcc-1.1.0-deflibdirs.diff)
        
       -### 3,4,5,6. build everything
       +## 3,4,5,6. build everything
        
        For this part, just check the appropriate sections in the original script. You
        might want to enable shared libraries, or avoid compiling everything statically,
       t@@ -69,7 +69,7 @@ compiler where are the PCC libraries. The `--with-incdir` and `--with-libdir`
        parameters are used to tell the compiler where to search for default libraries,
        so make sure you set them properly.
        
       -### Enjoy!
       +## Enjoy!
        
        You compiler should be ready to go! You can test it by running the following
        snippet:
 (DIR) diff --git a/2016/01/make-your-own-distro.txt b/2016/01/make-your-own-distro.txt
       t@@ -18,7 +18,7 @@ I work on it.
        First off all, I have never built an [LFS](https://linuxfromscratch.org) system,
        and will probably never do (their documentation is great though).
        
       -### Scope
       +## Scope
        
        So here I am, sitting in front of my computer, deciding what this "new distro"
        should be. I've always liked the idea of [sta.li](http://sta.li), an similar
       t@@ -36,7 +36,7 @@ I chose each point because I though it would be and interresting challenge,
        allowing me to learn more about linux distributions in the process. I'm not
        trying to argue that X is better than Y, or anyhing amongst those lines.
        
       -### Toolchains
       +## Toolchains
        
        There are, from my experience, three important toolchains when building a
        distro:
       t@@ -48,7 +48,7 @@ distro:
        Each one is as important as the two others, because they will define how
        efficient you'll be for the whole project.  
        
       -#### Compilation toolchain
       +### Compilation toolchain
        I am using [pcc](http://pcc.ludd.ltu.se) as my complier of choice, and
        [musl](http://musl-libc.org) as my libc.
        
       t@@ -73,7 +73,7 @@ prefix.
        libc.*
        
        
       -#### Package management toolchain
       +### Package management toolchain
        There are a lot of them. But the most challenging one will be the one I'll write
        myself. This is why I wrote [pm](http://git.z3bra.org/pm/log.html), my pack
        manager. It's still a work in progress, but it can install, delete and inspect
       t@@ -100,7 +100,7 @@ installation via [pm](http://git.z3bra.org/pm/log.html).
        *Show casing the creation of a port within the mk port-tree
        and building/installing it under a specific directory*
        
       -#### Testing toolchain
       +### Testing toolchain
        To actually test the distro, you need a way to boot from it. I chose to use linux
        containers (LXC) over traditionnal VMs (virtualbox, qemu) as I'm not playing with
        different CPU architectures (yet!).
 (DIR) diff --git a/2016/03/hand-crafted-containers.txt b/2016/03/hand-crafted-containers.txt
       t@@ -2,7 +2,7 @@
        
        18 March, 2016
        
       -### tl;dr
       +## tl;dr
        
                # CTNAME=blah
                # mkdir -p /ns/$CTNAME/bin /ns/$CTNAME/lib
       t@@ -11,7 +11,7 @@
                # ip netns add $CTNAME
                # ip netns exec $CTNAME unshare -fpium --mount-proc env -i container=handcraft chroot /ns/$CTNAME /bin/echo 'Hello, world!'
        
       -### 0. Intro
       +## 0. Intro
        
        Containers are the latest trend, for a good reason: they leave room for new
        ideas in terms of security, flexibility, performance and much more.
       t@@ -33,7 +33,7 @@ an application (a complex one). In this regard, there is only a single type of
        containers.  
        We can now focus on what's really important, how do they work?
        
       -### 1. Namespaces
       +## 1. Namespaces
        
        That's a keyword, so let's ask our internet god what it means:
        
       t@@ -47,33 +47,33 @@ to a process.
        When a namespace is created for a process, all its children will be created
        within this namespace, and inherit the "limitations" of the parent.
        
       -#### Mount
       +### Mount
        The process will be able to mount and unmount filesystems without affecting
        the rest of the system. For example, if you unmount a partition within the
        namespace, all the processes within it will see it as unmounted, while it
        will remain mounted for all others processes on the host.
        
       -#### UTS (Unix Time-Sharing)
       +### UTS (Unix Time-Sharing)
        This will give the ability to change the host and domain name in the namespace
        without changing it on the host.
        
       -#### IPC (Inter-Process Communication)
       +### IPC (Inter-Process Communication)
        This namespace concern shared memory, System V message queues and sempaphores.
        Processes in the namespace will be unable to communicate with the host's
        processes this way.
        
       -#### Network
       +### Network
        Processes will have their own network stack. This includes the routing table,
        firewall rules, sockets, and so on.
        
       -#### PID (Process IDentification)
       +### PID (Process IDentification)
        Processes' IDs will get a different mapping that they have on the host. They
        will get renumbered, starting from 1.
        
       -#### User
       +### User
        The namespaces will have their own set of user and group IDs.
        
       -### 2. Making containers
       +## 2. Making containers
        
        Now that we know what containers are and how they work, it's time to make
        one!
       t@@ -93,7 +93,7 @@ Here is the program:
                EOF
                $ cc hello.c -o hello
        
       -#### 2.0 `chroot(1)`
       +### 2.0 `chroot(1)`
        This one is an old tool that will run a command or spawn an interactive
        shell after changing the root directory.
        It is used to isolate a process, or group of processes from the host's
       t@@ -168,7 +168,7 @@ weighs 3.6Mib...
        
        That's most likely the lightest container you've seen, right?
        
       -#### 2.1 env
       +### 2.1 env
        To isolate our process from the host, we'll have to clean all the environment
        from all its variables, to make sure the container won't know anything about its
        host. We can do this with the `env` command:
       t@@ -188,7 +188,7 @@ We now have a way to isolate our `hello` process from the host's environment.
        
                # env -i container="handcraft" chroot ./rootfs ./hello
        
       -#### 2.2 `unshare(1)`
       +### 2.2 `unshare(1)`
        This tool is the one that will actually isolate containers. It has been created
        especially for this purpose, and will let you run a process unshared from
        different namespaces: mount, user, network, PID, IPC and UTS.  
       t@@ -216,7 +216,7 @@ We just found a way to isolate our program a bit more:
        For the curious, you can check the `nsenter(1)` program, that will help you
        run a process within another process namespace.
        
       -#### 2.3 `ip-netns(1)`
       +### 2.3 `ip-netns(1)`
        
        The `ip(1)` command includes a `netns` subcommand to manage network namespaces.
        It is useful to give network access to a process while keeping it away from the
       t@@ -269,7 +269,7 @@ it doesn't make any sense!):
        Don't feel ashamed by such a long-ass command, because that is what `lxc`,
        `docker`, and other container applications do behind your back!
        
       -### 3. Bonus: cgroups
       +## 3. Bonus: cgroups
        
        Control groups are a feature of the kernel used to limit the resources
        used by a process, or a group of processes. Cgroups can limit CPU 
       t@@ -278,7 +278,7 @@ shares, RAM, network usage, disk I/O, ...
        I will not cover their usage here, as this article is already long, but
        They are totally worth mentionning as an improvement over our containers.
        
       -### 4. Congratz
       +## 4. Congratz
        
        ... for reading this far.
        
 (DIR) diff --git a/2016/08/desktop-streaming.txt b/2016/08/desktop-streaming.txt
       t@@ -12,7 +12,7 @@ army knife for everything related to audio and video decoding/encoding.
        I've been using it for multiple tasks already, from converting .ogg
        to .mp3, to recording GIFs of my desktop.
        
       -### Server part
       +## Server part
        
        I started looking into how I could "stream" my desktop online, and
        quickly found about the `ffserver` utility (which is part of the
       t@@ -92,7 +92,7 @@ When the config is ready, you just need to fire up the server with
        
                /usr/bin/ffserver -f /etc/ffserver.conf
        
       -### Watcher part
       +## Watcher part
        
        In order to watch the stream, one has to use the URL defined by the
        `<Stream>` tag. I personally use `mplayer` to watch it, but one can
       t@@ -103,7 +103,7 @@ use the `ffplay` command provided by `ffmpeg`:
        And that's *ALL*. You can hardly do simpler to watch a stream,
        right?
        
       -### Feeder part
       +## Feeder part
        
        In order to feed yor stream to the `ffserver`, you can use `ffmpeg`
        directly.  The format of the command is pretty simple. We have 2
 (DIR) diff --git a/2016/09/pack-it-up.txt b/2016/09/pack-it-up.txt
       t@@ -31,7 +31,7 @@ Here is an explanation of how it works:
        
        The process is straigh-forward, and multiple parts can be automated.
        
       -### Packaging
       +## Packaging
        
        In order to build my softwares, I need either `make` or
        [`mk`](http://doc.cat-v.org/plan_9/4th_edition/papers/mk) (it's tending
       t@@ -86,7 +86,7 @@ At this point, to pack one of my utilities, all I need is:
        
        And I'm done :)
        
       -### Deploying
       +## Deploying
        
        This part require a bit of setup. My current repository is at
        http://dl.z3bra.org/pack, which is, locally in
       t@@ -119,7 +119,7 @@ is modified by `repogen`, everything is replicated on the remote repo:
        
                wendy -m 8 -f $REPO/.list sh -c "find $REPO -type f | synk -h apophis.2f30"
        
       -### Installing
       +## Installing
        
        Now that we can create packs and upload them quickly to the repository,
        it's time to install them!
       t@@ -207,7 +207,7 @@ And finally, install it!
                skroll        0.6
                $ echo amazing! | skroll
        
       -### Conclusion
       +## Conclusion
        
        Ok, so this whole post was rather long, and not especially good at
        describing the actual workflow. So as usual. Here is a quick video to