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
[](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