kloeckner.com.ar

a backup of my entire webpage
Index Commits Files Refs README LICENSE
commit 69ef858fc95c05afd2d2e7bec4e57b30e46f164f
parent f0c3808646e3af9142e6f18d46eb69085a861329
Author: mjkloeckner <martin.cachari@gmail.com>
Date:   Wed,  9 Nov 2022 19:09:19 -0300

New blog post, updated md metadata format, added sitemap and robots.txt
files

New blog post: "I bought a ThinkPad x200 for $27".

New markdown metadata format, the previous metadata format
```
% metadata1: <value>
% metadata2: <value>
```
gets deprecated in favor of new meatada blocks
```
%%
metadata1: <value>
metadata2: <value>
%%
```
Generating scripts updated accordingly

Also added sitemap and robots.txt files to improve SEO

Diffstat:
MMakefile | 4+++-
Mblog.html | 4+++-
Mcommon/blog_index.shtml | 1+
Mcommon/footer.shtml | 2+-
Mcommon/latest_uploads.shtml | 2+-
Mcommon/rss_logo.png | 0
Mcss/article_style.css | 5+++--
Mcss/style.css | 24+++++-------------------
Mindex.html | 2+-
Amd/bought-a-thinkpad/.directory | 5+++++
Amd/bought-a-thinkpad/bought-a-thinkpad.md | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Amd/bought-a-thinkpad/cleaning-kb.jpeg | 0
Amd/bought-a-thinkpad/cleaning-kb.png | 0
Amd/bought-a-thinkpad/compiling.jpeg | 0
Amd/bought-a-thinkpad/compiling.png | 0
Amd/bought-a-thinkpad/old-bios-version.jpeg | 0
Amd/bought-a-thinkpad/old-bios-version.png | 0
Amd/bought-a-thinkpad/owner-pic.jpeg | 0
Amd/bought-a-thinkpad/owner-pic.png | 0
Amd/bought-a-thinkpad/publication-picture.jpeg | 0
Amd/bought-a-thinkpad/publication-picture.png | 0
Amd/bought-a-thinkpad/recording-midi.jpeg | 0
Amd/bought-a-thinkpad/recording-midi.png | 0
Amd/bought-a-thinkpad/rice.jpeg | 0
Amd/bought-a-thinkpad/rice.png | 0
Amd/bought-a-thinkpad/x200_clone.jpeg | 0
Amd/bought-a-thinkpad/x200_clone.png | 0
Mmd/dwm-config/dwm-config.md | 6++++--
Mmd/nerdearla-2022/nerdearla-2022.md | 6++++--
Mmd/sav/sav.md | 6++++--
Mmd/testing-syntax-highlight/testing-syntax-highlight.md | 6++++--
Mmd/vim-config/vim-config.md | 6++++--
Anginx/fastcgi.conf | 26++++++++++++++++++++++++++
Anginx/fastcgi_params | 25+++++++++++++++++++++++++
Anginx/koi-utf | 109+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anginx/koi-win | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anginx/mime.types | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anginx/modules-enabled/50-mod-http-auth-pam.conf | 2++
Anginx/modules-enabled/50-mod-http-dav-ext.conf | 2++
Anginx/modules-enabled/50-mod-http-echo.conf | 2++
Anginx/modules-enabled/50-mod-http-geoip.conf | 2++
Anginx/modules-enabled/50-mod-http-image-filter.conf | 2++
Anginx/modules-enabled/50-mod-http-subs-filter.conf | 2++
Anginx/modules-enabled/50-mod-http-upstream-fair.conf | 2++
Anginx/modules-enabled/50-mod-http-xslt-filter.conf | 2++
Anginx/modules-enabled/50-mod-mail.conf | 2++
Anginx/modules-enabled/50-mod-stream.conf | 2++
Anginx/nginx.conf | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anginx/proxy_params | 4++++
Anginx/scgi_params | 17+++++++++++++++++
Anginx/sites-available/default | 91+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anginx/sites-available/kloeckner.com.ar | 37+++++++++++++++++++++++++++++++++++++
Anginx/sites-enabled/default | 2++
Anginx/sites-enabled/kloeckner.com.ar | 2++
Anginx/snippets/fastcgi-php.conf | 13+++++++++++++
Anginx/snippets/snakeoil.conf | 5+++++
Anginx/uwsgi_params | 17+++++++++++++++++
Anginx/win-utf | 125+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Arobots.txt | 4++++
Mscripts/build_page.sh | 19++++++++++++++-----
Ascripts/convert-png.sh | 3+++
Mscripts/sort_blog_index.py | 52+++++++++++++++++++++++++++++++++++++++++++++++++---
Mscripts/sync.sh | 25++++++++++++++++++-------
Asitemap | 9+++++++++
64 files changed, 987 insertions(+), 51 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,3 +1,5 @@
+all: sync
+
 build:
     ./scripts/build.sh
     ./scripts/sync.sh
@@ -6,6 +8,6 @@ sync: build
     sudo ./scripts/deploy_local.sh
 
 deploy:
-    rsync -e "ssh -i ~/.ssh/key-mini" -uorahvP --delete ./** root@mini:/var/www/html/
+    rsync -e "ssh -i ~/.ssh/key-x441" -orahvPt --delete --exclude=.git --delete-excluded . root@192.168.1.72:/var/www/html
 
 .PHONY: build sync deploy
diff --git a/blog.html b/blog.html
@@ -21,7 +21,9 @@
         <article>
             <link rel='stylesheet' type='text/css' href="/css/article_style.css">
             <h1 id="index-title">Blog</h1>
-            <!--#include virtual="/common/blog_index.shtml" -->
+            <ul id=blog_entries>
+                <!--#include virtual="/common/blog_index.shtml" -->
+            </ul>
             <div style="margin-top: 1em; padding-bottom: .75em; text-align: center; text-decoration: none;">
                 <a href="/rss.xml" id="rss"><img style="width: 1.5em; padding: 0;" src="/common/rss_logo.png" alt="rss logo"></a>
             </div>
diff --git a/common/blog_index.shtml b/common/blog_index.shtml
@@ -1,3 +1,4 @@
+<li><time>26-Oct-2022</time> <a href="/blog/bought-a-thinkpad/bought-a-thinkpad.html">I bought a ThinkPad x200 for $27</a></li>
 <li><time>21-Oct-2022</time> <a href="/blog/testing-syntax-highlight/testing-syntax-highlight.html">Testing code syntax highlight</a></li>
 <li><time>23-Sep-2022</time> <a href="/blog/nerdearla-2022/nerdearla-2022.html">I'm going to Nerdearla 2022</a></li>
 <li><time>18-Sep-2022</time> <a href="/blog/sav/sav.html">Sorting Algorithms Visualized</a></li>
diff --git a/common/footer.shtml b/common/footer.shtml
@@ -2,5 +2,5 @@
     <div class="footer-div">
         The content of this webpage is licensed under <a style="white-space: nowrap;" rel="license" href="http://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>
     </div>
-    <a href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="padding: 0; margin: 0; border-width:0; width: 88px;" src="https://i.creativecommons.org/l/by/4.0/88x31.png"/></a>
+    <a href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="padding: 0; margin: 0; border-width:0; width: 88px;" src="https://mirrors.creativecommons.org/presskit/buttons/80x15/png/by.png"/></a>
 </footer>
diff --git a/common/latest_uploads.shtml b/common/latest_uploads.shtml
@@ -1,5 +1,5 @@
+<li><time>26-Oct-2022</time> <a href="/blog/bought-a-thinkpad/bought-a-thinkpad.html">I bought a ThinkPad x200 for $27</a></li>
 <li><time>21-Oct-2022</time> <a href="/blog/testing-syntax-highlight/testing-syntax-highlight.html">Testing code syntax highlight</a></li>
 <li><time>23-Sep-2022</time> <a href="/blog/nerdearla-2022/nerdearla-2022.html">I'm going to Nerdearla 2022</a></li>
 <li><time>18-Sep-2022</time> <a href="/blog/sav/sav.html">Sorting Algorithms Visualized</a></li>
 <li><time>23-Oct-2021</time> <a href="/blog/dwm-config/dwm-config.html">dwm - The dynamic window manager</a></li>
-<li><time>04-Mar-2021</time> <a href="/blog/vim-config/vim-config.html">vim - The keyboard driven text editor</a></li>
diff --git a/common/rss_logo.png b/common/rss_logo.png
Binary files differ.
diff --git a/css/article_style.css b/css/article_style.css
@@ -150,7 +150,8 @@ ul {
     border: 0 !important;
 }
 
-.pln { color: #ebdbb2; }
+/* .pln { color: #ebdbb2; } */
+.pln { color: antiquewhite; }
 
 /* Specify class=linenums on a pre to get line numbering */
 ol.linenums {
@@ -165,7 +166,7 @@ li.L0, li.L1, li.L2, li.L3, li.L4, li.L5, li.L6, li.L7, li.L8, li.L9 {
     list-style-type: decimal;
 }
 
-@media screen { /* string content */ .str { color: #98971a; } /* keyword */ .kwd { color: #f60; } /* comment */ .com { color: #928374; } /* type name */ .typ { color: #458588; } /* literal value */ .lit { color: #458; } /* punctuation */ .pun { color: #ebdbb2; } /* lisp open bracket */ .opn { color: #ebdbb2; } /* lisp close bracket */ .clo { color: #ebdbb2; } /* markup tag name */ .tag { color: #ebdbb2; } /* markup attribute name */ .atn { color: #9c9; } /* markup attribute value */ .atv { color: #6f0; } /* declaration */ .dec { color: #ebdbb2; } /* variable name */ .var { color: #ebdbb2; } /* function name */ .fun { color: #458588; } }
+@media screen { /* string content */ .str { color: #98971a; } /* keyword */ .kwd { color: #f60; } /* comment */ .com { color: #928374; } /* type name */ .typ { color: #458588; } /* literal value */ .lit { color: #458; } /* punctuation */ .pun { color: antiquewhite; } /* lisp open bracket */ .opn { color: #ebdbb2; } /* lisp close bracket */ .clo { color: #ebdbb2; } /* markup tag name */ .tag { color: #ebdbb2; } /* markup attribute name */ .atn { color: #9c9; } /* markup attribute value */ .atv { color: #6f0; } /* declaration */ .dec { color: #ebdbb2; } /* variable name */ .var { color: #ebdbb2; } /* function name */ .fun { color: #458588; } }
 
 @media (prefers-color-scheme: light) {
 /*! Color themes for Google Code Prettify | MIT License | github.com/jmblog/color-themes-for-google-code-prettify */
diff --git a/css/style.css b/css/style.css
@@ -51,20 +51,15 @@
 html {
     margin-left: calc(100vw - 100%);
     margin-right: 0;
-    /* scroll-behavior: smooth; */
 }
 
 body {
     background: #191919;
-    /* background: #2F4F4F; */
-
     margin-bottom: 15em;
     margin-left: .5em;
     margin-right: .5em;
-
     font-size: 16px;
     font-family: "Helvetica", "DejaVu Sans", sans, "Verdana", sans-serif, "Georgia", serif;
-    /* scroll-behavior: smooth; */
 }
 
 header {
@@ -85,14 +80,11 @@ header {
     border-top: 1em;
 }
 
-.header_button {
-    float: left;
-}
-
 .header_flex_div {
     display: flex;
     justify-content: space-between;
     flex-wrap: wrap;
+    align-items: baseline;
 }
 
 .header_bottom_bar {
@@ -128,7 +120,6 @@ header {
 #header_title {
     margin-bottom: 0em;
     font-size: 2.75em;
-    display: inline-block;
 }
 
 article {
@@ -194,8 +185,6 @@ footer {
 }
 
 img {
-    /* border-radius: .3em; */
-
     overflow: hidden;
 
     height: 100%;
@@ -235,11 +224,8 @@ ul {
 
 .header_buttons {
     margin: 0;
-    margin-top: .80em;
     font-size: 1.5em;
-    display: inline;
-    align-self: last baseline;
-    padding-bottom: .18em;
+    display: flex;
     list-style-type: none;
 }
 
@@ -263,7 +249,6 @@ h3 {
 h4 { padding-top: .5em; text-align: left; }
 
 h5 {
-    /* padding-top: .5em; */
     padding-bottom: .25em;
     font-size: 1em;
 }
@@ -356,8 +341,9 @@ hr {
 }
 
 #latest-uploads {
-    display: flex; 
+    display: flex;
     align-items: center;
+    padding-top: .5em;
     padding-bottom: .5em;
 }
 
@@ -383,7 +369,7 @@ time {
     }
     .header_flex_div{
         flex-direction: column;
-        justify-content: center;
+        align-items: center;
     }
     .header_buttons{
         margin-top: 0;
diff --git a/index.html b/index.html
@@ -35,7 +35,7 @@
             <p>Of course if you have any questions or comments, <a href="mailto:mjkloeckner@gmail.com">send me an email</a>, I will respond kindly!</p>
 
             <div id=latest-uploads >
-                <h3 style="text-align: left; font-size: 1.25em;"><u>Latest uploads</u></h3>
+                <h2 style="text-align: left; padding: 0;"><u>Latest uploads</u></h2>
                 <div style="margin-top: 5px; margin-left: .5em">
                     <a href="/rss.xml" id="rss"><img style="width: 1.5em;" src="/common/rss_logo.png" alt="rss logo"></a>
                 </div>
diff --git a/md/bought-a-thinkpad/.directory b/md/bought-a-thinkpad/.directory
@@ -0,0 +1,5 @@
+[Dolphin]
+SortHiddenLast=true
+Timestamp=2022,10,27,0,10,6.321
+Version=4
+ViewMode=1
diff --git a/md/bought-a-thinkpad/bought-a-thinkpad.md b/md/bought-a-thinkpad/bought-a-thinkpad.md
@@ -0,0 +1,58 @@
+%%
+title: "I bought a ThinkPad x200 for $27"
+date: "26-Oct-2022"
+%%
+
+# I bought a ThinkPad x200 for $27
+
+A couple of week ago I was scrolling through Facebook marketplace when I saw what It looked like a ThinkPad published for exactly ARS$ 8000 (around USD $27). When I enter the publication it was effectively a ThinkPad, precisely an x200, but it was very dirty, this was the picture attached to the publication:
+[![Thinkpad picture of the publication](owner-pic.jpeg)](owner-pic.png "Thinkpad picture of the publication")
+The owner stated that the machine was working but it had no charger, that was a little bit suspicious ngl but, for the price, I couldn't be picky, I was looking for a cheap old ThinkPad like this for a while and this was the perfect oportunity.
+
+So I contacted the owner, and we agree to meet the next day so I could pick it up. Fortunately the owner was about 30 minutes in public transport from my place so this was also a plus point for the publication.
+
+When the owner give it to me obviously it was very dirty but also I felt like something inside was a little bit loose; the transaction was very quick, in a corner of a known intersection so, I didn't look at it very carefully.
+
+When I arrived home and I started to look at it with more caution, the first thing that I noticed was that the loose part was the battery, so I didn't care much, but, before opening the lid I noticed that the lenovo branding was missing on the left bottom of the lid, and I panic a little since the day before going to pick up the x200 I saw a post which stated that cheap chinese clones of this machines where made, this cheap clones camed with an atom processor (trash compared to x200's processor) and they where smaller in size, and since they were clones, no lenovo branding was present on the clones. When I opened the lid I saw the "Intel Centrino" branding on the left bottom of the palm rest, and that was it, I thought that it was the cheap clone, so I leave on the desk and started to think about the trash that I thought I bought.
+This a picture of the cheap clone, it looks identical but without the lenovo brandong
+
+[![x200 chinese clone](x200_clone.jpeg)](x200_clone.png "x200 chinese clone")
+
+After thinking (lasted 5 min max.) I started to look carefully at the machine again, and noticed that there was a lenovo branding on the bottom, so it couldn't be a copy, after searching for Intel Centrino on internet I found that it wasn't a processor but a network card, which the genuine x200 came with, so it actually was a *genunine ThinkPad*.
+
+Since I hadn't the charger I couldn't try if it worked, so I started to deep clean it, at least all the exterior dirt, and the keyboard, which was disgusting.
+
+[![Cleaning thinkpad dirty keyboard](cleaning-kb.jpeg)](cleaning-kb.png "Cleaning thinkpad dirty keyboard")
+
+A couple of days later I picked up a used charger from a T430 (90w), and the TrackPoint cap which was also missing. When I connected the x200 to the grid the outter lid leds lit up, meaning the ThinkPad was receiving power and the battery  so I tried to turn it on, and for my surprise the computer booted to the BIOS *without a problem*.
+
+## Updating the BIOS
+After I plugged the computer in and it booted into the bios, I checked for the bios version and it was `3.11`. A quick check on lenovo's x200 webpage revealed that there were BIOS updates up until version `3.16`.
+[![Old bios version](old-bios-version.jpeg)](old-bios-version.png "Old bios version")
+I searched on Google on how to update the bios but I couldn't find a way without using Windows, there was [one way using Linux](https://www.thinkwiki.org/wiki/BIOS_update_without_optical_disk) but honestly in comparison with the Windows way was much more complicated. The most simple way for me was installing Windows, since Lenovo provides a Windows only BIOS updater tool. So I quickly installed Windows 7 on an 240GB kingston SSD which I had lying around and updated the BIOS, it was as simple as running the BIOS updater tool, clicking update and done.
+
+## Installing an Operating System
+After adding the SSD, installing Windows 7 and updating the BIOS, I was decided to install linux, I wanted to try void or artix (w/ runit), I had a previous machine with artix ([yt video showing how fast it booted](https://www.youtube.com/watch?v=dBdNQdocrVc)) for almost a year and it worked pretty well, I even gamed CS GO on it.
+So I made a void linux bootable drive following the [void linux docs](https://docs.voidlinux.org/installation/live-images/prep.html), but, when I tried to boot into it, nothing. The BIOS wouldn't recognized the USB drive, I also tried making a bootable USB with [balenaEtcher](https://www.balena.io/etcher/) but again, nothing. The weird thing was that if I made an arch linux bootable USB using the previous both methods the BIOS would boot instantly. Because it was late, I ended up installing arch linux.
+During the installation I noticed that the BIOS was not UEFI compatible, and that was the cause of all the trouble.
+After I finished the installation and configuration of arch linux, I searched for a tool that would allow me to make legacy BIOS compatible boot mediums, I stumbled with [WoeUSB](https://github.com/WoeUSB), I made a void linux bootable usb drive with that tool and it booted instantly, so maybe in a future I will install void linux like I intended in the first place.
+
+Anyway do you like my arch linux rice?
+[![x200 arch linux rice](rice.jpeg)](rice.png "x200 arch linux rice")
+I'm using suckless's [dwm](https://dwm.suckless.org/) and [st terminal](https://st.suckless.org/), firefox for the web browser and dolphin for the graphical file manager.
+You can check out my [dotfiles](https://github.com/mjkloeckner/dotfiles) on github, although I didn't update them yet, but maybe at the time when you are reading this I already did.
+
+## Using an x200 in 2022
+The computer works perfectly, the only thing missing is OpenGL version 3.X support, because the integrated graphics card is old the last version supported is 2.1, so I couldn't make kitty nor alacritty terminals work. I ended up installing suckless's simple terminal (st), and it works like a charm, and it's very lightweight too.
+
+The Core 2 Duo althought it has almost 15 years, it is still very usable for surfing the web and writing code, and general daily lightweight task. I'm planning to take the x200 to the University to write notes and check pdfs in the library, since the x200 only weight at around 1.6kg with the 90w charger, its more lightweight than my 2.0kg dell, it is also very small in dimension, the x200 is like a [netbook](https://en.wikipedia.org/wiki/Netbook) with steroids. The most impressive thing is how usable it is with only 2gb of RAM, when I saw in the BIOS that it only had 2gb of RAM I thought that it would be unusable tbh, but no, using dwm the idle ram usage is 200mb aprox. and with a couple of tabs opened in firefox and some terminals the RAM usage sits at around 1.3gb, of course I set a swap partition and when I open more tabs in firefox htop reports some swap usage, so the swap helps a bit.
+
+This is the x200 compiling [translate shell](https://github.com/soimort/translate-shell) from source.
+[![Compiling translate shell](compiling.jpeg)](compiling.png "Compiling translate shell")
+
+Another picture of the x200, recording [MIDI](https://en.wikipedia.org/wiki/MIDI?wprov=sfla1) using [qtractor](https://qtractor.org/). I've also used the x200 for live MIDI processing, and it worked without a problem.
+[![Recording midi on the x200](recording-midi.jpeg)](recording-midi.png "Recording midi on the x200")
+
+## Things to do next
+
+There is a ton of things that I want to try with this computer, like libreboot, swapping motherboards, running void linux, etc. But first I would like to disassemble it entirely to remove all the dust from the motherboard and replace the thermal paste. Also buy a 9-cell battery. The one that came with the computer only lasted around 10 minutes the first charge, after calibration I made it last an hour and a half. I saw a used 9-cell genuine lenovo near my place on MercadoLibre for the same price that I bought the x200 lol (around USD $27). So stay tuned to the blog post to read all the updates on the x200.
diff --git a/md/bought-a-thinkpad/cleaning-kb.jpeg b/md/bought-a-thinkpad/cleaning-kb.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/cleaning-kb.png b/md/bought-a-thinkpad/cleaning-kb.png
Binary files differ.
diff --git a/md/bought-a-thinkpad/compiling.jpeg b/md/bought-a-thinkpad/compiling.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/compiling.png b/md/bought-a-thinkpad/compiling.png
Binary files differ.
diff --git a/md/bought-a-thinkpad/old-bios-version.jpeg b/md/bought-a-thinkpad/old-bios-version.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/old-bios-version.png b/md/bought-a-thinkpad/old-bios-version.png
Binary files differ.
diff --git a/md/bought-a-thinkpad/owner-pic.jpeg b/md/bought-a-thinkpad/owner-pic.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/owner-pic.png b/md/bought-a-thinkpad/owner-pic.png
Binary files differ.
diff --git a/md/bought-a-thinkpad/publication-picture.jpeg b/md/bought-a-thinkpad/publication-picture.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/publication-picture.png b/md/bought-a-thinkpad/publication-picture.png
Binary files differ.
diff --git a/md/bought-a-thinkpad/recording-midi.jpeg b/md/bought-a-thinkpad/recording-midi.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/recording-midi.png b/md/bought-a-thinkpad/recording-midi.png
Binary files differ.
diff --git a/md/bought-a-thinkpad/rice.jpeg b/md/bought-a-thinkpad/rice.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/rice.png b/md/bought-a-thinkpad/rice.png
Binary files differ.
diff --git a/md/bought-a-thinkpad/x200_clone.jpeg b/md/bought-a-thinkpad/x200_clone.jpeg
Binary files differ.
diff --git a/md/bought-a-thinkpad/x200_clone.png b/md/bought-a-thinkpad/x200_clone.png
Binary files differ.
diff --git a/md/dwm-config/dwm-config.md b/md/dwm-config/dwm-config.md
@@ -1,5 +1,7 @@
-% title: "dwm - The dynamic window manager"
-% date: "23-Oct-2021"
+%%
+title: "dwm - The dynamic window manager"
+date: "23-Oct-2021"
+%%
 
 # dwm - The dynamic window manager
 
diff --git a/md/nerdearla-2022/nerdearla-2022.md b/md/nerdearla-2022/nerdearla-2022.md
@@ -1,5 +1,7 @@
-% title: "I'm going to Nerdearla 2022"
-% date: "23-Sep-2022"
+%%
+title: "I'm going to Nerdearla 2022"
+date: "23-Sep-2022"
+%%
 
 # I'm going to Nerdearla 2022
 
diff --git a/md/sav/sav.md b/md/sav/sav.md
@@ -1,5 +1,7 @@
-% title: "Sorting Algorithms Visualized"
-% date: "18-Sep-2022"
+%%
+title: "Sorting Algorithms Visualized"
+date: "18-Sep-2022"
+%%
 
 # Sorting Algorithms Visualized
 
diff --git a/md/testing-syntax-highlight/testing-syntax-highlight.md b/md/testing-syntax-highlight/testing-syntax-highlight.md
@@ -1,5 +1,7 @@
-% title: "Testing code syntax highlight"
-% date: "21-Oct-2022"
+%%
+title: "Testing code syntax highlight"
+date: "21-Oct-2022"
+%%
 
 # Testing code syntax highlight
 
diff --git a/md/vim-config/vim-config.md b/md/vim-config/vim-config.md
@@ -1,5 +1,7 @@
-% title: "vim - The keyboard driven text editor"
-% date: "04-Mar-2021"
+%%
+title: "vim - The keyboard driven text editor"
+date: "04-Mar-2021"
+%%
 
 ![Vim logo](vim_logo.png "Vim logo"){.article-icon}
 
diff --git a/nginx/fastcgi.conf b/nginx/fastcgi.conf
@@ -0,0 +1,26 @@
+
+fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  REQUEST_SCHEME     $scheme;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;
diff --git a/nginx/fastcgi_params b/nginx/fastcgi_params
@@ -0,0 +1,25 @@
+
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  REQUEST_SCHEME     $scheme;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;
diff --git a/nginx/koi-utf b/nginx/koi-utf
@@ -0,0 +1,109 @@
+
+# This map is not a full koi8-r <> utf8 map: it does not contain
+# box-drawing and some other characters.  Besides this map contains
+# several koi8-u and Byelorussian letters which are not in koi8-r.
+# If you need a full and standard map, use contrib/unicode2nginx/koi-utf
+# map instead.
+
+charset_map  koi8-r  utf-8 {
+
+    80  E282AC ; # euro
+
+    95  E280A2 ; # bullet
+
+    9A  C2A0 ;   # &nbsp;
+
+    9E  C2B7 ;   # &middot;
+
+    A3  D191 ;   # small yo
+    A4  D194 ;   # small Ukrainian ye
+
+    A6  D196 ;   # small Ukrainian i
+    A7  D197 ;   # small Ukrainian yi
+
+    AD  D291 ;   # small Ukrainian soft g
+    AE  D19E ;   # small Byelorussian short u
+
+    B0  C2B0 ;   # &deg;
+
+    B3  D081 ;   # capital YO
+    B4  D084 ;   # capital Ukrainian YE
+
+    B6  D086 ;   # capital Ukrainian I
+    B7  D087 ;   # capital Ukrainian YI
+
+    B9  E28496 ; # numero sign
+
+    BD  D290 ;   # capital Ukrainian soft G
+    BE  D18E ;   # capital Byelorussian short U
+
+    BF  C2A9 ;   # (C)
+
+    C0  D18E ;   # small yu
+    C1  D0B0 ;   # small a
+    C2  D0B1 ;   # small b
+    C3  D186 ;   # small ts
+    C4  D0B4 ;   # small d
+    C5  D0B5 ;   # small ye
+    C6  D184 ;   # small f
+    C7  D0B3 ;   # small g
+    C8  D185 ;   # small kh
+    C9  D0B8 ;   # small i
+    CA  D0B9 ;   # small j
+    CB  D0BA ;   # small k
+    CC  D0BB ;   # small l
+    CD  D0BC ;   # small m
+    CE  D0BD ;   # small n
+    CF  D0BE ;   # small o
+
+    D0  D0BF ;   # small p
+    D1  D18F ;   # small ya
+    D2  D180 ;   # small r
+    D3  D181 ;   # small s
+    D4  D182 ;   # small t
+    D5  D183 ;   # small u
+    D6  D0B6 ;   # small zh
+    D7  D0B2 ;   # small v
+    D8  D18C ;   # small soft sign
+    D9  D18B ;   # small y
+    DA  D0B7 ;   # small z
+    DB  D188 ;   # small sh
+    DC  D18D ;   # small e
+    DD  D189 ;   # small shch
+    DE  D187 ;   # small ch
+    DF  D18A ;   # small hard sign
+
+    E0  D0AE ;   # capital YU
+    E1  D090 ;   # capital A
+    E2  D091 ;   # capital B
+    E3  D0A6 ;   # capital TS
+    E4  D094 ;   # capital D
+    E5  D095 ;   # capital YE
+    E6  D0A4 ;   # capital F
+    E7  D093 ;   # capital G
+    E8  D0A5 ;   # capital KH
+    E9  D098 ;   # capital I
+    EA  D099 ;   # capital J
+    EB  D09A ;   # capital K
+    EC  D09B ;   # capital L
+    ED  D09C ;   # capital M
+    EE  D09D ;   # capital N
+    EF  D09E ;   # capital O
+
+    F0  D09F ;   # capital P
+    F1  D0AF ;   # capital YA
+    F2  D0A0 ;   # capital R
+    F3  D0A1 ;   # capital S
+    F4  D0A2 ;   # capital T
+    F5  D0A3 ;   # capital U
+    F6  D096 ;   # capital ZH
+    F7  D092 ;   # capital V
+    F8  D0AC ;   # capital soft sign
+    F9  D0AB ;   # capital Y
+    FA  D097 ;   # capital Z
+    FB  D0A8 ;   # capital SH
+    FC  D0AD ;   # capital E
+    FD  D0A9 ;   # capital SHCH
+    FE  D0A7 ;   # capital CH
+    FF  D0AA ;   # capital hard sign
+}
diff --git a/nginx/koi-win b/nginx/koi-win
@@ -0,0 +1,103 @@
+
+charset_map  koi8-r  windows-1251 {
+
+    80  88 ; # euro
+
+    95  95 ; # bullet
+
+    9A  A0 ; # &nbsp;
+
+    9E  B7 ; # &middot;
+
+    A3  B8 ; # small yo
+    A4  BA ; # small Ukrainian ye
+
+    A6  B3 ; # small Ukrainian i
+    A7  BF ; # small Ukrainian yi
+
+    AD  B4 ; # small Ukrainian soft g
+    AE  A2 ; # small Byelorussian short u
+
+    B0  B0 ; # &deg;
+
+    B3  A8 ; # capital YO
+    B4  AA ; # capital Ukrainian YE
+
+    B6  B2 ; # capital Ukrainian I
+    B7  AF ; # capital Ukrainian YI
+
+    B9  B9 ; # numero sign
+
+    BD  A5 ; # capital Ukrainian soft G
+    BE  A1 ; # capital Byelorussian short U
+
+    BF  A9 ; # (C)
+
+    C0  FE ; # small yu
+    C1  E0 ; # small a
+    C2  E1 ; # small b
+    C3  F6 ; # small ts
+    C4  E4 ; # small d
+    C5  E5 ; # small ye
+    C6  F4 ; # small f
+    C7  E3 ; # small g
+    C8  F5 ; # small kh
+    C9  E8 ; # small i
+    CA  E9 ; # small j
+    CB  EA ; # small k
+    CC  EB ; # small l
+    CD  EC ; # small m
+    CE  ED ; # small n
+    CF  EE ; # small o
+
+    D0  EF ; # small p
+    D1  FF ; # small ya
+    D2  F0 ; # small r
+    D3  F1 ; # small s
+    D4  F2 ; # small t
+    D5  F3 ; # small u
+    D6  E6 ; # small zh
+    D7  E2 ; # small v
+    D8  FC ; # small soft sign
+    D9  FB ; # small y
+    DA  E7 ; # small z
+    DB  F8 ; # small sh
+    DC  FD ; # small e
+    DD  F9 ; # small shch
+    DE  F7 ; # small ch
+    DF  FA ; # small hard sign
+
+    E0  DE ; # capital YU
+    E1  C0 ; # capital A
+    E2  C1 ; # capital B
+    E3  D6 ; # capital TS
+    E4  C4 ; # capital D
+    E5  C5 ; # capital YE
+    E6  D4 ; # capital F
+    E7  C3 ; # capital G
+    E8  D5 ; # capital KH
+    E9  C8 ; # capital I
+    EA  C9 ; # capital J
+    EB  CA ; # capital K
+    EC  CB ; # capital L
+    ED  CC ; # capital M
+    EE  CD ; # capital N
+    EF  CE ; # capital O
+
+    F0  CF ; # capital P
+    F1  DF ; # capital YA
+    F2  D0 ; # capital R
+    F3  D1 ; # capital S
+    F4  D2 ; # capital T
+    F5  D3 ; # capital U
+    F6  C6 ; # capital ZH
+    F7  C2 ; # capital V
+    F8  DC ; # capital soft sign
+    F9  DB ; # capital Y
+    FA  C7 ; # capital Z
+    FB  D8 ; # capital SH
+    FC  DD ; # capital E
+    FD  D9 ; # capital SHCH
+    FE  D7 ; # capital CH
+    FF  DA ; # capital hard sign
+}
diff --git a/nginx/mime.types b/nginx/mime.types
@@ -0,0 +1,89 @@
+
+types {
+    text/html                             html htm shtml;
+    text/css                              css;
+    text/xml                              xml;
+    image/gif                             gif;
+    image/jpeg                            jpeg jpg;
+    application/javascript                js;
+    application/atom+xml                  atom;
+    application/rss+xml                   rss;
+
+    text/mathml                           mml;
+    text/plain                            txt;
+    text/vnd.sun.j2me.app-descriptor      jad;
+    text/vnd.wap.wml                      wml;
+    text/x-component                      htc;
+
+    image/png                             png;
+    image/tiff                            tif tiff;
+    image/vnd.wap.wbmp                    wbmp;
+    image/x-icon                          ico;
+    image/x-jng                           jng;
+    image/x-ms-bmp                        bmp;
+    image/svg+xml                         svg svgz;
+    image/webp                            webp;
+
+    application/font-woff                 woff;
+    application/java-archive              jar war ear;
+    application/json                      json;
+    application/mac-binhex40              hqx;
+    application/msword                    doc;
+    application/pdf                       pdf;
+    application/postscript                ps eps ai;
+    application/rtf                       rtf;
+    application/vnd.apple.mpegurl         m3u8;
+    application/vnd.ms-excel              xls;
+    application/vnd.ms-fontobject         eot;
+    application/vnd.ms-powerpoint         ppt;
+    application/vnd.wap.wmlc              wmlc;
+    application/vnd.google-earth.kml+xml  kml;
+    application/vnd.google-earth.kmz      kmz;
+    application/x-7z-compressed           7z;
+    application/x-cocoa                   cco;
+    application/x-java-archive-diff       jardiff;
+    application/x-java-jnlp-file          jnlp;
+    application/x-makeself                run;
+    application/x-perl                    pl pm;
+    application/x-pilot                   prc pdb;
+    application/x-rar-compressed          rar;
+    application/x-redhat-package-manager  rpm;
+    application/x-sea                     sea;
+    application/x-shockwave-flash         swf;
+    application/x-stuffit                 sit;
+    application/x-tcl                     tcl tk;
+    application/x-x509-ca-cert            der pem crt;
+    application/x-xpinstall               xpi;
+    application/xhtml+xml                 xhtml;
+    application/xspf+xml                  xspf;
+    application/zip                       zip;
+
+    application/octet-stream              bin exe dll;
+    application/octet-stream              deb;
+    application/octet-stream              dmg;
+    application/octet-stream              iso img;
+    application/octet-stream              msi msp msm;
+
+    application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
+    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
+    application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;
+
+    audio/midi                            mid midi kar;
+    audio/mpeg                            mp3;
+    audio/ogg                             ogg;
+    audio/x-m4a                           m4a;
+    audio/x-realaudio                     ra;
+
+    video/3gpp                            3gpp 3gp;
+    video/mp2t                            ts;
+    video/mp4                             mp4;
+    video/mpeg                            mpeg mpg;
+    video/quicktime                       mov;
+    video/webm                            webm;
+    video/x-flv                           flv;
+    video/x-m4v                           m4v;
+    video/x-mng                           mng;
+    video/x-ms-asf                        asx asf;
+    video/x-ms-wmv                        wmv;
+    video/x-msvideo                       avi;
+}
diff --git a/nginx/modules-enabled/50-mod-http-auth-pam.conf b/nginx/modules-enabled/50-mod-http-auth-pam.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-auth-pam.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-http-dav-ext.conf b/nginx/modules-enabled/50-mod-http-dav-ext.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-dav-ext.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-http-echo.conf b/nginx/modules-enabled/50-mod-http-echo.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-echo.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-http-geoip.conf b/nginx/modules-enabled/50-mod-http-geoip.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-geoip.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-http-image-filter.conf b/nginx/modules-enabled/50-mod-http-image-filter.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-image-filter.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-http-subs-filter.conf b/nginx/modules-enabled/50-mod-http-subs-filter.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-subs-filter.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-http-upstream-fair.conf b/nginx/modules-enabled/50-mod-http-upstream-fair.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-upstream-fair.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-http-xslt-filter.conf b/nginx/modules-enabled/50-mod-http-xslt-filter.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-http-xslt-filter.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-mail.conf b/nginx/modules-enabled/50-mod-mail.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-mail.conf
+\ No newline at end of file
diff --git a/nginx/modules-enabled/50-mod-stream.conf b/nginx/modules-enabled/50-mod-stream.conf
@@ -0,0 +1 @@
+/usr/share/nginx/modules-available/mod-stream.conf
+\ No newline at end of file
diff --git a/nginx/nginx.conf b/nginx/nginx.conf
@@ -0,0 +1,104 @@
+user www-data;
+worker_processes auto;
+pid /run/nginx.pid;
+include /etc/nginx/modules-enabled/*.conf;
+
+events {
+    worker_connections 768;
+    # multi_accept on;
+}
+
+http {
+    root /var/www/html;
+
+    sendfile on;
+    tcp_nopush on;
+    types_hash_max_size 2048;
+
+    ssi on;
+    ssi_types *;
+
+    include /etc/nginx/mime.types;
+    default_type application/octet-stream;
+
+    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
+    ssl_prefer_server_ciphers on;
+
+    access_log /var/log/nginx/access.log;
+    error_log /var/log/nginx/error.log;
+
+    # server {
+    #     server_name kloeckner.com.ar;
+    #     return 301 https://kloeckner.com.ar$request_uri;
+    # }
+
+    # HTTP - redirect all requests to HTTPS
+    server {
+        server_name kloeckner.com.ar;
+        listen 80;
+        listen [::]:80;
+        return 301 https://$host$request_uri;
+    }
+
+    server {
+        listen        80;
+        server_name    kloeckner.com.ar;
+
+        location / {
+            index    index.html;
+            ssi on;
+            # autoindex on;
+            # autoindex_exact_size on;
+            try_files $uri $uri.html $uri/ index.html /index.html =404;
+        }
+        if ($host = 'www.kloeckner.com.ar') {
+                return 301 https://kloeckner.com.ar$request_uri;
+            }
+
+        # Enable text compression
+        gzip on;
+        gzip_min_length 1100;
+        gzip_buffers 4 32k;
+        gzip_types text/plain application/x-javascript text/xml text/css;
+        gzip_vary on;
+
+        # Serving static assets with an efficient cache policy
+        # Media: images, icons, video, audio, HTC
+        location ~* \.(?:jpg|jpeg|gif|png|ico|svg|webp|woff2|woff)$ {
+            expires 1M;
+            access_log off;
+            # max-age must be in seconds
+            add_header Cache-Control "max-age=2629746, public";
+        }
+
+        # CSS and Javascript
+        location ~* \.(?:css|js)$ {
+            expires 1y;
+            access_log off;
+            add_header Cache-Control "max-age=31556952, public";
+        }
+
+        listen [::]:443 ssl ipv6only=on; # managed by Certbot
+        listen 443 ssl; # managed by Certbot
+        ssl_certificate /etc/letsencrypt/live/kloeckner.com.ar-0001/fullchain.pem; # managed by Certbot
+        ssl_certificate_key /etc/letsencrypt/live/kloeckner.com.ar-0001/privkey.pem; # managed by Certbot
+        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
+        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
+    }
+
+    # https
+    server {
+        if ($host = kloeckner.com.ar) {
+            return 301 https://$host$request_uri;
+        } # managed by Certbot
+
+        if ($host = www.kloeckner.com.ar) {
+            return 301 https://$host$request_uri;
+        }
+
+        listen 80;
+        listen [::]:80;
+
+        return 404; # managed by Certbot
+    }
+}
diff --git a/nginx/proxy_params b/nginx/proxy_params
@@ -0,0 +1,4 @@
+proxy_set_header Host $http_host;
+proxy_set_header X-Real-IP $remote_addr;
+proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+proxy_set_header X-Forwarded-Proto $scheme;
diff --git a/nginx/scgi_params b/nginx/scgi_params
@@ -0,0 +1,17 @@
+
+scgi_param  REQUEST_METHOD     $request_method;
+scgi_param  REQUEST_URI        $request_uri;
+scgi_param  QUERY_STRING       $query_string;
+scgi_param  CONTENT_TYPE       $content_type;
+
+scgi_param  DOCUMENT_URI       $document_uri;
+scgi_param  DOCUMENT_ROOT      $document_root;
+scgi_param  SCGI               1;
+scgi_param  SERVER_PROTOCOL    $server_protocol;
+scgi_param  REQUEST_SCHEME     $scheme;
+scgi_param  HTTPS              $https if_not_empty;
+
+scgi_param  REMOTE_ADDR        $remote_addr;
+scgi_param  REMOTE_PORT        $remote_port;
+scgi_param  SERVER_PORT        $server_port;
+scgi_param  SERVER_NAME        $server_name;
diff --git a/nginx/sites-available/default b/nginx/sites-available/default
@@ -0,0 +1,91 @@
+##
+# You should look at the following URL's in order to grasp a solid understanding
+# of Nginx configuration files in order to fully unleash the power of Nginx.
+# https://www.nginx.com/resources/wiki/start/
+# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
+# https://wiki.debian.org/Nginx/DirectoryStructure
+#
+# In most cases, administrators will remove this file from sites-enabled/ and
+# leave it as reference inside of sites-available where it will continue to be
+# updated by the nginx packaging team.
+#
+# This file will automatically load configuration files provided by other
+# applications, such as Drupal or Wordpress. These applications will be made
+# available underneath a path with that package name, such as /drupal8.
+#
+# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
+##
+
+# Default server configuration
+#
+server {
+    listen 80 default_server;
+    listen [::]:80 default_server;
+
+    # SSL configuration
+    #
+    # listen 443 ssl default_server;
+    # listen [::]:443 ssl default_server;
+    #
+    # Note: You should disable gzip for SSL traffic.
+    # See: https://bugs.debian.org/773332
+    #
+    # Read up on ssl_ciphers to ensure a secure configuration.
+    # See: https://bugs.debian.org/765782
+    #
+    # Self signed certs generated by the ssl-cert package
+    # Don't use them in a production server!
+    #
+    # include snippets/snakeoil.conf;
+
+    root /var/www/html;
+
+    # Add index.php to the list if you are using PHP
+    index index.html index.htm index.nginx-debian.html;
+
+    server_name _;
+
+    location / {
+        # First attempt to serve request as file, then
+        # as directory, then fall back to displaying a 404.
+        try_files $uri $uri/ =404;
+    }
+
+    # pass PHP scripts to FastCGI server
+    #
+    #location ~ \.php$ {
+    #    include snippets/fastcgi-php.conf;
+    #
+    #    # With php-fpm (or other unix sockets):
+    #    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
+    #    # With php-cgi (or other tcp sockets):
+    #    fastcgi_pass 127.0.0.1:9000;
+    #}
+
+    # deny access to .htaccess files, if Apache's document root
+    # concurs with nginx's one
+    #
+    #location ~ /\.ht {
+    #    deny all;
+    #}
+}
+
+
+# Virtual Host configuration for example.com
+#
+# You can move that to a different file under sites-available/ and symlink that
+# to sites-enabled/ to enable it.
+#
+#server {
+#    listen 80;
+#    listen [::]:80;
+#
+#    server_name example.com;
+#
+#    root /var/www/example.com;
+#    index index.html;
+#
+#    location / {
+#        try_files $uri $uri/ =404;
+#    }
+#}
diff --git a/nginx/sites-available/kloeckner.com.ar b/nginx/sites-available/kloeckner.com.ar
@@ -0,0 +1,37 @@
+server {
+    listen        80;
+    server_name    kloeckner.com.ar www.kloeckner.com.ar;
+
+    location / {
+        try_files $uri $uri.html =404;
+        root /var/www/html;
+        index    index.html;
+        ssi on;
+        # autoindex on;
+        # autoindex_exact_size on;
+    }
+
+    # error_page 500 502 503 504 /50x.html
+    # location = /50x.html {
+    #     root /usr/share/nginx/html
+    # }
+
+    listen [::]:443 ssl ipv6only=on; # managed by Certbot
+    listen 443 ssl; # managed by Certbot
+    ssl_certificate /etc/letsencrypt/live/kloeckner.com.ar-0001/fullchain.pem; # managed by Certbot
+    ssl_certificate_key /etc/letsencrypt/live/kloeckner.com.ar-0001/privkey.pem; # managed by Certbot
+    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
+    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
+}
+
+server {
+    if ($host = kloeckner.com.ar) {
+        return 301 https://$host$request_uri;
+    } # managed by Certbot
+
+    listen 80;
+    listen [::]:80;
+
+    server_name kloeckner.com.ar www.kloeckner.com.ar;
+    return 404; # managed by Certbot
+}
diff --git a/nginx/sites-enabled/default b/nginx/sites-enabled/default
@@ -0,0 +1 @@
+/etc/nginx/sites-available/default
+\ No newline at end of file
diff --git a/nginx/sites-enabled/kloeckner.com.ar b/nginx/sites-enabled/kloeckner.com.ar
@@ -0,0 +1 @@
+/etc/nginx/sites-available/kloeckner.com.ar
+\ No newline at end of file
diff --git a/nginx/snippets/fastcgi-php.conf b/nginx/snippets/fastcgi-php.conf
@@ -0,0 +1,13 @@
+# regex to split $uri to $fastcgi_script_name and $fastcgi_path
+fastcgi_split_path_info ^(.+?\.php)(/.*)$;
+
+# Check that the PHP script exists before passing it
+try_files $fastcgi_script_name =404;
+
+# Bypass the fact that try_files resets $fastcgi_path_info
+# see: http://trac.nginx.org/nginx/ticket/321
+set $path_info $fastcgi_path_info;
+fastcgi_param PATH_INFO $path_info;
+
+fastcgi_index index.php;
+include fastcgi.conf;
diff --git a/nginx/snippets/snakeoil.conf b/nginx/snippets/snakeoil.conf
@@ -0,0 +1,5 @@
+# Self signed certificates generated by the ssl-cert package
+# Don't use them in a production server!
+
+ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
+ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
diff --git a/nginx/uwsgi_params b/nginx/uwsgi_params
@@ -0,0 +1,17 @@
+
+uwsgi_param  QUERY_STRING       $query_string;
+uwsgi_param  REQUEST_METHOD     $request_method;
+uwsgi_param  CONTENT_TYPE       $content_type;
+uwsgi_param  CONTENT_LENGTH     $content_length;
+
+uwsgi_param  REQUEST_URI        $request_uri;
+uwsgi_param  PATH_INFO          $document_uri;
+uwsgi_param  DOCUMENT_ROOT      $document_root;
+uwsgi_param  SERVER_PROTOCOL    $server_protocol;
+uwsgi_param  REQUEST_SCHEME     $scheme;
+uwsgi_param  HTTPS              $https if_not_empty;
+
+uwsgi_param  REMOTE_ADDR        $remote_addr;
+uwsgi_param  REMOTE_PORT        $remote_port;
+uwsgi_param  SERVER_PORT        $server_port;
+uwsgi_param  SERVER_NAME        $server_name;
diff --git a/nginx/win-utf b/nginx/win-utf
@@ -0,0 +1,125 @@
+# This map is not a full windows-1251 <> utf8 map: it does not
+# contain Serbian and Macedonian letters.    If you need a full map,
+# use contrib/unicode2nginx/win-utf map instead.
+
+charset_map    windows-1251    utf-8 {
+
+    82    E2809A; # single low-9 quotation mark
+
+    84    E2809E; # double low-9 quotation mark
+    85    E280A6; # ellipsis
+    86    E280A0; # dagger
+    87    E280A1; # double dagger
+    88    E282AC; # euro
+    89    E280B0; # per mille
+
+    91    E28098; # left single quotation mark
+    92    E28099; # right single quotation mark
+    93    E2809C; # left double quotation mark
+    94    E2809D; # right double quotation mark
+    95    E280A2; # bullet
+    96    E28093; # en dash
+    97    E28094; # em dash
+
+    99    E284A2; # trade mark sign
+
+    A0    C2A0;   # &nbsp;
+    A1    D18E;   # capital Byelorussian short U
+    A2    D19E;   # small Byelorussian short u
+
+    A4    C2A4;   # currency sign
+    A5    D290;   # capital Ukrainian soft G
+    A6    C2A6;   # borken bar
+    A7    C2A7;   # section sign
+    A8    D081;   # capital YO
+    A9    C2A9;   # (C)
+    AA    D084;   # capital Ukrainian YE
+    AB    C2AB;   # left-pointing double angle quotation mark
+    AC    C2AC;   # not sign
+    AD    C2AD;   # soft hypen
+    AE    C2AE;   # (R)
+    AF    D087;   # capital Ukrainian YI
+
+    B0    C2B0;   # &deg;
+    B1    C2B1;   # plus-minus sign
+    B2    D086;   # capital Ukrainian I
+    B3    D196;   # small Ukrainian i
+    B4    D291;   # small Ukrainian soft g
+    B5    C2B5;   # micro sign
+    B6    C2B6;   # pilcrow sign
+    B7    C2B7;   # &middot;
+    B8    D191;   # small yo
+    B9    E28496; # numero sign
+    BA    D194;   # small Ukrainian ye
+    BB    C2BB;   # right-pointing double angle quotation mark
+
+    BF    D197;   # small Ukrainian yi
+
+    C0    D090;   # capital A
+    C1    D091;   # capital B
+    C2    D092;   # capital V
+    C3    D093;   # capital G
+    C4    D094;   # capital D
+    C5    D095;   # capital YE
+    C6    D096;   # capital ZH
+    C7    D097;   # capital Z
+    C8    D098;   # capital I
+    C9    D099;   # capital J
+    CA    D09A;   # capital K
+    CB    D09B;   # capital L
+    CC    D09C;   # capital M
+    CD    D09D;   # capital N
+    CE    D09E;   # capital O
+    CF    D09F;   # capital P
+
+    D0    D0A0;   # capital R
+    D1    D0A1;   # capital S
+    D2    D0A2;   # capital T
+    D3    D0A3;   # capital U
+    D4    D0A4;   # capital F
+    D5    D0A5;   # capital KH
+    D6    D0A6;   # capital TS
+    D7    D0A7;   # capital CH
+    D8    D0A8;   # capital SH
+    D9    D0A9;   # capital SHCH
+    DA    D0AA;   # capital hard sign
+    DB    D0AB;   # capital Y
+    DC    D0AC;   # capital soft sign
+    DD    D0AD;   # capital E
+    DE    D0AE;   # capital YU
+    DF    D0AF;   # capital YA
+
+    E0    D0B0;   # small a
+    E1    D0B1;   # small b
+    E2    D0B2;   # small v
+    E3    D0B3;   # small g
+    E4    D0B4;   # small d
+    E5    D0B5;   # small ye
+    E6    D0B6;   # small zh
+    E7    D0B7;   # small z
+    E8    D0B8;   # small i
+    E9    D0B9;   # small j
+    EA    D0BA;   # small k
+    EB    D0BB;   # small l
+    EC    D0BC;   # small m
+    ED    D0BD;   # small n
+    EE    D0BE;   # small o
+    EF    D0BF;   # small p
+
+    F0    D180;   # small r
+    F1    D181;   # small s
+    F2    D182;   # small t
+    F3    D183;   # small u
+    F4    D184;   # small f
+    F5    D185;   # small kh
+    F6    D186;   # small ts
+    F7    D187;   # small ch
+    F8    D188;   # small sh
+    F9    D189;   # small shch
+    FA    D18A;   # small hard sign
+    FB    D18B;   # small y
+    FC    D18C;   # small soft sign
+    FD    D18D;   # small e
+    FE    D18E;   # small yu
+    FF    D18F;   # small ya
+}
diff --git a/robots.txt b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: http://www.kloeckner.com.ar/sitemap
diff --git a/scripts/build_page.sh b/scripts/build_page.sh
@@ -49,8 +49,12 @@ check_opt() {
 
 check_opt $@
 
-title=$(cat $input | head -n 3 | grep -oP '(?<=% title: \")(.*?)(?=\")')
-date=$(cat $input | head -n 3 | grep -oP '(?<=% date: \")(.*?)(?=\")')
+# deprecated format
+# title=$(cat $input | head -n 3 | grep -oP '(?<=% title: \")(.*?)(?=\")')
+# date=$(cat $input | head -n 3 | grep -oP '(?<=% date: \")(.*?)(?=\")')
+
+title=$(cat $input | sed '/^%%/,/^%%/!d' | grep -oP '(?<=title: \")(.*?)(?=\")')
+date=$(cat $input | sed '/^%%/,/^%%/!d' | grep -oP '(?<=date: \")(.*?)(?=\")')
 pagetitle="Martin Klöckner's Webpage"
 lang="en"
 generator="Shell script"
@@ -60,13 +64,17 @@ last_update="$(date -r $input '+%d-%b-%Y')"
 
 # echo "file: $input"
 # echo "filename: $filename"
-# echo "title: $title"
-# echo "date: $date"
+echo "title: $title"
+echo "date: $date"
 # echo "dest dir: $dest_dir"
 # echo "template: $template"
 
+[ -z "$title" ] || [ -z "$date" ] && echo "error: no metadata found on file $input" && exit 1
+
 # generate body (skips lines starting with `%`, they're considered metadata)
-sed '/^% /d' $input | lowdown --html-no-head-ids --html-no-escapehtml --html-no-owasp > body.html
+# sed '/^% /d' $input | lowdown --html-no-head-ids --html-no-escapehtml --html-no-owasp > body.html
+# sed '/^%%/,/^%%/'
+sed '/^%%/,/^%%/d' $input | lowdown --html-no-head-ids --html-no-escapehtml --html-no-owasp > body.html
 
 # puts ids to <h1> tag and adds paragraph next to it with the article-date
 sed -i -e 's/<h1>/<h1 id=article-title>/g' \
@@ -107,3 +115,4 @@ rm body.html &> /dev/null
 mv tmp.html "$dest_dir"/"$filename".html
 
 echo "==> "$filename".html generated succesfully"
+echo ""
diff --git a/scripts/convert-png.sh b/scripts/convert-png.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+for i in $(ls *.png); do ffmpeg -i $i "$(basename --suffix=.png $i)".jpeg; done
diff --git a/scripts/sort_blog_index.py b/scripts/sort_blog_index.py
@@ -31,7 +31,14 @@ import sys
 
 date_delimiter = "-"
 # regex = re.compile('(?<=<meta name="article-date" content=")(.*?)(?=")')
-regex = re.compile('(?<=% date: \")(.*?)(?=\")')
+
+# r_metadata_begin = re.compile('(?<=%%)(.*)(?=%%)')
+r_metadata_tag = re.compile('^%%')
+r1 = re.compile('(?<=% date: \")(.*?)(?=\")')
+
+# compatible with deprecated metadata format
+r2 = re.compile('(?<=^date: \")(.*?)(?=\")')
+
 suffix = '.md'
 paths = []
 
@@ -42,12 +49,51 @@ if len(sys.argv) == 1:
 else:
     root_folder = sys.argv[1]
 
-def get_content(file_name):
+def get_content_old(file_name):
     with open(file_name) as f:
         for line in f:
-            result = regex.search(line)
+            metadata = r_metadata.search(line)
+            print(metadata)
+            result = r1.search(metadata)
             if result is not None:
                 return time.mktime(datetime.datetime.strptime(result.group(0), "%d-%b-%Y").timetuple())
+            else:
+                result = r2.search(metadata)
+                if result is not None:
+                    return time.mktime(datetime.datetime.strptime(result.group(0), "%d-%b-%Y").timetuple())
+                else:
+                    result = r2.search(line)
+                    if result is not None:
+                        return time.mktime(datetime.datetime.strptime(result.group(0), "%d-%b-%Y").timetuple())
+                    else:
+                        print('error: no metadata found on file {}'.format(file_name))
+                        quit()
+
+
+def get_content(file_name):
+    get = False
+    with open(file_name) as f:
+        for line in f:
+            if get == True:
+                result = r1.search(line)
+                if result is not None:
+                    return time.mktime(datetime.datetime.strptime(result.group(0), "%d-%b-%Y").timetuple())
+                else:
+                    result = r2.search(line)
+                    if result is not None:
+                        return time.mktime(datetime.datetime.strptime(result.group(0), "%d-%b-%Y").timetuple())
+
+                if r_metadata_tag.search(line) is not None:
+                    get = False
+                    quit()
+
+            if r_metadata_tag.search(line) is not None:
+                get = True
+
+        if get == True:
+            print('error: metadata corrupted or incorrect format on file {}'.format(file_name))
+            quit()
+
 
 folders = os.listdir(root_folder)
 for folder in folders:
diff --git a/scripts/sync.sh b/scripts/sync.sh
@@ -16,8 +16,13 @@ generate_blog_index() {
 
     # for i in $(eval $root_folder/scritps/sort_blog_index.py $root_folder/$blog_folder); do
     for i in ${blog_folders[@]}; do
-        article_date=$(cat $i | grep -oP '(?<=% date: \")(.*?)(?=\")')
-        article_title=$(cat $i | grep -oP '(?<=% title: \")(.*?)(?=\")')
+        # deprecated format
+        # article_date=$(cat $i | grep -oP '(?<=% date: \")(.*?)(?=\")')
+        # article_title=$(cat $i | grep -oP '(?<=% title: \")(.*?)(?=\")')
+        article_date=$(cat $i | sed '/^%%/,/^%%/!d' | grep -oP '(?<=date: \")(.*?)(?=\")')
+        article_title=$(cat $i | sed '/^%%/,/^%%/!d' | grep -oP '(?<=title: \")(.*?)(?=\")')
+        [ -z "$article_title" ] || [ -z "$article_date" ] && echo "error: no metadata found on file $input" && exit 1
+
         file_name=$(echo "$i" | grep -oE '[^/]*$' | cut -d '.' -f 1)
 
         printf "<li><time>%s</time> <a href=\"/$html_folder/$file_name/$file_name.html\">%s</a></li>\n" \
@@ -28,7 +33,7 @@ generate_blog_index() {
 generate_latest_uploads() {
     rm -rf $root_folder/$latest_uploads_file ||:
 
-    tail -n 5 $root_folder/$blog_index_file > $root_folder/$latest_uploads_file
+    head -n 5 $root_folder/$blog_index_file > $root_folder/$latest_uploads_file
 }
 
 generate_rss_feed() {
@@ -40,11 +45,17 @@ generate_rss_feed() {
     for i in ${blog_folders[@]}; do
         # article_date=$(cat $i | grep -oP '(?<=<meta name="article-date" content=")(.*?)(?=")')
         # article_title=$(cat $i | grep -oP '(?<=<meta name="article-title" content=")(.*?)(?=")')
-        article_date=$(cat $i | grep -oP '(?<=% date: \")(.*?)(?=\")')
-        article_title=$(cat $i | grep -oP '(?<=% title: \")(.*?)(?=\")')
+        # deprecated format
+        # article_date=$(cat $i | grep -oP '(?<=% date: \")(.*?)(?=\")')
+        # article_title=$(cat $i | grep -oP '(?<=% title: \")(.*?)(?=\")')
+
+        article_date=$(cat $i | sed '/^%%/,/^%%/!d' | grep -oP '(?<=date: \")(.*?)(?=\")')
+        article_title=$(cat $i | sed '/^%%/,/^%%/!d' | grep -oP '(?<=title: \")(.*?)(?=\")')
+        [ -z "$article_title" ] || [ -z "$article_date" ] && echo "error: no metadata found on file $input" && exit 1
+
         file_name=$(echo "$i" | grep -oE '[^/]*$' | cut -d '.' -f 1)
 
-        article_description="$(sed '/^% /d' $root_folder/md/$file_name/$file_name.md | md2html |\
+        article_description="$(sed '/^%%/,/^%%/d' $root_folder/md/$file_name/$file_name.md | md2html |\
             sed -E -e 's/ \(last\ update//g' -e 's/\{[^\}]*\}//g'\
                    -e 's/<code>|<\/code>//g' -e 's/<em>|<\/em>//g')"
 
@@ -87,7 +98,7 @@ check_rss_feed_last_build() {
             fi
         fi
     done
-    $updated || echo "     └─ Rss feed file up to date"
+    $updated || echo "     └─ Rss feed file up to date" && echo ""
 }
 
 [ ! -d $root_folder ] && echo "error: root_folder: $root_folder not found" && exit 1
diff --git a/sitemap b/sitemap
@@ -0,0 +1,9 @@
+https://kloeckner.com.ar/about.html
+https://kloeckner.com.ar/blog.html
+https://kloeckner.com.ar/index.html
+https://kloeckner.com.ar/blog/bought-a-thinkpad/bought-a-thinkpad.html
+https://kloeckner.com.ar/blog/dwm-config/dwm-config.html
+https://kloeckner.com.ar/blog/vim-config/vim-config.html
+https://kloeckner.com.ar/blog/testing-syntax-highlight/testing-syntax-highlight.html
+https://kloeckner.com.ar/blog/sav/sav.html
+https://kloeckner.com.ar/blog/nerdearla-2022/nerdearla-2022.html