diff --git a/config.toml b/config.toml
index c148f8f..c40c32f 100644
--- a/config.toml
+++ b/config.toml
@@ -8,8 +8,25 @@ dateFormat = "2006-01-02" # default
publishDir = "/var/www/qrz.is"
+[mediaTypes]
+[mediaTypes."text/gemini"]
+suffixes = ["gmi"]
+[outputFormats]
+[outputFormats.Gemini]
+ name = "GEMINI"
+ isPlainText = true
+ isHTML = false
+ mediaType = "text/gemini"
+ protocol = "gemini://"
+ permalinkable = true
+ path ="gemini/"
+
+[outputs]
+ home = ["HTML", "RSS", "GEMINI"]
+ page = ["HTML", "GEMINI"]
+
# Menu links
[menu]
[[menu.main]]
@@ -24,6 +41,14 @@ publishDir = "/var/www/qrz.is"
name = "About"
weight = 4
url = "/about/"
+[[menu.main]]
+ name = "Impressum"
+ weight = 5
+ url = "/impressum/"
+[[menu.main]]
+ name = "Datenschutz"
+ weight = 6
+ url = "/privacy/"
[[menu.footer]]
name = "Git"
weight = 5
@@ -41,8 +66,7 @@ publishDir = "/var/www/qrz.is"
weight = 8
url = "/privacy/"
[[menu.footer]]
- name = "Impress/Impressum"
+ name = "Imprint/Impressum"
weight = 9
url = "/impressum/"
-
diff --git a/content/about.md b/content/about.md
index 3417eda..c97b9a9 100644
--- a/content/about.md
+++ b/content/about.md
@@ -8,19 +8,12 @@ showthedate: false
Hi, I'm Michael Clemens. I'm an information security engineer with many years of experience in information technology. My first computer was a Commodore C64 (1989), followed by an Amiga (1992) and finally, in 1995, I got my first PC. In 1998 I installed my first Linux distribution (S.u.S.E. Linux 5.3), moved to Debian in 2002, tried a lot of BSDs and Linux distributions but always came back to Debian.
-I support the [Free Software Foundation Europe (fsfe.org)][1]. Everything I code in my freetime is therefore published as open source software. If you are interested, you can have a look at my projects [here][2]. I also try to document interesting stuff on my [blog][4].
+I support the [Free Software Foundation Europe (fsfe.org)](https://wiki.fsfe.org/Fellows/clemens). Everything I code in my freetime is therefore published as open source software. If you are interested, you can have a look at my [projects](/projects/). I also try to document interesting stuff on my [blog](/post/).
Besides that, I enjoy gaming on everything 8-bit (C64, Atari 2600, NES etc.) or fantasy consoles (PICO-8, TIC-80).
Apart from computer related hobbies, I love analog photography, bicycles, reading and many more.
-I am a licensed ham radio operator and member of the [DARC][3]. My callsign is DL6MHC. You can find some information about my station on my [QRZ.com page][6].
+I am a licensed ham radio operator and member of the [DARC](https://www.darc.de). My callsign is DL6MHC. You can find some information about my station on my [QRZ.com page](https://qrz.com/DB/DL6MHC).
-If you'd like to contact me, please send me a mail to [contact_0x7E5@qrz.is](mailto:contact_0x7E5@qrz.is) or send me a toot on [Mastodon][5].
-
- [1]: https://wiki.fsfe.org/Fellows/clemens
- [2]: /projects/
- [3]: https://www.darc.de
- [4]: /blog/
- [5]: https://mastodon.radio/@DL6MHC
- [6]: https://qrz.com/DB/DL6MHC
+If you'd like to contact me, please send me a mail to [contact_0x7E5@qrz.is](mailto:contact_0x7E5@qrz.is) or send me a toot on [Mastodon](https://mastodon.radio/@DL6MHC).
diff --git a/content/post/2011-08-05-the-arduino-enabled-washing-machine.md b/content/post/2011-08-05-the-arduino-enabled-washing-machine.md
index 9cc7194..1b5dea3 100644
--- a/content/post/2011-08-05-the-arduino-enabled-washing-machine.md
+++ b/content/post/2011-08-05-the-arduino-enabled-washing-machine.md
@@ -1,61 +1,47 @@
---
title: The Laundruino
+type: post
date: 2011-08-05T09:58:52+00:00
url: /the-arduino-enabled-washing-machine/
categories:
- arduino
tags:
- arduino
-
---
-My washing machine is located in the basement. Unfortunately, the time data displayed on the front panel is always inaccurate. So instead of constantly running down the stairs and checking if the laundry is done, I decided to connect the washing machine to my LAN and extend it’s features by a simple http server. This is what I needed for it:
- * 1 [arduino uno][1]
- * 1 [ethernet shield][2]
+My washing machine is located in the basement. Unfortunately, the time data displayed on the front panel is always inaccurate. So instead of constantly running down the stairs and checking if the laundry is done, I decided to connect the washing machine to my LAN and extend it's features by a simple http server. This is what I needed for it:
+
+ * 1 [arduino uno](http://arduino.cc/en/Main/ArduinoBoardUno)
+ * 1 [ethernet shield](http://arduino.cc/en/Main/ArduinoBoardEthernet)
* 1 opto-coupler (CNY17)
* 1 perfboard
* 1 resistor (150 Ohm)
-In my case, getting the right signal from the washing machine was simple: It has a „Finished“ LED on the front panel, so all I needed to do, was to solder it out and replace it with a two-core wire.
+In my case, getting the right signal from the washing machine was simple: It has a "Finished" LED on the front panel, so all I needed to do, was to solder it out and replace it with a two-core wire.
-![image][3]
+![image](/img/laundruino1_panel_small.jpg)
-![image][4]
+![image](/img/laundruino2_cuircuit_board_small.jpg)
-![image][5]
+![image](/img/laundruino3_washer_small.jpg)
-To connect my washing machine with the arduino, I built a minimal shield with a prefboard and a CNY17. Here’s how everything is put together:
+To connect my washing machine with the arduino, I built a minimal shield with a prefboard and a CNY17. Here's how everything is put together:
-![image][6]
+![image](/img/laundruino4_schematics_small.jpg)
-![image][7]
+![image](/img/laundruino5_shield_small.jpg)
-![image][8]
+![image](/img/laundruino6_shield_small.jpg)
-Now I have a LOW signal on pin A2 (digital mode) when the laundry is done and a HIGH signal if the machine is running or turned off. In my case, a loop of 100ms duration is needed every time to watch the signal because I don’t get a steady voltage here (I guess the front panel LEDs might be multiplexed). If Β the signal becomes LOW once in this time window, the washing machine has finished and the LED would have turned on.
+Now I have a LOW signal on pin A2 (digital mode) when the laundry is done and a HIGH signal if the machine is running or turned off. In my case, a loop of 100ms duration is needed every time to watch the signal because I don't get a steady voltage here (I guess the front panel LEDs might be multiplexed). If Β the signal becomes LOW once in this time window, the washing machine has finished and the LED would have turned on.
-![image][9]
+![image](/img/laundruino7_debug_small.jpg)
Screenshots:
-![image][10]
+![image](/img/laundruino8_screen1.jpg)
-![image][11]
+![image](/img/laundruino9_screen2.jpg)
-You can download the code on github: [https://git.qrz.is/clemens/laundruino ][12]
-
-
-
- [1]: http://arduino.cc/en/Main/ArduinoBoardUno
- [2]: http://arduino.cc/en/Main/ArduinoBoardEthernet
- [3]: /img/laundruino1_panel_small.jpg
- [4]: /img/laundruino2_cuircuit_board_small.jpg
- [5]: /img/laundruino3_washer_small.jpg
- [6]: /img/laundruino4_schematics_small.jpg
- [7]: /img/laundruino5_shield_small.jpg
- [8]: /img/laundruino6_shield_small.jpg
- [9]: /img/laundruino7_debug_small.jpg
- [10]: /img/laundruino8_screen1.jpg
- [11]: /img/laundruino9_screen2.jpg
- [12]: https://git.qrz.is/clemens/laundruino
+You can download the code here: [git.qrz.is](https://git.qrz.is/clemens/laundruino)
diff --git a/content/post/2012-10-30-the-one-button-audiobook-player.md b/content/post/2012-10-30-the-one-button-audiobook-player.md
index 65c13b2..3fbac52 100644
--- a/content/post/2012-10-30-the-one-button-audiobook-player.md
+++ b/content/post/2012-10-30-the-one-button-audiobook-player.md
@@ -1,5 +1,6 @@
---
title: The One Button Audiobook Player
+type: post
author: micha
date: 2012-10-29T23:20:05+00:00
url: /the-one-button-audiobook-player/
@@ -9,14 +10,14 @@ tags:
- raspberry audiobook
---
-This little Raspberry Pi based project is a gift for my wife’s grandmother for her 90th birthday. BeingΒ visually impaired, she is hard to entertain but loves to listen to audiobooks. The problem is, that she isn’t able to handle a ghetto blaster or MP3 player.
+This little Raspberry Pi based project is a gift for my wife's grandmother for her 90th birthday. BeingΒ visually impaired, she is hard to entertain but loves to listen to audiobooks. The problem is, that she isn't able to handle a ghetto blaster or MP3 player.
The solution to this problem was – tadaaaah – a one button audiobook player π
It basically consists of:
* 1 Raspberry Pi
- * 1 [ModMyPi enclosure][1]
+ * 1 [ModMyPi enclosure](https://www.modmypi.com/)
* 1 button
* 2 resistors (330 Ohm, 10 Kilo-Ohm)
* 1 blue LED
@@ -26,7 +27,7 @@ It basically consists of:
The following software has been used:
- * Raspbian minimal image ([http://www.linuxsystems.it/2012/06/raspbian-wheezy-armhf-raspberry-pi-minimal-image][2])
+ * Raspbian minimal image ([http://www.linuxsystems.it/2012/06/raspbian-wheezy-armhf-raspberry-pi-minimal-image](http://www.linuxsystems.it/2012/06/raspbian-wheezy-armhf-raspberry-pi-minimal-image/))
* mpd (music player daemon)
* mpc
* mpd-python
@@ -44,9 +45,9 @@ The features are the following:
Some pics and a video:
-![image][3]
+![image](/img/obabp_1.jpg)
-![image][4]
+![image](/img/obabp_2.jpg)
@@ -54,15 +55,15 @@ Some pics and a video:
If you like to build your own one button audio book player, here are the super simple schematics:
-![image][5]
+![image](/img/obabp_schematics.jpg)
And last but not least – the python script. The code might be crappy, please comment if you have improvements (especially regarding loadMusic). You can find it here:
-
+I wrote this little NSE script that allows you to store the output of Nmap into a SQLite database: [https://git.qrz.is/clemens/nmap-sqlite-output](https://git.qrz.is/clemens/nmap-sqlite-output)
This might come in handy when performing large inventory scans. The SQLite database can be queried and sorted easily or exported as a CSV file. This way you can, for example, easily generate tables for your assessment report.
-**Example:**
-
-`$ nmap -sS -A -F --script sqlite-output scanme.nmap.org
-[...]
-$ sqlite3 scan.sqlite
-[...]
-sqlite> select * from scandata;
-scanme.nmap.org|74.207.244.221|22|tcp|ssh|open|OpenSSH5.3p1 Debian 3ubuntu7.1
-scanme.nmap.org|74.207.244.221|80|tcp|http|open|Apache httpd2.2.14`
+
+## Example
+
+```
+$ nmap -sS -A -F --script sqlite-output scanme.nmap.org
+[...]
+$ sqlite3 scan.sqlite
+[...]
+sqlite> select * from scandata;
+scanme.nmap.org|74.207.244.221|22|tcp|ssh|open|OpenSSH5.3p1 Debian 3ubuntu7.1
+scanme.nmap.org|74.207.244.221|80|tcp|http|open|Apache httpd2.2.14
+```
diff --git a/content/post/2016-05-25-patch-for-the-cli-password-manager-pass.md b/content/post/2016-05-25-patch-for-the-cli-password-manager-pass.md
index 14d4d71..b9c2c74 100644
--- a/content/post/2016-05-25-patch-for-the-cli-password-manager-pass.md
+++ b/content/post/2016-05-25-patch-for-the-cli-password-manager-pass.md
@@ -1,5 +1,6 @@
---
title: Patch for the CLI password manager βpassβ
+type: post
author: micha
date: 2016-05-25T21:47:20+00:00
url: /patch-for-the-cli-password-manager-pass/
@@ -9,7 +10,7 @@ categories:
---
I use Pass (https://www.passwordstore.org/) to store and synchronize all my passwords.
-When I use Pass via SSH on a remote system in order to retrieve a password, I cannot make use of it’s clipboard feature. In order to output the password without actually displaying it, I wrote the following patch which prints the password in red on a red background while still being able to be manually copied to the clipboard:
+When I use Pass via SSH on a remote system in order to retrieve a password, I cannot make use of it's clipboard feature. In order to output the password without actually displaying it, I wrote the following patch which prints the password in red on a red background while still being able to be manually copied to the clipboard:
```
src/password-store.sh | 19 +++++++++++++------
diff --git a/content/post/2018-04-29-correlation-rule-documentation-generator-for-mcafee-siem.md b/content/post/2018-04-29-correlation-rule-documentation-generator-for-mcafee-siem.md
index 6753bd0..cd64b84 100644
--- a/content/post/2018-04-29-correlation-rule-documentation-generator-for-mcafee-siem.md
+++ b/content/post/2018-04-29-correlation-rule-documentation-generator-for-mcafee-siem.md
@@ -1,5 +1,6 @@
---
title: Correlation Rule Documentation Generator for McAfee SIEM
+type: post
author: micha
date: 2018-04-29T13:09:57+00:00
url: /correlation-rule-documentation-generator-for-mcafee-siem/
@@ -7,11 +8,8 @@ categories:
- Uncategorized
---
-Since we are required to document all custom correlation rules inside our SIEM (McAfee Enterprise Security Manager) for our customers, I wrote a Python script that converts XML rule exports to Markdown. Afterwards its easy to convert teh resulting file e.g. to PDF, DOCX, HTML or even variuous wiki-formats with e.g. Pandoc. This way it’s possible to generate a PDF documentation of all rules with just a few clicks/commands.
+Since we are required to document all custom correlation rules inside our SIEM (McAfee Enterprise Security Manager) for our customers, I wrote a Python script that converts XML rule exports to Markdown. Afterwards its easy to convert teh resulting file e.g. to PDF, DOCX, HTML or even variuous wiki-formats with e.g. Pandoc. This way it's possible to generate a PDF documentation of all rules with just a few clicks/commands.
-![image][1]
+![image](/img/esm2markdown.png)
-On the long shot that this is useful for you, you can find the script [here][2].
-
- [1]: /img/esm2markdown.png
- [2]: https://git.qrz.is/clemens/esm2markdown
+On the long shot that this is useful for you, you can find the script on [git.qrz.is](https://git.qrz.is/clemens/esm2markdown).
diff --git a/content/post/2018-05-03-dynamic-dns-for-nsd.md b/content/post/2018-05-03-dynamic-dns-for-nsd.md
index d52bbc9..c79f7e8 100644
--- a/content/post/2018-05-03-dynamic-dns-for-nsd.md
+++ b/content/post/2018-05-03-dynamic-dns-for-nsd.md
@@ -1,5 +1,6 @@
---
title: Dynamic DNS for NSD
+type: post
author: micha
date: 2018-05-03T02:26:11+00:00
url: /dynamic-dns-for-nsd/
@@ -40,7 +41,7 @@ Create an emptyΒ _update.html_:
# mkdir /var/www/htdocs/dyndns/
# touch /var/www/htdocs/dyndns/update.html
-After reloading HTTPD, try to accessΒ http://update.example.com/update.htmlΒ The request should show up inΒ _/var/www/logs/dyndns.log_
+After reloading HTTPD, try to accessΒ [http://update.example.com/update.html]Β The request should show up inΒ _/var/www/logs/dyndns.log_
## **Create a zone file for dyn.example.com**
@@ -65,11 +66,11 @@ Create a new zone file (e.g. atΒ _/var/nsd/zones/dyn.example.com.zone_) with the
update IN A 123.123.123.123
dyn IN A 123.123.123.123
-Don’t forget to set your own domain names, name servers and ip addresses Furthermore, add this zone file to yourΒ _/var/nsd/etc/nsd.conf_
+Don't forget to set your own domain names, name servers and ip addresses Furthermore, add this zone file to yourΒ _/var/nsd/etc/nsd.conf_
## Configure and Install nsd-dyndns
- * Download the scripts from here: https://git.qrz.is/clemens/nsd-dyndns
+ * Download the scripts from here: [https://git.qrz.is/clemens/nsd-dyndns](https://git.qrz.is/clemens/nsd-dyndns)
* CopyΒ _dyndns.conf-dist_Β toΒ _/etc/dyndns.conf_
* _\# cp dyndns.conf-dist /etc/dyndns.conf_
* EditΒ _/etc/dyndns.conf_Β to your needs
@@ -85,7 +86,7 @@ Configure your router to query the following URL:
http://update.example.com/update.html?qwertzuiop1234567890
-Don’t forgert to set your own domain name and to replace the string after „?“ with the password you configured in the config file.
+Don't forgert to set your own domain name and to replace the string after "?" with the password you configured in the config file.
# What it does
@@ -97,7 +98,7 @@ When the script is executed e.g. via cron, the following happens:
* It greps the last line ofΒ _/var/www/logs/dyndns.log_Β where the correct password was found and extracts the requesting IP address
* It checks if this IP is the same than the last time
- * If it’s a new IP, then it replaces the forth line in your zone file – the line with the version number – with a new version (current unix time stamp)
+ * If it's a new IP, then it replaces the forth line in your zone file (the line with the version number) with a new version (current unix time stamp)
* As a second step, it updates the A record of you DynDNS domain (dyn.example.com in our example)
* It then stores the new IP in the fileΒ _/tmp/last\_dyndns\_ip.txt_
* Finally it reloads NSD
diff --git a/content/post/30m-shortened-dipole.md b/content/post/30m-shortened-dipole.md
index e0d6a19..22880de 100644
--- a/content/post/30m-shortened-dipole.md
+++ b/content/post/30m-shortened-dipole.md
@@ -1,6 +1,7 @@
---
title: "Shortened 30m Dipole"
date: 2020-02-02T15:00:00+02:00
+type: post
url: /30m-dipole/
---
@@ -10,7 +11,7 @@ This aricle describes the construction of a 9,50 m long dipole for the 30 m band
The following diagram shows the dipole in theory:
-![image][1]
+![image](/img/30m_dipole_schematics.jpg)
# Bill of materials
@@ -27,7 +28,7 @@ The following diagram shows the dipole in theory:
Drill a hole into the 16 mm installation tube and stick a few centimeters of the 1.5 mm2 wire through it. Afterwards tightly wind the wire around it 37 times. After the 37th turn, drill a hole closely to the wire into the tube and stick the wire through it. It now should look like this:
-![image][2]
+![image](/img/30m_dipole_coil.jpg)
Repeat this step to build a second coil.
@@ -37,16 +38,10 @@ Connect 1 m antenna wire to each side of the feed point connector (or the 1:1 ba
The result should look like this:
-![image][3]
+![image](/img/30m_dipole.jpg)
# Result
The antenna ended up being 9,30 m long (including feed point, excluding isolators). The following photos show how nicely this antenna can be tuned:
-![image][4]
-
-
- [1]: /img/30m_dipole_schematics.jpg
- [2]: /img/30m_dipole_coil.jpg
- [3]: /img/30m_dipole.jpg
- [4]: /img/30m_dipole_nanovna.jpg
+![image](/img/30m_dipole_nanovna.jpg)
diff --git a/content/post/antenna-switch.md b/content/post/antenna-switch.md
index 7528711..a981a1e 100644
--- a/content/post/antenna-switch.md
+++ b/content/post/antenna-switch.md
@@ -1,19 +1,15 @@
---
title: "Remote Antenna Switch"
+type: post
author: micha
date: 2020-03-13T15:00:00+02:00
url: /antenna-switch/
---
New project: raspberry pi controlled remote antenna switch. One remote rpi for triggering the 4 relais inside the antenna switch and one rpi connected to the TRX in the shack measuring the ATU port's voltage to fully automatically choose the correct antenna for each band.
-![image][1]
-
-
+![image](/img/antenna-switch-1.jpg)
Update: The antenna switch itself is assembled and working. Next step: interfacing the pi and coding a simple web service which will be used to select an antenna via network.
-![image][2]
-
- [1]: /img/antenna-switch-1.jpg
- [2]: /img/antenna-switch-2.jpg
+![image](/img/antenna-switch-2.jpg)
diff --git a/content/post/atu-100.md b/content/post/atu-100.md
index 9283fc5..de91560 100644
--- a/content/post/atu-100.md
+++ b/content/post/atu-100.md
@@ -1,23 +1,18 @@
---
title: "ATU-100"
+type: post
author: micha
date: 2021-01-09T15:00:00+02:00
url: /atu-100/
---
Just finished my ATU-100 build. It's fun to build, super affordable and works without problems so far.
-
-![image][1]
+![image](/img/atu-100_1.jpg)
-![image][2]
+![image](/img/atu-100_2.jpg)
-![image][3]
+![image](/img/atu-100_3.jpg)
-![image][4]
-
- [1]: /img/atu-100_1.jpg
- [2]: /img/atu-100_2.jpg
- [3]: /img/atu-100_3.jpg
- [4]: /img/atu-100_4.jpg
+![image](/img/atu-100_4.jpg)
diff --git a/content/post/bitx40.md b/content/post/bitx40.md
index 0ac4984..c993966 100644
--- a/content/post/bitx40.md
+++ b/content/post/bitx40.md
@@ -1,5 +1,6 @@
---
title: "HF Signals Bitx40"
+type: post
author: micha
date: 2021-05-13T15:00:00+02:00
url: /bitx40/
@@ -7,7 +8,4 @@ url: /bitx40/
Finally fixed some issues with the BITX40 and had my first QSO with it today (YU1XA, report 55) - two years after I purchased the kit. There are still some issues but I am on the right track.
-![image][1]
-
-
- [1]: /img/bitx40.jpg
+![image](/img/bitx40.jpg)
diff --git a/content/post/cif.md b/content/post/cif.md
deleted file mode 100644
index d2ac8bd..0000000
--- a/content/post/cif.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: "Cif / Bearded Avenger"
-date: 2018-10-28T20:09:18+01:00
-draft: true
----
-
-# Introduction
-
- cif@cif:~$ cif --itype fqdn --tags malware --limit 1 --fields tlp,indicator,count,tags,description,confidence,rdata,provider
- +-------+----------------+-------+---------+----------------+------------+-------+--------------+
- | tlp | indicator | count | tags | description | confidence | rdata | provider |
- +-------+----------------+-------+---------+----------------+------------+-------+--------------+
- | white | erxxxxxxzq.com | 2 | malware | malware domain | 9.0 | None | spamhaus.org |
- +-------+----------------+-------+---------+----------------+------------+-------+--------------+
- cif@cif:~$ cif --indicator 2xx.xx.xx.xx7 --format table --fields tlp,indicator,count,tags,description,confidence,rdata,provider --limit 3
- +-------+---------------+-------+--------------------+------------------+------------+-------+---------------------+
- | tlp | indicator | count | tags | description | confidence | rdata | provider |
- +-------+---------------+-------+--------------------+------------------+------------+-------+---------------------+
- | green | 2xx.xx.xx.xx7 | 1 | malware | compromised host | 8.0 | None | emergingthreats.net |
- | green | 2xx.xx.xx.xx7 | 6 | bruteforce,scanner | None | 9.0 | None | dataplane.org |
- | amber | 2xx.xx.xx.xx7 | 7 | search | None | 10.0 | None | admin |
- +-------+---------------+-------+--------------------+------------------+------------+-------+---------------------+
diff --git a/content/post/dxcc-100.md b/content/post/dxcc-100.md
index e93c1b4..4e56d82 100644
--- a/content/post/dxcc-100.md
+++ b/content/post/dxcc-100.md
@@ -1,5 +1,6 @@
---
title: "DX Century Club Award"
+type: post
author: micha
date: 2021-07-03T15:00:00+02:00
url: /dxcc-phone/
@@ -7,6 +8,4 @@ url: /dxcc-phone/
I finally managed to work 100 confirmed entities (SSB/Phone) and have now received the ARRL DXCC Phone award. My new adventures will be working QRP with my recently purchased FT-817ND and building a small PA for the times I need a small boost.
-![image][1]
-
- [1]: /img/dxcc.jpg
+![image](/img/dxcc.jpg)
diff --git a/content/post/g1m-stand.md b/content/post/g1m-stand.md
index 72793a6..a678b44 100644
--- a/content/post/g1m-stand.md
+++ b/content/post/g1m-stand.md
@@ -1,5 +1,6 @@
---
title: "Xiegu G1M Stand"
+type: post
author: micha
date: 2021-06-05T15:00:00+02:00
url: /g1m-stand/
@@ -7,7 +8,4 @@ url: /g1m-stand/
A $0 Xiegu G1M stand:
-![image][1]
-
-
- [1]: /img/Xiegu_G1M_stand.jpg
+![image](/img/Xiegu_G1M_stand.jpg)
diff --git a/content/post/g90-mods.md b/content/post/g90-mods.md
index 7a16ae8..5c331c8 100644
--- a/content/post/g90-mods.md
+++ b/content/post/g90-mods.md
@@ -1,5 +1,6 @@
---
title: "Xiegu G90 Mods"
+type: post
author: micha
date: 2020-01-17T15:00:00+02:00
url: /g90-mods/
@@ -15,7 +16,7 @@ The original power cable is too thin and should be replaced with silicone 14AWG
Mine looks like this now:
-![image][1]
+![image](/img/g90_power_cable.jpg)
## Microphone Mod
@@ -23,7 +24,7 @@ When using the original G90 microphone, your voice might be too bassy. To solve
The following image shows both capacitors (taken from https://xiegug90.groups.io/g/main/message/1219):
-![image][2]
+![image](/img/g90_mic_mod.jpg)
## Ferrite Beads
@@ -40,7 +41,7 @@ Not essential but nice: A larger VFO knob. I bought a black aluminium potentiome
The G90 with a larger VFO knob:
-![image][3]
+![image](/img/g90_vfo_knob.jpg)
## Head Unit Stand
@@ -53,8 +54,3 @@ I like [this 3D printable design over at thingiverse.com](https://www.thingivers
* [CI-V Reference](https://xiegug90.groups.io/g/main/files/G90%20CI-V%20REFERENCE.pdf)
* [Cheat Sheet](https://xiegug90.groups.io/g/main/files/XIEGU%20G90%20CHEAT%20SHEET%20v1.73%2012-15-2019.pdf)
* [ini file for OnmiRig](https://xiegug90.groups.io/g/main/files/XieguG90.ini)
-
-
- [1]: /img/g90_power_cable.jpg
- [2]: /img/g90_mic_mod.jpg
- [3]: /img/g90_vfo_knob.jpg
diff --git a/content/post/heated_trackball.md b/content/post/heated_trackball.md
index 5e69312..72e3c83 100644
--- a/content/post/heated_trackball.md
+++ b/content/post/heated_trackball.md
@@ -2,6 +2,7 @@
title: "Heated Trackball"
date: 2014-12-22T14:34:34+02:00
draft: false
+type: post
url: /heated-trackball/
---
@@ -17,7 +18,7 @@ consume more than 150mAh, the wire might consume 350mAh. Knowing the
voltage of 5V and the desired power consumption, it is easy to
calculate the needed resistor:
-![image][1]
+![image](/img/resistance.png)
The heating wire has a resistance of 43,95 Ohm per meter, the wire
needs to be 33cm long in order to consume 350mAh:
@@ -27,21 +28,14 @@ Icalculation of the wire length /pics/length.png
Glueing the wire to the inner side of the housing:
-![image][2]
+![image](/img/trackball1.jpg)
After reassembling the mouse buttons:
-![image][3]
+![image](/img/trackball2.jpg)
The finished trackball:
-![image][4]
+![image](/img/trackball3.jpg)
-![image][5]
-
-
- [1]: /img/resistance.png
- [2]: /img/trackball1.jpg
- [3]: /img/trackball3.jpg
- [4]: /img/trackball2.jpg
- [5]: /img/trackball4.jpg
+![image](/img/trackball4.jpg)
diff --git a/content/post/mikrotik-auto-backup.md b/content/post/mikrotik-auto-backup.md
index 37291be..24c1970 100644
--- a/content/post/mikrotik-auto-backup.md
+++ b/content/post/mikrotik-auto-backup.md
@@ -1,5 +1,6 @@
---
title: "MikroTik: Auto-Backup der Routerkonfiguration via FTP"
+type: post
author: micha
date: 2019-01-04T22:00:11+02:00
url: /mikrotik-auto-backup/
diff --git a/content/post/mikrotik-capsman-setup.md b/content/post/mikrotik-capsman-setup.md
index c226048..ce122fb 100644
--- a/content/post/mikrotik-capsman-setup.md
+++ b/content/post/mikrotik-capsman-setup.md
@@ -1,5 +1,6 @@
---
title: "MikroTik: Zentrales WiFi-Management mit CAPsMAN"
+type: post
author: micha
date: 2018-12-31T16:00:11+02:00
url: /mikrotik-capsman-setup/
diff --git a/content/post/mikrotik-execute-scripts-via-sms.md b/content/post/mikrotik-execute-scripts-via-sms.md
index 94e77de..8281ff7 100644
--- a/content/post/mikrotik-execute-scripts-via-sms.md
+++ b/content/post/mikrotik-execute-scripts-via-sms.md
@@ -1,5 +1,6 @@
---
title: "MikroTik: AusfΓΌhren von Skripten per SMS"
+type: post
author: micha
date: 2018-12-30T13:00:11+02:00
url: /mikrotik-exec-scripts-via-sms/
diff --git a/content/post/qrz-sh.md b/content/post/qrz-sh.md
index 77dd873..8eb6f26 100644
--- a/content/post/qrz-sh.md
+++ b/content/post/qrz-sh.md
@@ -1,5 +1,6 @@
---
title: "qrz.sh - a CLI QRZ.com query tool"
+type: post
author: micha
date: 2020-11-09T17:00:00+02:00
url: /qrz-sh/
diff --git a/content/post/qrzlogger.md b/content/post/qrzlogger.md
index 5d9826f..eef58c1 100644
--- a/content/post/qrzlogger.md
+++ b/content/post/qrzlogger.md
@@ -1,5 +1,6 @@
---
title: "qrzlogger"
+type: post
author: micha
date: 2021-07-13T15:00:00+02:00
url: /qrzlogger/
@@ -31,8 +32,4 @@ python3 -m pip install qrzlogger
# Screenshot
-![image][1]
-
-
-
- [1]: /img/qrzlogger.jpg
+![image](/img/qrzlogger.jpg)
diff --git a/content/post/the-antennapi.md b/content/post/the-antennapi.md
index 54fd98b..f14560b 100644
--- a/content/post/the-antennapi.md
+++ b/content/post/the-antennapi.md
@@ -1,5 +1,6 @@
---
title: "The AntennaPi"
+type: post
author: micha
date: 2019-07-05T13:29:09+02:00
url: /the-antennapi/
@@ -29,30 +30,21 @@ to upgrade easily by adding a second module.
Drill the holes for the PL sockets:
-![image][1]
+![image](/img/antennapi01.jpg)
Install the sockets:
-![image][2]
+![image](/img/antennapi02.jpg)
Mount the relay module and use some antenna wire to connect the sockets with the relay module like this:
-![image][3]
+![image](/img/antennapi03.jpg)
In the end it looks like this:
-![image][4]
+![image](/img/antennapi04.jpg)
-![image][5]
+![image](/img/antennapi05.jpg)
-![image][6]
+![image](/img/antennapi06.jpg)
-## Software
-
-
- [1]: /img/antennapi01.jpg
- [2]: /img/antennapi02.jpg
- [3]: /img/antennapi03.jpg
- [4]: /img/antennapi04.jpg
- [5]: /img/antennapi05.jpg
- [6]: /img/antennapi06.jpg
diff --git a/content/post/uBitx.md b/content/post/uBitx.md
index 08ea831..fbbd533 100644
--- a/content/post/uBitx.md
+++ b/content/post/uBitx.md
@@ -1,5 +1,6 @@
---
title: "uBitx v6"
+type: post
author: micha
date: 2021-05-18T15:00:00+02:00
url: /uBitx_v6/
@@ -9,7 +10,4 @@ Yesterday I received and built my new uBitx v6 QRP transceiver. Connected to a L
The first mod will be the addition of an AGC.
-![image][1]
-
-
- [1]: /img/ubitx_v6.jpg
+![image](/img/ubitx_v6.jpg)
diff --git a/content/post/uBitx_agc.md b/content/post/uBitx_agc.md
index b5b0d95..2134457 100644
--- a/content/post/uBitx_agc.md
+++ b/content/post/uBitx_agc.md
@@ -1,5 +1,6 @@
---
title: "uBitx AGC Mod"
+type: post
author: micha
date: 2021-06-15T15:00:00+02:00
url: /uBitx_agc/
@@ -7,10 +8,6 @@ url: /uBitx_agc/
uBitx v6 modifications, Part I: The uBitx is a very nice radio but the missing AGC is an ear killer. I decided to purchase an AGC board from kit-projects and soldered it onto the radio main board. It's tiny and I was afraid to damage something but it turned out fine.
-![image][1]
+![image](/img/ubitx_agc.jpg)
-![image][2]
-
-
- [1]: /img/ubitx_agc.jpg
- [2]: /img/ubitx_agc_2.jpg
+![image](/img/ubitx_agc_2.jpg)
diff --git a/content/post/uBitx_printed_knobs.md b/content/post/uBitx_printed_knobs.md
index 7c887b7..4d3d66c 100644
--- a/content/post/uBitx_printed_knobs.md
+++ b/content/post/uBitx_printed_knobs.md
@@ -1,5 +1,6 @@
---
title: "uBitx VFO Knob Mod"
+type: post
author: micha
date: 2021-06-18T15:00:00+02:00
url: /uBitx_vfo_knob/
@@ -7,7 +8,4 @@ url: /uBitx_vfo_knob/
uBitx v6 modifications, Part III: 3D printed knobs (I like VFO knobs with a finger recess) and chassis tilt bails.
-![image][1]
-
-
- [1]: /img/ubitx_printed_knobs.jpg
+![image](/img/ubitx_printed_knobs.jpg)
diff --git a/content/post/uBitx_s-meter.md b/content/post/uBitx_s-meter.md
index 07cf0d1..e67b175 100644
--- a/content/post/uBitx_s-meter.md
+++ b/content/post/uBitx_s-meter.md
@@ -1,5 +1,6 @@
---
title: "uBitx S-Meter Mod"
+type: post
author: micha
date: 2021-06-16T15:00:00+02:00
url: /uBitx_smeter/
@@ -8,13 +9,8 @@ url: /uBitx_smeter/
uBitx v6 modifications, Part II: Since the AGC board has a S-Meter tap, the next mod was obvious :) The S-Meter of a dead Yaesu FT-290R was a perfect fit for the uBitx case and I think it looks nice.
-![image][1]
+![image](/img/ubitx_s-meter_1.jpg)
-![image][2]
+![image](/img/ubitx_s-meter_2.jpg)
-![image][3]
-
-
- [1]: /img/ubitx_s-meter_1.jpg
- [2]: /img/ubitx_s-meter_2.jpg
- [3]: /img/ubitx_s-meter_3.jpg
+![image](/img/ubitx_s-meter_3.jpg)
diff --git a/content/projects.md b/content/projects.md
index b09ff81..8a0029b 100644
--- a/content/projects.md
+++ b/content/projects.md
@@ -5,49 +5,30 @@ draft: false
---
#### Software Projects
- * [TSM Monitor][1] - A PHP application for monitoring IBM's Tivoli Storage Manager
- * [TSM Monitor 2][2] - An enhanced PHP application for monitoring IBM's Tivoli Storage Manager
- * [MSTerminology][3] - Translates strings used in all kind of Microsoft products
- * [Nmap-sqlite-output][4] - Nmap NSE script for writing the scan output into a sqlite3 database
- * [Adressenmeister][5] - Adressenmeister - my very first "software project" (C64 BASIC)
- * [Shellfolio][6] - A command line cryptocurrency portfolio manager and price tracker
- * [esm2markdown][7] - A converter for McAfee SIEM rule export files to Markdown documents
- * [nsd-dyndns][8] - Dynamic DNS for NSD
+ * [TSM Monitor](https://git.qrz.is/clemens/tsmmonitor) - A PHP application for monitoring IBM's Tivoli Storage Manager
+ * [TSM Monitor 2](https://git.qrz.is/clemens/tsmmonitor2) - An enhanced PHP application for monitoring IBM's Tivoli Storage Manager
+ * [MSTerminology](https://git.qrz.is/clemens/MSTerminology) - Translates strings used in all kind of Microsoft products
+ * [Nmap-sqlite-output](https://git.qrz.is/clemens/nmap-sqlite-output) - Nmap NSE script for writing the scan output into a sqlite3 database
+ * [Adressenmeister](https://git.qrz.is/clemens/adressenmeister) - Adressenmeister - my very first "software project" (C64 BASIC)
+ * [Shellfolio](https://git.qrz.is/clemens/shellfolio) - A command line cryptocurrency portfolio manager and price tracker
+ * [esm2markdown](https://git.qrz.is/clemens/esm2markdown) - A converter for McAfee SIEM rule export files to Markdown documents
+ * [nsd-dyndns](https://git.qrz.is/clemens/nsd-dyndns) - Dynamic DNS for NSD
#### Hardware Projects
- * [The Laundruino][9] - Washing machine monitoring with an Arduino
- * [The One Button Audio Book Player][10] - The one button audiobook player
- * [Little Helper][11] - Daniel Duesentrieb's Little Helper
- * [Heated Trackball][14] - Heating mod for Logitech trackballs
+ * [The Laundruino](/the-arduino-enabled-washing-machine/) - Washing machine monitoring with an Arduino
+ * [The One Button Audio Book Player](/the-one-button-audiobook-player/) - The one button audiobook player
+ * [Little Helper](/little-helper/) - Daniel Duesentrieb's Little Helper
+ * [Heated Trackball](/heated-trackball/) - Heating mod for Logitech trackballs
#### Amateur Radio
- * [qrzlogger][19] - A python application to log QSOs directly to QRZ.com from the command line
- * [pyBMNotify][20] - Python script for monitoring the Brandmeister network and sending push notifications
- * [qrz.sh][21] - QRZ.com callsign data query script written in Bash
- * [The AntennaPi][17] - Raspberry Pi based remote antenna switch
- * [Shortened 30m Dipole][18] - Dipole for the 30m band, designed for a 10m long attic
+ * [qrzlogger](https://git.qrz.is/clemens/qrzlogger) - A python application to log QSOs directly to QRZ.com from the command line
+ * [pyBMNotify](https://git.qrz.is/clemens/pyBMNotify) - Python script for monitoring the Brandmeister network and sending push notifications
+ * [qrz.sh](https://git.qrz.is/clemens/qrz.sh) - QRZ.com callsign data query script written in Bash
+ * [The AntennaPi](/the-antennapi/) - Raspberry Pi based remote antenna switch
+ * [Shortened 30m Dipole](/30m-dipole/) - Dipole for the 30m band, designed for a 10m long attic
#### Organizations / Projects I like and support
- * [Free Software Foundation Europe][15] - a charity that empowers users to control technology.
- * [Super Dimension Fortress][16] - SDF Public Access UNIX System .. Est. 1987
+ * [Free Software Foundation Europe](http://fsfe.org) - a charity that empowers users to control technology.
+ * [Super Dimension Fortress](http://sdf.org) - SDF Public Access UNIX System .. Est. 1987
- [1]: https://git.qrz.is/clemens/tsmmonitor
- [2]: https://git.qrz.is/clemens/tsmmonitor2
- [3]: https://git.qrz.is/clemens/MSTerminology
- [4]: https://git.qrz.is/clemens/nmap-sqlite-output
- [5]: https://git.qrz.is/clemens/adressenmeister
- [6]: https://git.qrz.is/clemens/shellfolio
- [7]: https://git.qrz.is/clemens/esm2markdown
- [8]: https://git.qrz.is/clemens/nsd-dyndns
- [9]: /the-arduino-enabled-washing-machine/
- [10]: /the-one-button-audiobook-player/
- [11]: /little-helper/
- [14]: /heated-trackball/
- [15]: http://fsfe.org
- [16]: http://sdf.org
- [17]: /the-antennapi/
- [18]: /30m-dipole/
- [19]: https://git.qrz.is/clemens/qrzlogger
- [20]: https://git.qrz.is/clemens/pyBMNotify
- [21]: https://git.qrz.is/clemens/qrz.sh
diff --git a/layouts/_default/single.gmi b/layouts/_default/single.gmi
new file mode 100644
index 0000000..a6429f3
--- /dev/null
+++ b/layouts/_default/single.gmi
@@ -0,0 +1,37 @@
+# {{ .Title }}{{ $scratch := newScratch }}
+{{ $content := .RawContent -}}
+{{ $content := $content | replaceRE `#### ` "### " -}}
+{{ $content := $content | replaceRE `\n- (.+?)` "\n* $1" -}}
+{{ $content := $content | replaceRE `\n(\d+). (.+?)` "\n* $2" -}}
+{{ $content := $content | replaceRE `\[\^(.+?)\]:?` "" -}}
+{{ $content := $content | replaceRE `
` "\n" -}}
+{{ $content := $content | replaceRE `(.+?)` "[$2]($1)" -}}
+{{ $content := $content | replaceRE `\sgemini://(\S*)` " [gemini://$1](gemini://$1)" -}}
+{{ $content := $content | replaceRE `{{ < audio "(.+?)" >}}` "=> https://brainbaking.com/$1 Embedded Audio link - $1" -}}
+{{ $content := $content | replaceRE `{{ < video "(.+?)" >}}` "=> https://brainbaking.com/$1 Embedded Video link - $1" -}}
+{{ $content := $content | replaceRE `{{ < youtube (.+?) >}}` "=> https://www.youtube.com/watch?v=$1 YouTube Video link to $1" -}}
+{{ $content := $content | replaceRE `{{ < vimeo (.+?) >}}` "=> https://vimeo.com/$1 Vimeo Video link to $1" -}}
+{{ $content := $content | replaceRE "([^`])<.*?>([^`])" "$1$2" -}}
+{{ $content := $content | replaceRE `\n\n!\[.*\]\((.+?) \"(.+?)\"\)` "\n\n=> $1 Image: $2" -}}
+{{ $content := $content | replaceRE `\n\n!\[.*]\((.+?)\)` "\n\n=> $1 Embedded Image: $1" -}}
+{{ $links := findRE `\n=> ` $content }}{{ $scratch.Set "ref" (add (len $links) 1) }}
+{{ $refs := findRE `\[.+?\]\(.+?\)` $content }}
+{{ $scratch.Set "content" $content }}{{ range $refs }}{{ $ref := $scratch.Get "ref" }}{{ $contentInLoop := $scratch.Get "content" }}{{ $url := (printf "%s #%d" . $ref) }}{{ $contentInLoop := replace $contentInLoop . $url -}}{{ $scratch.Set "content" $contentInLoop }}{{ $scratch.Set "ref" (add $ref 1) }}{{ end }}{{ $content := $scratch.Get "content" | replaceRE `\[(.+?)\]\((.+?)\) #(\d+)` "$1 [$3]" -}}
+{{ $content | safeHTML }}
+
+---
+Written by Michael Clemens on {{ .Lastmod.Format (.Site.Params.dateFormat | default "2 January 2006") }}.
+
+## References
+{{ $scratch.Set "ref" (add (len $links) 1) }}{{ range $refs }}{{ $ref := $scratch.Get "ref" }}{{ $url := (printf "%s #%d" . $ref) }}
+=> {{ $url | replaceRE `\[(.+?)\]\((.+?)\) #(\d+)` "$2 [$3] $1 ($2)" -}}
+{{ $scratch.Set "ref" (add $ref 1) }}{{ end}}
+{{ $related := first 3 (where (where .Site.RegularPages.ByDate.Reverse ".Params.tags" "intersect" .Params.tags) "Permalink" "!=" .Permalink) }}
+{{ if $related }}
+## Related articles
+{{ range $related }}
+=> {{ replace .RelPermalink "/gemini" "" 1}} {{ .Title }}: {{ .Params.Subtitle }}{{ end }}{{ end }}
+---
+
+=> / Back to the Index
+=> https://qrz.is{{ replace (replace .RelPermalink "/gemini" "" 1) "index.gmi" "" }} View this article on the WWW
diff --git a/layouts/index.gmi b/layouts/index.gmi
new file mode 100644
index 0000000..b25b467
--- /dev/null
+++ b/layouts/index.gmi
@@ -0,0 +1,27 @@
+```
+ βββββββ βββββββ ββββββββ βββ βββββββ
+βββββββββββββββββββββββββ βββββββββββ
+βββββββββββββββββ ββββββ ββββββββββ
+βββββββββββββββββββββββ βββ βββββββ
+ βββββββ βββ βββββββββββββββββββββββββ
+ βββ βββ ββββββββββββββββββββββββ
+```
+
+# QRZ.is
+
+This is the personal gemini capsule of Michael Clemens. Most of what you will find here is related to amateur radio, software development and hardware projects.
+
+## Pages
+
+=> gemini://qrz.is/projects/index.gmi Software/Hardware Projects
+=> gemini://qrz.is/about/index.gmi About me
+
+## Posts
+
+{{ range (where (where (where .Site.Pages "Section" "in" (slice "post")) ".Params.type" "eq" "post") ".Params.concept" "ne" "true").GroupByDate "2006" "desc" }}{{ $year := .Key -}}
+### {{ .Key }}
+{{ range .Pages.ByDate.Reverse }}
+=> {{ replace .Permalink "/gemini" "" 1}} {{ .Date.Format ("2006/01/02") }} - {{ .Title }}
+{{- end }}
+
+{{ end }}
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
index 93f3533..0312a88 100644
--- a/layouts/partials/header.html
+++ b/layouts/partials/header.html
@@ -10,13 +10,15 @@
+
-