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:
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 ; # + + 9E C2B7 ; # · + + 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 ; # ° + + 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 ; # + + 9E B7 ; # · + + 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 ; # ° + + 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; # + 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; # ° + 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; # · + 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