(???) ?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 (???)    <?xml-stylesheet href="/s/inc/rss.xsl" type="text/xsl"?>
 (???)    <rss version="2.0"  xmlns:atom="http://www.w3.org/2005/Atom">
 (???)        <channel>
 (???)            <title>Raymii.org</title> 
 (???)            <link>gopher://raymii.org/gopher/feed.xml</link> 
 (???)            <description>The Raymii.org RSS feed, all about GNU/Linux, programming and other topics that interest me.</description>
 (???)            <atom:link href="gopher://raymii.org/gopher/feed.xml" rel="self" type="application/rss+xml" />
 (???)    
 (???)            <item>
 (???)                <title>Fixing the hiss on my Atgames Legends Pinball Micro including root access</title> 
 (???)                <link>gopher://raymii.org/0/Fixing_the_buzz_hiss_on_my_atgames_legends_pinball_micro.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Fixing_the_buzz_hiss_on_my_atgames_legends_pinball_micro.txt</guid>
 (???)                <description>The [Atgames Legends Pinball Micro](https://web.archive.org/web/20240123213954/https://www.atgames.us/products/legends-pinball-micro) is a small virtual pinball cabinet for around USD 350. I imported one to the Netherlands, Atgames does not ship here. The built in tables are okay and more are for sale via Atgames' webshop. Overall for the price it is a nice device. Build quality is okay, software lacks a bit of quality. One really annoying issue which severely impacts gameplay is a buzz / hiss sound. This post goes over my attempts to fix this hiss and the one that worked was a ground loop isolator.</description> 
 (???)                <pubDate>Tue, 23 Jan 2024 22:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 23 Jan 2024 22:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Which Root Certificates should you trust? Find out with CertInfo</title> 
 (???)                <link>gopher://raymii.org/0/Which_Root_Certificates_Should_You_Trust_CertInfo.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Which_Root_Certificates_Should_You_Trust_CertInfo.txt</guid>
 (???)                <description> Which Root Certificates should you trust? Did you know that any certificate authority can issue a certificate for any website? There are protocols in place so that should not happen, but when (not if, when) they get hacked or coerced by their government, they can issue a certificate to intercept secure communication for any website.
 (IMG) 've made an open source program, [CertInfo](https://github.com/raymiiOrg/certinfo) that analyzes your browser history and queries all visited domains for their certificates. It presents a list of used root certificates (meaning, a website you visited was ultimately signed by that root CA) and a list of unused root certificates (meaning, no website in your analyzed history was signed by that root CA). </description> 
 (???)                <pubDate>Mon, 01 Jan 2024 09:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 15 Jan 2024 22:03:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>YouLessQt, helps you align the YouLess to an analog electricity meter</title> 
 (???)                <link>gopher://raymii.org/0/YouLessQt.txt</link> 
 (???)                <guid>gopher://raymii.org/0/YouLessQt.txt</guid>
 (???)                <description>The [YouLess](https://youless.nl/home.html) is a device that can help you monitor energy usage. It works on so called smart meters using a P1 port, it can monitor solar panels but it also works with regular old analog meters. I have an old style analog meter but I like gadgets and monitoring / reducing my energy usage just as much as the next guy so I bought one. It has an optical sensor that you paste (with tape) on your meter and that detects a little black bar on the rotor disc and using a rpm factor on your meter it calculates the electricity used.
 (IMG)  has some trouble with the device when I set it up, it turned out to be aligned wrongly. It sometimes missed the black bar, so the numbers were incorrect.
 (IMG)  wrote a little application using Qt and QML to show the raw light sensor values in a line graph to help me align the YouLess correctly. This post tells you more about the application, which of course is open source.</description> 
 (???)                <pubDate>Sat, 16 Sep 2023 09:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 16 Sep 2023 09:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>A docker image for Qt 5.15 LTS for Android, including OpenSSL and the KDE patch collection</title> 
 (???)                <link>gopher://raymii.org/0/Qt_5.15_LTS_Docker_Image_for_Android_with_OpenSSL.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qt_5.15_LTS_Docker_Image_for_Android_with_OpenSSL.txt</guid>
 (???)                <description>Recently I got an email from Google regarding the API level of [Leaf Node Monitoring](https://leafnode.nl), my open source monitoring app for Windows, Linux and Android. The Play Store version must be updated to target API level 33.
 (???) or Windows and Linux I'm building the app automatically in a CI environment but the Android build was still a manual process. Until now, because after a bunch of messing around with Android NDK versions, OpenSSL library paths and Qt compile flags I can automatically build Leaf Node Monitoring in my CI.
 (IMG) 'm using Woodpecker CI and that requires every build step to be executed in a Docker image. There are a few Qt docker images floating around but they are all using the pre-built 5.15.2 version by extracting it from the Qt Online Installer. That version is quite old, 5.15.15 LTS was released [a few days ago for Commercial License Holders](http://web.archive.org/web/20230902132649/https://www.qt.io/blog/commercial-lts-qt-5.15.15-released) on August 31, so after 1 year it will become available as open source.
 (???) y docker image builds Qt from source using the `5.15 KDE Qt Patch Collection` branch for Android and it includes OpenSSL. This is as far as I know the most up to date docker image for Qt 5.15, currently at 5.15.10 LTS.</description> 
 (???)                <pubDate>Wed, 13 Sep 2023 22:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 13 Sep 2023 22:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Drawing a Circle in Qt QML three different ways</title> 
 (???)                <link>gopher://raymii.org/0/Drawing_a_Circle_in_Qt_QML_three_different_ways.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Drawing_a_Circle_in_Qt_QML_three_different_ways.txt</guid>
 (???)                <description>Qt has no `Circle` built in to QML as a basic type, as for example the `Rectangle` or the `Button` control. This post shows you how to get a `Circle` in QML, from the most basic method (a `Rectangle` with a `radius` of 180) to more advanced methods, using the `Canvas` JavaScript API (which allows us to draw a partially filled Circle, for a Pie Chart) and a `c++` control based on `QQuickPaintedItem`. I wanted to experiment with the `Canvas` QML control and the `QQuickPaintedItem` C++ interface to get a better understanding of Qt and QML drawing interfaces, this post reflects that journey including showing your grouped QML properties exposed from C++.</description> 
 (???)                <pubDate>Wed, 05 Jul 2023 23:59:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 05 Jul 2023 23:59:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Site update, self-hosted search via pagefind</title> 
 (???)                <link>gopher://raymii.org/0/Site_update_self_hosted_search_via_pagefind.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Site_update_self_hosted_search_via_pagefind.txt</guid>
 (???)                <description>This is a static site, meaning that no server-side processing occurs. All HTML is generated out of a few folders full of markdown source and then uploaded to the cluster. Searching on this site was always provided by a text-box form that sent you to google with 'site:raymii.org' appended to it. Works fine, but it sends all data to Google. With my recent removal of all Google Ads on this site, as well as tracking via Google Analytics, sending searches via Google seems wrong. &lt;br/&gt;&lt;br/&gt;I recently found the `pagefind` program which I now use on here, it is a self hosted static site search engine of sorts.</description> 
 (???)                <pubDate>Sat, 01 Jul 2023 21:32:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 01 Jul 2023 21:32:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>My 24 year old HP Jornada can do things your modern iPhone still can't do!</title> 
 (???)                <link>gopher://raymii.org/0/My_24_year_old_HP_Jornada_can_do_things_your_modern_iPhone_still_cant_do.txt</link> 
 (???)                <guid>gopher://raymii.org/0/My_24_year_old_HP_Jornada_can_do_things_your_modern_iPhone_still_cant_do.txt</guid>
 (???)                <description>I like to tinker with old hardware. The [DEC](https://raymii.org/s/tags/dec.html) PDP-8 is my favorite [retro computer](/s/tags/pdp-8.html) and [Office 2003](/s/blog/Using_a_Windows_Mobile_2003_PDA_hp_ipaq_in_2022_including_whatsapp.html) is the best version ever released IMHO.  One of my other favorite retro devices is the HP Jornada 720. A small `handheld PC` (smaller than a netbook) running Windows CE or in my case, Linux. It has a decent keyboard, CFL backlit screen, **32 MB of RAM(!)**, a compact Flash card for storage and a stylus for the resistive touchscreen. Oh and I got a 10Mbit PCMCIA network card, but wireless cards are also still available. It might be old, released in 1999, but can do one thing your modern iPhone can't. </description> 
 (???)                <pubDate>Thu, 15 Jun 2023 01:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 15 Jun 2023 01:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bare Metal Vi, boot into Vi without an OS!</title> 
 (???)                <link>gopher://raymii.org/0/Bare_Metal_Boot_to_Vi.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bare_Metal_Boot_to_Vi.txt</guid>
 (???)                <description>This guide shows you how to run `Vi` without an operating system, bare metal. This is a follow up on my article from 2014 where I made a custom linux distro that would [Boot to Vim, VIM as PID 1](https://raymii.org/s/blog/Vim_as_PID_1_Boot_to_Vim.html). This time we go further, we boot into `Vi` without an operating system. This is made possible by [Cosmopolitan](https://justine.lol/cosmopolitan/index.html), a `libc` that outputs a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS with the best possible performance and the tiniest footprint imaginable.</description> 
 (???)                <pubDate>Sat, 22 Apr 2023 22:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 22 Apr 2023 22:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS 9.2 for x86, Installing HAProxy and troubleshooting UNIX file paths</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Installing_HAProxy.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Installing_HAProxy.txt</guid>
 (???)                <description>This article shows you how to install HAProxy on OpenVMS 9.2 for x86. I've often used HAProxy in my career as a sysadmin and find it a very useful tool. HAProxy is an open source, fast, reliable load balancer for TCP and HTTP-based applications. This guide assumes you've set up your OpenVMS system via [my guide](https://raymii.org/s/blog/OpenVMS_9.2_for_x86_Getting_Started.html) and the [second part](https://raymii.org/s/blog/OpenVMS_9.2_for_x86_Getting_Started_part_2.html) of my guide, that will give you a fully licensed OpenVMS installation with networking and SSH access. Since I've used HAProxy so very often to set up high-available clusters and load balancers, I was surprised but happy to see it ported to OpenVMS. This guide shows the setup but also a few OpenVMS specific quirks, like file paths and troubleshooting error messages / logs.</description> 
 (???)                <pubDate>Wed, 19 Apr 2023 22:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 19 Apr 2023 22:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS 9.2 for x86, Getting Started part 3, the WebUI</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Getting_Started_part_3.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Getting_Started_part_3.txt</guid>
 (???)                <description>OpenVMS on x86 is now available for hobbyists! Almost a year after [the official release](/s/blog/OpenVMS_9.2_for_x86_will_be_released_tomorrow.html). This is a part 3 of my getting started guide. Part 2 ended with a working network setup and SSH access. In part 3 we'll do something very exciting, installing the WebUI, a web based management interface for OpenVMS. I'll also share a few smaller tidbits, like how to use the interactive text editor via an `ssh` session and how to use `unzip`. </description> 
 (???)                <pubDate>Sun, 16 Apr 2023 22:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 16 Apr 2023 22:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS 9.2 for x86, Getting Started part 2, auto boot, licenses, PAKs, networking and SSH</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Getting_Started_part_2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Getting_Started_part_2.txt</guid>
 (???)                <description>OpenVMS on x86 is now available for hobbyists! Almost a year after [the official release](/s/blog/OpenVMS_9.2_for_x86_will_be_released_tomorrow.html). This is a part 2 of my getting started guide. [Part 1](https://raymii.org/s/blog/OpenVMS_9.2_for_x86_Getting_Started.html) ended with an installed system, this part continues with automatic startup, activating the license files (PAKs) and setting up networking including SSH access.</description> 
 (???)                <pubDate>Sat, 15 Apr 2023 22:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 Apr 2023 22:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS 9.2 for x86, Getting Started part 1, install guide with VirtualBox</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Getting_Started.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_9.2_for_x86_Getting_Started.txt</guid>
 (???)                <description>OpenVMS on x86 is now available for hobbyists! Almost a year after [the official release](/s/blog/OpenVMS_9.2_for_x86_will_be_released_tomorrow.html). This is a part 1 of my getting started guide, showing you how to install OpenVMS on VirtualBox on Windows 10/11. More parts will follow, documenting license installation, network setup, ssh, application installation etc.</description> 
 (???)                <pubDate>Tue, 11 Apr 2023 22:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 11 Apr 2023 22:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS 9.2 for x86 is finally available for hobbyists!</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_9.2_for_x86_is_finally_available_for_hobbyists.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_9.2_for_x86_is_finally_available_for_hobbyists.txt</guid>
 (???)                <description>OpenVMS x86 is now available for (most) hobbyists! Almost a year after [the official release](/s/blog/OpenVMS_9.2_for_x86_will_be_released_tomorrow.html) most hobbyists can now login to the [Service Portal](https://sp.vmssoftware.com) to download their copy of OpenVMS 9.2 for x86, `X86E921OE.ZIP` and the PAK (license) files (`x86community-20240401.zip`), valid until April 2024. </description> 
 (???)                <pubDate>Sun, 09 Apr 2023 23:59:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 11 Apr 2023 22:29:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Site update, cookie consent popup (for a static site)</title> 
 (???)                <link>gopher://raymii.org/0/Site_update_cookie_consent_popup.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Site_update_cookie_consent_popup.txt</guid>
 (???)                <description>A small site update this time, just to let you know that I've added a cookie consent popup to this static site. If you reject all cookies, you should not see any advertisements and aren't tracked by Google Analytics. It's open source, cookieconsent by Orest Bida.</description> 
 (???)                <pubDate>Wed, 22 Mar 2023 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 16 Apr 2023 19:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Named Booleans prevent C++ bugs and save you time</title> 
 (???)                <link>gopher://raymii.org/0/Named_Booleans_prevent_bugs.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Named_Booleans_prevent_bugs.txt</guid>
 (???)                <description> During a recent code review I found a hard to spot bug, a misplaced parenthesis in an `if` statement. I often employ a technique I call `named booleans`, which would have prevented this bug. It's a simple technique, instead of a long `if` statement, give every comparison a seperate boolean variable with a descriptive name and use those variables is the `if` statement. This post shows the bug in question, an example of my `named booleans` technique and another tip regarding naming magic numbers.</description> 
 (???)                <pubDate>Fri, 17 Feb 2023 20:21:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 17 Feb 2023 20:21:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Johnnie 'QObject' Walker, replace a service locator pattern while you're at it</title> 
 (???)                <link>gopher://raymii.org/0/Johnnie_QObject_Walker_replace_a_servicelocator_pattern.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Johnnie_QObject_Walker_replace_a_servicelocator_pattern.txt</guid>
 (???)                <description>I've seen many C++ code bases where there was the concept of a service locator. An global static object that anyone can query to get a class. This is handy with old legacy spiderweb intertwined code that gets everything from everywhere, but not so useful when you're trying to unit test code, it is not visible from the header what dependencies you need. My preference goes to dependency injection, give all the dependencies to the class' constructor and use them that way. Makes it easy to mock and if you have many dependencies, it serves as a starting point to refactor in to a more clearly separated architecture. This article shows a piece of code that uses QObject, the Qt object base class, to replace a servicelocator. All QObjects can have a parent QObject, thus a tree is formed, which you can walk back up and search. This effectively replaces the servicelocator, since you can just request a certain type of QObject.</description> 
 (???)                <pubDate>Sat, 14 Jan 2023 04:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 14 Jan 2023 04:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>APT keeps complaining that the HTTPS certificate cannot be validated?</title> 
 (???)                <link>gopher://raymii.org/0/Syncthing_apt_repo_keeps_complaining_HTTPS_certificate_could_not_be_validated.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Syncthing_apt_repo_keeps_complaining_HTTPS_certificate_could_not_be_validated.txt</guid>
 (???)                <description>Recently a few of my Ubuntu 20.04 and Debian 11 servers failed to run an `apt update` because it insisted that the HTTPS certificate for a repository could not be validated, while `curl` on the same system had no issues connecting. Join me on a deep dive into certificate validation and troubleshooting `apt`, digging into the C++ source code for `apt` and `GnuTLS` and in the end, it turned out to be my own fault due to permission on a folder. However, the error messages were totally unhelpful resolving the mysterious validation problem. This article was written over the period of a few days, chronologically during troubleshooting.</description> 
 (???)                <pubDate>Wed, 11 Jan 2023 05:31:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 11 Jan 2023 05:31:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Leaf Node Monitoring v2023.01 released, major performance improvements, new layout and new checks!</title> 
 (???)                <link>gopher://raymii.org/0/Leaf_Node_Monitoring_v2023.01_released.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Leaf_Node_Monitoring_v2023.01_released.txt</guid>
 (???)                <description>I'm pleased to announce the next version of Leaf Node Monitoring, the simple and easy to use open source site and server monitoring tool. Major new features include a responsive and adjustable layout, massive performance improvements and a new check type, allowing you to execute external processes, for example, the nagios/monitoring plugins. This post goes over everything that is new in this release.</description> 
 (???)                <pubDate>Thu, 05 Jan 2023 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 05 Jan 2023 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Add moc includes to speed up Qt compilation</title> 
 (???)                <link>gopher://raymii.org/0/Qt_add_moc_includes_to_speed_up_compilation.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qt_add_moc_includes_to_speed_up_compilation.txt</guid>
 (???)                <description>The Meta-Object Compiler, `moc`, handles Qt's C++ extensions and it is required for signals and slots and properties in Qt. `moc` reads C++ header files and if the `Q_OBJECT` macro is used, it generates an extra `.cpp` file named `moc_filename.cpp` containing extra (meta-object) code. This post has a bit of background information and a shell script to automatically include `moc_*.cpp` files in your code whenever `Q_OBJECT` is used. If you use `qmake`, this will probably speed up your build and if you use `cmake`, this will probably speed up incremental builds (when `CMAKE_AUTOMOC` is `on`).</description> 
 (???)                <pubDate>Mon, 12 Dec 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 12 Dec 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Spinrite 6.0 on UEFI and an NVMe SSD drive</title> 
 (???)                <link>gopher://raymii.org/0/Spinrite_6.0_on_UEFI_and_NVMe_ssd_drives.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Spinrite_6.0_on_UEFI_and_NVMe_ssd_drives.txt</guid>
 (???)                <description>Spinrite is a hard drive recovery and maintenance utility written by Steve Gibson from GRC. It is marketed on the Security Now TWiT podcast which I often listen to. I have bought a copy of it and sometimes use it on solid state disks or SD cards. Spinrite 6.0 is written is assembly language and runs on top of MS-DOS or FreeDOS, using the BIOS. UEFI is not supported and neither are NVMe drives. This post will show you how to run Spinrite 6.0 on such a system anyway, using a modern linux live USB drive that can boot on UEFI only system and VirtualBox, exposing the NVMe disk as a SATA drive.</description> 
 (???)                <pubDate>Thu, 03 Nov 2022 21:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 03 Nov 2022 21:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL generate self signed certificate with SAN in one command (subject alternative name)</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_generate_self_signed_cert_with_Subject_Alternative_name_oneliner.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_generate_self_signed_cert_with_Subject_Alternative_name_oneliner.txt</guid>
 (???)                <description>This small one liner lets you generate an OpenSSL self signed certificate with both a common name and a [Subject Alternative Name (SAN)](https://en.wikipedia.org/wiki/Subject_Alternative_Name). Most guides online require you to specify a separate config file but this guide uses a bash trick [(process substitution)](https://web.archive.org/web/20221014191420/https://superuser.com/questions/1059781/what-exactly-is-in-bash-and-in-zsh) to pass such a config file to OpenSSL via the command line. If you are using OpenSSL 1.1.1 or higher, there now finally is a built in command line option which I'll also cover. </description> 
 (???)                <pubDate>Fri, 14 Oct 2022 22:02:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 14 Oct 2022 22:02:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Fade in / fade out in Qt/QML</title> 
 (???)                <link>gopher://raymii.org/0/Fade_in_Fade_out_in_QML.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Fade_in_Fade_out_in_QML.txt</guid>
 (???)                <description>This guide shows you how to add a fade in / fade out effect to a control in QML. There are a lot of built in animations in Qt/QML, but no fade in/fade out. Using a state machine and a `SequentialAnimation`, we can first animate the opacity, then set the visibility, achieving a fade in / fade out effect. Other ways like a `PropertyAnimation` are also available but are less expressive or configurable.</description> 
 (???)                <pubDate>Fri, 19 Aug 2022 21:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 19 Aug 2022 21:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Responsive Qt/QML layout coming to Leaf Node Monitoring</title> 
 (???)                <link>gopher://raymii.org/0/Responsive_Qt_QML_Layout_coming_to_Leaf_Node_Monitoring.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Responsive_Qt_QML_Layout_coming_to_Leaf_Node_Monitoring.txt</guid>
 (???)                <description>[Leaf Node Monitoring](https://leafnode.nl) is my own open source (GPLv3), paid, network monitoring program for Windows, Linux &amp; Android. Written in C++ &amp; Qt 5. Perfect to run on your desktop and monitor your servers. Simple setup, auto-detects running services, runs checks concurrently and alerting. This post shows another upcoming feature in the next version, responsive layouting to more effectively use screen real estate.</description> 
 (???)                <pubDate>Mon, 15 Aug 2022 21:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 15 Aug 2022 21:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>What's coming in the next version of Leaf Node Monitoring?</title> 
 (???)                <link>gopher://raymii.org/0/Whats_coming_in_leaf_node_monitoring_v2022_02.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Whats_coming_in_leaf_node_monitoring_v2022_02.txt</guid>
 (???)                <description>Leaf Node Monitoring is my own open source (GPLv3), paid, network monitoring program for Windows, Linux &amp; Android. Written in C++ &amp; Qt 5. Perfect to run on your desktop and monitor your servers. Simple setup, auto-detects running services, runs checks concurrently, open port scanning and alerting. I've recently released the first version, and this post goes over the features that will come in the next release.</description> 
 (???)                <pubDate>Thu, 14 Jul 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 14 Jul 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS 9.2 for x86 will be released tomorrow (2022-07-14), so exciting!</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_9.2_for_x86_will_be_released_tomorrow.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_9.2_for_x86_will_be_released_tomorrow.txt</guid>
 (???)                <description>On July 8th, a few days ago, I saw the following post on the VMS Software Inc (VSI) blog, titled 'Release of OpenVMS V9.2 for x86 Scheduled for July 14, 2022'. That is tomorrow! I'm so excited, I can't wait to start playing around with it. This short post goes over the announcement and the status of the community license, and hopes to make you just as enthusiastic as I am for the coming release!</description> 
 (???)                <pubDate>Wed, 13 Jul 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 14 Jul 2022 20:27:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Using a Windows Mobile 2003 PDA (HP iPAQ h4350) in 2022, including WhatsApp!</title> 
 (???)                <link>gopher://raymii.org/0/Using_a_Windows_Mobile_2003_PDA_hp_ipaq_in_2022_including_whatsapp.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Using_a_Windows_Mobile_2003_PDA_hp_ipaq_in_2022_including_whatsapp.txt</guid>
 (???)                <description>While cleaning out my collection of electronics, I found a PDA. Not the modern kind (voice assistant), but the old school precursor to the smartphone. It's a HP iPAQ h4350, it was a model used by the Dutch Railways. I picked it up in working condition years ago and was wondering, how does a mobile device from 2003 stack up to a modern smartphone? The first thing I did was run linux on it which worked surprisingly well, it however was noticeably slower than Windows Mobile. This post shows you how well the device still works in 2022, including using WhatsApp to chat. Almost all things I use my smartphone for, I can do with this PDA!</description> 
 (???)                <pubDate>Sun, 29 May 2022 01:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 29 May 2022 01:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Qt/QML Property bindings break after a JavaScript assignment</title> 
 (???)                <link>gopher://raymii.org/0/Qt_QML_Property_bindings_break_after_javascript_assignment.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qt_QML_Property_bindings_break_after_javascript_assignment.txt</guid>
 (???)                <description>Property bindings are one of the most powerful concepts in Qt/QML. Property bindings let you specify relationships between different object properties. When a properties dependencies change in value, the property is automatically updated according to the specified relationship. The QML engine monitors the properties dependencies (that is, the variables in the binding expression). When a change is detected, the QML engine re-evaluates the binding expression and applies the new result to the property.
 (???) ne little known caveat with property bindings is that they break after a static JavaScript assignment (`property = value`). This post shows you the different behaviors and how to use `Qt.binding()` to assign property bindings via JavaScript.</description> 
 (???)                <pubDate>Thu, 19 May 2022 05:30:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 19 May 2022 05:30:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>HTTP GET requests with Qt and in Qml (async)</title> 
 (???)                <link>gopher://raymii.org/0/HTTP_GET_requests_in_Qt_and_Qml_async.txt</link> 
 (???)                <guid>gopher://raymii.org/0/HTTP_GET_requests_in_Qt_and_Qml_async.txt</guid>
 (???)                <description>With Qt it's very easy to work with (async) HTTP requests. This guide shows you how to do it with Qt core and in Qml. The two examples print the output of a HTTP GET request on screen after pressing a button. The Qml method uses JavaScript, so that's cheating a bit, the other method uses plain C++ with Qt's libraries for networking (`QNetworkAccessManager`) and signals and slots for the async part.</description> 
 (???)                <pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 29 Apr 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Selling my own GPL software part 3, prior art (existing GPL software for sale)</title> 
 (???)                <link>gopher://raymii.org/0/Existing_GPL_software_for_sale.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Existing_GPL_software_for_sale.txt</guid>
 (???)                <description>In my earlier posts I described the hurdles I faced with my plan to [sell my own](/s/blog/Selling_GPL_Software_part_1_lots_of_hurdles.html) GPL software and I described how to [embed the source code directly inside the app] (/s/articles/Embed_the_source_code_directly_in_your_Qt_app.html) (for mobile platforms). This post looks at a few other projects that sell GPL software and it's a bit of a progress update regarding my plans and software.</description> 
 (???)                <pubDate>Sun, 24 Apr 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 24 Apr 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Proxmox VE 7 Corosync QDevice in a Docker container</title> 
 (???)                <link>gopher://raymii.org/0/Proxmox_VE_7_Corosync_QDevice_in_Docker.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Proxmox_VE_7_Corosync_QDevice_in_Docker.txt</guid>
 (???)                <description>At home I have a 2 node Proxmox VE cluster consisting of 2 HP EliteDesk Mini machines, both running with 16 GB RAM and both an NVMe and SATA SSD with ZFS on root (256 GB). It's small enough (physically) and is just enough for my homelab needs specs wise. Proxmox VE has support for clustering. For a cluster (in any sense of the word), you need at least 3 nodes, otherwise there is no quorum. Corosync, the cluster software used by Proxmox, supports an external Quorum device. This is a small piece of software running on a third node which provides an extra vote for the quorum. In my case I wanted to run this on my NAS, since (physical) space is a premium. The NAS supports Docker, this guide explains how to run the QDevice for Proxmox VE 7 in a Docker container. There is a qdevice Docker image on the Docker hub but that guide does not work for Proxmox VE 7 and requires a lot of manual setup. Using my method involves a lot less steps, since you're basically running an extra debian VPS (a container with systemd and openssh).</description> 
 (???)                <pubDate>Sun, 17 Apr 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 17 Apr 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Price of a guest post on dragonflydigest.com?</title> 
 (???)                <link>gopher://raymii.org/0/Price_of_a_guest_post_on_dragonflydigest.com.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Price_of_a_guest_post_on_dragonflydigest.com.txt</guid>
 (???)                <description>I have a deep-seated hatred towards half-assed quick-moneygrabbing marketeers, but today they reached at an all-time low. This site is `raymii.org`, I received an email for a guest post on `dragonflydigest.com`. Not even remotely alike in spelling. I'm not called Justin, and I (sadly) don't maintain an excellent BSD distro. So dear telemarketers, every week I get emails like this, please put in a bit more effort. Normally I don't spend any time or effort, certainly not provide exposure, but this instance of Cunningham's Law does deserve a post, sadly.</description> 
 (???)                <pubDate>Thu, 07 Apr 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 07 Apr 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Build a WeatherTerminal app for the Seeed reTerminal (with Qt 6 &amp; QML)</title> 
 (???)                <link>gopher://raymii.org/0/Qt_QML_WeatherTerminal_app_for_the_Seeed_reTerminal.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qt_QML_WeatherTerminal_app_for_the_Seeed_reTerminal.txt</guid>
 (???)                <description>In this guide I'll show you how to build a weather app for the Seeed reTerminal using Qt and QML. Imagine the reTerminal in your entrance hallway and with just a quick glance at the screen you'll know what the weather will be the next few hours, if you need an umbrella, if you'll have a headwind on your bicycle ride or if it's just going to be clear and sunny. This tutorial builds on the [reTerminal Yocto boot2qt distro](/s/tutorials/Yocto_boot2qt_for_the_Seeed_reTerminal_qt6.html) we've built in the previous article and uses Qt 6. Qt is a C++ framework, but this Weather app will use QML almost exclusively. I'm using just QML to make the guide more accessible and also because I'm used to doing everything in C++, so a sidestep to QML is fun for me as well. </description> 
 (???)                <pubDate>Sat, 02 Apr 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 02 Apr 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Yocto boot2qt for the Seeed reTerminal (Qt 6)</title> 
 (???)                <link>gopher://raymii.org/0/Yocto_boot2qt_for_the_Seeed_reTerminal_qt6.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Yocto_boot2qt_for_the_Seeed_reTerminal_qt6.txt</guid>
 (???)                <description>In this guide we'll build a linux distribution for Seeed reTerminal, using the Yocto project and the `boot2qt` stack provided by Qt. This `boot2qt` image can be written to the internal eMMC and when booted up, the Seeed reTerminal runs a software stack that integrates nicely with Qt Creator (the Qt IDE), for example, one click deployment to the device. You can run your own Qt application on the reTerminal, full screen, it will boot right into it.
 (TN3) his guide covers Qt 6.2. The guide also covers changing the default startup app to your own app, Qt Creator integration and rotating your Qt app, both Widgets and QML, the latter via Wayland and Weston.</description> 
 (???)                <pubDate>Fri, 18 Mar 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 04 Apr 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Qt 5.15.3 Open Source released</title> 
 (???)                <link>gopher://raymii.org/0/Qt_5.15.3_OpenSource_released.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qt_5.15.3_OpenSource_released.txt</guid>
 (???)                <description>Qt is a nice C++ framework with a GUI toolkit on top, actually, 2 toolkit, Widgets and Qml. Qt is available under the GPL and LPGL, open source licenses and a closed source license. [Back in 2020](https://lwn.net/Articles/817129/), the Qt company decided to [start a war](https://ev.kde.org/2020/04/06/changes-in-qt-and-the-kde-free-qt-foundation/) against their own users and contributors by withholding the 5.15 code, only releasing them under a closed license, making the offline installers available to paid customers and requiring a Qt account for the online installer. Due to [an agreement](https://www.qt.io/faq/3.2.-why-do-you-have-an-agreement-with-kde-about-your-licensing-what-kde-is-and-whats-the-history-of-qt-and-kde) with the [KDE project](https://kde.org/community/whatiskde/kdefreeqtfoundation/) they are obliged to release the code after one year under an open source license, and that time has come for 5.15.3. For most LTS releases, the Qt company writes a blog post, but this open source release only gets a [mailing list post](https://lists.qt-project.org/pipermail/development/2022-March/042262.html) (One day and 4 blog posts later, [no mention of 5.15.3 on their blog](https://archive.ph/IvMSn)). This short post is intended to give a bit more publicity to that release and to tell you about the KDE Qt 5.15 LTS patch collection. Even if I might not agree with the business practices, the framework is nice to work with.</description> 
 (???)                <pubDate>Fri, 04 Mar 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 04 Mar 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Raspberry Pi Compute Module 4 eMMC flashing issue (nRPI_BOOT)</title> 
 (???)                <link>gopher://raymii.org/0/Raspberry_Pi_Compute_Module_4_eMMC_flashing_issues.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Raspberry_Pi_Compute_Module_4_eMMC_flashing_issues.txt</guid>
 (???)                <description>I recently got my hands on a Raspberry Pi 4 Compute Module, 4 GB with 32 GB eMMC flash and a Compute Module 4 IO board. Due to the global chip shortage it's hard to find one in stock but I got lucky by checking [rpilocator.com] (https://rpilocator.com/) regularly (thanks to [Jeff Geerling] (https://www.jeffgeerling.com/blog/2022/its-dire-raspberry-pi-availability-tracker-launched) for that site. He's got amazing Raspberry Pi related content next to a bunch of high-quality Ansible playbooks, go give him a visit).
 (TN3) he eMMC edition I have can only be flashed if you put a jumper on a pin on the I/O board (to put the cm4 in a special mode, `nRPI_BOOT`) and use a special tool, [usbboot](https://github.com/raspberrypi/usbboot). [Jeff has a great guide](https://web.archive.org/web/20220226203155/https://www.jeffgeerling.com/blog/2020/how-flash-raspberry-pi-os-compute-module-4-emmc-usbboot) on flashing the cm4 eMMC edition. My `cm4` however, was not showing up whenever I put it in this special flashing mode. This article goes over the troubleshooting I did and the eventual solution (hint: hardware problem).</description> 
 (???)                <pubDate>Sat, 26 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 26 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Execute a script in a Yocto package on every image build</title> 
 (???)                <link>gopher://raymii.org/0/Execute_a_script_in_a_Yocto_package_on_every_image_build.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Execute_a_script_in_a_Yocto_package_on_every_image_build.txt</guid>
 (???)                <description>This is a small snippet showing a Yocto recipe that executes a script on every build of an image that includes that recipe. I use it to write the build hosts date/time to a file on the image, but you could do anything you want inside the script.
 (IMG) t's not recommended to do this, for example, if you want to place a binary on your image you should version it correctly. Yocto can build from a git repo, no need to copy binaries. If you include the `buildinfo` class your image or the `os-release` recipe, build info is also written to your image. </description> 
 (???)                <pubDate>Tue, 22 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 22 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Yocto boot2qt for the Raspberry Pi 4, both Qt 5.15 and 6.2</title> 
 (???)                <link>gopher://raymii.org/0/Yocto_boot2qt_for_the_Raspberry_Pi_4_both_Qt_6_and_Qt_5.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Yocto_boot2qt_for_the_Raspberry_Pi_4_both_Qt_6_and_Qt_5.txt</guid>
 (???)                <description>In this guide we'll build a linux distribution for Raspberry Pi 4, using the Yocto project and the `boot2qt` stack provided by Qt. This `boot2qt` image can be written to an SD card and when booted up, the Raspberry Pi runs a software stack that integrates nicely with Qt Creator (the Qt IDE), for example, one click deployment to the device. You can run your own Qt application on the Pi, full screen, it will boot right into it.
 (TN3) his guide covers both Qt 5.15 and Qt 6.2. The 5.15 build process is a bit convoluted due to a few upstream issues. The guide also covers changing the default startup app to your own app and Qt Creator integration.</description> 
 (???)                <pubDate>Mon, 21 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 21 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Embed the source code directly in your Qt app with qmake and qrc, for GPL compliance</title> 
 (???)                <link>gopher://raymii.org/0/Embed_the_source_code_directly_in_your_Qt_app.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Embed_the_source_code_directly_in_your_Qt_app.txt</guid>
 (???)                <description>In my earlier [post on selling GPL software](/s/blog/Selling_GPL_Software_part_1_lots_of_hurdles.html) I outlined a few points that make it hard to sell GPL software. One of them is the availability of the source code. You could put it online but then everyone has access without paying. Other options like putting it behind a login or sending a link after purchase require extra systems and saving more user information, lots of extra hassle for me and the users.
 (???) ne of my ideas for 'solving' this issue is by shipping the actual source code directly inside the application. This article shows you how to do that, by creating an archive of the current source code on every build with `qmake` and embedding that inside the application using `qrc`, including a button to save the archive locally to disk. It works on the desktop as well as Android, including the required permissions.</description> 
 (???)                <pubDate>Sat, 12 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 12 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Log all Item properties and functions in Qml</title> 
 (???)                <link>gopher://raymii.org/0/Log_all_Item_properties_and_functions_in_Qml.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Log_all_Item_properties_and_functions_in_Qml.txt</guid>
 (???)                <description>This small snippet of Javascript logs all properties and functions of a Qml Item. This is useful when you're knees-deep in a dynamic control that has a model and you're wondering why your code does not work. Probably because you're not using the correct property name. Or at least, that is something I often have. Logging all properties or functions helps to figure out that issue.</description> 
 (???)                <pubDate>Wed, 09 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 09 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Loop over all Repeater items or Delegate's in Qml</title> 
 (???)                <link>gopher://raymii.org/0/Loop_over_all_Repeater_items_or_Delegates_in_Qml.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Loop_over_all_Repeater_items_or_Delegates_in_Qml.txt</guid>
 (???)                <description>This small snippet shows how to loop over all Repeater items in Qml and also over all Delegate items in Qml. There are sublte differences between the two.
 (IMG) 'm using this to update visual all items in a control, before syncing state to a networked backend, and if the backend actions fails, I undo the visual state change. The network backend could be slow, by keeping state locally and syncing in the background, the user can continue working.</description> 
 (???)                <pubDate>Wed, 09 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 09 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Thank you, shotternail!</title> 
 (???)                <link>gopher://raymii.org/0/Thank_you_shotternail.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Thank_you_shotternail.txt</guid>
 (???)                <description> Recently I got a new Github Sponsor, a one-time donor. Often, these github profiles list a name, email address or some information to contact the person, even a last-resort ssh key with a comment, but this profile has nothing. They joined github 8 days ago, and I suspect it was just to do a donation to me.
 (???) ecause I have no other way of communicating, here is a public post to say thank you to [shotternail](http://web.archive.org/web/20220207192842/https://github.com/shotternail), whomever you are!</description> 
 (???)                <pubDate>Tue, 08 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 08 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>QML Touch Area visualization with QML_VISUAL_TOUCH_DEBUGGING</title> 
 (???)                <link>gopher://raymii.org/0/Qml_Touch_Area_Visualization_QML_VISUAL_TOUCH_DEBUGGING.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qml_Touch_Area_Visualization_QML_VISUAL_TOUCH_DEBUGGING.txt</guid>
 (???)                <description>This guide shows you how to enable a red visual square around your `Mouseareas` and `MultiPointTouchArea` controls. It visualizes where you can click/touch and also shows any overlapping touch area's. It's helpful on full screen device interfaces like a coffee-machine or other HMI.
 (TN3) he environment flag `QML_VISUAL_TOUCH_DEBUGGING` needs to be set, but this is not documented on the Qt Docs site, only on a cheat sheet from 2016 by ISC. If you google for the environment flag, the only pages you get are the Qt source code and that cheat sheet. I've found this flag to be very useful when debugging touch issues, like overlapping touch or when a touch area is too small to use.
 (???) ne of my co-workers found it when we had touch issues and since there is a lack of documentation, perfect for a small guide.</description> 
 (???)                <pubDate>Mon, 07 Feb 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 07 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>QML Drag and Drop including reordering the C++ model</title> 
 (???)                <link>gopher://raymii.org/0/Qml_Drag_and_Drop_example_including_reordering_the_Cpp_Model.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qml_Drag_and_Drop_example_including_reordering_the_Cpp_Model.txt</guid>
 (???)                <description>This guide shows you how to implement drag and drop in Qml including how to reorder the backing C++ (`QAbstractListModel` derived) data model.
 (???) ost QML Drag and Drop examples you find online, including the Qt official example, use a `ListModel` in the same Qml file which has the data, but no example I found actually reordered a C++ model.
 (TN3) his example has a simple `MVVM (model-view-viewmodel)` C++ structure and a QML file with a drag and drop grid. The dragable example items come from the C++ model, which is derived from `QAbstractListModel`.</description> 
 (???)                <pubDate>Fri, 21 Jan 2022 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 21 Jan 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Selling my own GPL software, part 1: a lot of hurdles</title> 
 (???)                <link>gopher://raymii.org/0/Selling_GPL_Software_part_1_lots_of_hurdles.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Selling_GPL_Software_part_1_lots_of_hurdles.txt</guid>
 (???)                <description>For as long as I can remember I've got this dream of a passive income software project. At first I thought of it as a hosted service, probably something monitoring related, or high-available cloud hosting-ish. That's the kind of stuff a sysadmin dreams of.&lt;br&gt;&lt;br&gt;
 (???) ow that I'm a developer for a couple of years, exposed to a few different languages, design patterns and software architectures, that idea is still lingering around, but no longer focused on a hosted piece of software. The web is just too fast paced, bloated and way too much work compared to a piece of cross platform software.&lt;br&gt;&lt;br&gt;
 (IMG) n my spare time I've been chugging along on a piece of software, which I'm contemplating selling. In my case the commercial aspect is made more difficult because I also want to release the software with a GPL license.&lt;br&gt;&lt;br&gt;
 (TN3) his post describes the initial hurdles I'm encountering, next to just programming the software.</description> 
 (???)                <pubDate>Fri, 24 Dec 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 24 Dec 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>The yearly backup restore test</title> 
 (???)                <link>gopher://raymii.org/0/Yearly_Backup_Restore_test.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Yearly_Backup_Restore_test.txt</guid>
 (???)                <description>In my calendar there is a yearly recurring item named 'backup restore test'. This is an article on my backup scheme and the yearly restore test, covering all aspects, such as data validation, backup scheme, time and cost involved.
 (IMG)  started doing personal restore tests each year around 2012, when I did them for my first job. At work back then, the restore test was monthly, for my own backups I decided that yearly was okay enough, since the backup scheme, software and provider do not change. I'm using Azure cold storage for my (locally encrypted) personal backups, since it's both cheap and supported by my local NAS.
 (???) ave you done your backup restore test recently?</description> 
 (???)                <pubDate>Fri, 05 Nov 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 05 Nov 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Responsive QML Layout (with scrollbars)</title> 
 (???)                <link>gopher://raymii.org/0/Responsive_Qml_layout_with_scrollbars.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Responsive_Qml_layout_with_scrollbars.txt</guid>
 (???)                <description>In this article I'll show you how to make a responsive layout in Qt / QML that automatically adjusts the amount of columns and rows based on the window dimensions, including scrollbars for when the content does not fit inside the window. This also works if you have a portrait and landscape orientation of your application, since the screen or window dimensions will be different across those two builds. I also explain how the dynamic resizing works with an explanation of property bindings in QML and as a bonus this works on mobile (Android/iOS) as well.</description> 
 (???)                <pubDate>Tue, 05 Oct 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 05 Oct 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Render markdown in a Qt QML Text or TextEdit control</title> 
 (???)                <link>gopher://raymii.org/0/QML_Render_Markdown_in_Text.txt</link> 
 (???)                <guid>gopher://raymii.org/0/QML_Render_Markdown_in_Text.txt</guid>
 (???)                <description>I recently discovered that Qt QML can render Markdown in `Text{}` controls. This snippet shows you how to do that including a screenshot and demo QML app.</description> 
 (???)                <pubDate>Mon, 04 Oct 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 04 Oct 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Qt/QML: Expose C++ classes to QML and why setContextProperty is not the best idea</title> 
 (???)                <link>gopher://raymii.org/0/Qt_QML_Integrate_Cpp_with_QML_and_why_ContextProperties_are_bad.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Qt_QML_Integrate_Cpp_with_QML_and_why_ContextProperties_are_bad.txt</guid>
 (???)                <description>In this article I'm going to discuss the different ways to expose a C++ class to QML. QML is a markup language (part of the QT framework) like HTML/CSS, with inline JavaScript that can interact with the C++ code of your (QT) application. There are multiple ways to expose a C++ class to QML, each with their own benefits and quirks. This guide will cover three integration methods, `qmlRegisterSingletonType&lt;&gt;`, `rootContext-&gt;setContextProperty()` and `qmlRegisterType&lt;&gt;`. We'll end off with a simple benchmark showing the difference in startup times between the first two. </description> 
 (???)                <pubDate>Sun, 03 Oct 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 03 Oct 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Expose any Qt5 program via VNC</title> 
 (???)                <link>gopher://raymii.org/0/Expose_any_QT_program_via_VNC.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Expose_any_QT_program_via_VNC.txt</guid>
 (???)                <description>A few months ago I wrote about [Microsoft Teams running on a coffee machine. That was a fun work experiment where I got a VNC client running on the Linux-based coffee machines that we produce at work. In the comments on hackernews Jean-Micha&amp;euml;l Celerier pointed me to the reverse, a way to expose any Qt application over VNC. This article shows you how I use this feature to work on our Qt 5 based coffee machine frontend as well as how you can use this on your machine, for example, to expose Dolphin, the KDE file manager, over VNC.</description> 
 (???)                <pubDate>Mon, 20 Sep 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 20 Sep 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Rectangle{} debugging in QML, just like printf(), but for QT</title> 
 (???)                <link>gopher://raymii.org/0/Rectangle_debugging_in_QML_just_like_printf.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Rectangle_debugging_in_QML_just_like_printf.txt</guid>
 (???)                <description>Recently I've been using a debugging technique in QT/QML that I've decided to name `Rectangle{}` debugging, in the same vein as `printf()` debugging. QML is a markup language (part of the QT framework) like HTML/CSS, with inline Javascript that can interact with the C++ code of your (QT) application. QML has the concept of `anchors` for relative positioning of elements. Overall, `anchors` work quite well, but can get complex when inheretance and complicated layouts come into play. The `Rectangle{}` style of debugging places a semi-transparent rectangle with a border around your element so you can visualize the positioning and see what effect your changes have. This article shows an example where I recently applied this style of debugging at work in our coffee machine user interface, including some tips to do actual `printf()` style debugging (but with `Console.log`).</description> 
 (???)                <pubDate>Wed, 08 Sep 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 08 Sep 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Relegendable keycaps for your macropad, the best thing ever for developer productivity</title> 
 (???)                <link>gopher://raymii.org/0/Relegendable_keycaps_for_your_macropad.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Relegendable_keycaps_for_your_macropad.txt</guid>
 (???)                <description>As you might know, I've got a weird keyboard. It is an Ergodox EZ, it's split up in two halves and for me it's the best thing ever to combat RSI. I've also got a weird mouse, a left handed vertical mouse, for the same reason. Even 15 minutes on a regular setup and my wrists and shoulders hurt. The next best thing is my standing desk and number three is having regular breaks with small exercises. One downside to the Ergodox is that you have less keys than on a regular keyboard. This is solved with layers, just like when holding SHIFT or CTRL, a key does something different. SHIFT is the layer for capital letters and symbols, with the Ergodox you can define your own layers. I however cannot get used to layers, not even after 7 years of using the Ergodox. Not a problem, I've got an extra keyboard in the middle, next to my mouse, with 8 or 9 keys just for my most often used shortcuts. It's called a macropad, one I've soldered myself and one I've bought on a well-known chinese webstore. One at work and one at home, both run QMK, firmware that allows me to program the macropad with my own shortcuts. Recently a video from Atomic Shrimp (awesome channel) showed off relegendable keycaps. Those are transparent keycaps with an insert for your own label. Before I had relegendable keycaps, I had regular keycaps for the macropad, for example, the `L` key sends `CTRL+ALT+L` to lock the desktop. Now, with these awesome keycaps, I have a dedicated `LOCK` key. This is such a big quality of life improvement, especially when using the CLion debugger shortcuts. This post covers my usage of the macropads, the re-legendable keycaps and shows you a few pictures of the macropads, both before and after.</description> 
 (???)                <pubDate>Mon, 06 Sep 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 06 Sep 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Install NetBSD 9.2 on a DEC Alpha CPU with AXPBox</title> 
 (???)                <link>gopher://raymii.org/0/NetBSD_Alpha_AXPbox.txt</link> 
 (???)                <guid>gopher://raymii.org/0/NetBSD_Alpha_AXPbox.txt</guid>
 (???)                <description>This is a guide on installing and running NetBSD 9.2 for the DEC Alpha CPU architecture on AXPbox, the open source Alpha Emulator. I recently wrote an article on how to install NetBSD in QEMU for Alpha and since I'm involved with the AXPbox project this article was just a matter of time. This guide shows you how to compile AXPbox and install NetBSD 9.2. It also shows you how to install packages without networking available and includes `openssl` and `sysbench` benchmarks, which we compare to NetBSD running inside QEMU.</description> 
 (???)                <pubDate>Sat, 28 Aug 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 28 Aug 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Remote desktop on NetBSD with Xnest (no VNC)</title> 
 (???)                <link>gopher://raymii.org/0/Remote_desktop_on_NetBSD_with_Xnest_no_VNC.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Remote_desktop_on_NetBSD_with_Xnest_no_VNC.txt</guid>
 (???)                <description>After I recently wrote about NetBSD on the DEC Alpha CPU in QEMU, I decided to play with NetBSD some more. One x86_64 virtual machine later, I'm starting to appreciate the beauty and simplicity. Great documentation, both online and via the manpages, low resource usage and boy oh boy does it feel fast. But, you're not here for my love letter, you want to have a remote desktop. In the earlier article, we set up VNC, both because it shows you how to install packages and because native X11 crashes. In this article, we are going to set up X11 forwarding via SSH, but with `Xnest` instead of VNC. `Xnest` allows you to have a full desktop / window manager inside a window. If you did a full install of NetBSD, then all you need is included on the system, no need to install any packages. This is an advantage if you are on an architecture that has no precompiled binary packages or if compiling from source takes too long.</description> 
 (???)                <pubDate>Sun, 22 Aug 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 22 Aug 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Install NetBSD 9.2 on a DEC Alpha CPU in QEMU with X11</title> 
 (???)                <link>gopher://raymii.org/0/NetBSD_on_QEMU_Alpha.txt</link> 
 (???)                <guid>gopher://raymii.org/0/NetBSD_on_QEMU_Alpha.txt</guid>
 (???)                <description>This is a guide on installing and running NetBSD 9.2 for the DEC Alpha CPU architecture in QEMU, including a GUI (X11 via VNC). It requires you to patch and compile QEMU yourself. It was never possible, until now, to run an actual operating system easily with QEMU Alpha, so this is amazing! It is very cool that Jason Thorpe is putting in so much effort on the QEMU side, as all but one patch is upstream already. Alpha emulation has always been a niche of a niche, so seeing this improve in QEMU is wonderful. OpenVMS does not boot yet since many more things are missing on the QEMU side, but who knows what the future might bring? Maybe even Windows NT for Alpha will boot on QEMU one day?</description> 
 (???)                <pubDate>Wed, 18 Aug 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 27 Aug 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Using IceWM and a Raspberry Pi as my main PC, sharing my theme, config and some tips and tricks.</title> 
 (???)                <link>gopher://raymii.org/0/Using_IceWM_and_sharing_my_config_and_tips_tricks.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Using_IceWM_and_sharing_my_config_and_tips_tricks.txt</guid>
 (???)                <description>KDE is my desktop environment of choice. KDE5 is rock-solid, configurable in any way possible and works great. It treats you like a responsible adult instead of a child like GNOME does these days, and after XFCE switched to GTK3, the RAM usage is on-par, more often than not a bare KDE install (Debian or Arch) uses around 300MB ram. This is with Baloo (search indexer) and Akonadi (PIM database backend) disabled. Great default behaviour, low resource usage and enourmous configurability, so why is this post then titled 'IceWM'? At home I'm using a small ARM device (Raspberry Pi 4 with an SSD) as my main computer, and there resources are limited. KDE runs fine, but you notice that it is a bit slower than on my work computer. IceWM on the other hand, uses less than 30 MB of RAM and even less CPU. The program that gives you a desktop background, icewmbg, uses double the RAM of IceWM itself! IceWM, next to Awesome, is one of my favorite window managers, very configurable and provides all I need. This PC doesn't have multiple screens, which would be a bit more of a hassle than with KDE. After switching, the machine feels a lot faster. It's the small details in which I notice it, like text input, a few seconds of lag here and there. This post shows my IceWM config including some options explained, my IceWM theme and a few tips and tricks to configure the rest of the desktop.</description> 
 (???)                <pubDate>Sat, 10 Jul 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 10 Jul 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Firefox 89 Proton UI Tab Styling</title> 
 (???)                <link>gopher://raymii.org/0/Firefox-89-proton-ui-tab-styling.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Firefox-89-proton-ui-tab-styling.txt</guid>
 (???)                <description>Firefox 89 recently came out with a 'new' user interface (named proton). I'm not a fan of change because UX/UI people need to make it seem like their job is relevant. Also, the picture they show under the headline '17 billion clicks...' only scares the crap out of me, tracking every move a user makes in their browser seems to me to be a bad idea, but hey, lets see how long Mozilla can continue their war against their own users. Since the `about:config` flag to disable proton will probably be gone in a few releases I thought, why not try to get used to this new interface. It's so enormous and wide, lacking contrast. As you might have guessed, I cannot get used to the tab bar, so in this post I'll show you how to use the `userChrome.css` file to make the new tab bar look a bit more like the old tab bar. </description> 
 (???)                <pubDate>Sun, 27 Jun 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 27 Jun 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Execute a command and get both output and exit status in C++ (Windows &amp; Linux)</title> 
 (???)                <link>gopher://raymii.org/0/Execute_a_command_and_get_both_output_and_exit_code.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Execute_a_command_and_get_both_output_and_exit_code.txt</guid>
 (???)                <description>Recently I had to parse some command line output inside a C++ program. Executing a command and getting just the exit status is easy using `std::system`, but  also getting output is a bit harder and OS specific. By using `popen`, a POSIX `C` function we can get both the exit status as well as the output of a given command. On Windows I'm using `_popen`, so the code should be cross platform, except for the exit status on Windows is alway 0, that concept does not exist there. This article starts off with a stack overflow example to  get just the output of a command and builds on that to a safer version (null-byte handling) that returns both the exit status as well as the command output. It also involves a lot of detail on `fread` vs `fgets` and how to handle binary data.</description> 
 (???)                <pubDate>Mon, 07 Jun 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 07 Jun 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Exclude lines in less (or journalctl)</title> 
 (???)                <link>gopher://raymii.org/0/Exclude_lines_in_less_or_journalctl.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Exclude_lines_in_less_or_journalctl.txt</guid>
 (???)                <description>This is a small tip I want to give you when using a `less` based pager, for example in `journalctl` or when viewing a file interactively with `less` or `more`. You can exclude certain lines that match one or multiple words (or a regex) with a few keystrokes, once `less` is open. This is one of those tips you never knew you needed, but when you know it, you'll use it frequently. Like in my case today when searching through some logfiles to find out why my database stopped working.</description> 
 (???)                <pubDate>Sun, 23 May 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 23 May 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>All packages that were present in Ubuntu 18.04 but absent in Ubuntu 20.04</title> 
 (???)                <link>gopher://raymii.org/0/All_packages_that_were_present_in_Ubuntu_18.04_but_removed_in_20.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/All_packages_that_were_present_in_Ubuntu_18.04_but_removed_in_20.04.txt</guid>
 (???)                <description>Otherwise titled `Figure out the differences between two apt repositories`. Recently I've had a few packages that I often use but were missing from Ubuntu 20.04 LTS. One is [ckermit](/s/blog/Ive_packaged_up_CKermit_as_a_snap_for_Ubuntu_20.04.html) and the other is [gnash](/s/blog/Ive_packaged_up_Gnash_as_a_Snap_for_modern_linux.html), both of which I 'converted' to a snap. (In air quotes because I just converted the 18.04 deb). This made me wonder if I could figure out a list of that are present in Ubuntu 18.04, but absent in Ubuntu 20.04. As `apt` and `dpkg` are standardized tools and and package formats, we can use a few shell tools to parse the package lists and compare them side by side.
 (TN3) his post shows you how to do the comparison yourself and I discuss the removed packages a bit. Some are version increments (like `gcc-6` in Ubuntu 18.04 but `gcc-7`in Ubuntu 20.04),  and some are packages that were combined into one instead of split up  (like `ltsp` in Ubuntu 20.04 but a bunch of seperate `ltsp-$postfix` packages instead  in Ubuntu 18.04). Many others are just replaced by newer versions (`python-ceph` vs `python3-ceph`). The list of differences is provided as a download, both ways.</description> 
 (???)                <pubDate>Wed, 19 May 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 19 May 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>I've packaged up CKermit as a snap, for Ubuntu 20.04</title> 
 (???)                <link>gopher://raymii.org/0/Ive_packaged_up_CKermit_as_a_snap_for_Ubuntu_20.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ive_packaged_up_CKermit_as_a_snap_for_Ubuntu_20.04.txt</guid>
 (???)                <description>Last year I packaged up [gnash as a snap](/s/blog/Ive_packaged_up_Gnash_as_a_Snap_for_modern_linux.html) because it was missing from the Ubuntu 20.04 apt repositories. Recently I found out that `ckermit` is also not in Ubuntu 20.04, as far as I can tell because it wasn't in the Debian repositories when the Ubuntu 20.04 initial sync happened. Which is very inconvenient for an LTS release.
 (IMG)  often use `ckermit` to connect to our hardware via a script, to automatically boot from NFS (via u-boot). I could do that manually via `screen` or `minicom`, but I have a `kermit` script that does it for me, which is very convenient. Since the snapping of `gnash` was so easy, I decided to do it for `ckermit` as well, since I now know how to convert deb packages to snaps. I also have a few colleagues who also use those kermit scripts and are going to update to 20.04 in the (near) future.
 (TN3) he snap packaging is based on work by Phil Roche, he wrote about re-packaging older debian packages with an Ubuntu 18.04/16.04 base layer as a snap. My `ckermit` package is confined (no `--classic` needed), the source code for the snap is on my github and on any snap-enabled distro you can now 'snap install ckermit-raymii' to enjoy CKermit.</description> 
 (???)                <pubDate>Sun, 16 May 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 16 May 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>It compiles does not always mean that it works, a tale of virtual overridden fun in C++</title> 
 (???)                <link>gopher://raymii.org/0/It_compiles_does_not_always_means_that_it_works.txt</link> 
 (???)                <guid>gopher://raymii.org/0/It_compiles_does_not_always_means_that_it_works.txt</guid>
 (???)                <description>In a [recent article on clang-tidy](/s/snippets/Run_one_specific_clang-tidy_check_on_your_codebase.html) I referenced the fact that we're doing a huge refactoring regarding `char` pointers, lifetime, ownership and `std::strings`. Todays post is another one related to that change, where even though everything compiled correctly, it didn't `work`. For a compiled language, that is not something you expect. Next to unit tests, a compiler error is your number one sign that you've made a mistake somewhere.
 (IMG) n this case however, the code all compiled fine. The issue here was an older part of the code not using `override` combined with automated refactoring in CLion missing some parts of the code during a change. So, the issue in this case is entirely our own fault, it was spotted in the manual testing, but I'd rather had it not happen at all.
 (IMG) n this post I'll describe the problem including some example code that illustrates what happened. My key point is that even though the code compiles, you should always test it, preferably automated with unit and integrations tests, otherwise manually with a runbook.</description> 
 (???)                <pubDate>Wed, 12 May 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 14 May 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Run MS Teams on a coffee machine?!? (Or: Embedded Linux Framebuffer VNC client)</title> 
 (???)                <link>gopher://raymii.org/0/MS_Teams_on_a_Coffee_Machine_or_Framebuffer_VNC_Client.txt</link> 
 (???)                <guid>gopher://raymii.org/0/MS_Teams_on_a_Coffee_Machine_or_Framebuffer_VNC_Client.txt</guid>
 (???)                <description> To fill some time [during compiling](https://xkcd.com/303/) I tried to get a VNC client running on a coffee machine, specifically to show MS Teams. At work I develop software for these coffee machines in C++, which allows me to do such fun stuff, because from a software point of view, it's just an ARM PC running linux with a framebuffer for graphics. I compiled a few framebuffer VNC clients, fired up an SSH tunnel and used `x11vnc` to share one specific window and after a few attempts, Teams was up and running on my 'new' second monitor.
 (TN3) his post contains my little adventure in framebuffer VNC clients, but it's not a comprehensive guide as most of my other articles. Showing you how to set up an Openembedded server with a VariScite specific toolchain is way too much work to cross-compile a simple C program, but since that's my day job, why not use it for fun. It contains some tips for `x11vnc` and shows you two different framebuffer VNC clients, `fbvnc` and `directvnc`.</description> 
 (???)                <pubDate>Thu, 08 Apr 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 08 Apr 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Run one specific clang-tidy check on your entire codebase</title> 
 (???)                <link>gopher://raymii.org/0/Run_one_specific_clang-tidy_check_on_your_codebase.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Run_one_specific_clang-tidy_check_on_your_codebase.txt</guid>
 (???)                <description>Recently I did a major refactor on a piece of code that involved thousands of lines of code which were in one  way or another related to string handling. All of the code handled `char*` (C style character pointer arrays) and the concept of `const` or ownership was literally unknown in that part of the codebase. The refactored code uses `std::string`'s, but due to the legacy nature, a large number of methods returned `nullptr`'s instead of empty strings. I understand why this was done, but finding all those instances and the fact it only gives a runtime error was a bit of a bummer.
 (???) uckily `clang-tidy` is here to save the day. In my IDE, CLion, it gives a warning when you return a `nullptr`. It however does that only in the file you're currently editing, and since we're talking millions of files, I wasn't going to open them by hand. You can run `clang-tidy` easily on one file, and it's not hard to run it on an entire codebase as well, using  the script `run-clang-tidy.py`, provided in their packages.
 (TN3) his snippet shows you how to run one specific `clang-tidy` check, in my case, `bugprone-string-constructor`, on a (cmake and C++) codebase.</description> 
 (???)                <pubDate>Mon, 05 Apr 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 05 Apr 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Three ways to print booleans as 'True' or 'False' in C++</title> 
 (???)                <link>gopher://raymii.org/0/Print_booleans_as_True_or_False_in_C++.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Print_booleans_as_True_or_False_in_C++.txt</guid>
 (???)                <description>In this article I'll show you three ways to print a textual representation of a boolean in C++. Normally a bool is printed as either a `0` or a `1` by `std::cout`, but more often than not, if you're printing a `bool`, it's better to see `true/false`. Imagine reading through lines and lines of boring, repeating log files, how easy is it to miss a `0` in a sea of `1`'s? I've been there many times, wishing for more verbose logs.
 (IMG) 'll start with a simple `printf` with a ternary `if`  e.g. `(a ? this : that)` and continue on to `std::boolalpha`. The latter one is more flexible and allows you to set different values to be printed, for localization,  and can even be used to parse input streams. That means, the string `true false` results in two `booleans`, the first being, well, `true` and the latter, surprisingly, being `false`.</description> 
 (???)                <pubDate>Sun, 21 Mar 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 21 Mar 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Record your Linux Desktop with ffmpeg and slop to any format</title> 
 (???)                <link>gopher://raymii.org/0/Record_your_Linux_Desktop_with_ffmpeg_and_slop.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Record_your_Linux_Desktop_with_ffmpeg_and_slop.txt</guid>
 (???)                <description>This two-line shell script allows you to record a region of your linux desktop to a video file, or a `.gif`, using `slop` and `ffmpeg`. I use it often when a screenshot is not enough, or when you need to explain a sequence of events to someone.</description> 
 (???)                <pubDate>Wed, 17 Mar 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 17 Mar 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Disable (debug) logging in QT and QML</title> 
 (???)                <link>gopher://raymii.org/0/Disable_logging_in_QT_and_QML.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Disable_logging_in_QT_and_QML.txt</guid>
 (???)                <description>In QT you can use a few functions from the `qDebug.h` header like `qDebug()` and `qWarning()` to log information to the console. In QML you can use the likes of `console.log()`, `console.error()`. It's also very easy to implement your own logger (eg. `SyslogMessageHandler`) if you want something different, like logging to syslog and the console.
 (IMG) n this post I'll show you how to disable both forms of logging in a release build, qml and qt have different ways to manage their output.</description> 
 (???)                <pubDate>Sat, 27 Feb 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 27 Feb 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>QT / QML Signals and Slots with C++</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_QT_QML_Signals_and_Slots.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_QT_QML_Signals_and_Slots.txt</guid>
 (???)                <description>QT has an Observer mechanism built in, which they call '[Signals and Slots](https://web.archive.org/web/20210210180603/https://doc.qt.io/qt-5/signalsandslots.html)'. It allows objects to communicate with each other without having to have knowledge of either ones internals. By inheriting from `QObject` and defining a few `Q_PROPERTY` macro's, the QT Meta Object Compiler (`moc`) does all the hard work for you.
 (IMG) nside a C++ class this all works handy dandy and is reasonable easy to follow, but when using QML it requires a bit more work. This small example shows you how to bind QML and C++ together using signals and slots, in QT 5.12.</description> 
 (???)                <pubDate>Thu, 25 Feb 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 25 Feb 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Limit specific process memory on desktop linux with cgroups and earlyoom</title> 
 (???)                <link>gopher://raymii.org/0/Limit_specific_process_memory_on_desktop_linux_with_cgroups.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Limit_specific_process_memory_on_desktop_linux_with_cgroups.txt</guid>
 (???)                <description>On my laptop I recently had trouble with out of memory issues when running `clion`, `firefox`, `thunderbird`, `teams` and a virtualbox VM. To combat this, I've setup cgroups to limit how much RAM specific applications can use and configured `earlyoom`, a very nifty tool that checks available memory and kills the process with the highest `oom_score` if available memory falls below 5%. Otherwise, my laptop would first grind to a halt (even without swap) and only after half an hour of seemingly being stuck would the OOM killer kick in. With `earlyoom` this hanging behavior is gone, although sometimes applications get killed when I don't expect it. I've given firefox, thunderbird and teams a cgroup with memory limit and clion and virtualbox use their own configuration to limit their RAM usage.This post details how to setup `cgroups` to limit memory of specific processes including automatically placing process inside a cgroup.</description> 
 (???)                <pubDate>Sat, 13 Feb 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 13 Feb 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Reset the SYSTEM password on OpenVMS 8.4</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_reset_SYSTEM-password.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_reset_SYSTEM-password.txt</guid>
 (???)                <description>This short post shows you how to reset the SYSTEM account password on a single OpenVMS 8.4 ALpha machine via the serial console. You need physical access to the machine and the procedure looks a lot like linux and appending `init=/bin/bash` to the GRUB commandline to boot into single user mode. It is tested on the AXPbox Alpha emulator, I forgot my password after not using it for a month.</description> 
 (???)                <pubDate>Wed, 03 Feb 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 03 Feb 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>The Common Desktop Environment (CDE) is still developed and modern in 2021</title> 
 (???)                <link>gopher://raymii.org/0/The_Common_Desktop_Environment_CDE_is_still_developed_in_2021.txt</link> 
 (???)                <guid>gopher://raymii.org/0/The_Common_Desktop_Environment_CDE_is_still_developed_in_2021.txt</guid>
 (???)                <description>While playing around with the GUI on OpenVMS I was looking for CDE documentation and I found out CDE is still being developed and can be installed on modern linux. This quick post shows you how to install CDE on Debian 10 and includes a bit on compiling GENERIC TETRIS, the same program I installed on OpenVMS. Really cool to compile and run a game from 1992 on a retro/modern desktop environment.</description> 
 (???)                <pubDate>Thu, 28 Jan 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 28 Jan 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS CDE Desktop Remote X session GUI (on AXPbox)</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_CDE_Desktop_remote_x_axpbox.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_CDE_Desktop_remote_x_axpbox.txt</guid>
 (???)                <description>Last year November, I posted on a new OpenVMS related project, AXPbox, the open source Alpha emulator, a fork of es40 by Tom&amp;aacute;&amp;scaron; Glozar. Last week I put together the first official release of AXPbox, one of the changes being in the network code, making it more stable, thus being able to run a remote X session. Meaning, you can run the CDE desktop and enjoy everything the OpenVMS GUI has to offer. This article shows you how to run the CDE GUI in a remote X session, including switching between the old Motif look and the new DECWindows and how to run Tetris.</description> 
 (???)                <pubDate>Tue, 26 Jan 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 26 Jan 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>AXPbox version 1.0.0 released! (Open source Alpha emulator)</title> 
 (???)                <link>gopher://raymii.org/0/AXPBox-version-1.0.0-released.txt</link> 
 (???)                <guid>gopher://raymii.org/0/AXPBox-version-1.0.0-released.txt</guid>
 (???)                <description>Last year November, I posted on a new OpenVMS related project, AXPbox, the open source Alpha emulator, a fork of es40 by Tom&amp;aacute;&amp;scaron; Glozar. I got involved a bit in the project, submitting a few patches here and there, editing the Wiki and thus now have contributer rights on the github repository. After discussing a bit back and forth with Tom&amp;aacute;&amp;scaron;, I put together the first official release of AXPbox, very exciting news. The release can be found here on github. This article has the release notes and a bunch of screenshots of OpenVMS inside AXPbox running GUI applications over the network.</description> 
 (???)                <pubDate>Sat, 23 Jan 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 23 Jan 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Site updates, new font for better contrast and other small CSS fixes</title> 
 (???)                <link>gopher://raymii.org/0/Site_updates_new_font_for_better_contrast.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Site_updates_new_font_for_better_contrast.txt</guid>
 (???)                <description>New year, time for some site updates. This site is generated with my self-written open source static site generator named ingsoc (named after 1984) and this update is a collection of  small improvements. A new font, internal code updates to the generator and a few CSS fixes here and there. This article goes over all of them including screenshots before and after!</description> 
 (???)                <pubDate>Tue, 12 Jan 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 12 Jan 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ std::async with a concurrency limit (via semaphores)</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_std_async_with_a_concurrency_limit.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_std_async_with_a_concurrency_limit.txt</guid>
 (???)                <description>std::async is an easy way to do multiple things concurrently, without the hurdle of manual thread management in C++. Like batch converting images, database calls, http requests, you name it. Create a few 'std::futures' and later on when they're ready, '.get()' 'm while they're still hot. A 'future' is an object which handles the synchronization and guarantees that the results of the invocation are ready. If you '.get()' it and it's not ready, it will block.
 (???) ecently I had a use case for concurrency with a limit. I needed to do hundreds of HTTP calls to a JSON API. The concurrency limit was not for the hardware, but for the server on the other side. I didn't want to hammer it with requests.
 (TN3) here is no standard way to limit the amount of concurrent jobs via 'std::async'. You can fire of a hundred jobs and it is up to the implementation to not fry the hardware. On linux/gcc it will probably use a thread pool so you're lucky, but you cant assume that.
 (TN3) his article will show you a simple short solution to implement a concurrency limit together with std::async, by using a semaphore, implemented with modern (C++ 11) standard library features ('std::mutex', 'std::condition_variable' and such). It also has a C++ 17 version which replaces our custom CriticalSection class with the use of an 'std::scoped_lock' and 'BasicLockable'.
 (???) e start off with a shorter example showing how to fire off a set number of jobs and wait until all of those are finished before continuing. That is very useful if you have a set number of jobs and want the implementation to handle all the thread work for you.</description> 
 (???)                <pubDate>Sat, 09 Jan 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 10 Jan 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Lets talk about changelogs, or, how I loathe 'bugfixes and performance improvements'</title> 
 (???)                <link>gopher://raymii.org/0/Rant_Lets_talk_about_changelogs.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Rant_Lets_talk_about_changelogs.txt</guid>
 (???)                <description>This is a short personal rant to start the new year off. When you're a multi billion dollar company with more software developers than you'd ever need, how on earth is it possible that your public changelog in an app store is just 'bugfixes and performance improvements'? If that is all you're going to put there, then just leave it blank. Or be honest and put 'We can't be arsed to fill this in' there. For me as a technical user it's not actionable, and your non technical users are not going to read that page anyway.</description> 
 (???)                <pubDate>Sat, 02 Jan 2021 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 02 Jan 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Hacker News vs Lobste.rs in C++, an exercise in parsing json http api's and date/time/timezones</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_exercise_in_parsing_json_http_apis_and_time_stuff.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_exercise_in_parsing_json_http_apis_and_time_stuff.txt</guid>
 (???)                <description>I recently wondered how many top posts on the Hacker News frontpage are also on Lobsters. At first I reached for my trusty Python, because when I need to do some JSON API parsing that's what I'll use. (Otherwise bash is my default goto for small things, except when json, networking or associative arrays are involved.) But, then, a thought came to my mind. Why not try it with reasonably modern C++. It's what I do at work, so why not a simple personal project. It would involve dependency management (json and a http library), parsing both API endpoints and, most importantly, doing stuff with time. Time, timezones and dates are hard. This article contains a bit of my learning process, compilation and usage instructions and an example run. Go look at the code and run the code yourself. Let me know if my timezone calculations are working outside of GMT+1.</description> 
 (???)                <pubDate>Thu, 31 Dec 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 31 Dec 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash HTTP monitoring dashboard</title> 
 (???)                <link>gopher://raymii.org/0/Bash_HTTP_Monitoring_Dashboard.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_HTTP_Monitoring_Dashboard.txt</guid>
 (???)                <description>This is a shell script that creates a webpage with the status of HTTP(s) sites. Parallel checking, thus very fast, only dependencies are curl and bash (version 4 or above). For all of you who want a simple script with a nice webpage to check a few websites. Perfect for a wall mounted monitoring display and a Raspberry Pi. Installation and configuration is easy to do inside the script. It scales well, both on the checking side as the information display page (dense on purpose). Failed checks appear right on top for you to act on. I had this script running at home for at least a year in that form, when I showed it to a friend he liked it,  asked me to make it public, but before I did that I polished it up a bit. </description> 
 (???)                <pubDate>Sun, 27 Dec 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 11 Jan 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ set up cpp-httplib with SSL support with cMake</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_set_up_cpp-httplib_with_ssl_support_with_cmake.md.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_set_up_cpp-httplib_with_ssl_support_with_cmake.md.txt</guid>
 (???)                <description>For a small personal project that talks to a few JSON API's and does some data parsing I needed a header only C++ HTTP library. Header only because that is the simplest way to include it in my project, just copy and paste the file. I came across the project cpp-httplib, which fits my needs, does all the http methods, small, a few examples and it looks modern and has recent development commits. Setup and getting it working was easy, but as soon as I tried an https url, I got an exception ('https scheme is not supported.'). This guide shows you how to setup cpp-httplib for SSL support with cmake. It took me a bit longer than I wanted to set it up correctly, so why not save you the effort.</description> 
 (???)                <pubDate>Mon, 14 Dec 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 14 Dec 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>I've packaged up Gnash as a snap, for modern linux</title> 
 (???)                <link>gopher://raymii.org/0/Ive_packaged_up_Gnash_as_a_Snap_for_modern_linux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ive_packaged_up_Gnash_as_a_Snap_for_modern_linux.txt</guid>
 (???)                <description>I hate snaps just as much as the next guy but last week I did something unexpected. I packaged up Gnash as a snap.  Gnash is a GNU flash media player, not updated since 2011, and  thus removed from the Ubuntu 20.04 repositories. The snap packaging is based on work by phil roche, he wrote about re-packaging older debian packages with an Ubuntu 18.04/16.04 base layer as a snap. My gnash package is confined (no '--classic' needed), the source code for the snap is on my github and on any snap-enabled distro you can now 'snap install gnash-raymii' to enjoy Gnash again.</description> 
 (???)                <pubDate>Mon, 07 Dec 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 May 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Semi-accurate live stream viewer count (hls/rtmp/restreamer) on the command line</title> 
 (???)                <link>gopher://raymii.org/0/Semi-accurate_live_stream_viewer_count.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Semi-accurate_live_stream_viewer_count.txt</guid>
 (???)                <description>Due to all the working-from-home in the past few months I had to setup a live stream. At first the stream went directly to YouTube, but after they've screwed up multiple times, we decided to not be dependent on them. Using restreamer, a piece of open source software to live stream both to your own server and to another (YouTube) at the same time, we have more control over the stream and are not surprised by YouTube doing stupid stuff unannounced. Restreamer provides a simple web player that works on all major platforms and streams to YouTube, but one thing it lacks is a live viewer count. That's a hard problem to solve correctly and accurately, in this article I'll show you how to do it semi-accurately via multiple ways, including live graphs. This article contains a rant on YouTube breaking stuff and the commands used to get a live viewer count. </description> 
 (???)                <pubDate>Wed, 25 Nov 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 25 Nov 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Installing OpenVMS 8.4 Alpha inside AXPbox on Debian 10 / Ubuntu 20.04 with networking</title> 
 (???)                <link>gopher://raymii.org/0/Installing_OpenVMS_8.4_Alpha_in_AXPbox_with_networking.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Installing_OpenVMS_8.4_Alpha_in_AXPbox_with_networking.txt</guid>
 (???)                <description>In my previous article I announced the fork of the `es40` emulator to `AXPbox` by Tom&amp;aacute;&amp;scaron; including bug fixes and rework allowing it to install OpenVMS 8.4 without problems. Since then I've contributed a few patches and doc updates, now NetBSD boots as well (the patches for netbsd were from other es40 forks). I've also looked into getting networking setup, since that is a bit of a tedious process due to pcap and linux, pcap being used for network emulation. SIMH (among others, a great VAX emulator) suffers from the same problems with networking. This guide will show you how to install AXPbox and get OpenVMS 8.4 ready and running with networking inside AXPbox. It's a rather long guide with a lot of information and output.</description> 
 (???)                <pubDate>Wed, 04 Nov 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 08 Nov 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Exciting OpenVMS Alpha Emulation news, es40 has been forked to Axpbox (and works!)</title> 
 (???)                <link>gopher://raymii.org/0/Exciting_OpenVMS_Alpha_emulation_news_es40_has_been_forked_to_axpbox.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Exciting_OpenVMS_Alpha_emulation_news_es40_has_been_forked_to_axpbox.txt</guid>
 (???)                <description>Back in 2018 I was playing around with OpenVMS a lot, as it continues on the legacy of the PDP-8 and PDP-11. OpenVMS 7.3 on the VAX emulated via SIMH runs perfectly, OpenVMS 8.4 for Alpha was kind of a disaster, or, the es40 emulator was. Real hardware is available via IslandCo, but shipping to the Netherlands is horribly expensive.
 (TN3) he only options back then for emulation of Alpha were FreeAXP or AlphaVM, both paid, closed sourced products with watered down free versions. Nothing wrong with that, it enables us to play around, and now that OpenVMS is in the hands of VMS Software with an x86 port coming along we may hope for a bright future ahead for OpenVMS. VSI currently provides a hobbyist version, but it's a FreeAXP bundle for Windows only.
 (???) ecently I got an email from Tom&amp;aacute;&amp;scaron; regarding his fork of the es40 emulator, axpbox. This short post is intended to give this emulator more visibility and exposure, since I find this to be amazingly cool and exciting. It lists the bugs fixed and new features, which allow OpenVMS 8.3 and 8.4 to install perfectly.</description> 
 (???)                <pubDate>Wed, 28 Oct 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 28 Oct 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>I enforced the AGPL on my code, here's how it went</title> 
 (???)                <link>gopher://raymii.org/0/I_enforced_the_AGPL_on_my_code_heres_how_it_went.txt</link> 
 (???)                <guid>gopher://raymii.org/0/I_enforced_the_AGPL_on_my_code_heres_how_it_went.txt</guid>
 (???)                <description>Five years ago I made a website that allowed you to put in a few domains and get an email when the SSL certificate was about to expire. No ads, no fuss, just an easy way for people to keep tabs on their sites without setting up their own monitoring like Nagios. As with all of my software, I released it under the AGPL due to it being web based software.
 (???) ecently I found a company that hosted certificatemonitor, with some modifications (branding and a dutch tanslation), without any reference to its origin, no source code provided and no mention of the license.
 (IMG) n this article I'll talk about what I did to enforce the license and how it went. TL;DR, not as expected. The company responded timely and friendly, but did a half assed attempt (added a link to my site with 'Inspired By Remy' as the text), then after my complaints, took down the entire site.</description> 
 (???)                <pubDate>Tue, 20 Oct 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 28 Feb 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>What does raymii.org cost to run?</title> 
 (???)                <link>gopher://raymii.org/0/Costs_to_run_raymii.org.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Costs_to_run_raymii.org.txt</guid>
 (???)                <description>Inspired by recent articles from Kev Quirk, Horst Gutmann and Jan-Lukas where they do a cost breakdown of their sites, I decided to do one as well. Kev is around USD 30, Horst is around USD 13 and Jan-Lukas is around 5 USD. Their breakdowns are interesting, from specific wordpress plugins to CDN or DNS costs. I don't have those, but I do have a multitude of small servers running this site, which add up to around USD 20, adding up two domain names gives me around USD 22 per month. It could be a lot cheaper, I only need one server for the gigantuous amounts of static HTML this site consists of, but I do have around 10.000 unique visitors each day, so having redundancy is nice. If I would go all cheap, this site would cost me no more than 2 USD a month including the domain name, but that would take the fun out of it. This article features a list of similar, how much does my site cost articles and a cost breakdown of this site.</description> 
 (???)                <pubDate>Sun, 27 Sep 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 27 Sep 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Tiny Tiny RSS vs Miniflux</title> 
 (???)                <link>gopher://raymii.org/0/Tiny_Tiny_RSS_vs_Miniflux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Tiny_Tiny_RSS_vs_Miniflux.txt</guid>
 (???)                <description>I'm an heavy user of RSS feeds, having over 1500 feeds I follow. Without a decent feed reader that setup wouldn't work. For over eight years now I've been an happy user of Tiny Tiny RSS, a web based feed reader. But, recently I found out about 'miniflux', also a web based RSS reader. In this article I'll compare the two for my use cases, mostly mobile usage. TD;DR, I've switched to Miniflux, due to it being more suited for mobile usage, less ajax heavy, easier to subscribe to feeds and a more pleasant reading layout.</description> 
 (???)                <pubDate>Sat, 26 Sep 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 26 Sep 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Store multiple types in a single std::map in C++ with std::any, just like a python dict</title> 
 (???)                <link>gopher://raymii.org/0/Store_multiple_types_in_a_single_stdmap_in_cpp_just_like_a_python_dict.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Store_multiple_types_in_a_single_stdmap_in_cpp_just_like_a_python_dict.txt</guid>
 (???)                <description>In C++, everything has a type. When declaring a function you specify the return type and for each parameter you specify what type it is, just as for regular variables. Templates aside (those still have a type), you almost always know what type of data you're working with. There is the 'auto' keyword, which can save you a lot of typing and duplicate code, but fundamentally you're still working with types. Since C++ 17 you can use 'std::any' to store anything, without knowing the type. This is awesome for some tasks, and horrific for most use cases. In this article I'll show an example of a 'std::map' with 'std::any', that behaves like a python 'dict', it's able to store multiple different types in the same container.</description> 
 (???)                <pubDate>Wed, 23 Sep 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 23 Sep 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>CookieNumberPrinter, incremental / idle game style numbers in C++</title> 
 (???)                <link>gopher://raymii.org/0/CookieNumberPrinter_incremental_game_style_numbers.txt</link> 
 (???)                <guid>gopher://raymii.org/0/CookieNumberPrinter_incremental_game_style_numbers.txt</guid>
 (???)                <description>To level up my software development skills, I'm programming a command line game in my spare  time.  It is a clone of the famous cookieclicker game by ortiel. A clone of a game is simple enough to get up and running  fairly quickly, but also extensible enough when needed. How do you store huge score numbers  when they don't fit in a long long? How do you write a game loop, how to use threads to handle  user input? Saving a game (how to design a proper save format)? Also a great way to learn about project organization, software architecture and to try out design patterns. As the game is a clone of CookieCliker, which itself is an incremental game, I had to figure out how to work with large numbers. Since this is not a university math project, I allowed myself the luxury of using Boosts Multiprecision.  The library handles the large numbers, including caluclation and operations with such a number. I did want to print the numbers in Idle Style, where large numbers are displayed with a suffix, like '1 million' instead of '1000000' and so on. This 'C++' class can be used to print Boost's 'cpp_dec_float' numbers in incremental style. It's just one header.</description> 
 (???)                <pubDate>Sat, 12 Sep 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 12 Sep 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get all SSH public keys from gitlab</title> 
 (???)                <link>gopher://raymii.org/0/Get_all_SSH_public_keys_from_gitlab.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_all_SSH_public_keys_from_gitlab.txt</guid>
 (???)                <description>This small snippet gets all the SSH keys from a gitlab instance. You need to be an administrator, then you can query all keys at once using the API. On the web frontend you can only see the keys per user, not all at once in an overview.</description> 
 (???)                <pubDate>Wed, 26 Aug 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 26 Aug 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get number of incoming connections on specific port with ss</title> 
 (???)                <link>gopher://raymii.org/0/Get_number_of_incoming_connections_on_specific_ports_with_ss.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_number_of_incoming_connections_on_specific_ports_with_ss.txt</guid>
 (???)                <description>Recently I had to write a few monitoring plugins, one of which was a count of incoming connections to a specific network port. In the past I would have used netstat and a combination of grep and wc filter out only specific ports and established connections, but nowdays netstat is replaced by ss on ubuntu. ss has options to filter directly on all sorts of stuff, like state, ports, protocol, making the command I use more readable and use less pipes.</description> 
 (???)                <pubDate>Tue, 25 Aug 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 07 Nov 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Local incremental backups of Google Photos on Ubuntu with gphotos-sync</title> 
 (???)                <link>gopher://raymii.org/0/Local_incremental_Google_Photos_backup_on_Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Local_incremental_Google_Photos_backup_on_Ubuntu.txt</guid>
 (???)                <description>'Google Photos' no longer syncs with 'Google Drive' or with their 'Backup and Sync' desktop software. There used to be a checkbox to get your 'Google Photos' pictures in 'Google Drive' but that has been disabled. I used that feature together with their 'Backup and Sync' tool to sync all the photos in 'Google Photos' to my local Windows computer. From there I use 'DigiKam'  to manage the photos and backup them offline and offsite. Due to Google removing that feature, I had to go find another way to get the pictures out of 'Google Photos', which, after a few months of (automated) use, 'gphotos-sync' on Ubuntu seems to be the best, stable choice. In this guide I'll show you how to setup incremental backups from 'Google Photos' on Ubuntu. My 'DigiKam' database moved over without problems, and now I'm glad I don't have to use Windows for picture managemant anymore.</description> 
 (???)                <pubDate>Mon, 24 Aug 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 24 Aug 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get webcam resolution and info on Ubuntu and fix HD</title> 
 (???)                <link>gopher://raymii.org/0/Get_webcam_resolution_and_info_on_Ubuntu_and_fix_HD.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_webcam_resolution_and_info_on_Ubuntu_and_fix_HD.txt</guid>
 (???)                <description>With all the video calling nowdays due to working from home I decided to get a webcam. Since I mostly work at a workstation, I have no microphone or camera built in. A friend gave me a spare webcam, a generic non-brand. It says 'HD Camera' on the box, but by default it records in 640x480. Using a few tools on Ubuntu you can figure out what resolutions are supported for your device. It turned out to be Cheese, the webcam capture program I used, not supporting the 'mjpeg' format, just the 'yuyv' RAW format. Using another webcam program named Webcamoid solved it, that program was able to use mjpeg.</description> 
 (???)                <pubDate>Sun, 23 Aug 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 23 Aug 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ubuntu Snap auto updates broke my development setup and there is no way to turn them off</title> 
 (???)                <link>gopher://raymii.org/0/Ubuntu_Snap_auto_updates_broke_my_development_setup.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ubuntu_Snap_auto_updates_broke_my_development_setup.txt</guid>
 (???)                <description>After updating-by-reinstall to Ubuntu 20.04, I installed CLion via snap since that  seemed more convinient than manually downloading a java installation. CLion is the best thing since sliced bread, or I mean a C/C++ IDE by JetBrains. Ubuntu snap is  a packaging system made by Canonical and pushed hard in Ubuntu. Today I found out the hard way that snap auto-updates and that there is no way to turn that off permanently. CLion was updated, which I noticed because the process was killed. The update broke several key plugins for my workflow  and the theme was weird. In this article I'll discuss my disgust, I as the owner of the computer want to be in full control, not some developer that decides I need auto updates. I ended up removing snap completely, and my next install will not be Ubuntu due to this.</description> 
 (???)                <pubDate>Sat, 01 Aug 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 02 Aug 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>The Twitter Bitcoin hack can happen anywhere humans are involved</title> 
 (???)                <link>gopher://raymii.org/0/The_twitter_bitcoin_hack_can_happen_anywhere_humans_are_involved.txt</link> 
 (???)                <guid>gopher://raymii.org/0/The_twitter_bitcoin_hack_can_happen_anywhere_humans_are_involved.txt</guid>
 (???)                <description>The recent twitter hack involved social engineering and access to the twitter backend. This opinion piece will show you that this sort of incident can happen everywhere as long as humans are involved. Everywhere there are manual actions or admin / backend panels, this can happen. Pay a support-slave enough and they'll delete an account 'by accident'. Or a rougue sysadmin that disables logging, does something horrible and enables logging again. I'll show you that there is no one size fits all solution. Or at least, not a single fix for all. Treating your employees well, educatingthem on risks and automating as much as possible will get you a long way.</description> 
 (???)                <pubDate>Fri, 31 Jul 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 31 Jul 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ Remove leading or trailing characters from std::string</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_Remove_leading_or_trailing_characters_from_string.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_Remove_leading_or_trailing_characters_from_string.txt</guid>
 (???)                <description>Here's a small snippet to remove leading or trailing characters from a std::string in C++. I use it to strip leading and trailing zeroes in a game score display function.</description> 
 (???)                <pubDate>Sat, 18 Jul 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 18 Jul 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Running gnash on Ubuntu 20.04 (in Docker with X11 forwarding)</title> 
 (???)                <link>gopher://raymii.org/0/Running_gnash_on_Ubuntu_20.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Running_gnash_on_Ubuntu_20.04.txt</guid>
 (???)                <description>As you might have noticed, I'm slowly updating servers and workstations to Ubuntu 20.04, and as always with major upgrades, things break or are removed. Earlier this week I fixed up pygopherd and today I'll get gnash running again. Gnash is not updated since 2011 and therefore, finally, removed from the Ubuntu 20.04 repositories. Compiling it from source proved to be a lot of effort due to gstreamer dependencies and after a few hours I thought, why not just spin up a Ubuntu 18.04 Docker container, install gnash and forward X11. That took just about 10 minutes and now I'm happily running gnash again. In this tutorial I'll show you how to setup gnash in a docker container with x11 forwarding and host networking.</description> 
 (???)                <pubDate>Sun, 05 Jul 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 05 Jul 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Installing PyGopherd on Ubuntu 20.04</title> 
 (???)                <link>gopher://raymii.org/0/Installing_PyGopherd_on_Ubuntu_20.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Installing_PyGopherd_on_Ubuntu_20.04.txt</guid>
 (???)                <description>Ubuntu 20.04 dropped the Pygopherd package. There is no way to install it from the official repositories. In this guide I'll show you two ways to install the version from Ubuntu 18.04, which still works perfectly on 20.04. Either via just downloading the 2 deb packages, or via `apt pinning` from the previous (18.04) repository.</description> 
 (???)                <pubDate>Sat, 04 Jul 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 04 Jul 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Generate QR code and write it to a PNG, scaled, in C++</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_generate_qr_code_and_write_it_to_png_scaled.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_generate_qr_code_and_write_it_to_png_scaled.txt</guid>
 (???)                <description>The QR-Code-Generator library by Project Nayuki for C++ gives you an easy, fast and correct way to generate QR codes. However, you get just a data structure, showing that data is up to you. An example is provided to print the code to a terminal, but not to create and actual image file. For Java, there is an example provided which writes a PNG file, but not for C++. The author of the library also has another C++ library, Tiny-PNG-Out. It is correct up until 700 megapixel PNG files, which I hope your QR code never hits. I've written a class which bridges the two together, allowing you to both generate the QR code and write it to a PNG file, scaled up to be as readable as possible.</description> 
 (???)                <pubDate>Sun, 07 Jun 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 07 Jun 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Github Actions, C++ with Boost and cmake, almost a 50% speedup with caching</title> 
 (???)                <link>gopher://raymii.org/0/Github_Actions_cpp_boost_cmake_speedup.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Github_Actions_cpp_boost_cmake_speedup.txt</guid>
 (???)                <description>For a personal project I use Github for source code hosting and Github Actions as an automated build and test tool. Github Actions compiles my cmake project and runs all the unit tests on every commit. It also saves a build artifact, the actual compiled program. By utilizing some dependency caching and make flags I sped up the build process by 43% by caching the apt install libboost1.65-dev and giving cmake a -j2 makeflag. This article shows my simple setup to compile a C++ project with cmake and Boost on Github Actions. After compilation, it runs all the tests and uploads the compiled binary for download. For my one man project it's overkill, but when collaborating or when builds take a long time on your own machine, it's great to have an automated build / test system.</description> 
 (???)                <pubDate>Wed, 27 May 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 27 May 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>I had to jailbreak my iPhone to change the default browser...</title> 
 (???)                <link>gopher://raymii.org/0/I_had_to_jailbreak_my_iPhone_to_change_the_default_browser.txt</link> 
 (???)                <guid>gopher://raymii.org/0/I_had_to_jailbreak_my_iPhone_to_change_the_default_browser.txt</guid>
 (???)                <description>The title of this article says enough. To change the default browser on an iOS device you need to jailbreak your device (root it). It's 2020 and Apple does not allow you to switch Safari with Firefox. Recently a new jailbreak for iOS was released which support the lastest firmware, 13.5. I currently have an iPhone SE 2020 running 13.5, the jailbreak was a welcome addition to fix some small and some big annoyances with iOS. Like switching to Firefox as default browser. This post contains both a small rant on the state of iOS as wel as links to the jailbreak and applications used to switch the default browser.</description> 
 (???)                <pubDate>Sun, 24 May 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 24 May 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Here be dragons, or, invalidated iterators</title> 
 (???)                <link>gopher://raymii.org/0/Here_be_dragons_or_invalidated_iterators.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Here_be_dragons_or_invalidated_iterators.txt</guid>
 (???)                <description>Recently I had a new 'first-time' moment. You know the ones, the, 'oh right', moments, after you put in a bit of research. Mine was, as you might expect from all the other recent content, related to C++. I learned, the hard way, that 'iterator-based for loops' don't like to be resized during the loop. Well, they don't really care, but some precautions are to be taken since the 'iterator' used in the loop might be invalidated. Or as the very helpfull error during the crash prints to the console, 'munmap_chunk(): invalid pointer' and your debugger points you to somewhere deep in 'new_allocator.h'. In this article I'll give a few examples, both using index based for loops and iterator based for loops, plus some more details on what's going on with iterator invalidation.</description> 
 (???)                <pubDate>Sun, 03 May 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 03 May 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ async, threads and user input</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_async_threads_and_user_input.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_async_threads_and_user_input.txt</guid>
 (???)                <description>For an unrelated piece of code, I recently spent a few days trying to figure out if there was a portable, modern C++ way to handle user input with a timeout. If there is no input after a few seconds, the program can continue doing other things. TL;DR, there is none, since stdin is blocking I/O. At the end of the article I'll also provide the code I ended up using, which uses two actual big-boy threads, one for input and one for 'other work'.</description> 
 (???)                <pubDate>Fri, 24 Apr 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 24 Apr 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Personal Wireguard VPN on a Freedombox with Debian</title> 
 (???)                <link>gopher://raymii.org/0/Wireguard_VPN_on_Freedombox.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Wireguard_VPN_on_Freedombox.txt</guid>
 (???)                <description>This guide will show you how to set up a personal Wireguard VPN server on Debian or Ubuntu with Freedombox. Freedombox will be used to manage the VPN software, firewall and users. Wireguard is a relatively new VPN built in to the linux kernel. Freedombox is a long running project under the Debian umbrella providing a private server for non experts with focus on user freedom, ease of use and privacy. Combined, those two make a great pair. In the past I've written many articles on how to setup your own personal VPN server, but those all required manual setup and maintenance. With freedombox, the updates are automatic and the management is hidden away behind a convenient web interface. </description> 
 (???)                <pubDate>Mon, 03 Feb 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 03 Feb 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Installing Freedombox on Armbian on the Olimex Pioneer</title> 
 (???)                <link>gopher://raymii.org/0/Installing_Freedombox_On_Armbian_On_The_Olimex_A20_Pioneer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Installing_Freedombox_On_Armbian_On_The_Olimex_A20_Pioneer.txt</guid>
 (???)                <description>FreedomBox is a private server for non-experts: it lets you install and configure server applications with only a few clicks. It runs on cheap hardware of your choice, uses your internet connection and power, and is under your control. Last year the Pioneer became available, officially supported and sanctioned by the Freedombox Foundation. This is a home server you can buy from Olimex, comes in a nice metal case with a proper power supply, network cable, battery and SD card preloaded with Freedombox. Plug in and go. Perfect for users that don't want to tinker but do want their freedom and control. With the Pioneer, both the hardware and software are fully open source. In the default provided distribution for the Pioneer there are a few things I dislike. This guide covers the installation of Freedombox and Debian for the Olimex A20 Lime2 Pioneer with Armbian including reinstalling, Apache SSL certificate and LDAP issues.</description> 
 (???)                <pubDate>Wed, 29 Jan 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 29 Jan 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Cancellation notice: cipherli.st, txtn.ws, ssldecoder.org and certificatemonitor.org</title> 
 (???)                <link>gopher://raymii.org/0/Cancellation_notice_for_cipherlist_ssldecoder_and_certificatemonitor.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cancellation_notice_for_cipherlist_ssldecoder_and_certificatemonitor.txt</guid>
 (???)                <description>This is a short notice that the public services I was providing, cipherli.st, txtn.ws, ssldecoder.org and certificatemonitor.org are suspended and cancelled as of now. The source code is still available via my github, but the domains and hosting are stopped. If you want to use these services, you now must host them yourself.</description> 
 (???)                <pubDate>Wed, 22 Jan 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 22 Jan 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Windows 10 updates with PowerShell</title> 
 (???)                <link>gopher://raymii.org/0/Windows_10_Updates_with_PowerShell_PSWindowsUpdpate.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Windows_10_Updates_with_PowerShell_PSWindowsUpdpate.txt</guid>
 (???)                <description>Recently I had issues updating one of my machines that runs Windows 10. Turns out the firewall was to restrictive. However, the information provided by the update dialog was just, 'Oh, updating failed, maybe try again'. Nothing useful, so I tried to figure out if it's possible to use Powershell for updating. Since Windows 10 build 1709 Microsoft provides a built in module, but that is not that user friendly. In this article I'll talk about using PSWindowsUpdate and the built in Microsoft WindowsUpdateProvider to update a Windows 10 machine via the commandline</description> 
 (???)                <pubDate>Mon, 06 Jan 2020 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 06 Jan 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Run CLion native on Android, ditch your desktop!</title> 
 (???)                <link>gopher://raymii.org/0/Run_CLion_on_Android.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Run_CLion_on_Android.txt</guid>
 (???)                <description>How often do you read articles that state that people have replaced their main computer with an iPad and are fully content? Now, how many of those articles just use a linux server (vps) somewhere with some native apps, but mostly SSH to that server? Well, what if I told you that you can run a full blown IDE, the best IDE for C++ there is, CLion by JetBrains, on Android? Including compiling, just native GCC, CMake, GDB and all the stuff you are used to? Just for fun I've installed CLion on an old Samsung Tab S2 I had lying around, using Ubuntu in a chroot. It works way better than I'd expected, with a Bluetooth keyboard and mouse it's almost as if your on a desktop. I wonder if you could run Android Studio and use the tablet to compile app's for itself. This article shows some photo's, including a mechanical keyboard, different window managers and had instructions to replicate this setup.</description> 
 (???)                <pubDate>Fri, 27 Dec 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 27 Dec 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Tiny Tiny RSS + Readability == The best way to read RSS feeds</title> 
 (???)                <link>gopher://raymii.org/0/Tiny-Tiny-RSS-Readability-plaintext.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Tiny-Tiny-RSS-Readability-plaintext.txt</guid>
 (???)                <description>Back in 2012, I already wrote about Tiny Tiny RSS. We're now almost eight years later and I still use TT-RSS as my main RSS reader. I'm following almost a thousand feeds (944) and it is my main way of reading and discovering stuff online. All those personal blogs that post once half a year, mainline tech news sites and a bunch more sites. Back in 2012 I had 300 feeds, used the Android app. Nowdays, more feeds, still use the android app, used an iPhone app for a while and the server that it runs on has been migrated and upgraded a few times. I want to share my Tiny Tiny RSS setup with you, which uses the af_readability plugin. Combined with the Android app, I've got an ideal setup to read just content without distractions. </description> 
 (???)                <pubDate>Sun, 22 Dec 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 22 Dec 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>ScreensaverStopper, stop activating the screensaver by sending F24 often</title> 
 (???)                <link>gopher://raymii.org/0/ScreenSaverStopper.txt</link> 
 (???)                <guid>gopher://raymii.org/0/ScreenSaverStopper.txt</guid>
 (???)                <description>ScreensaverStopper sends the F24 keystroke every 40 seconds. This way, Windows should not activate the screensaver. Useful if you do not have rights to disable the screensaver, but can run executables. Wwritten in C++, compiled with GCC 8.1 via MinGW/cMake. Filesize is around 14 KB, memory usage after a day of running around 600KB. License is GNU GPLv3.</description> 
 (???)                <pubDate>Sat, 21 Dec 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 21 Dec 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>and &amp; or are valid in C++ (alternative tokens)</title> 
 (???)                <link>gopher://raymii.org/0/and_or_are_valid_Cpp.txt</link> 
 (???)                <guid>gopher://raymii.org/0/and_or_are_valid_Cpp.txt</guid>
 (???)                <description>A post on lobste.rs on the C feature trigraphs triggered me to write this piece on the C++ feature, alternative tokens. I've recently suprised a co- worker by using an if statement with 'or' instead of '||', which works fine, but he never saw it before. It's in C++ since C++ 11, but MSVC requires a specific compiler flag ('/Za') or the 'iso646.h' header. This post has a few samples on the usage inclusing other alternative tokens like bitor, xor and or_eq.</description> 
 (???)                <pubDate>Mon, 16 Dec 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 16 Dec 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Weight for Weight, a coding exercise that kept me busy</title> 
 (???)                <link>gopher://raymii.org/0/Weight_for_Weight_a_coding_exersize_that_kept_me_busy.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Weight_for_Weight_a_coding_exersize_that_kept_me_busy.txt</guid>
 (???)                <description>I'm using codewars to practice my development skills. The exercise I was working on the past couple of days was a level higher than the 'rank' codewars gives me, so a more difficult exercise. Using the sparse free time I have, this kata took a bit longer to complete, and had me thinking about the problem when I was not doing the exercise. If a problem fascinates me that way, I can't stop thinking about it until I've solved it. In this article I'll walk you through my work on this kata.</description> 
 (???)                <pubDate>Tue, 12 Nov 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 12 Nov 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>std::string to lowercase or uppercase in C++</title> 
 (???)                <link>gopher://raymii.org/0/std_string_to_lowercase_or_uppercase_in_cpp.txt</link> 
 (???)                <guid>gopher://raymii.org/0/std_string_to_lowercase_or_uppercase_in_cpp.txt</guid>
 (???)                <description>I'm using codewars to practice my development skills. Today I learned a method to transform a std::string's casing, either to uppercase or lowercase. Researching it further, I also found out how to do unicode strings with boost. This article also includes a mini howto on installing Boost on Windows 10 via mingw for use with CLion.</description> 
 (???)                <pubDate>Thu, 07 Nov 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 07 Nov 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>std::accumulate in C++</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_std_accumulate.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_std_accumulate.txt</guid>
 (???)                <description>I'm using codewars to practice my development skills. Today I found out about the std::accumulate method in C++ while doing an exercise there. I'm sharing it here because I never heard of it before. It is the numeric header, and it also accepts a custom binary function to apply instead of operator+. This snippet shows some examples including a lambda operator and the for loop you would use otherwise.</description> 
 (???)                <pubDate>Wed, 23 Oct 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 07 Nov 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Send commands or input to a detached screen session</title> 
 (???)                <link>gopher://raymii.org/0/Sending_commands_or_input_to_a_screen_session.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Sending_commands_or_input_to_a_screen_session.txt</guid>
 (???)                <description>This snippet will show you how to send commands to a running screen session. This includes actual shell commands or keyboard input, as well as screen commands, for example to set a logfile.</description> 
 (???)                <pubDate>Wed, 02 Oct 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 02 Oct 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ project setup with CMake &amp; unit tests (google test)</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_project_setup_with_cmake_and_unit_tests.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_project_setup_with_cmake_and_unit_tests.txt</guid>
 (???)                <description>This guide will show you how to setup a new C++ project with CMake and unit tests via Google's test framework. With this setup you can get started right away with test-driven-development in C++. It is also simple enough to look and figure out how to add gtest to your existing project and start doing TDD on your legacy (existing) codebase.</description> 
 (???)                <pubDate>Tue, 01 Oct 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 06 Nov 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get serial port data on the web with live updating</title> 
 (???)                <link>gopher://raymii.org/0/Get_serial_port_data_on_the_web_with_live_updating.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_serial_port_data_on_the_web_with_live_updating.txt</guid>
 (???)                <description>Recently I was asked to build a test setup to measure the accuracy of a few loadcells (weight sensors) in a frame. Someone other than me would execute the test and required access to the measured data, preferably live and without needing knowledge of ssh or linux. The weight sensors can be read with an openscale board from sparkfun via a serial connection which the board emulates over USB (via an FTDI chip), via that same serial connection you can also calibrate them or change settings like amount of decimals. As a quick solution I created a webpage that uses a small amount of javascript to live update the readings from the board. screen is used to capture the output of the serial connection to a file which the webpage displays and updates. In this article I'll talk about how I put various bits of software together to get the output of the serial connection onto a nice webpage with live updating.</description> 
 (???)                <pubDate>Sat, 28 Sep 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 28 Sep 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash bits: split a file in blocks and do something with each block</title> 
 (???)                <link>gopher://raymii.org/0/Bash_bits_split_a_file_in_blocks_and_do_something_with_each_block.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_bits_split_a_file_in_blocks_and_do_something_with_each_block.txt</guid>
 (???)                <description>Bash Bits are small examples, tips and tutorials for the bash shell. This bash bit shows you how to split a file into blocks (multiline) and do something with each block. This can be used for certificate chains or other files which have multiline blocks.</description> 
 (???)                <pubDate>Mon, 02 Sep 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 02 Sep 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash bits: find has a -delete flag</title> 
 (???)                <link>gopher://raymii.org/0/Bash_bits_find_has_a_delete_option.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_bits_find_has_a_delete_option.txt</guid>
 (???)                <description>Bash Bits are small examples, tips and tutorials for the bash shell. This bash bit shows you that find has a -delete option. I recently found this out, before I would always use -exec rm {} ;. The delete flag is shorter, performs better and is  easier to remember.</description> 
 (???)                <pubDate>Sun, 14 Jul 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 14 Jul 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Only zero is false, everything else is true in C++</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_Only_zero_is_false.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_Only_zero_is_false.txt</guid>
 (???)                <description>When using numbers in a boolean (implicit conversion), remember that only zero evaluates to false. Anything else, including negative numbers, will evaluate to true. This snippet talks about the rules for implicit conversion in C++ when using booleans. For seasoned programmers it's nothing new, but I found it interesting.</description> 
 (???)                <pubDate>Fri, 12 Jul 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 12 Jul 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>GNUplot tips for nice looking charts from a CSV file</title> 
 (???)                <link>gopher://raymii.org/0/GNUplot_tips_for_nice_looking_charts_from_a_CSV_file.txt</link> 
 (???)                <guid>gopher://raymii.org/0/GNUplot_tips_for_nice_looking_charts_from_a_CSV_file.txt</guid>
 (???)                <description>Recently I had to do some testing which resulted in a lot of log data. Looking at a bunch of text is not the same as seeing things graphically, this particular logdata was perfect to put in a graph. My goto favorite tool for graphs and charts is gnuplot. Not only is it very extensible, it is also reproducable. Give me a configfile and command over 'do this, then this and then such and such' in Excel to get a consistent result. In this article I'll give tips for using gnuplot, which include parsing a CSV file, a second axis, environment variables, A4 PDF's and a ton of styling options for a nice looking chart.</description> 
 (???)                <pubDate>Sat, 06 Jul 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 06 Jul 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Gherkin 30% keyboard build log and review</title> 
 (???)                <link>gopher://raymii.org/0/Gherkin_30_key_keyboard_build_log_and_review.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Gherkin_30_key_keyboard_build_log_and_review.txt</guid>
 (???)                <description>The Gherkin keyboard is a 30% (actually a 30 key) keyboard kit. I've built one and used it for a while, this article covers the build and my experiences with such a small board.</description> 
 (???)                <pubDate>Sat, 29 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 29 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>connman operstate list</title> 
 (???)                <link>gopher://raymii.org/0/connman_operstate_list.txt</link> 
 (???)                <guid>gopher://raymii.org/0/connman_operstate_list.txt</guid>
 (???)                <description>Recently I was debugging connection issues with a system that uses connman as it's network management software. In the log it was visible that the connection went away and came back, logged with 'operstate' $number $state. I couldn't easily find an overview of all the possible states, but since it's open source we can take a look at the code to find out. Publishing it here for future reference.</description> 
 (???)                <pubDate>Tue, 25 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 25 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ template definitions in a .cpp file (instead of a header file)</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_template_definitions_in_a_cpp_file_instead_of_header.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_template_definitions_in_a_cpp_file_instead_of_header.txt</guid>
 (???)                <description>In this snippet I'll show you how to place your C++ template definitions in a seperate .cpp file. I'd recommend you to just put template definitions in your header file, or a .hpp file, but if you really want to there is a trick to get them in a seperate .cpp file. The trick is to explicitly instanciate every template you're going to use at the end of the .cpp file. With many different templates and types this becomes cumbersome, but for certain usecases it could be useful. </description> 
 (???)                <pubDate>Sat, 22 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 22 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ create and write to a CSV file with a variadic template</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_create_and_write_to_a_CSV_file_with_a_variadic_template.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_create_and_write_to_a_CSV_file_with_a_variadic_template.txt</guid>
 (???)                <description>In this snippet I'll show you a variadic template to write to a file. In line with my other experiments to get a better grasp at templates, this example improves on my earlier attempt by using a variadic template, thus allowing you to provide an infinite number of columns to the csv file of any type that has the overloaded &lt;&lt; operator.</description> 
 (???)                <pubDate>Mon, 17 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 17 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Dark Reader, dark mode for any website</title> 
 (???)                <link>gopher://raymii.org/0/Dark_Reader_dark_mode_for_any_website.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Dark_Reader_dark_mode_for_any_website.txt</guid>
 (???)                <description>Recently I discovered a firefox extension that converts any website into a dark version. Works both on firefox for mobile and on the desktop (and all other major browsers), is open source, causes less strain on the eyes and improves battery life. Just as the earlier post on Blokada, I find this such a cool piece of software I wanted to share it with all my readers.</description> 
 (???)                <pubDate>Sat, 15 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Cooking with C++ templates and stronger types</title> 
 (???)                <link>gopher://raymii.org/0/Cooking_with_Cpp_templates_and_stronger_types.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cooking_with_Cpp_templates_and_stronger_types.txt</guid>
 (???)                <description>To gain a better understanding of C++ templates I'm playing around with them. Most of the online guides stop at the example of a simple template to, for example, get the max of two inputs, or cover just a bit more (like how to overload operators for your specific template classes to make &lt;&lt; and + / - work). Combining templates with a stronger type to pass stuff around led me to a test kitchen. As in, some code with ingredients, amounts and an oven. One small thing kept it from working, after some feedback it turned out I was passing the wrong parameters to the template. Afterwards the error also made sense. This post covers both my learning and a small piece on stronger types.</description> 
 (???)                <pubDate>Thu, 13 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 13 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ variadic template recursive example</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_variadic_template_recursive_example.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_variadic_template_recursive_example.txt</guid>
 (???)                <description>In this article I'll show you how to use a variadic template in C++. Variadic templates allow you to have a template with a variable number of arguments, also called a parameter pack. Unpacking that pack is more difficult than it should be, so we use a recursive template to iterate over all the parameters one by one. I've also included an example in Python to compare to.</description> 
 (???)                <pubDate>Sat, 08 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 08 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>C++ create and write to a CSV file</title> 
 (???)                <link>gopher://raymii.org/0/Cpp_create_and_write_to_a_csv_file.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Cpp_create_and_write_to_a_csv_file.txt</guid>
 (???)                <description>In this quick snippet I'll show you how to create and write to a csv file. It includes checking if the file is writable, and if it's not there, creates it with a different first row as header. It's a quick example, I've used it to log some test data. It can probably be improved.</description> 
 (???)                <pubDate>Fri, 07 Jun 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 16 Jun 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Retro PC Ads - 1975 Sphere 1</title> 
 (???)                <link>gopher://raymii.org/0/Retro_PC_Ads_1975_Sphere_1.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Retro_PC_Ads_1975_Sphere_1.txt</guid>
 (???)                <description>In this series of articles I'll cover old computer advertisements. We're starting off with the Sphere 1 from 1975, a computer built around the Motorola 6800.</description> 
 (???)                <pubDate>Wed, 29 May 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 29 May 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Match dig 127.0.0.53 server with systemd-resolvd server</title> 
 (???)                <link>gopher://raymii.org/0/Match_dig_127.0.0.53_server_with_systemd-resolved_server.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Match_dig_127.0.0.53_server_with_systemd-resolved_server.txt</guid>
 (???)                <description>On systems that use systemd-resolved for DNS you will see the 127.0.0.53 IP address in dig output. dig is a tool to do DNS lookups, and for troubleshooting it's usefull to see which server is being queried. With systemd-resolved, you need to issue another command to view the actual server that is being queried, since systemd-resolvd also acts as a local caching server.</description> 
 (???)                <pubDate>Thu, 23 May 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 23 May 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Site updates, new layout</title> 
 (???)                <link>gopher://raymii.org/0/Site_updated_new_2019_layout.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Site_updated_new_2019_layout.txt</guid>
 (???)                <description>This site is generated with my self-written open source static site generator named ingsoc (named after 1984). I've updated the layout of the website to be less cluttered, allowing you to get to the content much faster. Inspired by my recent gopher adventures I decided to do away with the 2 column layout (drop the sidebar with menu) and have a smaller header with essential links. On mobile this makes a huge difference in scrolling, on the desktop it looks less cluttered. This article details all the changes with side by side images showing differences.</description> 
 (???)                <pubDate>Wed, 08 May 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 08 May 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Find all files containing specific text (and remove them)</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Find_all_files_containing_specific_text.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Find_all_files_containing_specific_text.txt</guid>
 (???)                <description>Bash Bits are small examples, tips and tutorials for Bash (Scripts). This bash bit shows you how to find all files containing specific text, and how to remove them.</description> 
 (???)                <pubDate>Tue, 07 May 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 07 May 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Randomize a cronjob to run between 00:00 and 06:00 hours</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Randomize_cronjob_time.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Randomize_cronjob_time.txt</guid>
 (???)                <description>Bash Bits are small examples, tips and tutorials for Bash (Scripts). This bash bit shows you how to randomize the time a cronjob runs in /etc/cron.d/</description> 
 (???)                <pubDate>Mon, 06 May 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 06 May 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Check if a program is installed</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Check_if_command_is_available.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Check_if_command_is_available.txt</guid>
 (???)                <description>Bash Bits are small examples, tips and tutorials for Bash (Scripts). This bash bit shows you how to check if a piece of software is installed on a machine. It's a function you can use in your shell scripts.</description> 
 (???)                <pubDate>Sun, 05 May 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 05 May 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL test TLSv1.3 connection and ciphersuites with s_client</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_test_TLSv1.3_connection_with_s_client.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_test_TLSv1.3_connection_with_s_client.txt</guid>
 (???)                <description>This guide shows you how to test a server's TLSv1.3 connection and use specific ciphersuites with the command line s_client client from the OpenSSL project. With OpenSSL 1.1.1 you can use TLSv1.3. This guide covers the installation of OpenSSL 1.1.1 on Ubuntu, testing the connection to a server  and specific ciphersuites. It also covers the big differences between TLSv1.3 and lower.</description> 
 (???)                <pubDate>Sun, 28 Apr 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 28 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>totext.py - Convert URL or RSS feed to text with readability</title> 
 (???)                <link>gopher://raymii.org/0/totext.py-Convert_URL_or_RSS_feed_to_plaintext_with_readability.txt</link> 
 (???)                <guid>gopher://raymii.org/0/totext.py-Convert_URL_or_RSS_feed_to_plaintext_with_readability.txt</guid>
 (???)                <description> Love plaintext? This script downloads an URL, parses it with readability and returns the plaintext (as markdown). It supports RSS feeds (will convert every article in the feed) and saves every article. My usecase is twofold. One is to convert RSS feeds to a gopher site, the second is to get full text in my RSS reader. The script contains a few workarounds for so-called cookiewalls. It also pauses between RSS feed articles to not do excessive requests. The readability part is handled by Python, no external services are used.</description> 
 (???)                <pubDate>Thu, 18 Apr 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 18 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Convert markdown inline links to reference style links with Pandoc</title> 
 (???)                <link>gopher://raymii.org/0/Convert_markdown_inline_links_to_reference_style_links_with_Pandoc.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Convert_markdown_inline_links_to_reference_style_links_with_Pandoc.txt</guid>
 (???)                <description>Markdown has two options to create a link. A link is the piece of text you click to go to another webpage. Actually, three ways, since you can just embed HTML code in Markdown. I write all the content for this site in Markdown files, which are then converted by my static site generator to HTML, text and a gopher version. I'm used to using the inline link style, which is  where you paste the link right in the text. Since I've enabled the Gopher  version of raymii.org, I noticed that there was no line wrapping. The HTML  website all arranges that via CSS, but the text-only Gopher does not. Sometimes  Gopher clients wrap text, but most don't. I'm re-wrapping all articles to make them fit, but the wrapping is way off with inline style markdown links. By  converting them to reference style markdown links, the wrapping looks way better, and as an added bonus, reference style links give a better overview. There are a few scripts floating around to convert these links, but either  Ruby or NodeJS. It turns out after a bit of research that Pandoc, the anything-to-anything text conversion tool, has an option to use reference style links. With this option, I converted all the articles here (almost 400) to the reference style Markdown links.</description> 
 (???)                <pubDate>Wed, 10 Apr 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 10 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Building opkg .ipk packages by hand (for OpenEmbedded/Yocto/OpenWRT)</title> 
 (???)                <link>gopher://raymii.org/0/Building_IPK_packages_by_hand.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Building_IPK_packages_by_hand.txt</guid>
 (???)                <description>.ipk packages are used by a variety of embedded linux systems, like routers running OpenWRT and appliances running on OpenEmbedded (Yocto). The opkg command installs these packages and OpenEmbedded comes with a set of tools to build .ipk packages. Recently I had to create ipk packages in a scripted fashion for a few hundred systems, all unique per system. The .ipk packages includes a few software changes for debugging, a systemd service and one precompiled binary. The yocto build tools were not available on the machine where these packages would be made so I had to figure out how to make them by hand, which means, automatically. The packages are actually just compressed files containing a few control files and the data to be extracted on the filesystem. This article will walk you through the steps of creating these packages by hand.</description> 
 (???)                <pubDate>Fri, 05 Apr 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 05 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Where is dropbearconvert on Ubuntu?</title> 
 (???)                <link>gopher://raymii.org/0/Where_is_dropbearconvert_on_ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Where_is_dropbearconvert_on_ubuntu.txt</guid>
 (???)                <description>Dropbear is a lightweight SSH server and client implementation, often used on embedded systems and routers. If you use the dropbear SSH client (dbclient) and want to use a private key, it needs to be in the dropbear format and cannot have a passphrase. Dropbear provides a conversion utility to convert openssh style keys to dropbear style keys, dropbearconvert, but on Ubuntu it's not in your $PATH. This means you have to provide the full path to execute it, which is cumbersome. There is a bug in Ubuntu that has been reported in 2012, but in Ubuntu 18.04 (2019) it's still not fixed.</description> 
 (???)                <pubDate>Tue, 02 Apr 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 02 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Simple pygopherd log analyzer</title> 
 (???)                <link>gopher://raymii.org/0/Simple_pygopherd_log_analyzer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Simple_pygopherd_log_analyzer.txt</guid>
 (???)                <description>Simple log analyzer for pygopherd. Fun if you have a gopherhole and want statistics. If you ever used Logwatch you'll feel at home.</description> 
 (???)                <pubDate>Wed, 20 Mar 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 20 Mar 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Disable motd news or (parts of) the dynamic motd on Ubuntu</title> 
 (???)                <link>gopher://raymii.org/0/Disable_dynamic_motd_and_motd_news_spam_on_Ubuntu_18.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Disable_dynamic_motd_and_motd_news_spam_on_Ubuntu_18.04.txt</guid>
 (???)                <description>On Ubuntu 18.04 and up, when you login via SSH you are greeted with some news via motd (message of the day) that includes advertisements and messages from Canonical (via motd.ubuntu.com). This small guide shows you how to disable news, (parts of) the dynamic motd or just revert back to a plain old /etc/motd file.</description> 
 (???)                <pubDate>Mon, 18 Mar 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 19 Mar 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Site updates, raymii.org now also available on Gopher</title> 
 (???)                <link>gopher://raymii.org/0/Site_updates_raymii.org_now_on_gopher.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Site_updates_raymii.org_now_on_gopher.txt</guid>
 (???)                <description>I've made some new improvements to this website, you can now view raymii.org on Gopher! Building on the last site improvement, every article being available as plain text, it was easy to generate a gophermap file and bind it all together with pygopherd.</description> 
 (???)                <pubDate>Sun, 10 Mar 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 10 Mar 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>SpaceCat Launchpad v2, an awesome cool little macropad</title> 
 (???)                <link>gopher://raymii.org/0/SpaceCat_Launchpad_v2_an_awesome_little_macropad.txt</link> 
 (???)                <guid>gopher://raymii.org/0/SpaceCat_Launchpad_v2_an_awesome_little_macropad.txt</guid>
 (???)                <description>On Reddit, Josh (from SpaceCat) did a valentines day action, 10% off your entire order. I'm eyeing a LaunchPad for a while now, both to have a small macro pad and to experiment with QMK (firmware). So I ordered the LaunchPad full kit, an assortment of Gateron key switches and a VIM keycap. This article goes over the quality, the build process and my current setup of the Launchpad.</description> 
 (???)                <pubDate>Tue, 05 Mar 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 05 Mar 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Viewing PDF, .docx and .odt files in mutt (as text)</title> 
 (???)                <link>gopher://raymii.org/0/Viewing_PDF_docx_and_odt_files_in_Mutt.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Viewing_PDF_docx_and_odt_files_in_Mutt.txt</guid>
 (???)                <description>mutt is my email client at work. I like the simple interface, the speed and the ability to customize the workflow. Email is synced with offlineimap and sent via msmtp, addresses are in abook, and calcurse is the Calendar for meetings, no complicated setup there. One aspect I especially like is the ability to view attachments on the command line right from mutt itself. Some departments at work send emails with an attached PDF or .docx file that contains the actual message, instead of just putting the text in the email itself. Using pandoc and pdftotext in mutt, the text of the attachments is displayed as a regular mail, no interruptions in my workflow by opening an external program. This article explains how to set up your .muttrc and .mailcap to use pandoc and pdf2text to view attachments as text in mutt.</description> 
 (???)                <pubDate>Sun, 03 Mar 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 03 Mar 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get a JSON value with bash and sed</title> 
 (???)                <link>gopher://raymii.org/0/Get_json_value_with_sed.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_json_value_with_sed.txt</guid>
 (???)                <description>Recently I was asked to get one value from a json object using only shell tools. The json in question is from a dutch radio station and it lists the current song that is played. Using this together with a few shell commands and notify-send we can show the current song when it changes as a desktop notification. I'd rather use Python or jq if it has to be shell. In this case the co-worker asked to just use simple shell tools and no external dependencies.</description> 
 (???)                <pubDate>Tue, 26 Feb 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 26 Feb 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>My phone serves me 400+ ads and trackers per hour. Blokada, the best android adblocker, beats 'm all!</title> 
 (???)                <link>gopher://raymii.org/0/My_phone_serves_me_400_ads_per_hour_blokada_blocks_beats_them_all.txt</link> 
 (???)                <guid>gopher://raymii.org/0/My_phone_serves_me_400_ads_per_hour_blokada_blocks_beats_them_all.txt</guid>
 (???)                <description>Recently I switched to a new phone. After a few years (!) my old phone stopped receiving calls making it time for a new one. The new phone has Android, which allowed me to install a system wide adblocker, Blokada. It works by posing itself as a local VPN, filtering advertisements, trackers and all kinds of nasty things that spy on you or bring in malware. It does not require root access on Android, it's open source and best of all, it works very well. In the first three days of usage it has blocked over 5000 ads and trackers, including 400 when I was asleep.</description> 
 (???)                <pubDate>Sat, 16 Feb 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 16 Feb 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Split keyboards, a five year review including the ErgoDox EZ, Matias Ergo Pro and Kinesis Freestyle 2</title> 
 (???)                <link>gopher://raymii.org/0/Split_keyboards_a_five_year_review_including_the_ErgoDox_EZ_Matias_Ergo_Pro_and_Kinesis_Freestyle_2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Split_keyboards_a_five_year_review_including_the_ErgoDox_EZ_Matias_Ergo_Pro_and_Kinesis_Freestyle_2.txt</guid>
 (???)                <description>A split keyboard is weird at first, but once you get used to it, you will never want anything else. The keyboard is made up from two halves allowing your arms and wrists to be in a natural (neutral, straight) position, instead of having an angle/twist in your wrist. I've been using split keyboards for about five years now. Over those years I've tried several different models from different manufacturers. In this article I'll talk about the three split keyboards I've used intensively and two I have only seen or tried shortly. We'll start with my current and favorite split keyboard, the ErgoDox EZ. The other two I've used are the Matias Ergo Pro and the Kinesis Freestyle 2. I discuss the UHK and Microsoft Natural Ergonomic Keyboard 4000 briefly.</description> 
 (???)                <pubDate>Sun, 10 Feb 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 10 Feb 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Sparkling Network</title> 
 (???)                <link>gopher://raymii.org/0/Sparkling_Network.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Sparkling_Network.txt</guid>
 (???)                <description>This is an overview of all the servers in the Sparkling Network, mostly as an overview for myself, but it might be interesting for others. It also has a status overview of the nodes. Prices are monthly, excluding VAT.</description> 
 (???)                <pubDate>Sat, 12 Jan 2019 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 08 Jan 2023 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>SSH on Windows Server 2019 (including how to sudo)</title> 
 (???)                <link>gopher://raymii.org/0/SSH_on_Windows_Server_2019.txt</link> 
 (???)                <guid>gopher://raymii.org/0/SSH_on_Windows_Server_2019.txt</guid>
 (???)                <description>On hackernews I saw a Microsoft blog post stating that Windows Server 2019 now includes OpenSSH. In this post I'll try out both the client and server on a Windows 2019 server, including how to login as a Active Directory Domain user and how to generate and place and SSH keypair. The bonus this time is how to elevate permissions via SSH on Windows, sudo but way more complicated. This guide is also applicable on Windows 10, build 1809 and up.</description> 
 (???)                <pubDate>Tue, 18 Dec 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 18 Dec 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Line total (up+down sum) in PHP Network Weathermap</title> 
 (???)                <link>gopher://raymii.org/0/Line_total_up_down_sum_in_php_weathermap.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Line_total_up_down_sum_in_php_weathermap.txt</guid>
 (???)                <description>With PHP Network Weathermap you can create a birds-eye view of network components from your monitoring system (like LibreNMS, Cacti or anything else with an RRD database). It can display simple maps with components and links between, showing up and down traffic, but also complex systems with custom components, like Nagios status, temperature or other information. For network and system administrators seeing the seperate in and out traffic of a link is fine, we can sum up two numbers. A co worker filling the role of service manager asked me if it was possible to sum up in and out and show that, including the scale (different colours depending on link usage). This co worker is not interested in the seperate up/down link speed but wants to know how much traffic a location is using in total. Using a clever workaround, you can display a line's total usage, including the scale. This article also gives some more tips on weathermap, colouring and scale.</description> 
 (???)                <pubDate>Tue, 13 Nov 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 13 Nov 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Three new NitroKeys! Nitrokey Pro 2, Storage 2 and a FIDO-U2F Nitrokey</title> 
 (???)                <link>gopher://raymii.org/0/Three_New_Nitrokeys_Pro_2_Storage_2_and_Fido_u2f.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Three_New_Nitrokeys_Pro_2_Storage_2_and_Fido_u2f.txt</guid>
 (???)                <description>Last week I received several newsletters from Nitrokey. As you might know, I'm a fan of their (mostly open source) hardware security devices. Their newsletters introduced two new keys, the Nitrokey Pro 2 and the Nitrokey FIDO-U2F key. On their website I also saw the Nitrokey Storage Pro 2. This article is a summary of the newsletters and goes over the new features in the new hardware. It boils down to a new OpenPGP smartcard version (3.3, it was 2.1) in the Nitrokey Pro 2 and Storage 2. The FIDO-U2F device is an entirely new Nitrokey (with a button).</description> 
 (???)                <pubDate>Thu, 08 Nov 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 08 Nov 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Use Ubuntu behind a Microsoft ForeFront TMG proxy with cntlm</title> 
 (???)                <link>gopher://raymii.org/0/Use_Ubuntu_behind_a_Microsoft_ForeFront_TMG_proxy_with_cntlm.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Use_Ubuntu_behind_a_Microsoft_ForeFront_TMG_proxy_with_cntlm.txt</guid>
 (???)                <description>Recently I had to deploy a few machines in a network where outgoing network access was forced through a Microsoft Forefront TMG proxy. For all the Windows clients this went automatically due to domain policies, for Linux this has to be set up manually. Defining the proxy in /etc/environment was not enough since NTML authentication is required, which is not supported by default. I found cntlm, a piece of software which acts as a local proxy, translating all requests to authenticated NTLM requests to your upstream proxy. This guide covers the (offline) installation, setup, getting the correct password hash and system-wide configuration. It should work on a desktop as well, but I did not test that.</description> 
 (???)                <pubDate>Sat, 27 Oct 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 27 Oct 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Encrypt and decrypt files to public keys via the OpenSSL Command Line</title> 
 (???)                <link>gopher://raymii.org/0/Encrypt_and_decrypt_files_to_public_keys_via_the_OpenSSL_Command_Line.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Encrypt_and_decrypt_files_to_public_keys_via_the_OpenSSL_Command_Line.txt</guid>
 (???)                <description>This small tutorial will show you how to use the openssl command line to encrypt and decrypt a file using a public key. We will first generate a random key, encrypt that random key against the public key of the other person and use that random key to encrypt the actual file with using symmetric encryption.</description> 
 (???)                <pubDate>Thu, 25 Oct 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 25 Oct 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Find files in tar archives and extract specific files from tar archives</title> 
 (???)                <link>gopher://raymii.org/0/Find_files_in_tar_archives_and_extract_them.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Find_files_in_tar_archives_and_extract_them.txt</guid>
 (???)                <description>This is a small tip, to find specific files in tar archives and how to extract those specific files from said archive.</description> 
 (???)                <pubDate>Wed, 17 Oct 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 17 Oct 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Reddit Gold for Caldera Openlinux 1.2</title> 
 (???)                <link>gopher://raymii.org/0/Reddit_Gold_for_Caldera_Openlinux_1.2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Reddit_Gold_for_Caldera_Openlinux_1.2.txt</guid>
 (???)                <description>Someone liked my Reddit post regarding a few old CD's I found of Caldera Openlinux 1.2, including source code and floppies so much they gilded it. I got some special internet points today.</description> 
 (???)                <pubDate>Wed, 26 Sep 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 26 Sep 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Service checks in LibreNMS (http, all other Nagios plugins)</title> 
 (???)                <link>gopher://raymii.org/0/Service_checks_in_LibreNMS_nagios_plugins.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Service_checks_in_LibreNMS_nagios_plugins.txt</guid>
 (???)                <description>LibreNMS is becoming one of my favorite monitoring tools. Setup and getting started is easy and it has enough advanced options and tunables. I recently discovered that LibreNMS is able to check services as well. Services, in this context, means, executing Nagios plugins (like check_http, check_ping, etc). This allows you to check services that SNMP does not cover by default, like HTTP(s) health checks, certificate expiry, tcp port checks (e.g. rdp) and anything for which you can write a Nagios plugin yourself. The performance data, if available, is graphed automatically. Alerting is done with the regular LibreNMS alerts. This guide covers the setup of services (it's not enabled by default) and a few basic checks, like an http health check, certificate expiry and SSH monitoring.</description> 
 (???)                <pubDate>Mon, 10 Sep 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 10 Sep 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>tping - ping with a timestamp</title> 
 (???)                <link>gopher://raymii.org/0/tping_ping_with_a_timestamp.txt</link> 
 (???)                <guid>gopher://raymii.org/0/tping_ping_with_a_timestamp.txt</guid>
 (???)                <description>tping is a bash alias I once got from an old co-worker. It's ping, but with a timestamp. Instead of looking at the increased icmp_seq number you now have a timestamp.</description> 
 (???)                <pubDate>Mon, 03 Sep 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 03 Sep 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Linux on Microsoft Azure? Disable this built-in root-access backdoor (wa-linux-agent)</title> 
 (???)                <link>gopher://raymii.org/0/Linux_on_Microsoft_Azure_Disable_this_built_in_root_access_backdoor.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Linux_on_Microsoft_Azure_Disable_this_built_in_root_access_backdoor.txt</guid>
 (???)                <description>Are you running Linux on Microsoft Azure? Then by default anyone with access to your Azure portal can run commands as root in your VM, reset SSH keys, user passwords and SSH configuration. This article explains what the backdoor (wa-linux-agent) is, what it is meant to do, how it can be disabled and removed and what the implications are. OpenStack/QEMU also have an agent/backdoor which is covered in this article as well.</description> 
 (???)                <pubDate>Wed, 22 Aug 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 22 Aug 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Python script to talk to LibreNMS API and get alerts and hosts</title> 
 (???)                <link>gopher://raymii.org/0/Python_script_to_talk_to_LibreNMS_API_and_get_alerts_and_hosts.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Python_script_to_talk_to_LibreNMS_API_and_get_alerts_and_hosts.txt</guid>
 (???)                <description>This script talks to the LibreNMS API to receive a list of down devices and alerts. The LibreNMS dashboard provides widgets for alerts and host statusses, but there is no easy way to access that output via the API. Using Python I was able to get certain information and output it as HTML or text using PrettyTable. It can be included in other systems or be used in a chain of monitoring customizations. z</description> 
 (???)                <pubDate>Wed, 08 Aug 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 08 Aug 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>nginx 1.15.2, ssl_preread_protocol, multiplex HTTPS and SSH on the same port</title> 
 (???)                <link>gopher://raymii.org/0/nginx_1.15.2_ssl_preread_protocol_multiplex_https_and_ssh_on_the_same_port.txt</link> 
 (???)                <guid>gopher://raymii.org/0/nginx_1.15.2_ssl_preread_protocol_multiplex_https_and_ssh_on_the_same_port.txt</guid>
 (???)                <description>The NGINX blog recently had a nice article on a new feature of NGINX 1.15.2, $ssl_preread_protocol. This allows you to multiplex HTTPS and other SSL protocols on the same port, or as their blog states, 'to distinguish between SSL/TLS and other protocols when forwarding traffic using a TCP (stream) proxy'. This can be used to run SSH and HTTPS on the same port (or any other SSL protocol next to HTTPS). By running SSH and HTTPS on the same port, one can circumvent certain firewall restrictions. If the session looks like HTTPS, nginx will handle it, if it looks like something else, it will forward it to the configured other program. I used to use SSHL to get this functionality, but now it's built into the nginx webserver. This small guide will cover the installation of the latest version of nginx on Ubuntu (16.04) and configuring this multiplex feature.</description> 
 (???)                <pubDate>Mon, 06 Aug 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 12 Jan 2020 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Site updates for accessibility, text only pages and skip to main content</title> 
 (???)                <link>gopher://raymii.org/0/Site_Improvements_for_accessibility.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Site_Improvements_for_accessibility.txt</guid>
 (???)                <description>I've made some new improvements to this website. Raymii.org is generated using my self-written static site generator named ingsoc, the new features are focussed on accessibility. If you are using a screen reader or command-line browser this will benefit you. Or if you like to archive stuff offline. The two main improvements are a text-only version of every content page (article/tutorial etc) and a 'Skip to main content' link.</description> 
 (???)                <pubDate>Wed, 01 Aug 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 01 Aug 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Send email with multiple inline images via bash with a loop</title> 
 (???)                <link>gopher://raymii.org/0/Send_email_with_multiple_inline_images_via_bash.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Send_email_with_multiple_inline_images_via_bash.txt</guid>
 (???)                <description>Recently I had a request from a user that whished to receive a scheduled email with two screenshots. The screenshots were automated via AutoIt on a network share, the user manually logged in every evening to check the pictures. With bash and postfix/sendmail we can automate this process, the user now doesn't have to login but can just check their email. There are a lot of snippets and guides to attach emails via the shell, but displaying multiple images inline as an HTML mail was something I had to figure out. You cannot embed the image in base64 HTML because Outlook doesn't show that, you must use the Content-ID style embed. Like UUENCODE, but more complicated. (The next step in this process with the user is to automate the reason why they have to check those screenshots every night, that is something for another article)</description> 
 (???)                <pubDate>Mon, 23 Jul 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 23 Jul 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>log_vcs - Ansible callback plugin that creates VCS (git) branches for every Ansible run</title> 
 (???)                <link>gopher://raymii.org/0/log_vcs_-_Ansible_Callback_plugin_that_creates_git_branches_for_every_ansible_run.txt</link> 
 (???)                <guid>gopher://raymii.org/0/log_vcs_-_Ansible_Callback_plugin_that_creates_git_branches_for_every_ansible_run.txt</guid>
 (???)                <description>This Ansible callback plugin creates a VCS branch every time you run Ansible. If you ever need to go back to a certain state or environment, check out that branch and be sure nothing has changed. This is useful when you have multiple environments or multiple people deploying and continually develop your Ansible. When you often deploy to test / acceptance and less often to production, you can checkout the last branch that deployed to production if a hotfix or other maintenance is required, without having to search back in your commits and logs. I would recommend to develop infrastructure features in feature branches and have the master branch always deployable to production. However, reality learns that that is not always the case and this is a nice automatic way to have a fallback.</description> 
 (???)                <pubDate>Tue, 10 Jul 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 10 Jul 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Windows 7 installer on a KVM Linux VPS (Windows on Digital Ocean)</title> 
 (???)                <link>gopher://raymii.org/0/Windows_7_Installer_on_KVM_Linux_VPS_Digital_Ocean.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Windows_7_Installer_on_KVM_Linux_VPS_Digital_Ocean.txt</guid>
 (???)                <description>For fun I wanted to install Windows 7 on a KVM Linux VPS (on [Digital Ocean) but it should work for any KVM or XEN-HVM VPS with console access). I was experimenting with Grub2 and ISO booting, since grub2 can natively boot a linux ISO. For Windows this is not possible, the installer needs to be extracted on a FAT32 partition from which you boot. On a normal system I would repartition the disk using a live CD, but on a VPS where an ISO cannot be booted this is troublesome. If I could boot from an ISO I would use that to install Windows, but where's the fun in that? I had to figure out how to shrink an EXT4 filesystem from a running Ubuntu VPS, which is possible, however very risky, with pivot_root. Next the partiton table can be converted to MBR, the partition can be resized, a FAT32 partiton and filesystem can be created, the Windows Installer files copied onto that, some Grub config and a reboot later, you're in the Windows 7 Installer.</description> 
 (???)                <pubDate>Sun, 01 Jul 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 01 Jul 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Syslog configuration for remote logservers for syslog-ng and rsyslog, both client and server</title> 
 (???)                <link>gopher://raymii.org/0/Syslog_config_for_remote_logservers_for_syslog-ng_and_rsyslog_client_server.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Syslog_config_for_remote_logservers_for_syslog-ng_and_rsyslog_client_server.txt</guid>
 (???)                <description> Syslog is the protocol, format (and software) linux and most networking devices use to log messages. All kinds of messages, system, authentication, login and applications. There are multiple implementations of syslog, like syslog-ng and rsyslog. Syslog has the option to log to a remote server and to act as a remote logserver (that receives logs). With a remote logging server you can archive your logs and keep them secure (when a machine gets hacked, if root is compromised the logs on the machine are no longer trustworthy). This tutorial shows how to set up a syslog server with rsyslog and syslog-ng and shows how to setup servers as a syslog client (that log to a remote server) with syslog-ng and rsyslog.</description> 
 (???)                <pubDate>Thu, 21 Jun 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 21 Jun 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>snap install mosaic, the first graphical webbrowser on Ubuntu</title> 
 (???)                <link>gopher://raymii.org/0/snap_install_mosaic_the_first_graphical_webbrowser_on_Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/snap_install_mosaic_the_first_graphical_webbrowser_on_Ubuntu.txt</guid>
 (???)                <description>On one of my favorite podcasts from Jupiter Broadcasting, either Linux Action News or Linux unplugged (252 I think, not sure), Allan Pope was talking about Snap packages and how there are now WinePacks, a snap with Wine and a single (Windows) application packaged. During the discussion he dropped that Mosaic, the first graphical web browser, is available as a snap package, for modern distributions. I installed it, after huge download (1.5 MB), playing around with it is quite fun. In this post I'll discuss how to install it, what works and what doens't in the modern age on Ubuntu 18.04</description> 
 (???)                <pubDate>Thu, 14 Jun 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 14 Jun 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Chrome 68 is depcrecating HPKP (HTTP Public Key Pinning)</title> 
 (???)                <link>gopher://raymii.org/0/Chrome_68_is_deprecating_HPKP.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Chrome_68_is_deprecating_HPKP.txt</guid>
 (???)                <description>In 2014 I published an article on HPKP, http public key pinning. It allows a site operator to send a public key in an http header, forcing the browser to only connect when that header is found. It was ment to redice the risk of a compromised certificate authority (since any CA can create a certificate for any website). Quite secure, but it was often wrongly configured, forgotten until certificates expired and there were some security issues like a false pin. Late 2017 Google announced that HPKP would be removed in Chrome 68 and that version is released now, so HPKP is no longer supported. This post goes into the reasoning behind the removal, the possible replacement (Expect-CT) and how to remove HPKP from your site.</description> 
 (???)                <pubDate>Tue, 12 Jun 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 12 Jun 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>That time when one of my HP-UX servers lost half of it's RAM (and how to connect to an HP iLO 2 with modern OpenSSH (7.6+))</title> 
 (???)                <link>gopher://raymii.org/0/That_time_one_of_my_HP-UX_machines_lost_half_its_ram_openssh_7.3_ilo_2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/That_time_one_of_my_HP-UX_machines_lost_half_its_ram_openssh_7.3_ilo_2.txt</guid>
 (???)                <description>One of my favorite sayings is: 'Hardware is stupid, move everything to the cloud!'. The cloud is just someone elses computer, but at least I'm not responsible for the hardware anymore, since hardware breaks. When a VM breaks, because you use configuration management and version control, just roll out a new one. We all know that's not true, but still, the thought of it is nice. Last week one of the HP-UX machines had a failing disk and this week it's back with a whole new issue. After it was rebooted (due to issues with the services running on it), the Event Monitoring Service (EMS) sent an email regarding RAM issues and after manual checking it seems the machine lost half of it's RAM. It should have 16 GB and now it only has 8 GB. You might imagine my suprise. This post goes into my troubleshooting, since I was not able to go to the machine, shut it down and check if the RAM was still there. I'll cover the use of cstm (Support Tool Manager), how to connect to the HP iLO (out of band access) with modern OpenSSH (7.2) and the steps I took to gather information on what might have happened. </description> 
 (???)                <pubDate>Wed, 06 Jun 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 06 Jun 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>GPG noninteractive batch sign, trust and send gnupg keys</title> 
 (???)                <link>gopher://raymii.org/0/GPG_noninteractive_batch_sign_trust_and_send_gnupg_keys.txt</link> 
 (???)                <guid>gopher://raymii.org/0/GPG_noninteractive_batch_sign_trust_and_send_gnupg_keys.txt</guid>
 (???)                <description>Recently a team I consult for started using a shared password manager, pass. It uses GPG keys and presents itself as the standard unix password manager, but in essence it's nothing more than a wrapper around GPG encrypted files. We all had to generate new keys since the team is new and we were not allowed to use existing keys. Using a new, empty keyring, I generated my key and imported their keys. I wanted to trust, sign and publish all keys to a keyserver, this article shows how to do that noninteractively in batch form. Saves me doing the same thing four times, since now it's just four people, but next time it might be a hundred.</description> 
 (???)                <pubDate>Fri, 01 Jun 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 01 Jun 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>HP-UX 11.31 System information and find out part number of a failed disk with sasmgr</title> 
 (???)                <link>gopher://raymii.org/0/Find_part_number_of_failed_disk_on_HP-UX_with_sasmgr.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Find_part_number_of_failed_disk_on_HP-UX_with_sasmgr.txt</guid>
 (???)                <description>On one of my regular scheduled datacenter visits one of the older HP-UX Itanium machines had an orange light on the front. These systems are not (yet) monitored, but still in use so the disk had to be replaced. Not knowing anything about this system or which parts were used, I managed to find the exact part number and device type so we could order a spare. This small guide uses sasmgr to get the data on HP-UX 11.31.</description> 
 (???)                <pubDate>Fri, 18 May 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 18 May 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Icinga2 / Nagios / Net::SNMP change the default timeout of 60 seconds</title> 
 (???)                <link>gopher://raymii.org/0/Icinga2_Nagios_Net_SNMP_raise_default_timeout.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Icinga2_Nagios_Net_SNMP_raise_default_timeout.txt</guid>
 (???)                <description>Recently a rather large amount of new infrastructure was added to one of my monitoring instances. Using SNMP exclusively, but not the fastest network or infrastructure. The SNMP checks in the Icinga2 instance started giving timeouts, which look like false positives and give unclean logs. Raising the SNMP timeout for the checks above 60 seconds was not that easy since the 60 second timeout is hardcoded in the underlying library (NET::SNMP). This article shows you how to raise that timeout on an Ubuntu 16.04 system.</description> 
 (???)                <pubDate>Wed, 16 May 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 16 May 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Multiple passwords for one user, UIC uniqueness and the system password on OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/Multiple_passwords_for_one_user_UIC_uniqueness_and_the_system_password_on_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Multiple_passwords_for_one_user_UIC_uniqueness_and_the_system_password_on_OpenVMS.txt</guid>
 (???)                <description>In the book I bought about OpenVMS for the previous post on filesystems, 'Getting Started with OpenVMS by M. Duffy', I've read a few interesting things in the chapter that introduces user accounts and system login. Namely that a user can have multiple passwords, that user ID's are not unique and that there can be a system password. This article goes in to those three topics.</description> 
 (???)                <pubDate>Sun, 13 May 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 13 May 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Mount ISO and execute scripts on OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_Mount_ISO_and_execute_scripts.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_Mount_ISO_and_execute_scripts.txt</guid>
 (???)                <description>I'm playing around with OpenVMS on Alpha using a trial of AlphaVM Basic, but was not able to copy paste in my Hobbyist License. I suspect Putty pasting too quickly, so I had to get the license script on the OpenVMS, without using the network. In this article you'll learn some OpenVMS filesystem history, how OpenVMS handles line endings and in the end I get my license installed by creating an ISO with the script on it.</description> 
 (???)                <pubDate>Tue, 08 May 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 08 May 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>File locking, grep and process killing on OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/File_locking_grep_and_process_killing_on_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/File_locking_grep_and_process_killing_on_OpenVMS.txt</guid>
 (???)                <description>On the DECUS OpenVMS system there is no curl or wget installed. I wanted to download a remote `C` file to play around with the compiler and some simple Hello World code, to get a feel of the build system. After a bit of searching around the internet I was not able to find a command like curl or wget to download a remote file. But, the searches led me to the OpenVMS port of curl, which, I hoped, might be able to run on the DECUS system. Just like on a linux system, running the binary under my user account, not install it system wide. This ended up to be another adventure in which I figured out how to trace a locked file to a process, grep the output of a process on OpenVMS and kill a process. I did not get curl to work or compile my code, yet.</description> 
 (???)                <pubDate>Sun, 06 May 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 06 May 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Site updates, new layout for overview pages</title> 
 (???)                <link>gopher://raymii.org/0/Site_updates_new_layout_for_overview_pages.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Site_updates_new_layout_for_overview_pages.txt</guid>
 (???)                <description>This site is generated with my self-written open source static site generator named ingsoc (named after 1984). I've updated the overview pages with a new layout so that items are sorted by their publishing date instead of alphabetically. I've also rewritten some internal logic regarding tags and categories. This article shows the difference before and after and includes some old screenshots of raymii.org.</description> 
 (???)                <pubDate>Fri, 04 May 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 04 May 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>The sad state of Alpha emulators (for OpenVMS)</title> 
 (???)                <link>gopher://raymii.org/0/The_sad_state_of_Alpha_emulators_for_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/The_sad_state_of_Alpha_emulators_for_OpenVMS.txt</guid>
 (???)                <description>OpenVMS 7.3 was the last version for the VAX architecture. All later versions (like 8.4) are only available for the Alpha CPU architecture or Intel's Itanium platform. Since I don't want hardware running, which is suprisingly hard to get in The Netherlands, Alpha machines, I want to be able to run it in an emulator. simh is the best open source VAX emulator, but it does not support Alpha. My adventure with es40, the only open source Alpha emulator (development halted 10 years ago) ended prematurely since it crashes all the time. The only other available options are FreeAXP, Charon-AXP, vtAlpha and EmuVM AlphaVM. Only FreeAXP is available as a free (but not open source) download, Charon had a personal version but that is nowhere to be found nowdays, vtAlpha doesn't offer a trial or free version and EmuVM Alphaserver also stopped with their free version. In this article I'll go over my adventure with FreeAXP and EmuVM.</description> 
 (???)                <pubDate>Mon, 30 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 30 Jun 2023 22:31:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Introducing the Yubikey Nano XL Rugged edition</title> 
 (???)                <link>gopher://raymii.org/0/Introducing_the_Yubikey_Nano_XL_Rugged_Edition.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Introducing_the_Yubikey_Nano_XL_Rugged_Edition.txt</guid>
 (???)                <description>Last month my Yubikey broke. I had a second one as a backup so there were no problems for me. This second yubikey is a Nano model, that means it is about 1 cm by 1 cm, the normal yubikey is 2 cm by 5. It fits inside the USB port and is meant to be inserted in the computer all the time. Extracting it from the port is hard as well, since it is so small. I use my yubikey on different machines and don't like the idea of it being in a computer when I'm not there, so I wanted to fix this. I did not fix it by buying a regular sized yubikey, but I found a clever workaround, which I name the Yubikey nano XL Rugged. You'll understand when you see the pictures.</description> 
 (???)                <pubDate>Fri, 27 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 27 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Installing the es40 AlphaServer emulator 0.18 on Ubuntu 16.04, and trying to install OpenVMS 8.4 on es40</title> 
 (???)                <link>gopher://raymii.org/0/Installing_the_es40_AlphaServer_emulator_0.18_on_Ubuntu_16.04_and_trying_to_install_openVMS_8.4_on_es40.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Installing_the_es40_AlphaServer_emulator_0.18_on_Ubuntu_16.04_and_trying_to_install_openVMS_8.4_on_es40.txt</guid>
 (???)                <description>OpenVMS 7.3 is the latest version of OpenVMS for the VAX architecture. Since the DECUS system uses OpenVMS 8.4 there were some version differences. I could not set my 'BACKSPACE=DELETE' on 7.3. The hobbyist license also covers the Alpha and Itanium versions of OpenVMS so I want to try the Alpha version, which is consequently also 8.4, the latest release. This article describes my attempt to compile and install the es40 open source Alpha emulator on Ubuntu 16.04 and subsequently the installation of OpenVMS Alpha. The emulator is not under active development since 2008, and the installation of OpenVMS fails. OpenVMS does boot however, very very slowly. </description> 
 (???)                <pubDate>Tue, 24 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 24 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Small OpenVMS titbits</title> 
 (???)                <link>gopher://raymii.org/0/Small_OpenVMS_titbits.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Small_OpenVMS_titbits.txt</guid>
 (???)                <description>Here are some small titbits I found out this week on the DECUServe OpenVMS system. Not enough to write a blogpost on their own, but collected together.</description> 
 (???)                <pubDate>Sun, 22 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 22 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - add apt_key inline</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_add_apt_key_inline.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_add_apt_key_inline.txt</guid>
 (???)                <description>Using the apt_key module one can add an APT key with ansible. You can get the key from a remote server or from a file, or just a key ID. I got the request to do some stuff on a machine which was quite rescricted (so no HKP protocol) and I was asked not to place to many files on the machine. The apt_key was needed but it could not be a file, so using a YAML Literal Block Scalar I was able to add the key inline in the playbook. Not the best way to do it, but one of the many ways Ansible allows it.</description> 
 (???)                <pubDate>Thu, 19 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 19 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVMS 7.3 install log with simh VAX on Ubuntu 16.04</title> 
 (???)                <link>gopher://raymii.org/0/OpenVMS_7.3_install_log_with_simh_vax_on_Ubuntu_16.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVMS_7.3_install_log_with_simh_vax_on_Ubuntu_16.04.txt</guid>
 (???)                <description>Using a guide I was able to install OpenVMS 7.3 for VAX on simh on Ubuntu 16.04. This is a copy-paste of my terminal for future reference. This is not one of my usual articles, a guide with comprehensive information an background. Just a log of my terminal.</description> 
 (???)                <pubDate>Mon, 16 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 16 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>File versioning and deleting on OpenVMS with DELETE and PURGE</title> 
 (???)                <link>gopher://raymii.org/0/File_versioning_and_deleting_on_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/File_versioning_and_deleting_on_OpenVMS.txt</guid>
 (???)                <description>I'm now a few weeks into my OpenVMS adventure and my home folder on the [DECUS](http://decus.org) system is quite cluttered with files. More specifically, with different versions of files, since OpenVMS by default has file versioning built in. This means that when you edit a file, or copy a file over an existing file, the old file is not overwritten but a new file with a new version is written. The old file still is there. This is one of the best things in my humble opinion so far on OpenVMS, but it does require maintenance to not have the disk get filled up fast. This article goes into the PURGE and DELETE commands which help you deal with file versioning and removal.</description> 
 (???)                <pubDate>Sun, 15 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 15 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Synergy, no mouse cursor on Ubuntu 17.10</title> 
 (???)                <link>gopher://raymii.org/0/Synergy_no_mouse_cursor_on_Ubuntu_17.10.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Synergy_no_mouse_cursor_on_Ubuntu_17.10.txt</guid>
 (???)                <description>Synergy is an application to control remote screens with your local mouse and keyboard over the network, cross platform. You could use Linux as your main OS and have a seperate box with Windows next to it, and use your Linux mouse to control windows. On Ubuntu 17.10 the mouse cursor is not visible, but does work. This snippet provides a fix. Hint, wayland is in the way.</description> 
 (???)                <pubDate>Wed, 11 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 11 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>FreeIPA DNS workaround for DNS zone [...]. already exists in DNS and is handled by server(s):</title> 
 (???)                <link>gopher://raymii.org/0/FreeIPA_DNS_workaround_for_DNS_zone_already_exists_in_DNS_and_is_handled_by_servers.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FreeIPA_DNS_workaround_for_DNS_zone_already_exists_in_DNS_and_is_handled_by_servers.txt</guid>
 (???)                <description>Recently I ran into an issue with FreeIPA when trying to add an existing DNS zone. The zone already exists on the internet so, logically, FreeIPA wouldn't allow me to hijack this domain locally. My usecase is special, so I wanted to forcefully add this zone as a forward zone.</description> 
 (???)                <pubDate>Tue, 10 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 10 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Backspace and delete key behaviour on OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/Backspace_and_delete_key_behaviour_on_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Backspace_and_delete_key_behaviour_on_OpenVMS.txt</guid>
 (???)                <description>While working on the DECUServe OpenVMS system I found out quickly that pressing BACKSPACE moves the cursor on the shell to the beginning of the line instead of deleting the character to the left of the cursor. This made me very aware of my typing, since when I made an error I had to retype the entire line (the terminal is in insert mode it seems). After reading through some documentation it seems that is default behaviour but there are terminal options to change it.</description> 
 (???)                <pubDate>Mon, 09 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 09 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>SSH public key authentication on OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/SSH_public_key_authentication_on_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/SSH_public_key_authentication_on_OpenVMS.txt</guid>
 (???)                <description>My OpenVMS adventure continues, after my rabbit hole of folder removal, this time I actually get public key authentication working with OpenSSH so that I don't have to type my password to login.</description> 
 (???)                <pubDate>Thu, 05 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 05 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Delete a directory on OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/Delete_a_directory_in_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Delete_a_directory_in_OpenVMS.txt</guid>
 (???)                <description>My OpenVMS adventure continues, in this small item I talk about the removal of folders on OpenVMS. As you might expect, different than on linux. This rabbit hole got started when I made a typo in the creation of a folder, which I created in the process of SSH public key authentication. Pubkey auth still doens't work but my OpenVMS knowledge increased.</description> 
 (???)                <pubDate>Tue, 03 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 03 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Mail on OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/My_second_OpenVMS_-_MAIL.txt</link> 
 (???)                <guid>gopher://raymii.org/0/My_second_OpenVMS_-_MAIL.txt</guid>
 (???)                <description>Last week I registered myself with the DECUServe OpenVMS system. I found out how to navigate the filesystem and create files and folders, it was awesome. This week I learned how to use the OpenVMS MAIL program to read and reply to an email I got from George Cornelius, another user on the DECUServe system.</description> 
 (???)                <pubDate>Sun, 01 Apr 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 01 Apr 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>My first OpenVMS</title> 
 (???)                <link>gopher://raymii.org/0/My_first_OpenVMS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/My_first_OpenVMS.txt</guid>
 (???)                <description>Last week I registered myself with the DECUServe OpenVMS system. I also registered with HP as an OpenVMS hobbyist and got OpenVMS 7.3 for VAX. This small blog item describes my first steps with the hosted DECUS OpenVMS system. I'm excited since I now know how to create folders, navigate the filesystem and edit files. Oh and I had a nice chat with another OpenVMS user via the PHONE program. </description> 
 (???)                <pubDate>Sat, 31 Mar 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 31 Mar 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenStack nova get-password, set-password and post encrypted password to metadata service</title> 
 (???)                <link>gopher://raymii.org/0/OpenStack_nova_get_-_password_set_-_password_and_post_encrypted_password_to_metadata_service.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenStack_nova_get_-_password_set_-_password_and_post_encrypted_password_to_metadata_service.txt</guid>
 (???)                <description>When you create images for an OpenStack Cloud you want to use 'cloud' features. Fancy term for automatic resizing of your instance disk, adding an SSH key, (re)setting passwords and executing scripts on first boot to configure your instance further. OpenStack provides the metadata service for instances, which supplies information for the instance, like its public IP, SSH public key that was provided and vendor or user provided data like scripts or information. The OpenStack metadata service allows an instance to post data to an endpoint wich can be retreived with the 'nova get-password' command. It is meant to be an encrypted password (with the public SSH key) but it can be any plain text as well and it doesn't have to be the root password. In this guide I'll go over the scripts I use inside linux images to post a password to the metadata service and the 'nova' commands such as 'set-password' and 'get-password'. That includes decrypting a password with an SSH key that is password-protected (Horizon and nova don't support that) and the 'nova set-password' command, which sets the root password inside an instance when it has the 'qemu-guest-agent' installed and running.</description> 
 (???)                <pubDate>Sun, 25 Mar 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 25 Mar 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Essential Monitoring checks</title> 
 (???)                <link>gopher://raymii.org/0/Essential_Monitoring_checks.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Essential_Monitoring_checks.txt</guid>
 (???)                <description>In this article I'll provide a list of checks I consider essential for monitoring and why they are usefull. It's on different levels, ranging from your application (health checks), to operating system (disk usage, load) and hardware (iDrac, disks, power). Use it as a starting point when setting up your monitoring.</description> 
 (???)                <pubDate>Tue, 20 Mar 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 20 Mar 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>My Yubikey broke, but I had a backup. So should you with your 2FA</title> 
 (???)                <link>gopher://raymii.org/0/My_Yubikey_Broke_-_Important_tip_for_two_factor_BACKUP.txt</link> 
 (???)                <guid>gopher://raymii.org/0/My_Yubikey_Broke_-_Important_tip_for_two_factor_BACKUP.txt</guid>
 (???)                <description>Today my trusty old first generation Yubikey didn't light up when I plugged it in. No problem for me, I had a backup key. But most people don't, so here's an important tip when you use two factor authentication like a Yubikey, Nitrokey or Google Authenticator (HOTP). TL;DR: Have a second hardware token stored away safely and backup your QR codes (print/screenshot) somewhere secure. Swap the hardware tokens often to make sure they both work with all services. Just as with regular data, make backups and test restores.</description> 
 (???)                <pubDate>Sun, 18 Mar 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 18 Mar 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>haproxy: restrict specific URLs to specific IP addresses</title> 
 (???)                <link>gopher://raymii.org/0/haproxy_restrict_specific_urls_to_specific_ip_addresses.txt</link> 
 (???)                <guid>gopher://raymii.org/0/haproxy_restrict_specific_urls_to_specific_ip_addresses.txt</guid>
 (???)                <description>This snippet shows you how to use haproxy to restrict certain URLs to certain IP addresses. For example, to make sure your admin interface can only be accessed from your company IP address. It also includes an example to prompt for a password if the visitor is from a different network.</description> 
 (???)                <pubDate>Sun, 04 Mar 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 04 Mar 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Dell PowerEdge firmware upgrades via iDrac</title> 
 (???)                <link>gopher://raymii.org/0/Dell_PowerEdge_firmware_upgrades_via_iDrac.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Dell_PowerEdge_firmware_upgrades_via_iDrac.txt</guid>
 (???)                <description>The recent spectre and meltdown vulnerabilities require BIOS and firmware updates. Dell provides binaries for Windows and Linux, but just for Red Hat and SUSE. Some firmware updates can be run on Ubuntu or Debian, but some fail with the error that RPM could not be found. Which is correct since it's not Red Hat. In this small article I'll show you how to upgrade the firmware via the iDrac, which I recently discovered.</description> 
 (???)                <pubDate>Fri, 26 Jan 2018 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 26 Jan 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>ncdu - for troubleshooting diskspace and inode issues</title> 
 (???)                <link>gopher://raymii.org/0/ncdu_-_for_troubleshooting_diskspace_and_inode_issues.txt</link> 
 (???)                <guid>gopher://raymii.org/0/ncdu_-_for_troubleshooting_diskspace_and_inode_issues.txt</guid>
 (???)                <description>In my box of sysadmin tools there are multiple gems I use for troubleshooting servers. Since I work at a cloud provider sometimes I have to fix servers that are not mine. One of those tools is `ncdu`. It's a very usefull tool when a server has a full disk, both full of used space or full of used inodes. This article covers ncdu and shows the process of finding the culprit when you're out of disk space or inodes.</description> 
 (???)                <pubDate>Sun, 29 Oct 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 29 Oct 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Adding IPv6 to a keepalived and haproxy cluster</title> 
 (???)                <link>gopher://raymii.org/0/Adding_IPv6_to_a_keepalived_and_haproxy_cluster.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Adding_IPv6_to_a_keepalived_and_haproxy_cluster.txt</guid>
 (???)                <description>At work I regularly build high-available clusters for customers, where the setup is distributed over multiple datacenters with failover software. If one component fails, the service doesn't experience issues or downtime due to the failure. Recently I was tasked with expanding a cluster setup to be also reachable via IPv6. This article goes over the settings and configuration required for haproxy and keepalived for IPv6. The internal cluster will only be IPv4, the loadbalancer terminates HTTP and HTTPS connections. </description> 
 (???)                <pubDate>Sun, 24 Sep 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 24 Sep 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>atop is broken on Ubuntu 16.04 (version 1.26): trap divide error</title> 
 (???)                <link>gopher://raymii.org/0/atop_is_broken_on_Ubuntu_16.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/atop_is_broken_on_Ubuntu_16.04.txt</guid>
 (???)                <description>Recently a few of my Ubuntu 16.04 machines had issues and I was troubleshooting them, noticing `atop` logs missing. atop is a very handy tool which can be setup to record system state every X minutes, and we set it up to run every 5 minutes. You can then at a later moment see what the server was doing, even sorting by disk, memory, cpu or network usage. This post discusses the error and a quick fix.</description> 
 (???)                <pubDate>Mon, 18 Sep 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 18 Sep 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Backup OpenStack object store or S3 with rclone</title> 
 (???)                <link>gopher://raymii.org/0/Backup_or_Sync_OpenStack_object_store_or_other_cloud_storage_with_rclone.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Backup_or_Sync_OpenStack_object_store_or_other_cloud_storage_with_rclone.txt</guid>
 (???)                <description>This is a guide that shows you how to make backups of an object storage service like OpenStack swift or S3. Most object store services save data on multiple servers, but deleting a file also deletes it from all servers. Tools like rsync or scp are not compatible most of the time with these services, unless there is a proxy that translates the object store protocol to something like SFTP. rclone is an rsync-like, command line tool that syncs files and directories from cloud storage services like OpenStack swift, Amazon S3, Google cloud/drive, dropbox and more. By having a local backup of the contents of your cloud object store you can restore from accidental deletion or easily migrate between cloud providers. Syncing between cloud providers is also possible. It can also help to lower the RTO (recovery time objective) and backups are just always a good thing to have and test.</description> 
 (???)                <pubDate>Thu, 17 Aug 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 17 Aug 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Openstack Horizon, remove the loading modal with uBlock Origin</title> 
 (???)                <link>gopher://raymii.org/0/Openstack_Horizon_remove_the_loading_modal_with_uBlock_origin.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Openstack_Horizon_remove_the_loading_modal_with_uBlock_origin.txt</guid>
 (???)                <description>The OpenStack dashboard, Horizon, is a great piece of software to manage your OpenStack resources via the web. However, it has, in my opinion, a very big usability issue. The loading dialog that appears after you click a link. It blocks the entire page and all other links. So, whenever I click, I have to wait three to five seconds before I can do anything else. Clicked the wrong menu item? Sucks to be you, here have some loading. Clicked a link and quickly want to open something in a new tab while the page is still loading? Nope, not today. It's not that browsers have had a function to show that a page is loading, no, of course, the loading indication that has been there forever is not good enough. Let's re-invent the wheel and significantly impact the user experience. With two rules in uBlock Origin this loading modal is removed and you can work normally again in Horizon</description> 
 (???)                <pubDate>Thu, 25 May 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 25 May 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Distributed load testing with Tsung</title> 
 (???)                <link>gopher://raymii.org/0/Basic_Website_load_testing_with_Tsung.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Basic_Website_load_testing_with_Tsung.txt</guid>
 (???)                <description>At $dayjob I manage a large OpenStack Cloud. Next to that I also build high-performance and redundant clusters for customers. Think multiple datacenters, haproxy, galera or postgres or mysql replication, drbd with nfs or glusterfs and all sorts of software that can (and sometimes cannot) be clustered (redis, rabbitmq etc.). Our customers deploy their application on there and when one or a few components fail, their application stays up. Hypervisors, disks, switches, routers, all can fail without actual service downtime. Next to building such clusters, we also monitor and manage them. When we build such a cluster (fully automated with Ansible) we do a basic load test. We do this not for benchmarking or application flow testing, but to optimize the cluster components. Simple things like the mpm workers or threads in Apache or more advanced topics like MySQL or DRBD. Optimization there depends on the specifications of the servers used and the load patterns. Tsung is a high-performance but simple to configure and use piece of software written in Erlang. Configuration is done in a simple readable XML file. Tsung can be run distributed as well for large setups. It has good reporting and a live web interface for status and reports during a test.</description> 
 (???)                <pubDate>Thu, 13 Apr 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 13 Apr 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Run software on the tty1 console instead of getty login on Ubuntu 14.04 and 16.04</title> 
 (???)                <link>gopher://raymii.org/0/Run_software_on_tty1_console_instead_of_login_getty.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Run_software_on_tty1_console_instead_of_login_getty.txt</guid>
 (???)                <description>Recently I wanted to change the default login prompt on the tty1 console on an OpenStack instance to automatically run htop. Instead of logging in via the console, I wanted it to start up htop right away and nothing else. Ubuntu 14.04 uses init and Ubuntu 16.04 uses systemd. Both ways are shown in this tutorial.</description> 
 (???)                <pubDate>Mon, 10 Apr 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 10 Apr 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Check HTTP status code for a page on all DNS records</title> 
 (???)                <link>gopher://raymii.org/0/Check_HTTP_status_code_for_a_page_on_all_DNS_records.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Check_HTTP_status_code_for_a_page_on_all_DNS_records.txt</guid>
 (???)                <description>This is a small snippet using curl to check the status code of a given URL on all DNS records for a given domain. This site has a few A records in round robin mode, and sometimes the automatic deployment fails. Using this query I can check which server is the culprit and fix it manually.</description> 
 (???)                <pubDate>Sun, 09 Apr 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 09 Apr 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Burn in testing for new Hypervisor and Storage server hardware</title> 
 (???)                <link>gopher://raymii.org/0/Burn_in_testing_for_Hypervisor_and_Storage_servers.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Burn_in_testing_for_Hypervisor_and_Storage_servers.txt</guid>
 (???)                <description>This article talks over how and why to do burn in testing on hypervisor and storage servers. I work at a fairly large cloud provider, where we have a lot of hardware. Think thousands of hardware servers and multiple ten thousand harddisks. It's all technology, so stuff breaks, and at our scale, stuff breaks often. One of my pet projects for the last period has been to automate the burn-in testing for our virtualisation servers and the storage machines. We run OpenStack and use KVM for the hypervisors and a combination of different storage technology for the volume storage servers. Before they go in production, they are tested for a few days with very intensive automated usage. We've noticed that they either fail then, or not. This saves us from having to migrate customers off of new production servers just a few days after they've gone live. The testing is of course all automated.</description> 
 (???)                <pubDate>Sat, 08 Apr 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 08 Apr 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Openstack Soft Delete - recover deleted instances</title> 
 (???)                <link>gopher://raymii.org/0/Openstack_Soft_Delete_-_recover_deleted_instances.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Openstack_Soft_Delete_-_recover_deleted_instances.txt</guid>
 (???)                <description>This article contains both an end user and OpenStack administrator guide to set up and use soft_delete with OpenStack Nova. If an instance is deleted with nova delete, it's gone right away. If soft_delete is enabled, it will be queued for deletion for a set amount of time, allowing end-users and administrators to restore the instance with the nova restore command. This can save your ass (or an end-users bottom) if the wrong instance is removed. Setup is simple, just one variable in nova.conf. There are some caveats we'll also discuss here. </description> 
 (???)                <pubDate>Sat, 18 Mar 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 18 Mar 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Running WPS-8 (Word Processing System) on the DEC(mate) PDP-8i and SIMH</title> 
 (???)                <link>gopher://raymii.org/0/Running_WPS-8_(Word_Processing_System)_on_the_DEC(mate)_PDP-8i_and_SIMH.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Running_WPS-8_(Word_Processing_System)_on_the_DEC(mate)_PDP-8i_and_SIMH.txt</guid>
 (???)                <description>This article covers running WPS-8 on a modern day emulator. WPS-8 is a word processor by DEC for the PDP-8. The PDP-8 was a very populair 12-bit minicomputer from 1965. WPS-8 was released around 1970, it came bundled with DEC's VT78 terminal. This terminal bundle was also known as the DECmate. This article covers the setup of the emulator, simh with the correct disk images and terminal settings. It covers basic usage and the features of WPS-8 and it has a section on key remapping. The early keyboards used with WPS-8 have small but incompatible differences with recent keyboards, but nothing that xterm remapping can't fix. </description> 
 (???)                <pubDate>Thu, 09 Mar 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 09 Mar 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Traceroute IPv6 to Smokeping Target config</title> 
 (???)                <link>gopher://raymii.org/0/IPv6_Traceroute_to_Smokeping_Target_Config.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPv6_Traceroute_to_Smokeping_Target_Config.txt</guid>
 (???)                <description>This little one-liner converts the output of traceroute for IPv6 to Smokeping Target output. I had only setup my smokepings for IPv4. Recently we had an issue were network config was borked and the whole IPv4 network was not announced via BGP anymore. I was at home troubleshooting, but finding nothing since I have native IPv6 and that part still worked. My Smokeping did show loss, and that explicitly uses IPv4. That helped with the debugging a lot. I have a [IPv4][4] version of this article as well.</description> 
 (???)                <pubDate>Sun, 05 Mar 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 05 Mar 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible: access group vars for groups the current host is not a member of</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_access_other_groups_group_vars.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_access_other_groups_group_vars.txt</guid>
 (???)                <description>This guide shows you how to access group variables for a group the current host is not a member of. In Ansible you can access other host variables using `hostvars['hostname']` but not group variables. The way described here is workable, but do I consider it a dirty hack. So why did I need this? I have a setup where ssl is offloaded by haproxy servers, but the virtual hosts and ssl configuration are defined in Apache servers. The loadbalancers and appservers are two different hostgroups, the ssl settings are in the appserver group_vars, which the hosts in the loadbalancer group need to access. The best way to do this is change the haproxy playbooks and configuration and define the certificates there, but in this specific case that wasn't a workable solution. Editing two yaml files (one for the appservers and one for the loadbalancers) was not an option in this situation.</description> 
 (???)                <pubDate>Fri, 27 Jan 2017 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 27 Jan 2017 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenStack: Quick and automatic instance snapshot backup and restore (and before an apt upgrade) with nova backup</title> 
 (???)                <link>gopher://raymii.org/0/OpenStack_Quick_and_automatic_instance_snapshot_backups.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenStack_Quick_and_automatic_instance_snapshot_backups.txt</guid>
 (???)                <description>This is a guide that shows you how to create OpenStack instance snapshots automatically, quick and easy. This allows you to create a full backup of the entire instance. This guide has a script that makes creating snapshots from an OpenStack VM automatic via cron. The script uses the `nova backup` function, therefore it also has retention and rotation of the backups. It also features an option to create a snapshot before every apt action, upgrade/install/remove. This way, you can easily restore from the snapshot when something goes wrong after an upgrade. Snapshots are very usefull to restore the entire instance to an earlier state. Do note that this is not the same as a file based backup, you can't select a few files to restore, it's all or nothing.</description> 
 (???)                <pubDate>Tue, 20 Dec 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 20 Dec 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Create a PDP-8 OS8 RK05 system disk from RX01 floppies with SIMH (and get text files in and out of the PDP-8)</title> 
 (???)                <link>gopher://raymii.org/0/Creating_an_OS8_RK05_system_disk_from_RX01_floppies_for_the_PDP-8_with_SIMH.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Creating_an_OS8_RK05_system_disk_from_RX01_floppies_for_the_PDP-8_with_SIMH.txt</guid>
 (???)                <description>This guide shows you how to build an RK05 bootable system disk with OS/8 on it for the PDP-8, in the SIMH emulator. We will use two RX01 floppies as the build source, copy over all the files and set up the LPT printer and the PTR/PIP paper tape punch/readers. As an added bonus the article also shows you how to get text files in and out of the PDP-8 sytem using the printer and papertape reader / puncher.</description> 
 (???)                <pubDate>Wed, 07 Dec 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 07 May 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Overflow the Investigatory Powers Bill!</title> 
 (???)                <link>gopher://raymii.org/0/Overflow_the_Investigatory_Powers_Bill.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Overflow_the_Investigatory_Powers_Bill.txt</guid>
 (???)                <description>I read an article on The Register regarding the Investigatory Powers Bill. The part were ISP's are forced to save their customers browsing history for a year is the most horryfing part, just as that whole bill. Let's hope the political process and organizations like the Open Rights Group and the EFF have enough lobbying power to change people's minds.
 (???)                <pubDate>Thu, 24 Nov 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 24 Nov 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Build a FreeBSD 11.0-release Openstack Image with bsd-cloudinit</title> 
 (???)                <link>gopher://raymii.org/0/FreeBSD_11.0-release_Openstack_Image.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FreeBSD_11.0-release_Openstack_Image.txt</guid>
 (???)                <description>We are going to prepare a FreeBSD image for Openstack deployment. We do this by creating a FreeBSD 11.0-RELEASE instance, installing it and converting it using bsd-cloudinit. We'll use the CloudVPS public Openstack cloud for this. We'll be using the Openstack command line tools, like nova, cinder and glance. A FreeBSD image with Cloud Init will automatically resize the disk to the size of the flavor and it will add your SSH key right at boot. You can use Cloud Config to execute a script at first boott, for example, to bootstrap your system into Puppet or Ansible. If you use Ansible to manage OpenStack instances you can integrate it without manually logging in or doing anything manually.</description> 
 (???)                <pubDate>Mon, 14 Nov 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 14 Nov 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nitrokey gnuk firmware update via DFU</title> 
 (???)                <link>gopher://raymii.org/0/Nitrokey_gnuk_firmware_update_via_DFU.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nitrokey_gnuk_firmware_update_via_DFU.txt</guid>
 (???)                <description>The Nitrokey (start, all of them) can be upgraded to a newer GNUK firmware. However, this can only be done via ST Link or DFU, if you use the Gnuk USB firmware upgrade you will brick the device. This guide shows you how to attach a DFU adapter and how to flash firmware to a Nitrokey, both for upgrading or unbricking an USB upgraded one.</description> 
 (???)                <pubDate>Tue, 11 Oct 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 11 Oct 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>MySQL restore after a crash and disk issues</title> 
 (???)                <link>gopher://raymii.org/0/MySQL_restore_after_a_crash_and_disk_issues.txt</link> 
 (???)                <guid>gopher://raymii.org/0/MySQL_restore_after_a_crash_and_disk_issues.txt</guid>
 (???)                <description>Recently I had to restore a MySQL server. The hardware had issues with the storage and required some FSCK's, disk replacements and a lot of RAID and LVM love to get working again. Which was the easy part. MySQL was a bit harder to fix. This post describes the proces I used to get MySQL working again with a recent backup. In this case it was a replicated setup so the client had no actual downtime. </description> 
 (???)                <pubDate>Mon, 10 Oct 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 10 Oct 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Firefox History stats with Bash</title> 
 (???)                <link>gopher://raymii.org/0/Firefox_History_Stats_with_Bash.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Firefox_History_Stats_with_Bash.txt</guid>
 (???)                <description>This is a small script to gather some statistics from your Firefox history. First we use sqlite3 to parse the Firefox history database and get the last three months, then we remove all the IP addresses and port numbers and finally we sort and count it.</description> 
 (???)                <pubDate>Sun, 25 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 25 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Create /etc/shadow crypted password entries</title> 
 (???)                <link>gopher://raymii.org/0/Create_etc_shadow_crypted_password_entries.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Create_etc_shadow_crypted_password_entries.txt</guid>
 (???)                <description>These small snippets create password strings you can put in /etc/shadow when you need to reset a password on a system.</description> 
 (???)                <pubDate>Fri, 23 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 23 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Mouse movement via the keyboard with xdotool and xbindkeys</title> 
 (???)                <link>gopher://raymii.org/0/Mouse_movement_via_the_keyboard_with_xdotool_and_xbindkeys.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Mouse_movement_via_the_keyboard_with_xdotool_and_xbindkeys.txt</guid>
 (???)                <description>I had a request from a friend to figure out how she could use her mouse via the keyboard. Normally you would use Mouse Keys, but she uses a kinesis freestyle2 keyboard which has no numpad. By using xbindkeys together with xdotool we can use our own key combination to move the mouse keys, in any window manager. </description> 
 (???)                <pubDate>Tue, 13 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 13 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC VPN on Ubuntu 16.04 with StrongSwan</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_vpn_with_Ubuntu_16.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_vpn_with_Ubuntu_16.04.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC VPN server on Ubuntu 16.04 using StrongSwan as the IPsec server and for authentication. It has a detailed explanation with every step. We choose the IPSEC protocol stack because of vulnerabilities found in pptpd VPNs and because it is supported on all recent operating systems by default. More than ever, your freedom and privacy when online is under threat. Governments and ISPs want to control what you can and can't see while keeping a record of everything you do, and even the shady-looking guy lurking around your coffee shop or the airport gate can grab your bank details easier than you may think. A self hosted VPN lets you surf the web the way it was intended: anonymously and without oversight.</description> 
 (???)                <pubDate>Mon, 12 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 12 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nagios 4 + Nagiosgraph (latest) installation on Ubuntu 12.04 &amp; 14.04</title> 
 (???)                <link>gopher://raymii.org/0/Nagios_Core_4_Installation_on_Ubuntu_12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nagios_Core_4_Installation_on_Ubuntu_12.04.txt</guid>
 (???)                <description>This is a guide on installing the latest Nagios Core (4.2.1) on Ubuntu 12.04 and 14.04. Nagios is an open source computer system monitoring, network monitoring and infrastructure monitoring software application. Nagios offers monitoring and alerting services for servers, switches, applications, and services. It alerts the users when things go wrong and alerts them a second time when the problem has been resolved. The version in the Ubuntu 12.04 repositories is quite old, it is still the in the 3 branch. This guide helps to fix that by using the latest Nagios version. We also install Nagiosgraph, a plugin for Nagios which gives you graps of the metrics.</description> 
 (???)                <pubDate>Sun, 11 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 11 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Create OpenStack servers with Ansible 2.0 and the os_server module and a dynamic inventory</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_create_OpenStack_servers_with_os_server.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_create_OpenStack_servers_with_os_server.txt</guid>
 (???)                <description>I regularly deploy clusters and single servers on OpenStack with Ansible. However, Ansible 2.0 comes with new OpenStack modules my playbooks still used the old ones. I reserved some time to convert these playbooks to the new modules and ansible 2. This article shows a very simple example, it creates three servers in OpenStack and adds them to different hostgroups based on variables. For example, to create one loadbalancer and two appservers and run specific playbooks on those hosts based on their role.</description> 
 (???)                <pubDate>Sat, 10 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 10 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>FST-01 gnuk firmware update via USB</title> 
 (???)                <link>gopher://raymii.org/0/FST-01_firmware_upgrade_via_usb.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FST-01_firmware_upgrade_via_usb.txt</guid>
 (???)                <description>The FST-01 (Flying Stone 1) is a small STM32F103TB based USB device designed to run gnuk and NeuG (gpg usb token or true random number generator). This guide shows you how to upgrade the firmware on the FST-01 so that you can enjoy newer gnuk features like 4096 bit RSA keys.</description> 
 (???)                <pubDate>Fri, 09 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 09 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - create playbooks and role file and folder structure</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_create_playbooks_and_role_file_and_folder_structure.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_create_playbooks_and_role_file_and_folder_structure.txt</guid>
 (???)                <description>Because I always forget which folders and files go into a playbook folder.</description> 
 (???)                <pubDate>Thu, 08 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 08 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Reset iptables to ACCEPT all (backup and remove all existing rules)</title> 
 (???)                <link>gopher://raymii.org/0/Reset_iptables_to_ACCEPT_all_-_backup_and_remove_all_existing_rules.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Reset_iptables_to_ACCEPT_all_-_backup_and_remove_all_existing_rules.txt</guid>
 (???)                <description>Here's a small bash script that removes all iptables rules and sets up a default ACCEPT ALL state. Before the reset, it creates a backup of the current rules. I use this often to troubleshoot servers with networking issues. If you just blindly do an `iptables -F` you might lock yourself out of a server since the INPUT policy might be DROP.</description> 
 (???)                <pubDate>Sat, 03 Sep 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 03 Sep 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nitrokey Start: Getting started guide (gnuk openpgp token)</title> 
 (???)                <link>gopher://raymii.org/0/Nitrokey_Start_Getting_started_guide.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nitrokey_Start_Getting_started_guide.txt</guid>
 (???)                <description>The Nitrokey Start is an OpenPGP USB token. It supports three 2048 bit GPG keys and is based on gnuk. Gnuk is an implementation of USB cryptographic token for GPG. Cryptographic token is a store of private keys and it computes cryptographic functions on the device. The main difference with other GPG cards like the Nitrokey Pro or the OpenPGP card is that this device does not use a smartcard. Whereas the other devices are basically USB smartcard readers, the Nitrokey Start has everything in it's firmware. This article is a getting started guide where I talk about the initial setup of the device, setting up a user PIN, an admin PIN and a reset code, generating the key and subkeys on the device, or loading external keys into the device and usage examples with GPG, OpenSSH and Thunderbird.</description> 
 (???)                <pubDate>Sun, 14 Aug 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 14 Aug 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nitrokey HSM/SmartCard-HSM and Raspberry Pi web cluster</title> 
 (???)                <link>gopher://raymii.org/0/Nitrokey_HSM_web_cluster.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nitrokey_HSM_web_cluster.txt</guid>
 (???)                <description>This article sets up a Nitrokey HSM/SmartCard-HSM web cluster and has a lot of benchmarks. This specific HSM is not a fast HSM since it's very inexpensive and targeted at secure key storage, not performance. But, what if you do want more performance? Then you scale horizontally, just add some more HSM's and a loadbalancer in front. The cluster consists of Raspberry Pi's and Nitrokey HSM's and SmartCard-HSM's, softwarewise we use Apache, `mod_nss` and haproxy. We benchmark a small HTML file and a Wordpress site, with a regular 4096 bit RSA certificate without using the HSM's, a regular 2048 bit RSA certificate without using the HSM's, a 2048 bit RSA certificate in the HSM, a 1024 bit RSA certificate in the HSM and an EC prime256v1 key in the HSM. We do these benchmarks with the `OpenSC` module and with the `sc-hsm-embedded` module to see if that makes any difference.</description> 
 (???)                <pubDate>Mon, 01 Aug 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Aug 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Raspberry Pi unattended upgrade Raspbian to Debian Testing</title> 
 (???)                <link>gopher://raymii.org/0/Raspberry_Pi_Raspbian_Unattended_Upgrade_Jessie_to_Testing.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Raspberry_Pi_Raspbian_Unattended_Upgrade_Jessie_to_Testing.txt</guid>
 (???)                <description>I'm working on a Nitrokey/SmartCard-HSM cluster article and therefore I needed three identical computers. The current version of Raspbian (2016-05-27) is based on Debian Jessie and comes with a version of OpenSC that is too old (0.14) to work with the Nitrokey/SmartCard-HSM. Since there is no Ubuntu 16.04 official image yet I decided to upgrade Raspbian to Debian Testing. Since I don't want to answer yes to any config file changes or service restarts I figured out how to do an unattended dist-upgrade.</description> 
 (???)                <pubDate>Wed, 27 Jul 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 27 Jul 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Storing arbitraty data in the Nitrokey HSM/SmartCard-HSM with Elementary Files (EF)</title> 
 (???)                <link>gopher://raymii.org/0/Storing_arbitraty_data_in_the_Nitrokey_HSM.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Storing_arbitraty_data_in_the_Nitrokey_HSM.txt</guid>
 (???)                <description>This is a guide which shows you how to write small elementary files to a nitrokey HSM. This can be usefull if you want to securely store data protected by a user pin. You can enter the wrong pin only three times, so offline brute forcing is out of the picture.</description> 
 (???)                <pubDate>Sun, 17 Jul 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 17 Jul 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Use the Nitrokey HSM or SmartCard-HSM with sc-hsm-embedded, mod_nss and Apache (read only module)</title> 
 (???)                <link>gopher://raymii.org/0/Use_the_Nitrokey_HSM_or_SmartCard-HSM_with_sc-hsm-embedded_mod_nss_and_Apache_read_only_module.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Use_the_Nitrokey_HSM_or_SmartCard-HSM_with_sc-hsm-embedded_mod_nss_and_Apache_read_only_module.txt</guid>
 (???)                <description>This is a guide on using the Nitrokey HSM with sc-hsm-embedded module instead of the PC/SC daemon and OpenSC, mod_nss and the Apache webserver. This is an extension on the earlier guide, with new benchmarks. The sc-hsm-embedded module is not using a global lock like OpenSC, therefore providing better performance. The sc-hsm-embedded module is also a read only module, suitable for embedded systems or secure systems. The HSM allows you to store the private key for a SSL certificate inside the HSM (instead of on the filesystem), so that it can never leave the device and thus never be stolen. The guide covers the installation of the sc-hsm-embedded module, configuration of and benchmarks from Apache with the HSM and different key sizes.</description> 
 (???)                <pubDate>Fri, 15 Jul 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 15 Jul 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Decrypt/Extract Nitrokey HSM/SmartCard-HSM RSA private keys</title> 
 (???)                <link>gopher://raymii.org/0/Decrypt_NitroKey_HSM_or_SmartCard-HSM_private_keys.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Decrypt_NitroKey_HSM_or_SmartCard-HSM_private_keys.txt</guid>
 (???)                <description>This is a guide which shows you how to extract private RSA key material from the Nitrokey HSM / SmartCard-HSM using the DKEK. This way you can get the private key out of the HSM in an unencrypted form. It does require access to the HSM device, all the DKEK share and their passwords. Do note that doing this defeats the entire purpose of a HSM, namely that you never have access to the keys. In the article I'll go over some explanation why this might be a feature you need and why it might be a case of security over convinience.</description> 
 (???)                <pubDate>Wed, 13 Jul 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 13 Jul 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Use the Nitrokey HSM or SmartCard-HSM with mod_nss and Apache</title> 
 (???)                <link>gopher://raymii.org/0/Nitrokey_HSM_in_Apache_with_mod_nss.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nitrokey_HSM_in_Apache_with_mod_nss.txt</guid>
 (???)                <description>This is a guide on using the Nitrokey HSM with mod_nss and the Apache webserver. The HSM allows you to store the private key for a SSL certificate inside the HSM (instead of on the filesystem), so that it can never leave the device and thus never be stolen. The guide covers the installation and configuration of mod_nss, coupling the HSM to NSS, generating the keys and configuring Apache, and last but not least we also do some benchmarks on Apache with the HSM and different key sizes.</description> 
 (???)                <pubDate>Tue, 21 Jun 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 21 Jun 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get started with the Nitrokey HSM or SmartCard-HSM</title> 
 (???)                <link>gopher://raymii.org/0/Get_Started_With_The_Nitrokey_HSM.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_Started_With_The_Nitrokey_HSM.txt</guid>
 (???)                <description>This is a guide to get started with the Nitrokey HSM (or SmartCard-HSM). It covers what a HSM is and what it can be used for. It also goes over software installation and initializing the device, including backups of the device and the keys. Finally we do some actual crypto operatons via pkcs11, OpenSSL, Apache and OpenSSH. We also cover usage in Thunderbird (S/MIME), Elementary Files (EF), a Web cluster with Apache and mod_nss and the decryption of the keys.</description> 
 (???)                <pubDate>Sun, 19 Jun 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 20 Jun 2021 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>HTTP Strict Transport Security for Apache, NGINX and Lighttpd</title> 
 (???)                <link>gopher://raymii.org/0/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.txt</link> 
 (???)                <guid>gopher://raymii.org/0/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.txt</guid>
 (???)                <description>HTTP Strict Transport Security (often abbreviated as HSTS) is a security feature that lets a web site tell browsers that it should only be communicated with using HTTPS, instead of using HTTP. This tutorial will show you how to set up HSTS in Apache2, NGINX and Lighttpd.</description> 
 (???)                <pubDate>Fri, 17 Jun 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 17 Jun 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Toggling in a simple program DEC PDP-8 and PiDP-8 using the switch register</title> 
 (???)                <link>gopher://raymii.org/0/Toggling_in_a_simple_program_on_the_DEC_PDP-8_and_PiDP-8_using_the_switch_register.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Toggling_in_a_simple_program_on_the_DEC_PDP-8_and_PiDP-8_using_the_switch_register.txt</guid>
 (???)                <description>In this guide I'll show you how to toggle in a simple program on the DEC PDP-8 or the PiDP-8, or in a front-panel simulator named BlinkenBone if you lack the hardware. I have a replica of the PDP-8/I (the PiDP-8) but lacked the actual knowledge on the front panel and switches to get started and do something cool. This guide has step by step instructons, with pictures, and basic explanation. After all, what is an expensive blinking light panel without fun stuff to toggle in?</description> 
 (???)                <pubDate>Wed, 08 Jun 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 08 Jun 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Add an apt-repository on Debian and Ubuntu</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Add_an_apt-repository_on_Debian_and_Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Add_an_apt-repository_on_Debian_and_Ubuntu.txt</guid>
 (???)                <description>This is a guide that shows you how to add an apt repository to Debian and Ubuntu using Ansible. It includes both the old way, when the apt modules only worked on Ubuntu, and the new way, now that the apt-modules also support Debian, plus some other tricks.</description> 
 (???)                <pubDate>Sun, 15 May 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 14 Dec 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Migrating personal webapps and services</title> 
 (???)                <link>gopher://raymii.org/0/Migrating_personal_services_and_webapps.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Migrating_personal_services_and_webapps.txt</guid>
 (???)                <description>Recently I've migrated some of my personal servers and services to new machines and newer operating system versions. I prefer to migrate instead of upgrading the OS for a number of reasons. I'll also talk about the migration process and some stuff to remember when migrating web applications and services.</description> 
 (???)                <pubDate>Thu, 05 May 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 05 May 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Build a FreeBSD 10.3-release Openstack Image with bsd-cloudinit</title> 
 (???)                <link>gopher://raymii.org/0/FreeBSD_10.3-release_Openstack_Image.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FreeBSD_10.3-release_Openstack_Image.txt</guid>
 (???)                <description>We are going to prepare a FreeBSD image for Openstack deployment. We do this by creating a FreeBSD 10.3-RELEASE instance, installing it and converting it using bsd-cloudinit. We'll use the CloudVPS public Openstack cloud for this. We'll be using the Openstack command line tools, like nova, cinder and glance.</description> 
 (???)                <pubDate>Wed, 27 Apr 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 27 Apr 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPv6 in a Docker container on a non-ipv6 network</title> 
 (???)                <link>gopher://raymii.org/0/IPv6_in_a_Docker_container_on_a_non-ipv6_network.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPv6_in_a_Docker_container_on_a_non-ipv6_network.txt</guid>
 (???)                <description>At work and at home my ISP's have native IPv6. I recently was at a clients location where they had no IPv6 at all and had to set up and demonstrate an application in a Docker container with IPv6 functionality. They said the had IPv6 but on location it appeared that IPv6 wasn't working. Since IPv6 was required for the demo the container needed a workaround. This article describes the workaround I used to add IPv6 to a Docker container on a non IPv6 network.</description> 
 (???)                <pubDate>Tue, 12 Apr 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 12 Apr 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Active Directory and Exchange Command Line Powershell</title> 
 (???)                <link>gopher://raymii.org/0/Active_Directory_Exchange_Powershell_Snippets.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Active_Directory_Exchange_Powershell_Snippets.txt</guid>
 (???)                <description>This is a collection of Powershell snippets to install Active Directory, create a new Active Directory Domain, join an existing Active Directory domain and to install Microsoft Exchange 2013. The snippets were tested on Windows Server 2012 R2.</description> 
 (???)                <pubDate>Sat, 27 Feb 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 27 Feb 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Let's Encrypt with DirectAdmin, now built in!</title> 
 (???)                <link>gopher://raymii.org/0/Lets_Encrypt_Directadmin_Now_Built_In.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Lets_Encrypt_Directadmin_Now_Built_In.txt</guid>
 (???)                <description>Let's Encrypt is a new certificate authority, recognized by all major browsers. They make it a breeze to set up TLS certificates for your web server. And for free! Let's Encrypt is supported by major players like Mozilla, Akamai, Cisco, the EFF, the Internet Security Research Group and others. Let's Encrypt provides free, automatic and secure certificates so that every website can be secured with an SSL certificate. This article shows you how to setup Let's Encrypt with the DirectAdmin web control panel. DirectAdmin now supports Lets Encrypt natively since 1.50, so no more ssh fiddling, just via the control panel, for all the users on the server.</description> 
 (???)                <pubDate>Wed, 24 Feb 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 24 Feb 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible playbook for GoAccess Log Analyzer</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_role_for_GoAccess_Log_Analyzer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_role_for_GoAccess_Log_Analyzer.txt</guid>
 (???)                <description>This is a small Ansible playbook to deploy the GoAccess log analyzer on Debian based systems. Next to Piwik, I use goaccess myself to get better insights in who and what visits my servers. This role is ment to be included in your webserver playbooks.</description> 
 (???)                <pubDate>Sun, 17 Jan 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 17 Jan 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Deborphan cleanup until no more orphaned packages left</title> 
 (???)                <link>gopher://raymii.org/0/Deborphan_cleanup_until_no_more_orphaned_packages_left.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Deborphan_cleanup_until_no_more_orphaned_packages_left.txt</guid>
 (???)                <description>Deborphan removes packages it thinks your system doesn't need anymore. It is a great tool for package cleanup and maintenance. Sometimes, after cleaning up the packages, it will find new packages that are orphaned (because you just cleaned up). This is a small script that cleans up with deborphan until there is nothing more to cleanup.</description> 
 (???)                <pubDate>Mon, 11 Jan 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 11 Jan 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Microsoft Office 2013 and 2010 on Linux</title> 
 (???)                <link>gopher://raymii.org/0/Office_2013_and_2010_on_Linux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Office_2013_and_2010_on_Linux.txt</guid>
 (???)                <description>This guide shows you how to run Microsoft Office 2013 and 2010 on Linux using CrossOver. It guides you through the installation and gives a review on what parts of the Office suite work with Linux.</description> 
 (???)                <pubDate>Sat, 02 Jan 2016 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 02 Jan 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Recursively find all [installed] package dependencies</title> 
 (???)                <link>gopher://raymii.org/0/Recursively_find_all_installed_package_dependencies.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Recursively_find_all_installed_package_dependencies.txt</guid>
 (???)                <description>This small script shows you all packages [installed] that are a dependency from a package, and the dependencies of those packages. I installed the build-essential package, but apt-get remove-ing that package doens't remove the development tools. So I was wondering what packages were installed, including those dependencies, to remove the ones I didn't want. This small script shows you all packages that are dependencies of a package, and repeats that for those packages.</description> 
 (???)                <pubDate>Thu, 31 Dec 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 31 Dec 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC VPN on Ubuntu 15.04 with StrongSwan</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_vpn_with_Ubuntu_15.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_vpn_with_Ubuntu_15.04.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC VPN server on Ubuntu 15.04 using StrongSwan as the IPsec server and for authentication. It has a detailed explanation with every step. We choose the IPSEC protocol stack because of vulnerabilities found in pptpd VPNs and because it is supported on all recent operating systems by default. More than ever, your freedom and privacy when online is under threat. Governments and ISPs want to control what you can and can't see while keeping a record of everything you do, and even the shady-looking guy lurking around your coffee shop or the airport gate can grab your bank details easier than you may think. A self hosted VPN lets you surf the web the way it was intended: anonymously and without oversight.</description> 
 (???)                <pubDate>Sun, 20 Dec 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 20 Dec 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC VPN on Ubuntu 15.10 with StrongSwan</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_vpn_with_Ubuntu_15.10.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_vpn_with_Ubuntu_15.10.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC VPN server on Ubuntu 15.04 using StrongSwan as the IPsec server and for authentication. It has a detailed explanation with every step. We choose the IPSEC protocol stack because of vulnerabilities found in pptpd VPNs and because it is supported on all recent operating systems by default. More than ever, your freedom and privacy when online is under threat. Governments and ISPs want to control what you can and can't see while keeping a record of everything you do, and even the shady-looking guy lurking around your coffee shop or the airport gate can grab your bank details easier than you may think. A self hosted VPN lets you surf the web the way it was intended: anonymously and without oversight.</description> 
 (???)                <pubDate>Sun, 20 Dec 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 20 Dec 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Forward or save outgoing email with Exim</title> 
 (???)                <link>gopher://raymii.org/0/Forward_or_save_all_outgoing_email_with_exim.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Forward_or_save_all_outgoing_email_with_exim.txt</guid>
 (???)                <description>I have a specific server where requirements state that all outgoing email should be saved for archival and auditing purposes. The server uses the Exim mail transfer agent, which makes this easy to configure. The outgoing email is also forwarded to an off-site mailbox, both for backup and easy consulting. This captures all outgoing email, sent by PHP scripts or cronjobs, or user accounts that send via exim. This tutorial also shows how to forward or save all outgoing email for a specific domain.</description> 
 (???)                <pubDate>Wed, 16 Dec 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 16 Dec 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Generate hashes of files with rhash for archival storage</title> 
 (???)                <link>gopher://raymii.org/0/Generate_hashes_of_files_with_rhash_for_archival_storage.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Generate_hashes_of_files_with_rhash_for_archival_storage.txt</guid>
 (???)                <description>Recently I had to archive a large amount of files to archival storage. To save space and reduce the amount of files I decided to create archives with tar. The files will be stored to tapes and DVD's, and will be restored in full, so random access times are not an issue, therefore the tar.gz choice. I do want to make sure that when the files need to be restored they still are correct. I first dabbled with some long shell commands to create checksums and verify them, but then I found the `rhash` tool in the repositories. It allows you to create checksums of files and folders, recursively, with all sorts of checksums, like CRC, MD5, SHA1 and many more. It also makes bulk validation very simple. This small article shows you how to create an archive file with the checksums included and shows you how to validate these checksums later on.</description> 
 (???)                <pubDate>Fri, 11 Dec 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 11 Dec 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Linux Containers</title> 
 (???)                <link>gopher://raymii.org/0/Linux_Containers.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Linux_Containers.txt</guid>
 (???)                <description>This article goes over Linux Containers. It touches both bare linux cgroups and namespaces and goes over LXC (linux conrainers).</description> 
 (???)                <pubDate>Thu, 12 Nov 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 12 Nov 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Sign and verify text/files to public keys via the OpenSSL Command Line</title> 
 (???)                <link>gopher://raymii.org/0/Sign_and_verify_text_files_to_public_keys_via_the_OpenSSL_Command_Line.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Sign_and_verify_text_files_to_public_keys_via_the_OpenSSL_Command_Line.txt</guid>
 (???)                <description>This small guide will shows you how to use the OpenSSL Command Line to sign a file, and how to verify the signing of this file. You can do this to prove ownership of a key, or to prove that a file hasn't been modified since you signed it. This works both with small text files as well as huge photo's, documents or PDF files.</description> 
 (???)                <pubDate>Mon, 09 Nov 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 09 Nov 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Make OpenELEC/Kodi work with the Sitecom CN-524/ Cambridge Silicon Radio (CSR) 8510 A10 Bluetooth USB adapter on the Raspberry Pi.</title> 
 (???)                <link>gopher://raymii.org/0/Make_Openelec_Kodi_work_with_the_Sitecom_CN-524_Cambridge_Silicon_Radio_CSR_8510_A10_Bluetooth_USB_adapter_on_the_Raspberry_Pi.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Make_Openelec_Kodi_work_with_the_Sitecom_CN-524_Cambridge_Silicon_Radio_CSR_8510_A10_Bluetooth_USB_adapter_on_the_Raspberry_Pi.txt</guid>
 (???)                <description>Recently I set up a Kodi (XMBC) media center on a Raspberry Pi.  The setup is mounted on a flatscreen TV and uses a small Wifi dongle for network access and a small Bluetooth dongle for a Rapoo E6700 wireless bluetooth keyboard/touchpad. This is a nice bluetooth keyboard/mouse combo for a media center, it charges via micro USB. That saves a lot of battery hassle. The bluetooth adapter is a Sitecom CN-524, which was the only one my local electronic store had available. It however does not work with linux/Kodi by default. This is because the device boots in a wrong mode. This guide shows you how this can be fixed and the necessary software changes for OpenELEC.</description> 
 (???)                <pubDate>Thu, 01 Oct 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 01 Oct 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Install Ubuntu Linux on the LG Chromebase</title> 
 (???)                <link>gopher://raymii.org/0/LG_Chromebase_Linux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/LG_Chromebase_Linux.txt</guid>
 (???)                <description>I recently acquired the LG Chromebase 22CV241-W. It is an All in One type machine with Chrome OS. The hardware, excluding the screen and lack of battery, is largely the same as the Acer C720. Of course I removed Chrome OS and installed a real Linux on it, of which you'll find instructions below. In my case it is Ubuntu Mate. Arch Linux also works fine, but this was for someone else, so a more beginner friendly distro seemed to be a better choise. This article will cover the removal of Chrome OS and the installation of Ubuntu Mate on the LG Chromebase.</description> 
 (???)                <pubDate>Mon, 03 Aug 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 03 Aug 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Running TSS/8 on the DEC PiDP-8/i and SIMH</title> 
 (???)                <link>gopher://raymii.org/0/Running_TSS_8_on_the_DEC_PiDP-8_i_and_SIMH.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Running_TSS_8_on_the_DEC_PiDP-8_i_and_SIMH.txt</guid>
 (???)                <description>In this guide I'll show you how run the TSS/8 operating system on the PiDP replica by Oscar Vermeulen, and on SIMH on any other computer. I'll also cover a few basic commands like the editor, user management and system information. TSS-8 was a little time-sharing operating system  released in 1968 and requires a minimum of 12K words of memory and a swapping device; on a 24K word machine, it supports up to 17 users. Each user gets a virtual 4K PDP-8; many of the utilities users ran on these virtual machines were only slightly modified versions of utilities from the Disk Monitor System or paper-tape environments. Internally, TSS-8 consists of RMON, the resident monitor, DMON, the disk monitor (file system), and KMON, the keyboard monitor (command shell). BASIC was well supported, while restricted (4K) versions of FORTRAN D and Algol were available.</description> 
 (???)                <pubDate>Sun, 26 Jul 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 26 Jul 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Running Adventure on the DEC PDP-8 with SIMH</title> 
 (???)                <link>gopher://raymii.org/0/Running_ADVENT-on-the-PDP-8-with-SIMH.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Running_ADVENT-on-the-PDP-8-with-SIMH.txt</guid>
 (???)                <description>In this guide I'll show you how run the classic Colossal Cave Adventure game on a PDP-8, emulated by the SIMH emulator. The PDP-8 was an 12 bit minicomputer made in 1964 by DEC, the Digital Equipment Corporation. We will install and set up SIMH, the emulator with a RK05 diskimage running OS/8. We will use FORTRAN on OS/8 to load ADVENTURE, then we use our brain to play the game. As a bonus, I also show you how to edit files using EDIT, and show you a bit of the OS/8 system.</description> 
 (???)                <pubDate>Thu, 23 Jul 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 23 Jul 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Find all services using libssl to restart after an OpenSSL update</title> 
 (???)                <link>gopher://raymii.org/0/Find_all_services_using_libssl_to_restart_after_an_OpenSSL_update.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Find_all_services_using_libssl_to_restart_after_an_OpenSSL_update.txt</guid>
 (???)                <description>When you update OpenSSL, the software that currently has the ssl libraries loaded in memory do not automatically load the updated libraries. A full system reboot resolves that problem, but sometimes that is not possible. This command shows you all the software that has loaded the libraries, allowing you to restart only those services. If you don't restart or reload after an update, the software might still be vulnerable to issues that the update fixed.</description> 
 (???)                <pubDate>Tue, 14 Jul 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 14 Jul 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Strong SSL Security on nginx</title> 
 (???)                <link>gopher://raymii.org/0/Strong_SSL_Security_On_nginx.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Strong_SSL_Security_On_nginx.txt</guid>
 (???)                <description>This tutorial shows you how to set up strong SSL security on the nginx webserver. We do this by updating OpenSSL to the latest version to mitigate attacks like Heartbleed, disabling SSL Compression and EXPORT ciphers to mitigate attacks like FREAK, CRIME and LogJAM, disabling SSLv3 and below because of vulnerabilities in the protocol and we will set up a strong ciphersuite that enables Forward Secrecy when possible. We also enable HSTS and HPKP. This way we have a strong and future proof ssl configuration and we get an A+ on the Qually Labs SSL Test.</description> 
 (???)                <pubDate>Sun, 14 Jun 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 27 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Strong SSL Security on Apache2</title> 
 (???)                <link>gopher://raymii.org/0/Strong_SSL_Security_On_Apache2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Strong_SSL_Security_On_Apache2.txt</guid>
 (???)                <description>This tutorial shows you how to set up strong SSL security on the Apache2 webserver. We do this by updating OpenSSL to the latest version to mitigate attacks like Heartbleed, disabling SSL Compression and EXPORT ciphers to mitigate attacks like FREAK, CRIME and LogJAM, disabling SSLv3 and below because of vulnerabilities in the protocol and we will set up a strong ciphersuite that enables Forward Secrecy when possible. We also enable HSTS and HPKP. This way we have a strong and future proof ssl configuration and we get an A+ on the Qually Labs SSL Test.</description> 
 (???)                <pubDate>Sun, 14 Jun 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 27 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Strong SSL Security on lighttpd</title> 
 (???)                <link>gopher://raymii.org/0/Strong_SSL_Security_On_lighttpd.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Strong_SSL_Security_On_lighttpd.txt</guid>
 (???)                <description>This tutorial shows you how to set up strong SSL security on the lighttpd webserver. We do this by updating OpenSSL to the latest version to mitigate attacks like Heartbleed, disabling SSL Compression and EXPORT ciphers to mitigate attacks like FREAK, CRIME and LogJAM, disabling SSLv3 and below because of vulnerabilities in the protocol and we will set up a strong ciphersuite that enables Forward Secrecy when possible. We also enable HSTS and HPKP. This way we have a strong and future proof ssl configuration and we get an A+ on the Qually Labs SSL Test.</description> 
 (???)                <pubDate>Sun, 14 Jun 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 27 Apr 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Openstack - (Manually) migrating (KVM) Nova compute virtual machines</title> 
 (???)                <link>gopher://raymii.org/0/Openstack_-_(Manually)_migrating_(KVM)_Nova_Compute_Virtual_Machines.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Openstack_-_(Manually)_migrating_(KVM)_Nova_Compute_Virtual_Machines.txt</guid>
 (???)                <description>This guide shows you how to migrate KVM virtual machines with the  Openstack Nova compute service, either manually or with the Openstack tooling. Openstack provides a few different ways to migrate virtual machines from one compute node to another. Each option has different requirements and restrictions, for example, you can't live-migrate without shared storage. You can't live-migrate if you have a configdrive enabled. You can't select the target host if you use the nova migrate (non-live) command etc. This article describes the most common migration scenario's including live and manual migration using native linux tools.</description> 
 (???)                <pubDate>Sat, 13 Jun 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 13 Jun 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>The awesomely epic guide to KDE</title> 
 (???)                <link>gopher://raymii.org/0/The_awesomely_epic_guide_to_KDE.txt</link> 
 (???)                <guid>gopher://raymii.org/0/The_awesomely_epic_guide_to_KDE.txt</guid>
 (???)                <description>This article shows gives an overview of the major KDE features like font management, visual effects, file management, eye candy, the panels, the task switcer and more great KDE stuff.</description> 
 (???)                <pubDate>Mon, 04 May 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 04 May 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Filing Effective Bug Reports</title> 
 (???)                <link>gopher://raymii.org/0/Filing_Effective_Bug_Reports.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Filing_Effective_Bug_Reports.txt</guid>
 (???)                <description>This article shows you how to report bugs properly and help open source projects by doing so. It explains the things that help create a good bug report, one on which the developers can actually work on. It also explains the process of bug reporting, what happens after you've did the initial report?</description> 
 (???)                <pubDate>Sun, 03 May 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 03 May 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Raspberry Pi Arcade Machine</title> 
 (???)                <link>gopher://raymii.org/0/Raspberry_Pi_Arcade_Machine.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Raspberry_Pi_Arcade_Machine.txt</guid>
 (???)                <description>This article shows you how to build your own full size arcade machine using a Raspberry Pi. It involves a real, full size arcade cabinet, a converter device called a J-Pac and the MAME emulator software.</description> 
 (???)                <pubDate>Sun, 03 May 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 03 May 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>systemd: Don't fear change</title> 
 (???)                <link>gopher://raymii.org/0/systemd_dont_fear_change.txt</link> 
 (???)                <guid>gopher://raymii.org/0/systemd_dont_fear_change.txt</guid>
 (???)                <description>This article talks about systemd in Red Hat Enterprise Linux / CentOS 7. It gives some usage examples and talks about the differences between systemd, upstart and sysvinit.</description> 
 (???)                <pubDate>Wed, 25 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 25 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Keep messages secure with GPG</title> 
 (???)                <link>gopher://raymii.org/0/Keeping_messages_secure_with_GPG.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Keeping_messages_secure_with_GPG.txt</guid>
 (???)                <description>This article shows you how to get started with GPG and Mailvelope. It discusses public/private key crypto and shows you how to use the Mailvelope software to encrypt and decrypt GPG messages on any webmail provider.</description> 
 (???)                <pubDate>Sun, 22 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 22 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL: Manually verify a certificate against a CRL</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_manually_verify_a_certificate_against_a_CRL.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_manually_verify_a_certificate_against_a_CRL.txt</guid>
 (???)                <description>This article shows you how to manually verfify a certificate against a CRL. CRL stands for Certificate Revocation List and is one way to validate a certificate status. It is an alternative to the OCSP, Online Certificate Status Protocol.</description> 
 (???)                <pubDate>Sun, 22 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 22 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>How I got a valid SSL certificate for my ISP's main domain, xs4all.nl</title> 
 (???)                <link>gopher://raymii.org/0/How_I_got_a_valid_SSL_certificate_for_my_ISPs_main_website.txt</link> 
 (???)                <guid>gopher://raymii.org/0/How_I_got_a_valid_SSL_certificate_for_my_ISPs_main_website.txt</guid>
 (???)                <description>I got a valid SSL certificate for a domain that is not mine by creating an email alias. In this article I'll explain what happened, why that was possible and how we all can prevent this.</description> 
 (???)                <pubDate>Sat, 21 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 21 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Olimex OlinuXino A20 LIME2 mainline 4.0.0 kernel, u-boot and debian rootfs image building tutorial</title> 
 (???)                <link>gopher://raymii.org/0/Olimex_OlinuXino_A20_Lime2_Kernel_3.19_uBoot_Debian_7_image_building.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Olimex_OlinuXino_A20_Lime2_Kernel_3.19_uBoot_Debian_7_image_building.txt</guid>
 (???)                <description>The Olimex OlinuXino A20 LIME2 is an amazing, powerfull and cheap open source ARM development board. It costs EUR 45, and has 160 GPIO pins. This is a guide to build a linux image with Debian and the mainline 4.0.0 kernel for the Olimex A20-Lime2 board, from scratch. By default it comes with an 3.4 kernel with binary blobs and patches from Allwinner. Recently the mainline kernel has gained support for these boards, you can now run and use the mainline kernel without these awfull non-free binary blobs.</description> 
 (???)                <pubDate>Sat, 21 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 21 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Automating Openstack with cloud init run a script on VM's first boot</title> 
 (???)                <link>gopher://raymii.org/0/Automating_Openstack_with_Cloud_init_run_a_script_on_VMs_first_boot.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Automating_Openstack_with_Cloud_init_run_a_script_on_VMs_first_boot.txt</guid>
 (???)                <description>This tutorial will show you how to create a VM in Openstack and execute a script at the first boot using cloud-init's user-data feature. This way you can eliminate some more manual labor and keep a small base image, instead of requiring all kinds of specific images for specific tasks. This tutorial will also give you a few example scripts to use with cloud-init and to create Openstack virtual machines from the command line. </description> 
 (???)                <pubDate>Wed, 11 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 11 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ada Lovelace and The Analytical Engine</title> 
 (???)                <link>gopher://raymii.org/0/Ada_Lovelace_and_The_Analytical_Engine.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ada_Lovelace_and_The_Analytical_Engine.txt</guid>
 (???)                <description>This article discusses an important piece of computing history, the Analytical Engine. It was designed by Charles Babbage. The history of Ada Lovelace is also covered, she also worked on and programmed the Analytical Engine. This article explains how the Analytical Engine works and gives us a few example programs. It also covers the calculation of the Bernoulli numbers with the Analytical Engine.</description> 
 (???)                <pubDate>Mon, 09 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 09 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Build a Flexible and Powerful System with Arch Linux</title> 
 (???)                <link>gopher://raymii.org/0/Build_a_Flexible_and_Powerful_System_with_Arch_Linux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Build_a_Flexible_and_Powerful_System_with_Arch_Linux.txt</guid>
 (???)                <description>This article covers the basic installation and configuration of Arch Linux, the distro that adheres to the Keep It Simple, Stupid principle. Arch Linux is a rolling release, that means that you always have the latest and greatest software. With Arch, you're on your own. In a world where where technology is taking your personal responsibility and giving it to the cloud, or to an internet search filter or the device manufacturers, getting your hands dirty with an operating system can be a revelation. Not only will you learn a great deal about how Linux works and what holds the whole thing together, you'll get a system you understand from the inside-out, and one that can be instantly upgraded to all the latest packages. You may also learn something about yourself in the process. And despite its reputation, it's not that difficult.</description> 
 (???)                <pubDate>Mon, 09 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 09 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Euclid's algorithm: recursion and python</title> 
 (???)                <link>gopher://raymii.org/0/Euclids_algorithm_recursion_and_python.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Euclids_algorithm_recursion_and_python.txt</guid>
 (???)                <description>This article talks about Euclids Algorithm. The problem that Euclid's algorithm solves is easy enough to understand: what is the largest common divisor of two integers? Take the numbers 100 and 80, for example: what's the largest number that divides into both? It walks us through Python example code explaining the function.</description> 
 (???)                <pubDate>Sun, 08 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 08 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Example</title> 
 (???)                <link>gopher://raymii.org/0/Python_build_dynamic_web_pages.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Python_build_dynamic_web_pages.txt</guid>
 (???)                <description>Example</description> 
 (???)                <pubDate>Sun, 08 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 08 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Solve word puzzles with bash</title> 
 (???)                <link>gopher://raymii.org/0/Solve_word_puzzles_with_bash.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Solve_word_puzzles_with_bash.txt</guid>
 (???)                <description>This article shows you how to solve word puzzles with Bash. It covers the grep tool including regular expressions to solve different kinds of word puzzles.</description> 
 (???)                <pubDate>Sun, 08 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 08 Mar 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL command line Root and Intermediate CA including OCSP, CRL and revocation</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_command_line_Root_and_Intermediate_CA_including_OCSP_CRL_and_revocation.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_command_line_Root_and_Intermediate_CA_including_OCSP_CRL_and_revocation.txt</guid>
 (???)                <description>These are quick and dirty notes on generating a certificate authority (CA), intermediate certificate authorities and end certificates using the OpenSSL command line tools. It includes OCSP, CRL and CA Issuer information and specific issue and expiry dates. We'll set up our own root CA. We'll use the root CA to generate an example intermediate CA. We'll use the intermediate CA to sign end user certificates.</description> 
 (???)                <pubDate>Tue, 03 Mar 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 17 Dec 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Openstack Glance Image Download, download Openstack images</title> 
 (???)                <link>gopher://raymii.org/0/Openstack_Glance_Image_Download.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Openstack_Glance_Image_Download.txt</guid>
 (???)                <description>This guide shows you how download Openstack Images to your local machine using the command line Glance client. You can use this, for example, to download a copy of an image created from a VM, or to download the images your Openstack provider provides and adapt those.</description> 
 (???)                <pubDate>Wed, 25 Feb 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 25 Feb 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Remove Installatron from a (Directadmin) server</title> 
 (???)                <link>gopher://raymii.org/0/Remove_Installatron_from_a_(Directadmin)_server.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Remove_Installatron_from_a_(Directadmin)_server.txt</guid>
 (???)                <description>This is a short guide which shows you how to remove Installatron from a server.</description> 
 (???)                <pubDate>Sun, 08 Feb 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 08 Feb 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Installing Virtual Machines with virt-install, plus copy pastable distro install one-liners</title> 
 (???)                <link>gopher://raymii.org/0/virt-install_introduction_and_copy_paste_distro_install_commands.txt</link> 
 (???)                <guid>gopher://raymii.org/0/virt-install_introduction_and_copy_paste_distro_install_commands.txt</guid>
 (???)                <description>virt-install is a command line tool for creating new KVM , Xen or Linux container guests using the libvirt hypervisor management library. It allows you to create a VM and start an installation from the command line. This article has a few copy pastable getting started examples for different distro's.</description> 
 (???)                <pubDate>Sun, 08 Feb 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 08 Feb 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Raspberry Pi FM radio transmitter with Buttons</title> 
 (???)                <link>gopher://raymii.org/0/Raspberry_Pi_FM_Radio_With_Buttons.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Raspberry_Pi_FM_Radio_With_Buttons.txt</guid>
 (???)                <description>The PiFM project allows you to use a Raspberry Pi to send out a WAV file on the FM band. This is awesome because every normal radio then can receive your music/podcast without expensive (sonos) equipment. I've used a lasercutter to craft a new top plate for my Pi which has room for three buttons. These are hooked up to a python script which allows me to start and stop the transmission, and skip or go back songs. It also allows me to shut down the Pi instead of just pulling the power cable.</description> 
 (???)                <pubDate>Wed, 04 Feb 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 04 Feb 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Olimex OlinuXino A20 LIME2 Minimal Debian 7 Image</title> 
 (???)                <link>gopher://raymii.org/0/Olimex_A20-OLinuXino-LIME2_minimal_debian_7_image.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Olimex_A20-OLinuXino-LIME2_minimal_debian_7_image.txt</guid>
 (???)                <description>The Olimex OlinuXino A20 LIME2 is an amazing, powerfull and cheap open source ARM development board. It costs EUR 45, and has 160 GPIO pins. The default Debian image from OlimeX is quite huge and bloated, over 2,5 GB, with X and all. I do not want a huge image, so I stripped it down to a 200 MB image with only dhcp and ssh and a few basic tools. It uses about 15 MB of RAM. This image allows you to start with almost nothing and build up only what you need.</description> 
 (???)                <pubDate>Wed, 28 Jan 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 28 Jan 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVZ/Proxmox - pre-backup all container dump script</title> 
 (???)                <link>gopher://raymii.org/0/OpenVZ_Proxmox_-_pre-backup_all_container_dump_script.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVZ_Proxmox_-_pre-backup_all_container_dump_script.txt</guid>
 (???)                <description>This simple script creates a vzdump of all the OpenVZ containers on a machine. It can be used before an actual backup, in my case the actual backup excludes the container path /var/lib/vz/private. This because a dump is easier to backup because it has much less files in it.</description> 
 (???)                <pubDate>Sun, 18 Jan 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 18 Jan 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Filtering IMAP mail with imapfilter</title> 
 (???)                <link>gopher://raymii.org/0/Filtering_IMAP_mail_with_imapfilter.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Filtering_IMAP_mail_with_imapfilter.txt</guid>
 (???)                <description>I have several email accounts at different providers. Most of them don't offer filtering capabilites like Sieve, or only their own non exportable rule system (Google Apps). My mail client of choice, Thunderbird, has filtering capabilities but my phone has not and I don't want to leave my machine running Thunderbird all the time since it gets quite slow with huge mailboxes. Imapfilter is a mail filtering utility written in Lua which connects to one or more IMAP accounts and filters on the server using IMAP queries. It is a lightweight command line utility, the configuration can be versioned and is simple text and it is very fast.</description> 
 (???)                <pubDate>Sat, 17 Jan 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 17 Jan 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Let's Encrypt with DirectAdmin or other Web Control Panels</title> 
 (???)                <link>gopher://raymii.org/0/Lets_Encrypt_Directadmin.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Lets_Encrypt_Directadmin.txt</guid>
 (???)                <description>Let's Encrypt is a new certificate authority, recognized by all major browsers. They make it a breeze to set up TLS certificates for your web server. And for free! Let's Encrypt is supported by major players like Mozilla, Akamai, Cisco, the EFF, the Internet Security Research Group and others. Let's Encrypt provides free, automatic and secure certificates so that every website can be secured with an SSL certificate. This article shows you how to setup Let's Encrypt with the DirectAdmin web control panel. The guide is generic, so it works for other controlpanels as well. For now it works with the beta, and required some linux knowledge and root access to the hosting server.</description> 
 (???)                <pubDate>Sun, 11 Jan 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 24 Feb 2016 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Broken Corrupted Raspberry Pi SD Card</title> 
 (???)                <link>gopher://raymii.org/0/Broken_Corrupted_Raspberry_Pi_SD_Card.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Broken_Corrupted_Raspberry_Pi_SD_Card.txt</guid>
 (???)                <description>One of my Raspberry Pi's would not boot up after a reboot. The SD card was corrupted, sadly beyond repair. This article walks you through the steps I took to try to fix the SD card, including fsck, badblocks and other filesystem utilities. It also has tips to reduce the writing on the Raspberry Pi, this to save SD cards from some amount of wear and thus possible corruption.</description> 
 (???)                <pubDate>Fri, 09 Jan 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 13 Nov 2019 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Shared Git repository over ssh for multiple users</title> 
 (???)                <link>gopher://raymii.org/0/Shared_Git_repository_via_ssh_for_multiple_users.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Shared_Git_repository_via_ssh_for_multiple_users.txt</guid>
 (???)                <description>This tutorial will show you how to set up a shared git repo with multiple accounts over ssh. Only ssh, not gitolite or any other software. This is usefull if you have a small team of people that don't often need access to the repo and don't want something like github or bitbucket. With this you can use existing infrastructure.</description> 
 (???)                <pubDate>Mon, 05 Jan 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 05 Jan 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get all IP ranges from an AS number</title> 
 (???)                <link>gopher://raymii.org/0/Get_all_IP_ranges_from_an_AS_number.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_all_IP_ranges_from_an_AS_number.txt</guid>
 (???)                <description>One of my clients wanted to block a few social networking websites. Since they have no IPv6 (yet) I figured the simplest way was to block access to the entire IP range. This won't work for all the CDN networks they use, but it does get you started. To find all the ranges beloning to an AS number you can query the whois.radb.net server with the AS number.</description> 
 (???)                <pubDate>Sun, 04 Jan 2015 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 04 Jan 2015 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>pfSense allow web interface access on WAN from specific IP</title> 
 (???)                <link>gopher://raymii.org/0/pfSense_allow_web_interface_access_on_WAN_from_specific_IP.txt</link> 
 (???)                <guid>gopher://raymii.org/0/pfSense_allow_web_interface_access_on_WAN_from_specific_IP.txt</guid>
 (???)                <description>pfSense is a fast and simple FreeBSD based firewall appliance with a nice web managent interface and the power of the pf firewall underneath. Normally the web interface is only accessible from the management LAN (or LAN by default) interface. If you for whatever reason locked yourself out or need access from a different IP via the WAN interface you can use the easyrule command line to temporarly add a rule that allows your remote IP in. This simple snippet shows you how.</description> 
 (???)                <pubDate>Wed, 31 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 31 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC VPN on Centos 7 with StrongSwan</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_vpn_with_CentOS_7.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_vpn_with_CentOS_7.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC VPN server with CentOS 7 using StrongSwan as the IPsec server and for authentication. It has a detailed explanation with every step. We choose the IPSECP protocol stack because of recent vulnerabilities found in pptpd VPNs and because it is supported on all recent operating systems by default. More than ever, your freedom and privacy when online is under threat. Governments and ISPs want to control what you can and can't see while keeping a record of everything you do, and even the shady-looking guy lurking around your coffee shop or the airport gate can grab your bank details easier than you may think. A self hosted VPN lets you surf the web the way it was intended: anonymously and without oversight.</description> 
 (???)                <pubDate>Tue, 30 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 30 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>HTTP Public Key Pinning Extension HPKP for Apache, NGINX and Lighttpd</title> 
 (???)                <link>gopher://raymii.org/0/HTTP_Public_Key_Pinning_Extension_HPKP.txt</link> 
 (???)                <guid>gopher://raymii.org/0/HTTP_Public_Key_Pinning_Extension_HPKP.txt</guid>
 (???)                <description>Public Key Pinning means that a certificate chain must include a whitelisted public key. It ensures only whitelisted Certificate Authorities (CA) can sign certificates for `*.example.com`, and not any CA in your browser store. This article has background theory and configuration examples for Apache, Lighttpd and NGINX.</description> 
 (???)                <pubDate>Tue, 30 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 30 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Arch Linux AUR PKGBUILD generate new checksums</title> 
 (???)                <link>gopher://raymii.org/0/Arch_Linux_AUR_PKGBUILD_generate_new_checksums.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Arch_Linux_AUR_PKGBUILD_generate_new_checksums.txt</guid>
 (???)                <description>The AUR is a nice feature from Arch Linux, it allows anyone to create and upload a simple package build script, PKGBUILD, for a piece of software which is not in the repositories. Sometimes however, the PKGBUILD is outdated. You then need to manually fix it, by changing the download link or version. With a new version you get new checksums, and the makepkg command has a neat feature which generates the checksums for you.</description> 
 (???)                <pubDate>Mon, 29 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 29 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Only if a file exists or does not exist</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Only_if_a_file_exists_or_does_not_exist.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Only_if_a_file_exists_or_does_not_exist.txt</guid>
 (???)                <description>This Ansible playbook example helps you execute actions only if a file exists or does not exist. If you for example have a command you need to run to generate a certificate (or Diffie Hellman parameters for nginx) you only want to do that once. The command itself is not convergent so it will run with every ansible run. However, the command creates a file and Ansible is able to check if that file exists. If the file exists, it will not execute the action. The same goes for checking if a file does exist and only executing the action if it exists. (The action you want to do will remove that file).</description> 
 (???)                <pubDate>Sat, 27 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 27 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Fix inconsistent Openstack volumes and instances from Cinder and Nova via the database</title> 
 (???)                <link>gopher://raymii.org/0/Fix_inconsistent_Openstack_volumes_and_instances_from_Cinder_and_Nova_via_the_database.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Fix_inconsistent_Openstack_volumes_and_instances_from_Cinder_and_Nova_via_the_database.txt</guid>
 (???)                <description>When running Openstack, sometimes the state of a volume  or an instance can be inconsistent on the cluster. Nova might find a volume attached while Cinder says the volume is detached or otherwise. Sometimes a volume deletion hangs, or a detach does not work. If you've found and fixed the underlying issue (lvm, iscsi, ceph, nfs etc...) you need to bring the database up to date with the new consistent state. Most of the time a reset-state works, sometimes you need to manually edit the database to correct the state. These snippets show you how.</description> 
 (???)                <pubDate>Mon, 22 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 22 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Clear Uncluttered SSH client config with Ansible</title> 
 (???)                <link>gopher://raymii.org/0/Clear_Uncluttered_SSH_client_config_with_Ansible.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Clear_Uncluttered_SSH_client_config_with_Ansible.txt</guid>
 (???)                <description>Openssh allows you to configure parameters like username, port, proxycommand, key and more in the ~/.ssh/config file. If you have many servers this file can become cluttered and maintaining it can become a not so nice task. This simple guide shows you how you can use a conf.d directory with seperate smaller files which gets converted to the big config file by Ansible</description> 
 (???)                <pubDate>Sun, 21 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 21 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Olimex OlinuXino a10 Lime uBoot, Kernel and root image guide</title> 
 (???)                <link>gopher://raymii.org/0/Olimex_OlinuXino_10_Lime_uBoot_Kernel.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Olimex_OlinuXino_10_Lime_uBoot_Kernel.txt</guid>
 (???)                <description>The Olimex OlinuXino A10 LIME is an amazing, powerfull and cheap open source ARM development board. It costs EUR 30, and has 160 GPIO. This guide is a cleaned up version of theirs with instructions to build your own kernel and u-boot image on Ubuntu 14.04.</description> 
 (???)                <pubDate>Sat, 20 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 20 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>ingsoc</title> 
 (???)                <link>gopher://raymii.org/0/ingsoc.txt</link> 
 (???)                <guid>gopher://raymii.org/0/ingsoc.txt</guid>
 (???)                <description>ingsoc is a static site generator written in Python with the purpose of generating raymii.org. It differs from other static site generators because it does not create a blog-like site, but it is focused on pages and structure. It also does not use a template engine. It generates categories, pages, tags, an XML sitemap and a RSS feed. It takes markdown files with a yaml config header as input, and outputs html.</description> 
 (???)                <pubDate>Tue, 02 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 02 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC L2TP VPN on CentOS 6 / Red Hat Enterprise Linux 6 / Scientific Linux 6</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_L2TP_vpn_on_CentOS_-_Red_Hat_Enterprise_Linux_or_Scientific_-_Linux_6.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_L2TP_vpn_on_CentOS_-_Red_Hat_Enterprise_Linux_or_Scientific_-_Linux_6.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 01 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC L2TP VPN on Arch Linux on a Raspberry Pi with OpenSwan, xl2tpd and ppp</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_L2TP_vpn_on_a_Raspberry_Pi_with_Arch_Linux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_L2TP_vpn_on_a_Raspberry_Pi_with_Arch_Linux.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC/L2TP vpn server with Arch Linux on a Raspberry Pi using Openswan as the IPsec server, xl2tpd as the l2tp provider and ppp or local users / PAM for authentication. It has a detailed explanation with every step.</description> 
 (???)                <pubDate>Mon, 01 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC L2TP VPN on Ubuntu 12.04 with OpenSwan, xl2tpd and ppp</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_12.04.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 01 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC L2TP VPN on Ubuntu 13.10 with OpenSwan, xl2tpd and ppp</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_13.10.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_13.10.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC/L2TP vpn server with Ubuntu 13.10 using Openswan as the IPsec server, xl2tpd as the l2tp provider and ppp or local users / PAM for authentication. It has a detailed explanation with every step.</description> 
 (???)                <pubDate>Mon, 01 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC L2TP VPN on Ubuntu 13.04 with OpenSwan, xl2tpd and ppp</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_13.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_13.04.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC/L2TP vpn server with Ubuntu 13.04 using Openswan as the IPsec server, xl2tpd as the l2tp provider and ppp or local users / PAM for authentication. It has a detailed explanation with every step.</description> 
 (???)                <pubDate>Mon, 01 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC L2TP VPN on Ubuntu 14.04 with OpenSwan, xl2tpd and ppp</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_14.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_14.04.txt</guid>
 (???)                <description>This is a guide on setting up an IPSEC/L2TP vpn server with Ubuntu 14.04 using Openswan as the IPsec server, xl2tpd as the l2tp provider and ppp or local users / PAM for authentication. It has a detailed explanation with every step. We choose the IPSEC/L2TP protocol stack because of recent vulnerabilities found in pptpd VPNs and because it is supported on all major operating systems by default. More than ever, your freedom and privacy when online is under threat. Governments and ISPs want to control what you can and can't see while keeping a record of everything you do, and even the shady-looking guy lurking around your coffee shop or the airport gate can grab your bank details easier than you may think. A self hosted VPN lets you surf the web the way it was intended: anonymously and without oversight.</description> 
 (???)                <pubDate>Mon, 01 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPSEC L2TP VPN on Ubuntu 12.10 with OpenSwan, xl2tpd and ppp</title> 
 (???)                <link>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_12.10.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPSEC_L2TP_vpn_with_Ubuntu_12.10.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 01 Dec 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Dec 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Openstack Affinity Groups, make sure instances are on the same or different compute hypervisor hosts</title> 
 (???)                <link>gopher://raymii.org/0/Openstack_Affinity_Groups-make-sure-instances-are-on-the-same-or-a-different-hypervisor-host.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Openstack_Affinity_Groups-make-sure-instances-are-on-the-same-or-a-different-hypervisor-host.txt</guid>
 (???)                <description>This guide shows you how to use Openstack Affinity groups. Affinity or Anti-Affinity groups allow you to make sure instances (VM/VPS) are on the same hypervisor host or on a different one. There are cases when you want two instances on different compute nodes, for example, when they are clustered servers like a load balancer or a database master-master setup. All VMs in each Affinity group are hosted in the same hypervisor, while no two VMs of a same Anti-Affinity group are hosted in the same hypervisor.</description> 
 (???)                <pubDate>Sat, 29 Nov 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 29 Nov 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Only if host is also in other hostgroup</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Only_if_host_is_also_in_other_hostgroup.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Only_if_host_is_also_in_other_hostgroup.txt</guid>
 (???)                <description>This snippet helps you execute actions only when a host is in another hostgroup in Ansible. For example, you might deploy munin-node via ansible, but you only want your apache and NGINX plugins deployed on your webservers, not on your database servers.</description> 
 (???)                <pubDate>Tue, 25 Nov 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 25 Nov 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Build a FreeBSD 10.1-release Openstack Image with bsd-cloudinit</title> 
 (???)                <link>gopher://raymii.org/0/FreeBSD_10.1-release_Openstack_Image.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FreeBSD_10.1-release_Openstack_Image.txt</guid>
 (???)                <description>We are going to prepare a FreeBSD image for Openstack deployment. We do this by creating a FreeBSD 10.1-RELEASE instance, installing it and converting it using bsd-cloudinit. We'll use the CloudVPS public Openstack cloud for this. We'll be using the Openstack command line tools, like nova, cinder and glance.</description> 
 (???)                <pubDate>Sun, 23 Nov 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 23 Nov 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL Decoder Script</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_Decoder.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_Decoder.txt</guid>
 (???)                <description>This is a simple PHP script which decodes a certificate, csr or connection and displays the information it finds.</description> 
 (???)                <pubDate>Sat, 15 Nov 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 Nov 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Only do action if on specific distribution (Debian, Ubuntu, CentOS or RHEL) or distribution version (ubuntu precise, ubuntu trusty)</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Only_if_on_specific_distribution_or_distribution_version.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Only_if_on_specific_distribution_or_distribution_version.txt</guid>
 (???)                <description>This ansible playbook example helps you execute actions only if you are on a certain distribution. You might have a mixed environment with CentOS and Debian, when using ansible to execute actions on different servers you don't need to run yum on debian, or apt on CentOS. Some package names are different and such, so this helps you with a when statement to select a specific distribution. As a bonus, you also get a when for specific distribution versions, like Ubuntu precise (12.04 LTS) or Ubuntu trusty (14.04 LTS).</description> 
 (???)                <pubDate>Sun, 09 Nov 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 16 Dec 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL Command Generator</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_Command_Generator.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_Command_Generator.txt</guid>
 (???)                <description>This is a simple page with a form which you can use to generate OpenSSL commands to, for example, create a CSR or a self signed certificate.</description> 
 (???)                <pubDate>Sat, 08 Nov 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 Oct 2022 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Olimex OlinuXino a10 Lime Minimal Debian 7 Image</title> 
 (???)                <link>gopher://raymii.org/0/Olimex_A10-OLinuXino-LIME_minimal_debian_7_image.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Olimex_A10-OLinuXino-LIME_minimal_debian_7_image.txt</guid>
 (???)                <description>The Olimex OlinuXino A10 LIME is an amazing, powerfull and cheap open source ARM development board. It costs EUR 30, and has 160 GPIO. The default Debian image from OlimeX is quite huge and bloated, over 2 GB, with X and all. I do not want a huge image, so I stripped it down to a 200 MB image with only dhcp and ssh and a few basic tools. It uses about 20 MB of RAM. This image allows you to start with almost nothing and build up only what you need.</description> 
 (???)                <pubDate>Fri, 31 Oct 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 31 Oct 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Keepalived notify script, execute action on failover</title> 
 (???)                <link>gopher://raymii.org/0/Keepalived_notify_script_execute_action_on_failover.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Keepalived_notify_script_execute_action_on_failover.txt</guid>
 (???)                <description>Keepalived supports running scripts on VRRP state change. This can come in handy when you need to execute an action when a failover occurs. In my case, I have a VPN running on a Virtual IP and want to make sure the VPN only runs on the node with the Virtual IP.</description> 
 (???)                <pubDate>Sun, 26 Oct 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 26 Oct 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Check and Fix SSL servers for SSLv3 connections or the Poodle CVE-2014-3566 bug</title> 
 (???)                <link>gopher://raymii.org/0/Check_servers_for_the_Poodle_bug.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Check_servers_for_the_Poodle_bug.txt</guid>
 (???)                <description>The POODLE CVE-2014-3566 bug is a new bug discovered by Google in the SSLv3 protocol. The fix is easy, disable support for SSLv3. See https://cipherli.st for a good list of SSL ciphers. You can use this check from the shell to check your servers. This command can easily be automated with other shell scripts. It also allows you to check your services without exposing them to an external checking website.</description> 
 (???)                <pubDate>Tue, 14 Oct 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 14 Oct 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Configserver Firewall and Security (CSF and LFD)</title> 
 (???)                <link>gopher://raymii.org/0/Configserver_Firewall_and_Security_CSF_LFD.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Configserver_Firewall_and_Security_CSF_LFD.txt</guid>
 (???)                <description>his page covers my notes about csf and lfd. csf is an easy SPI iptables firewall suite. lfd is the login failure daemon, which scans log files for failed authentication and blocks the IP's doing that. This page covers installation, populair command line options and popular config file options.</description> 
 (???)                <pubDate>Sun, 12 Oct 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 12 Oct 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Patch Shellshock)with Ansible</title> 
 (???)                <link>gopher://raymii.org/0/Patch_CVE-2014-6271_Shellshock_with_Ansible.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Patch_CVE-2014-6271_Shellshock_with_Ansible.txt</guid>
 (???)                <description>This is a simple ansible playbook to patch Debian, CentOS, Ubuntu and derivatives for the Shellshock vulnerability (CVE-2014-6271).</description> 
 (???)                <pubDate>Wed, 24 Sep 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 24 Sep 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Boot to Vim, Vim as Pid 1</title> 
 (???)                <link>gopher://raymii.org/0/Vim_as_PID_1_Boot_to_Vim.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Vim_as_PID_1_Boot_to_Vim.txt</guid>
 (???)                <description>This is a response on a great article from Pascal Bourguignon, namely how to run Emacs as PID 1. As we all know, nobody uses emacs. No, all joking aside, I found it to be a good article and wanted to see how I could do that with Vim. Not in User Mode Linux, but by creating an actual ISO. Boot to Vim, as you might want to call it. This is actually fairly simple. Compile vim statically, set it as init= at boot and you're done. We are going to use small 9MB distro named Tiny Core, Core edition and customize that to boot right into our static build of Vim.</description> 
 (???)                <pubDate>Thu, 18 Sep 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 18 Sep 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Statically (cross) compiled vim for x86, x86-64 and mipsel</title> 
 (???)                <link>gopher://raymii.org/0/Statically_cross_compiled_vim_for_x86_x86-64_and_mips.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Statically_cross_compiled_vim_for_x86_x86-64_and_mips.txt</guid>
 (???)                <description>Sometimes I need to manage a few systems with either low resources or a very restricted set of packages. On those systems no compilers or development libraries are available, however it is allowed to bring binaries.A few of those systems are 32 bit x68 systems, some are MIPS systems, even worse. They serve a secure purpose, I cannot go in to much detail about them, except for they require a high level of security, they process certificates. I really like vim as my editor, the only editor available by default on those systems is ed. I have an ed cheatsheet for this purpose. The solution for this problem is to create a statically (cross) compiled version of vim. This article shows you how to create a statically compiled vim that runs everywhere.</description> 
 (???)                <pubDate>Wed, 17 Sep 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 17 Sep 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Owncloud, DirectAdmin, Apache 2.4 and Error AH01797: client denied by server configuration</title> 
 (???)                <link>gopher://raymii.org/0/Owncloud_DirectAdmin,_Apache_2.4_and_Error_AH01797_client_denied_by_server_configuration.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Owncloud_DirectAdmin,_Apache_2.4_and_Error_AH01797_client_denied_by_server_configuration.txt</guid>
 (???)                <description>I keep a few servers around for shared webhosting for friends, family and some other domains. Most of them run Directadmin, because it is easier to work with for the target audience. I'm very good with the command line, they've never heard of it. One of my friends runs Owncloud, a wonderfull piece of software to get cloud services under your control. He does not use the file part but rather the calendar and contacts a lot. A recent update of Apache to 2.4.10 broke that functionality on a Directadmin machine with the error AH01797: client denied by server configuration. After a bit of searching and debugging, here's how I fixed it.</description> 
 (???)                <pubDate>Mon, 15 Sep 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 15 Sep 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set your IP as wallpaper</title> 
 (???)                <link>gopher://raymii.org/0/Set-your-ip-as-wallpaper.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Set-your-ip-as-wallpaper.txt</guid>
 (???)                <description>This  tutorial shows you how to set your IP address as wallpaper using Imagemagick</description> 
 (???)                <pubDate>Sun, 14 Sep 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 14 Sep 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>foaas.sh - Command Line Fuck Off as a Service client</title> 
 (???)                <link>gopher://raymii.org/0/foaas.sh_-_Command_Line_FOAAS_Client.txt</link> 
 (???)                <guid>gopher://raymii.org/0/foaas.sh_-_Command_Line_FOAAS_Client.txt</guid>
 (???)                <description>foaas.sh is a command line [Fuck Off as a Service client](http://foaas.com/). It is written is bash and supports multiple forms of API interaction. It also supports `xclip`, when available, the result of an interaction is copied to the clipboard for later use.</description> 
 (???)                <pubDate>Mon, 08 Sep 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 08 Sep 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Get the current or all Firefox tab urls in Bash</title> 
 (???)                <link>gopher://raymii.org/0/Get_the_current_or_all_Firefox_tab_urls_in_Bash.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_the_current_or_all_Firefox_tab_urls_in_Bash.txt</guid>
 (???)                <description>This snippets gets the current firefox tab url or all the firefox tab url's. It uses the sessionstore.js file in your profile folder.</description> 
 (???)                <pubDate>Mon, 01 Sep 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Sep 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Build a $35 Time Capsule - Raspberry Pi Time Machine Backup Server</title> 
 (???)                <link>gopher://raymii.org/0/Build_a_35_dollar_Time_Capsule_-_Raspberry_Pi_Time_Machine.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Build_a_35_dollar_Time_Capsule_-_Raspberry_Pi_Time_Machine.txt</guid>
 (???)                <description>This is a simple guide on building a $35 Time Capsule with a Raspberry Pi. A Time Capsule is a network attached storage device from Apple for use with their Time Machine. Time Machine gives users a very easy and userfriendly way to automatically create and restore (encrypted) backups. A Time Capsule is basically an expensive NAS that only talks the AFP/netatalk protocol. The 2 TB version costs $299 at this time, a Raspberry Pi only $35. </description> 
 (???)                <pubDate>Fri, 29 Aug 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 29 Aug 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Building HA Clusters with Ansible and Openstack</title> 
 (???)                <link>gopher://raymii.org/0/Building_HA_Clusters_With_Ansible_and_Openstack.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Building_HA_Clusters_With_Ansible_and_Openstack.txt</guid>
 (???)                <description>This is an extensive guide on building high available clusters with Ansible and Openstack. We'll build a Highly available cluster consisting out of two load balancers, two database servers and two application servers running a simple wordpress site. This is all done with Ansible, the cluster nodes are all on Openstack. Ansible is a super awesome orchestration tool and Openstack is a big buzzword filled software suite for datacenter virtualization.</description> 
 (???)                <pubDate>Fri, 25 Jul 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 25 Jul 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVZ/Proxmox - Container to Template</title> 
 (???)                <link>gopher://raymii.org/0/OpenVZ_Proxmox_Container_to_Template.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVZ_Proxmox_Container_to_Template.txt</guid>
 (???)                <description>This guide will show you how to convert an OpenVZ (Proxmox) container to a template. You can then use this template on any other OpenVZ (or proxmox) host. This can be used either to migrate containers or to create a kind of master image to deploy new hosts from.</description> 
 (???)                <pubDate>Fri, 11 Jul 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 11 Jul 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Proxmox VE - One Public IP</title> 
 (???)                <link>gopher://raymii.org/0/Proxmox_VE_One_Public_IP.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Proxmox_VE_One_Public_IP.txt</guid>
 (???)                <description>This guide will show you how to set up Proxmox with only one public IP. We will configure an extra interface bridge and make sure VM traffic is NATed. I have a few dedicated servers, some run Proxmox. Most of them however have only a few IP's. Therefore the VM's in proxmox cannot all have a public IP. For most of them that is not a problem. If needed I run a proxy or set up iptables to forward ports to the VM's.</description> 
 (???)                <pubDate>Thu, 10 Jul 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 10 Jul 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>CentOS 5 CA Certificate Bundle Update</title> 
 (???)                <link>gopher://raymii.org/0/CentOS_5_CA_Certificate_Bundle_Update.txt</link> 
 (???)                <guid>gopher://raymii.org/0/CentOS_5_CA_Certificate_Bundle_Update.txt</guid>
 (???)                <description>This simple snippet shows you how to update the root ca certificate bundle on CentOS 5. Some websites have certificates signed by authorities not in the default bundle and those websites will not work with tools like git, curl, wget or anything else that uses https.</description> 
 (???)                <pubDate>Sun, 06 Jul 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 06 Jul 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Traceroute to Smokeping Target config</title> 
 (???)                <link>gopher://raymii.org/0/Traceroute_to_Smokeping_Target_Config.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Traceroute_to_Smokeping_Target_Config.txt</guid>
 (???)                <description>This little one-liner converts the output of traceroute to Smokeping Target output. This way you can build your smokeping config faster.</description> 
 (???)                <pubDate>Sat, 28 Jun 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 28 Jun 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Simple keepalived failover setup on Ubuntu 14.04</title> 
 (???)                <link>gopher://raymii.org/0/Keepalived-Simple-IP-failover-on-Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Keepalived-Simple-IP-failover-on-Ubuntu.txt</guid>
 (???)                <description>We are going to set up very simple keepalived IP failover on Ubuntu 14.04. Keepalived is a piece of software which can be used to achieve high availability by assigning two or more nodes a virtual IP and monitoring those nodes, failing over when one goes down.  Keepalived can do more, like load balancing and monitoring, but this tutorial focusses on a very simple setup, just IP failover.</description> 
 (???)                <pubDate>Fri, 13 Jun 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 13 Jun 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Build a FreeBSD 10.0-release Openstack Image with bsd-cloudinit</title> 
 (???)                <link>gopher://raymii.org/0/FreeBSD_10.0-release_Openstack_Image.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FreeBSD_10.0-release_Openstack_Image.txt</guid>
 (???)                <description>We are going to prepare a FreeBSD image for Openstack deployment. We do this by creating a FreeBSD 10.0-RELEASE instance, installing it and converting it using bsd-cloudinit. We'll use the CloudVPS public Openstack cloud for this. We'll be using the Openstack command line tools, like nova, cinder and glance. This tutorial is more a collection of notes than what you are used of me, it has less explanation and such, just right on steps to get started.</description> 
 (???)                <pubDate>Wed, 11 Jun 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 11 Jun 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OSSEC 2.8 Server, Client, Web UI and Analogi Dashboard Installation tutorial</title> 
 (???)                <link>gopher://raymii.org/0/OSSEC_2.8.0_Server_Client_and_Analogi_Dashboard_on_Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OSSEC_2.8.0_Server_Client_and_Analogi_Dashboard_on_Ubuntu.txt</guid>
 (???)                <description>OSSEC is an Open Source Host-based Intrusion Detection System that performs log analysis, file integrity checking, policy monitoring, rootkit detection, real-time alerting and active response. It runs on most operating systems, including Linux, MacOS, Solaris, HP-UX, AIX and Windows. It also includes agentless monitoring for use with for example Cisco or Juniper hardware. This tutorial covers the installation of the OSSEC 2.8 server, the standard OSSEC Web UI and the Analogi dashboard on Ubuntu 14.04. It also covers OSSEC setup with MySQL support. Last but not least it shows you how to install the OSSEC agent on a *NIX system.</description> 
 (???)                <pubDate>Wed, 11 Jun 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 11 Jun 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Openstack Horizon installation with SSL on Ubuntu</title> 
 (???)                <link>gopher://raymii.org/0/Openstack-Set-Up-Horizon-Dashboard-on-Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Openstack-Set-Up-Horizon-Dashboard-on-Ubuntu.txt</guid>
 (???)                <description>This is a guide on installing the Openstack Horizon (icehouse) dashboard on Ubuntu 12.04 or 14.04, including SSL setup. It features nice screenshots and even an Ansible playbook to automate it all.</description> 
 (???)                <pubDate>Thu, 29 May 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 29 May 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Openstack Swift Objectstore Access via FTP</title> 
 (???)                <link>gopher://raymii.org/0/Openstack-Swift-Objectstore-FTP-Access.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Openstack-Swift-Objectstore-FTP-Access.txt</guid>
 (???)                <description>This is a guide on accessing the Openstack Swift Object Storage system using an FTP client. Openstack Swift has a beautiful API which you can program to. However, sometimes it is handy to quickly be able to access your Swift/Objectstore data without programming around it. We will use ftp-cloudfs to do this. There is also Softlayers swftp, but that does not support Keystone Authentication (2.0). ftp-cloudfs does support this. The OS X Cyberduck FTP client also has Openstack Swift support, however that is a native implementation, not using FTP. With ftp-cloudfs we can use any ftp client, from Filezilla to midnight commander.</description> 
 (???)                <pubDate>Sun, 25 May 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 25 May 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Encrypted Duplicity Backups to Openstack Swift Objectstore</title> 
 (???)                <link>gopher://raymii.org/0/Encrypted_Duplicity_Backups_to_Openstack_Swift_Objectstore.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Encrypted_Duplicity_Backups_to_Openstack_Swift_Objectstore.txt</guid>
 (???)                <description>This is a guide on backing up your data to an Openstack Swift (Objectstore) instance using Duplicity. It provides encrypted backups using gpg so that you can safely use any public cloud storage to store them. This tutorial is for Ubuntu and CentOS and includes initial setup plus a script to automate it all. We will be using the Dutch provider CloudVPS, which is a non american company, so your data is more safe than it is with a provider that is vulnerable to the patriot act. Although your data is already encrypted with GPG, you can never be to sure. CloudVPS provides 10GB free ObjectStore, if you have VPS with them, the data is stored on at least 3 machines in 3 locations and they have a boatload of certifications.</description> 
 (???)                <pubDate>Mon, 19 May 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 19 May 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPv6 at Home</title> 
 (???)                <link>gopher://raymii.org/0/IPv6_at_Home.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPv6_at_Home.txt</guid>
 (???)                <description>One of my Raspberry Pi's was running a test setup of the Citadel groupware service. The test was sucessfull, so I set up a real world setup. The Raspberry Pi would serve another purpose, namely, a Linux Torrent seedbox. As in, to seed Linux torrents from linuxtracker.org. I choose Transmission for this, because it is simple, fast and stable. Transmission has a good webinterface, plus it allows access from remote clients with the transmission-remote gui packages. This article shows you how to set it up on a Raspberry Pi running Arch Linux.</description> 
 (???)                <pubDate>Sat, 03 May 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 03 May 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Transmission Web on a Raspberry Pi with Arch Linux</title> 
 (???)                <link>gopher://raymii.org/0/Transmission-Raspberry-Pi-Arch-Linux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Transmission-Raspberry-Pi-Arch-Linux.txt</guid>
 (???)                <description>One of my Raspberry Pi's was running a test setup of the Citadel groupware service. The test was sucessfull, so I set up a real world setup. The Raspberry Pi would serve another purpose, namely, a Linux Torrent seedbox. As in, to seed Linux torrents from linuxtracker.org. I choose Transmission for this, because it is simple, fast and stable. Transmission has a good webinterface, plus it allows access from remote clients with the transmission-remote gui packages. This article shows you how to set it up on a Raspberry Pi running Arch Linux.</description> 
 (???)                <pubDate>Mon, 28 Apr 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 28 Apr 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>FreeBSD 10, Converting from RELEASE to STABLE </title> 
 (???)                <link>gopher://raymii.org/0/FreeBSD_10_Converting_from_RELEASE_to_STABLE.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FreeBSD_10_Converting_from_RELEASE_to_STABLE.txt</guid>
 (???)                <description>Because of a [bug in  mpd][1] which is fixed in 10-STABLE I wanted to move one of my FreeBSD machines from 10.0-RELEASE to 10.0-STABLE. The process to do so is fairly simple. Basically, you check out the new source code, build the world, build the kernel, install the kernel, install the world, merge some stuff and reboot. Read on to see the entire process</description> 
 (???)                <pubDate>Thu, 17 Apr 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 17 Apr 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Linux software raid, rebuilding broken raid 1</title> 
 (???)                <link>gopher://raymii.org/0/Linux_software_raid_rebuilding_broken_raid_1.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Linux_software_raid_rebuilding_broken_raid_1.txt</guid>
 (???)                <description>Last week Nagios alerted me about a broken disk in one of my clients testing servers. There is a best effort SLA on the thing, and there were spare drives of the same type and size in the datacenter. Lucky me. This particular data center is on biking distance, so I enjoyed a sunny ride there. Simply put, I needed to replace the disk and rebuild the raid 1 array. This server is a simple Ubuntu 12.04 LTS server with two disks running in raid 1, no spare. Client has a tight budget, and with a best effort SLA not in production, fine with me. Consultant tip, make sure you have those things signed. </description> 
 (???)                <pubDate>Mon, 14 Apr 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 14 Apr 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>FreeBSD Ports: remove config options</title> 
 (???)                <link>gopher://raymii.org/0/FreeBSD_Ports_remove_config_options.txt</link> 
 (???)                <guid>gopher://raymii.org/0/FreeBSD_Ports_remove_config_options.txt</guid>
 (???)                <description>Today I wanted to upgrade a few packages on one of my FreeBSD servers. The vim port kept complaining: You must select one and only one option from the UI single. Read on to find out how I fixed this error.</description> 
 (???)                <pubDate>Wed, 09 Apr 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 09 Apr 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL: Manually verify a certificate against an OCSP</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.txt</guid>
 (???)                <description>This article shows you how to manually verfify a certificate against an OCSP server. OCSP stands for the Online Certificate Status Protocol and is one way to validate a certificate status. It is an alternative to the CRL, certificate revocation list. This article shows you how to manually validate a certificate against an OCSP server.</description> 
 (???)                <pubDate>Mon, 07 Apr 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 07 Apr 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Chef: overwrite templates in wrapper-cookbooks</title> 
 (???)                <link>gopher://raymii.org/0/Chef_-_overwrite_templates_in_wrapper_cookbooks.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Chef_-_overwrite_templates_in_wrapper_cookbooks.txt</guid>
 (???)                <description>This article describes how to use a template in a wrapper-cookbook in Chef. The Chef Cookbook Wrapper Pattern is based upon a design convention where you customize an existing library cookbook by using a separate wrapper cookbook, which wraps the original cookbook with any related configuration changes. a library cookbook is an existing cookbook, typically an open-source contribution from a user in the Chef community, designed for server configuration purposes. A wrapper cookbook is a cookbook that wraps the original library cookbook with custom modifications or additions such as overriding a Chef attribute, changing a Chef template, converting a Chef attribute to a user-definable input, etc. To override a template by just defining it again would result in it being written two times every Chef run, which is not what we want. Using this method, you can override the template from the default cookbook with a template in your wrapper-cookbook. It has an example for the graphite cookbook, where the wrapper ads LDAP login to the Apache server.</description> 
 (???)                <pubDate>Wed, 02 Apr 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 02 Apr 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Chef: chef_gem vs gem_package and ORDER</title> 
 (???)                <link>gopher://raymii.org/0/Chef_-_chef_gem_vs_gem_package_and_ORDER.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Chef_-_chef_gem_vs_gem_package_and_ORDER.txt</guid>
 (???)                <description>This article describes a situation I had at one of my clients with Chef and the steps took to resolve this problem. They have a cookbook which builds a postgresql database node and it installs the pg ruby gem. However, it uses the chef_gem resource to do that, and it keeps failing.</description> 
 (???)                <pubDate>Tue, 01 Apr 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 01 Apr 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X: Remove all Apple Remote Dekstop settings</title> 
 (???)                <link>gopher://raymii.org/0/OS_X-Remove_all_Apple_Remote_Desktop_settings.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS_X-Remove_all_Apple_Remote_Desktop_settings.txt</guid>
 (???)                <description>This snippet shows you how to remove all Apple Remote Desktop settings. My ARD installation recently stopped working correctly, having problems discovering new machines and connecting to already set up machines. These commands wipe all settings and the ARD installation is clean again. This solved my problem.</description> 
 (???)                <pubDate>Fri, 14 Mar 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 14 Mar 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>3D modeling a real world object in OpenSCAD</title> 
 (???)                <link>gopher://raymii.org/0/3D_modelling_a_real_world_object_in_OpenSCAD.txt</link> 
 (???)                <guid>gopher://raymii.org/0/3D_modelling_a_real_world_object_in_OpenSCAD.txt</guid>
 (???)                <description>This article shows you how I built a real world object in OpenSCAD and how I got it 3D printed. OpenSCAD is a Solid 3D modeling based on the Computational Geometry Algorithms Library. It is not like Blender, AutoCAD or Maya, who allow you to visually create and manipulate something. OpenSCAD allows you to program the entire thing. Want a cube? Type cube([10,10,10]) and you have a cube. I have no previous experience in 3D modeling or OpenSCAD, however, in about three hours I had my key ready made.</description> 
 (???)                <pubDate>Sun, 02 Mar 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 02 Mar 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>KVM add disk image or swap image to virtual machine with virsh</title> 
 (???)                <link>gopher://raymii.org/0/KVM_add_disk_image_or_swap_image_to_virtual_machine_with_virsh.txt</link> 
 (???)                <guid>gopher://raymii.org/0/KVM_add_disk_image_or_swap_image_to_virtual_machine_with_virsh.txt</guid>
 (???)                <description>This tutorial shows you how to create and add a disk image to a KVM vm using virsh. This is useful when you for example want to expand the disk space of your virtual machine when it is using LVM, or if you want to add a swap disk to a virtual machine.</description> 
 (???)                <pubDate>Sun, 23 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 23 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>KVM convert qcow2 disk images to raw disk images for performance</title> 
 (???)                <link>gopher://raymii.org/0/KVM_convert_qcow2_disk_images_to_raw_disk_images_for_performance.txt</link> 
 (???)                <guid>gopher://raymii.org/0/KVM_convert_qcow2_disk_images_to_raw_disk_images_for_performance.txt</guid>
 (???)                <description>This tutorial shows you how to convert KVM qcow2 disk images to raw disk images. The qcow2 disk format has some decent features like encryption, compression and copy to write support. However, the compression and the copy processes make it quite a bit slower than raw disk images. Sometimes you want to convert the disk images so that the VM will perform better. </description> 
 (???)                <pubDate>Sun, 16 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 16 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>KVM host with bonding and VLAN tagged Virtual Machines setup on Ubuntu 12.04</title> 
 (???)                <link>gopher://raymii.org/0/KVM_with_bonding_and_VLAN_tagging_setup_on_Ubuntu_12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/KVM_with_bonding_and_VLAN_tagging_setup_on_Ubuntu_12.04.txt</guid>
 (???)                <description>This tutorial shows you how to setup Ubuntu 12.04 as a KVM host with multiple virtual machines. The kvm host will have VM's in multiple VLAN's and will handle the VLAN tagging over a bonded interface. It also covers creation of an example virtual machine with the ubuntu vmbuilder tool and shows you how to add a serial console to an ubuntu 12.04 virtual machine for troubleshooting.</description> 
 (???)                <pubDate>Sat, 15 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bonding NIC Teaming on Ubuntu 12.04</title> 
 (???)                <link>gopher://raymii.org/0/NIC_Bonding_on_Ubuntu_12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/NIC_Bonding_on_Ubuntu_12.04.txt</guid>
 (???)                <description>This tutorial shows you how to setup NIC bonding / NIC teaming on Ubuntu 12.04. Bonding, also called port trunking or link aggregation means combining several network interfaces (NICs) to a single link, providing either high-availability, load-balancing, maximum throughput, or a combination of these.</description> 
 (???)                <pubDate>Fri, 14 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 14 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Install extra software in the VMWare vCenter Appliance (VCSA)</title> 
 (???)                <link>gopher://raymii.org/0/VMWare_vCenter_Appliance_Install_Extra_Software.txt</link> 
 (???)                <guid>gopher://raymii.org/0/VMWare_vCenter_Appliance_Install_Extra_Software.txt</guid>
 (???)                <description>This tutorial shows you how to install extra software in the VMWare vCenter appliance (VCSA). VMWare provides a vCenter appliance, which is a SUSE Linux Enterprise Server appliance with the VMWare vCenter server software installed. Because this is SUSE, we can add repositories and install software from there. By default it comes without repositories enabled. I needed to do this because I want to use NRPE on the vCenter appliance.</description> 
 (???)                <pubDate>Wed, 05 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 05 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL: Get all certificates from a website in plain text</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_-_Get_all_certificates_from_a_website_in_plain_text.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_-_Get_all_certificates_from_a_website_in_plain_text.txt</guid>
 (???)                <description>This article shows you how to get all certificates of a website in plain text. With a few OpenSSL commands one can get the website certificate plus intermediate certificates, however, if you feed that output to OpenSSL it only works on the first certificate. Using a bit of sed and bash magic we can feed all certificates one by one to OpenSSL.</description> 
 (???)                <pubDate>Tue, 04 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 04 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OCSP Stapling on Apache</title> 
 (???)                <link>gopher://raymii.org/0/OCSP_Stapling_on_Apache2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OCSP_Stapling_on_Apache2.txt</guid>
 (???)                <description>This tutorial shows you how to set up OCSP stapling on Apache. OCSP stapling is an enhancement to the standard OCSP protocol that delivers OCSP responses from the server with the certificate, eliminating the need for relying parties (web users) to check OCSP responses with the issuing CA. This has the effect of reducing bandwidth, improving perceived site performance, and increasing security for everyone involved in establishing the secure session.</description> 
 (???)                <pubDate>Mon, 03 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 03 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OCSP Stapling on nginx</title> 
 (???)                <link>gopher://raymii.org/0/OCSP_Stapling_on_nginx.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OCSP_Stapling_on_nginx.txt</guid>
 (???)                <description>This tutorial shows you how to set up OCSP stapling on nginx. OCSP stapling is an enhancement to the standard OCSP protocol that delivers OCSP responses from the server with the certificate, eliminating the need for relying parties (web users) to check OCSP responses with the issuing CA. This has the effect of reducing bandwidth, improving perceived site performance, and increasing security for everyone involved in establishing the secure session.</description> 
 (???)                <pubDate>Mon, 03 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 03 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>haproxy: intercept all cookies and set secure attribute</title> 
 (???)                <link>gopher://raymii.org/0/haproxy_intercept_all_cookies_and_set_secure_attribute.txt</link> 
 (???)                <guid>gopher://raymii.org/0/haproxy_intercept_all_cookies_and_set_secure_attribute.txt</guid>
 (???)                <description>This snippet shows you how to use haproxy to set the secure attribute on cookies. You might have a backend application which is not able to set the secure attribute on cookies or for which haproxy does the ssl offloading. This simple frontend rspirep sets the secure attribute for all cookies.</description> 
 (???)                <pubDate>Sat, 01 Feb 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 01 Feb 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Check if passwordless sudo can be used in a bash script or nagios check</title> 
 (???)                <link>gopher://raymii.org/0/Check_if_passwordless_sudo_can_be_used_in_a_bash_script_or_nagios_check.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Check_if_passwordless_sudo_can_be_used_in_a_bash_script_or_nagios_check.txt</guid>
 (???)                <description>This is a simple trick to see if you can use passwordless sudo in a script. This for example can be usefull in a Nagios plugin which requires sudo. Instead of putting the sudo line in your README and otherwise having a NRPE Unable to parse result error, you could just give a nice warning message plus the right sudo configuration rule.</description> 
 (???)                <pubDate>Thu, 30 Jan 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 30 Jan 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Remove unused CentOS/Red Hat kernels</title> 
 (???)                <link>gopher://raymii.org/0/Remove_Old_CentOS_RHEL_Kernels.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Remove_Old_CentOS_RHEL_Kernels.txt</guid>
 (???)                <description>This small article will show you how to remove unused kernels in Red Hat or CentOS. This is sometimes necessary because the /boot partition can fill up.</description> 
 (???)                <pubDate>Sat, 18 Jan 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 18 Jan 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>rc.local support on Arch Linux with systemd</title> 
 (???)                <link>gopher://raymii.org/0/rc.local_support_on_Arch_Linux_and_systemd.txt</link> 
 (???)                <guid>gopher://raymii.org/0/rc.local_support_on_Arch_Linux_and_systemd.txt</guid>
 (???)                <description>This is a simple tutorial on how to get /etc/rc.local support back in Arch Linux or any distro with systemd. Arch Linux uses systemd. Therefore, init functions like rc.local are not supported anymore. This systemd service allows you to have support for `/etc/rc.local`.</description> 
 (???)                <pubDate>Mon, 13 Jan 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 13 Jan 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible Inventory from VMWare</title> 
 (???)                <link>gopher://raymii.org/0/Ansible__Dynamic_Inventory_From_VMware_vCenter.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible__Dynamic_Inventory_From_VMware_vCenter.txt</guid>
 (???)                <description>This is a simple script which lets you use VMWare vCenter as a dynamic inventory for Ansible.</description> 
 (???)                <pubDate>Mon, 06 Jan 2014 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 06 Jan 2014 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Simple command line arguments</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Simple_Command_Line_Arguments.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Simple_Command_Line_Arguments.txt</guid>
 (???)                <description>Bash Bits are small examples and tips for Bash Scripts. This bash bit shows you how to add command line arguments to your script. It is very simple, non-positional and does not use getopts.</description> 
 (???)                <pubDate>Mon, 30 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 30 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Playbook Testing</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Playbook_Testing.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Playbook_Testing.txt</guid>
 (???)                <description>This Ansible article shows you how to run a basic test on your playbooks to check if their syntax is correct. It shows methods for both Ansible 1.3 and 1.4. When you get more complicated Ansible playbooks you sometimes have syntax (YAML) errors in them. It sometimes can take a while before those errors show up because they are lower in a playbook. By running the syntax check you make sure this won't happen.</description> 
 (???)                <pubDate>Sun, 29 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 29 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Local W3C HTML5 Validator Server</title> 
 (???)                <link>gopher://raymii.org/0/Local_W3C_HTML5_Validator_Server.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Local_W3C_HTML5_Validator_Server.txt</guid>
 (???)                <description>This tutorial shows you how to set up a local instance of the w3c html validator, including HTML5 validation support via a local instance of the Validator.nu HTML5 validator. The online w3 validator has strict limits and will ban you for some time if you validate to often. So if you for example have a local unit test to check a website you will get banned a lot. Which is understandable of course, it is a free service. They provide all source code plus it is in the debian repositories, it is dead simple to set up one yourself.</description> 
 (???)                <pubDate>Fri, 27 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 27 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Only do something if another action changed</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Only-do-something-if-another-action-changed.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Only-do-something-if-another-action-changed.txt</guid>
 (???)                <description>This Ansible tutorial shows you how execute actions only if another action has changed. For example, a playbook which downloads a remote key for package signing but only executes the apt-add command if the key has changed. Or a playbook which clones a git repository and only restarts a service if the git repository has changed.</description> 
 (???)                <pubDate>Sun, 22 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 Dec 2018 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - Sudo sometimes</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Better_sudo_control.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Better_sudo_control.txt</guid>
 (???)                <description>This Ansible tutorial shows you how run some actions via sudo and some not. It also shows you how to run an entire role via sudo or not.</description> 
 (???)                <pubDate>Sat, 21 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 21 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>haproxy: client side ssl certificates</title> 
 (???)                <link>gopher://raymii.org/0/haproxy_client_side_ssl_certificates.txt</link> 
 (???)                <guid>gopher://raymii.org/0/haproxy_client_side_ssl_certificates.txt</guid>
 (???)                <description>This tutorial shows you how to configure haproxy and client side ssl certificates. It features a few comprehensive examples.</description> 
 (???)                <pubDate>Wed, 18 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 18 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Apache access/error log to syslog</title> 
 (???)                <link>gopher://raymii.org/0/Apache_access_and_error_log_to_syslog.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Apache_access_and_error_log_to_syslog.txt</guid>
 (???)                <description>This snippet shows you how to redirect the Apache access log to syslog using the Customlog statement, and the Error log to syslog via the ErrorLog statement.</description> 
 (???)                <pubDate>Sun, 15 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 15 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Back Up Thunderbird Message Filters</title> 
 (???)                <link>gopher://raymii.org/0/Thunderbird_Back_Up_Mail__Message_Filters.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Thunderbird_Back_Up_Mail__Message_Filters.txt</guid>
 (???)                <description>This tutorial shows you how to backup and restore the message filters in Thunderbird on multiple platforms.</description> 
 (???)                <pubDate>Sun, 15 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 15 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Install nmap 6.40 on Ubuntu 12.04</title> 
 (???)                <link>gopher://raymii.org/0/Install_nmap_6_on_Ubuntu_12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Install_nmap_6_on_Ubuntu_12.04.txt</guid>
 (???)                <description>This tutorial shows you how to install nmap 6.40 on Ubuntu 12.04. Ubuntu 12.04 has nmap 5.21 in the repositories. nmap 6 features a lot of improvements like full IPv6 support and better and faster scanning.</description> 
 (???)                <pubDate>Fri, 13 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 13 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>haproxy: set specific ssl ciphers</title> 
 (???)                <link>gopher://raymii.org/0/haproxy_set_specific_ssl_ciphers.txt</link> 
 (???)                <guid>gopher://raymii.org/0/haproxy_set_specific_ssl_ciphers.txt</guid>
 (???)                <description>This snippet shows you how to set specific ciphers for haproxy when using an ssl frontend.</description> 
 (???)                <pubDate>Thu, 12 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 12 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>haproxy: add strict transport security or any other http header</title> 
 (???)                <link>gopher://raymii.org/0/haproxy_add_strict_transport_security_or_any_other_http_header.txt</link> 
 (???)                <guid>gopher://raymii.org/0/haproxy_add_strict_transport_security_or_any_other_http_header.txt</guid>
 (???)                <description>This snippet shows you how to add a header to a haproxy response, for example, the HSTS header (http strict transport security).</description> 
 (???)                <pubDate>Wed, 11 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 11 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>haproxy: ssl backends</title> 
 (???)                <link>gopher://raymii.org/0/haproxy_ssl_backends.txt</link> 
 (???)                <guid>gopher://raymii.org/0/haproxy_ssl_backends.txt</guid>
 (???)                <description>This snippet shows you how to configure an ssl backend on haproxy 1.5 or higher.</description> 
 (???)                <pubDate>Tue, 10 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 10 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>haproxy: redirect to ssl or other website</title> 
 (???)                <link>gopher://raymii.org/0/haproxy_redirect_to_ssl_or_any_other_website.txt</link> 
 (???)                <guid>gopher://raymii.org/0/haproxy_redirect_to_ssl_or_any_other_website.txt</guid>
 (???)                <description>This snippet shows you how to use haproxy to redirect http traffic to https or any other website</description> 
 (???)                <pubDate>Mon, 09 Dec 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 09 Dec 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>ntop-ng 1.1 installation on Ubuntu 12.04</title> 
 (???)                <link>gopher://raymii.org/0/ntop-ng-installation-on-Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/ntop-ng-installation-on-Ubuntu.txt</guid>
 (???)                <description>This is a guide on installing the latest ntop-ng (1.1) on Ubuntu 12.04. ntopng is the next generation version of the original ntop, a network traffic probe that shows the network usage, similar to what the popular top Unix command does. ntop is based on libpcap and it has been written in a portable way in order to virtually run on every Unix platform, MacOSX and on Win32 as well. ntopng users can use a a web browser to navigate through ntop (that acts as a web server) traffic information and get a dump of the network status. In the latter case, ntop can be seen as a simple RMON-like agent with an embedded web interface. This tutorial will walk you through the compilation and installation of ntopng from source.</description> 
 (???)                <pubDate>Fri, 29 Nov 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 29 Nov 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Corosync Pacemaker - Execute script on failover</title> 
 (???)                <link>gopher://raymii.org/0/Corosync_Pacemaker_-_Execute_a_script_on_failover.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Corosync_Pacemaker_-_Execute_a_script_on_failover.txt</guid>
 (???)                <description>With Corosync/Pacemaker there is no easy way to simply run a script on failover. There are good reasons for this, but sometimes you want to do something simple. This tutorial describes how to change the Dummy OCF resource to execute a script on failover.</description> 
 (???)                <pubDate>Wed, 20 Nov 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 20 Nov 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>DigitalOcean Sucks. Use DigitalOcean!</title> 
 (???)                <link>gopher://raymii.org/0/Digital_Ocean_Sucks._Use_Digital_Ocean.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Digital_Ocean_Sucks._Use_Digital_Ocean.txt</guid>
 (???)                <description>DigitalOcean Sucks. Use DigitalOcean. Why? Read this article to find out.</description> 
 (???)                <pubDate>Tue, 19 Nov 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 19 Nov 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NoPriv.py - Easy IMAP Email Backup.</title> 
 (???)                <link>gopher://raymii.org/0/Nopriv-IMAP-backup.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nopriv-IMAP-backup.txt</guid>
 (???)                <description>NoPriv.py is a python script to backup any IMAP capable email account to a bowsable HTML archive and a Maildir folder. Not one huge file (mbox), only needing a web browser to view and no proprietary code, so you can make sure I won't steal your password. This release has a few major new features, namely support to backup all available folders in one go and a conversion from HTML Kickstart to Bootstrap.</description> 
 (???)                <pubDate>Sun, 17 Nov 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 17 Nov 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Self Hosted CryptoCat - Secure self hosted multiuser webchat</title> 
 (???)                <link>gopher://raymii.org/0/Self_Hosted_CryptoCat_-_Secure_Self_Hosted_Multiuser_Webchat.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Self_Hosted_CryptoCat_-_Secure_Self_Hosted_Multiuser_Webchat.txt</guid>
 (???)                <description>This is a guide on setting up a self hosted secure multiuser webchat service with CryptoCat. It covers the set up of ejabberd, nginx and the web interface for CryptoCat. It supports secure encrypted group chat, secure encrypted private chat and file and photo sharing.</description> 
 (???)                <pubDate>Sat, 09 Nov 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 09 Nov 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Corosync Notes</title> 
 (???)                <link>gopher://raymii.org/0/Corosync_Notes.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Corosync_Notes.txt</guid>
 (???)                <description>These are my notes and command snippets for usage with Corosync.</description> 
 (???)                <pubDate>Sat, 02 Nov 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 02 Nov 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Remove unused Ubuntu kernels</title> 
 (???)                <link>gopher://raymii.org/0/Remove_Old_Ubuntu_Kernels.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Remove_Old_Ubuntu_Kernels.txt</guid>
 (???)                <description>This one liner will help you remove unused Ubuntu kernels. Ubuntu does not remove kernels when they install a new one, however the default /boot partition is relatively small, about 100MB. So after 10 kernels, you can get No Space Left On Device errors with apt-get upgrading. Then you can eitehr remove them manually, or use this one liner to automatically remove them all.</description> 
 (???)                <pubDate>Mon, 28 Oct 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 28 Oct 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Install the latest ZNC from source on Ubuntu</title> 
 (???)                <link>gopher://raymii.org/0/Install_the_Lastest_ZNC_from_Source_in_Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Install_the_Lastest_ZNC_from_Source_in_Ubuntu.txt</guid>
 (???)                <description>This tutorial will show you how to install the latest (1.0) version of ZNC (an advanced IRC bouncer) on Ubuntu from source. Why from source? The package in the repositories is quite old and missing features like multiple IRC networks. It also includes an upstart script, and an example config for ZNC. ZNC is an advanced IRC bouncer that is left connected so an IRC client can disconnect/reconnect without losing the chat session.</description> 
 (???)                <pubDate>Fri, 25 Oct 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 25 Oct 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set up your own truly secure, encrypted and shared file synchronization, aka Dropbox clone</title> 
 (???)                <link>gopher://raymii.org/0/Set_up_your_own_truly_secure_encrypted_shared_storage_aka_Dropbox_clone.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Set_up_your_own_truly_secure_encrypted_shared_storage_aka_Dropbox_clone.txt</guid>
 (???)                <description>This article describes my truly secure, encrypted file synchronization service. It used EncFS and dvcs-autosync which lets me share only the encrypted data and mount that locally to get the plaintext. It works on OS X, Linux and ARM linux. This article has setup instructions for all those platforms.</description> 
 (???)                <pubDate>Tue, 15 Oct 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 15 Oct 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL One liner to create self signed certificate</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_One_line_to_create_self_signed_certificate.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_One_line_to_create_self_signed_certificate.txt</guid>
 (???)                <description>This is a one-liner for OpenSSL to generate a self signed certificate and private key.</description> 
 (???)                <pubDate>Wed, 09 Oct 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 09 Oct 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Chef: search in recipe based on roles or recipes</title> 
 (???)                <link>gopher://raymii.org/0/Chef_search_in_recipe_on_roles_or_recipes.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Chef_search_in_recipe_on_roles_or_recipes.txt</guid>
 (???)                <description>Chef supports a very powerfull search syntax which allows you for example to search all nodes with the graphite-server role and get their IP addresses. This tutorial shows you how to search based on a role a node has or a recipe a node has, plus an example config file with erb syntax. It has an example cookbook which sets up collectd as client and graphite as server. It shows you how to use the search function of Chef to get the IP addresses of the graphite servers and place those in the collectd config files. This technique is applicable to all kinds of services that use a client-server model, for example, munin, haproxy, zabbix and many more.</description> 
 (???)                <pubDate>Tue, 08 Oct 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 08 Oct 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Chef: include_recipe only_if or not_if</title> 
 (???)                <link>gopher://raymii.org/0/Chef_include_recipe_only_if_not_if.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Chef_include_recipe_only_if_not_if.txt</guid>
 (???)                <description>Chef supports including other recipes in cookbooks, for example, I can include the MySQL recipe from a PHP recipe. However, this is not a normal resource but a normal method. Therefore it ignores anything passed to it, including only_if or not_if. This tutorial shows you how to include or not include a recipe based on a variable, comparable with not_if or only_if.</description> 
 (???)                <pubDate>Sun, 06 Oct 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 06 Oct 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Uninstall and Remove OSSEC</title> 
 (???)                <link>gopher://raymii.org/0/Uninstall_OSSEC.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Uninstall_OSSEC.txt</guid>
 (???)                <description>This small tutorial shows you how to remove an OSSEC installation. OSSEC is installed from source (via a script), so you have to remove all the things manually instead of with your package manager.</description> 
 (???)                <pubDate>Tue, 01 Oct 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 01 Oct 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Check if item is in array</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Check_If_Item_Is_In_Array.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Check_If_Item_Is_In_Array.txt</guid>
 (???)                <description>Bash Bits are small examples, tips and tutorials for Bash (Scripts). This bash bit shows you how find out if an array has an item.</description> 
 (???)                <pubDate>Sat, 21 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 21 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Add colour output to your script</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Add_Color_Output_To_Your_Scripts.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Add_Color_Output_To_Your_Scripts.txt</guid>
 (???)                <description>Bash Bits are small examples, tips and tutorials for Bash (Scripts). This bash bit shows you how to add coloured output to your scripts</description> 
 (???)                <pubDate>Wed, 18 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 18 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Debug Logging</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Debug_Logging.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Debug_Logging.txt</guid>
 (???)                <description>Bash Bits are small examples and tips for Bash Scripts. This bash bit shows you how to add debug logging to a bash script.</description> 
 (???)                <pubDate>Sun, 15 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 15 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Bits: Trap Control C (SIGTERM)</title> 
 (???)                <link>gopher://raymii.org/0/Bash_Bits_Trap_Control_C_SIGTERM.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_Bits_Trap_Control_C_SIGTERM.txt</guid>
 (???)                <description>Bash Bits are small examples and tips for Bash Scripts. This bash bit shows you how to capture a Control C signal in a bash script, for example, to clean up any temp or pid files when your script is killed or closed.</description> 
 (???)                <pubDate>Sat, 14 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 14 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OSSEC Server, Client, Web UI and Analogi Dashboard Installation tutorial</title> 
 (???)                <link>gopher://raymii.org/0/OSSEC_and_webui_and_analogi_dashboard_installation_on_Ubuntu.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OSSEC_and_webui_and_analogi_dashboard_installation_on_Ubuntu.txt</guid>
 (???)                <description>OSSEC is an Open Source Host-based Intrusion Detection System that performs log analysis, file integrity checking, policy monitoring, rootkit detection, real-time alerting and active response. It runs on most operating systems, including Linux, MacOS, Solaris, HP-UX, AIX and Windows. It also includes agentless monitoring for use with for example Cisco or Juniper hardware. This tutorial covers the installation of the OSSEC server, the standard OSSEC Web UI and the Analogi dashboard on Ubuntu 12.04. It also covers OSSEC setup with MySQL support, including a Makefile bugfix. Last but not least it shows you how to install the OSSEC agent on a *NIX system.</description> 
 (???)                <pubDate>Sat, 07 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 07 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X - Enable access for assistive devices via the command line</title> 
 (???)                <link>gopher://raymii.org/0/OS-X-Enable-Access-for-assistive-devices-via-command-line.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS-X-Enable-Access-for-assistive-devices-via-command-line.txt</guid>
 (???)                <description>This command enables access for assistive devices on Apple OS X machines via the command line. This is needed for software like SpectacleApp or SizeUp. This article has methods for OS X Mavericks 10.9 as for 10.8 and 10.7</description> 
 (???)                <pubDate>Tue, 03 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 03 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X - Applescript to lock date and time preference panel to fix local sudo exploit</title> 
 (???)                <link>gopher://raymii.org/0/OS-X-Applescript-To-Lock-Date-Time-Settings-Panel-for-Sudo-Exploit.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS-X-Applescript-To-Lock-Date-Time-Settings-Panel-for-Sudo-Exploit.txt</guid>
 (???)                <description>This applescript locks the OS X Date and Time Preference Panel. It can be run via Apple Remote Desktop. This is related to CVE-2013-1775, a local sudo root exploit on OS X. If the date and time preference panel is locked, setting the date and time also requires a sudo password</description> 
 (???)                <pubDate>Mon, 02 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 02 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>IPv4 Address Conversion Tricks</title> 
 (???)                <link>gopher://raymii.org/0/IPv4_Address_Conversion_Tricks.txt</link> 
 (???)                <guid>gopher://raymii.org/0/IPv4_Address_Conversion_Tricks.txt</guid>
 (???)                <description>Did you know that http://3515693643/ is a valid link? Why? Because this is the decimal form of the binary IP address. Normally we represent IP addresses as 10.0.0.1, 4 blocks of numbers. Those numbers are actually binary octets represented in decimal, therefore they can never be more than 255. If we take the whole binary number of all blocks, and convert that to base 10, we get a result like above, which in turn is a working network address. I've written a little javascript based converter so you can try it out yourself.</description> 
 (???)                <pubDate>Sun, 01 Sep 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 01 Sep 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenVZ dnsmasq set capabilities failed fix</title> 
 (???)                <link>gopher://raymii.org/0/OpenVZ_dnsmasq_set_capabilities_failed_fix.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenVZ_dnsmasq_set_capabilities_failed_fix.txt</guid>
 (???)                <description>When running dnsmasq under OpenVZ I sometimes get an error when restarting: set capabilities failed. This is because dnsmasq starts as root, then does privileged stuff and then drops to the configured run user. In OpenVZ these permissions are not passed to the VPS, sadly. These three commands fix the problem.</description> 
 (???)                <pubDate>Wed, 14 Aug 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 14 Aug 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bind DNS Query Graph Charts with GNUPlot</title> 
 (???)                <link>gopher://raymii.org/0/Bind-GNUPlot-DNS-Bar-Graph.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bind-GNUPlot-DNS-Bar-Graph.txt</guid>
 (???)                <description>This is a very simple script which uses GNUplot to create graphs of Bind Query logs.</description> 
 (???)                <pubDate>Tue, 13 Aug 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 13 Aug 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Microsoft Exchange / Active Directory Powershell script to notify users of expiring Passwords</title> 
 (???)                <link>gopher://raymii.org/0/Microsoft_Exchange_Powershell_Script_User_Password_Expiry.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Microsoft_Exchange_Powershell_Script_User_Password_Expiry.txt</guid>
 (???)                <description>This is a small PowerShell script which emails your users that their password is going to expire in X days. This is needed when you have an Active Directory and Exchange Environment, but your users do not log in to a Windows machine bound to the Active Directory, but for example a Mac OS X or Linux machine with Full Disk Encryption enabled. Then they are not notified that their password is about to expire. This script can run as a scheduled task and scan and email your users that their password is about to expire.</description> 
 (???)                <pubDate>Thu, 08 Aug 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 08 Aug 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nagios - Hide all hosts in hostgroup</title> 
 (???)                <link>gopher://raymii.org/0/Nagios_-_Hide-entire-hostgroup.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nagios_-_Hide-entire-hostgroup.txt</guid>
 (???)                <description>This tutorial shows you how to hide all hosts from a hostgroup in Nagios, including the webinterface and email/sms notifications. It does however monitors and checks all the hosts in the hostgroup, so when there are problems you can view the hosts in Nagios. This is usefull for example when you have a staging, preproduction and production environment monitored by the same Nagios host, or by a Nagios cluster, and want to hide all of staging, but do want to quickly view the status when developers complain about a node.</description> 
 (???)                <pubDate>Tue, 30 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 30 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Diffie Hellman Key Exchange Dutch Notes and Example</title> 
 (???)                <link>gopher://raymii.org/0/Diffie-Hellman-Key-Exchange-Dutch-Notes.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Diffie-Hellman-Key-Exchange-Dutch-Notes.txt</guid>
 (???)                <description>This is a Dutch article on a Diffie Hellman Key Exchange, including an example. I wrote this to better understand the Diffie Hellman Key Exchange.</description> 
 (???)                <pubDate>Sun, 28 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 28 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL - Generate Psuedo Random Passwords</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_Password_Generator.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_Password_Generator.txt</guid>
 (???)                <description>This a snippet to generate a psuedo random password fast via the command line with OpenSSL. It generates a number of random bytes, which can either be output raw, as Base64 or as HEX. The Base64 output is a good password most of the time.</description> 
 (???)                <pubDate>Fri, 26 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 26 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Stong SSL Security on Lighttpd</title> 
 (???)                <link>gopher://raymii.org/0/Pass_the_SSL_Labs_Test_on_Lighttpd_(Mitigate_the_CRIME_and_BEAST_attack_-_Disable_SSLv2_-_Enable_PFS).txt</link> 
 (???)                <guid>gopher://raymii.org/0/Pass_the_SSL_Labs_Test_on_Lighttpd_(Mitigate_the_CRIME_and_BEAST_attack_-_Disable_SSLv2_-_Enable_PFS).txt</guid>
 (???)                <description>This tutorial shows you how to set up strong SSL security on the lighttpd webserver. We do this by disabling SSL Compression to mitigate the CRIME attack, disable SSLv3 and below because of vulnerabilities in the protocol and we will set up a strong ciphersuite that enables Forward Secrecy when possible. This way we have a strong and future proof ssl configuration and we get an A on the Qually Labs SSL Test.</description> 
 (???)                <pubDate>Wed, 24 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 24 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>My Todo.txt Workflow, including Unison, Todour and Android</title> 
 (???)                <link>gopher://raymii.org/0/My_Todo.txt_Workflow.txt</link> 
 (???)                <guid>gopher://raymii.org/0/My_Todo.txt_Workflow.txt</guid>
 (???)                <description>Todo.txt is a way to manage your tasks/todo items in a plaintext format. It has a few simple rules, there are a lot of applications to work with it, but in its core it is a plaintext file, so a text editor is sufficient to use it. Recently I started using todo.txt, including syncing on all my devices via my own servers. This article shows you my workflow, and how to set up a similar environment, including ssh, unison, todour for OS X, DayTasks for Ubuntu and Simpletasks Cloudless for Android.</description> 
 (???)                <pubDate>Wed, 24 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 24 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Pass the SSL Labs Test on NGINX (Mitigate the CRIME and BEAST attack, Disable SSLv2 and Enable Perfect Forward Secrecy).</title> 
 (???)                <link>gopher://raymii.org/0/Pass_the_SSL_Labs_Test_on_NGINX_(Mitigate_the_CRIME_and_BEAST_attack_-_Disable_SSLv2_-_Enable_PFS).txt</link> 
 (???)                <guid>gopher://raymii.org/0/Pass_the_SSL_Labs_Test_on_NGINX_(Mitigate_the_CRIME_and_BEAST_attack_-_Disable_SSLv2_-_Enable_PFS).txt</guid>
 (???)                <description>This tutorial shows you how to get an A on the SSL Labs test using the NGINX webserver. We do this by disabling CBC based ciphers to mitigate the BEAST attack, disabling SSL Compression to mitigate the CRIME attack, disable SSLv2 and below because of vulnerabilities in the protocol and we will enable Perfect Forward Secrecy when possible. This way we have a future proof ssl configuration and we get an A on the Qually Labs SSL Test.</description> 
 (???)                <pubDate>Tue, 23 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 23 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Pass the SSL Labs Test on Apache2 (Mitigate the CRIME and BEAST attack, Disable SSLv2 and Enable Perfect Forward Secrecy).</title> 
 (???)                <link>gopher://raymii.org/0/Pass_the_SSL_Labs_Test_on_Apache2_(Mitigate_the_CRIME_and_BEAST_attack_-_Disable_SSLv2_-_Enable_PFS).txt</link> 
 (???)                <guid>gopher://raymii.org/0/Pass_the_SSL_Labs_Test_on_Apache2_(Mitigate_the_CRIME_and_BEAST_attack_-_Disable_SSLv2_-_Enable_PFS).txt</guid>
 (???)                <description>This tutorial shows you how to get an A on the SSL Labs test using the Apache2 webserver. We do this by disabling CBC based ciphers to mitigate the BEAST attack, disabling SSL Compression to mitigate the CRIME attack, disable SSLv2 and below because of vulnerabilities in the protocol and we will enable Perfect Forward Secrecy when possible. This way we have a future proof ssl configuration and we get an A on the Qually Labs SSL Test.</description> 
 (???)                <pubDate>Sat, 20 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 20 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X: Disable Notification Center</title> 
 (???)                <link>gopher://raymii.org/0/OS_X-Disable_Notification_Centre.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS_X-Disable_Notification_Centre.txt</guid>
 (???)                <description>This snippet shows you how to disable the OS X Notification Center completely, the menu item and the sidebar. It also gives you the command to enable it again.</description> 
 (???)                <pubDate>Wed, 10 Jul 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 10 Jul 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>bdsh - Whitelist Restricted Shell</title> 
 (???)                <link>gopher://raymii.org/0/bdsh.txt</link> 
 (???)                <guid>gopher://raymii.org/0/bdsh.txt</guid>
 (???)                <description>A shell where you whitelist commands and only those commands can be executed. Either via ssh, as an interactive shell or launched with commands. Logs everything and escapes dangerous characters. bdsh stands for Boa Diminish SHell. You can probably guess why. It might have to to with snakes and restricting users, no pun intended.</description> 
 (???)                <pubDate>Sat, 29 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 29 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Strip all non-ascii characters from a file</title> 
 (???)                <link>gopher://raymii.org/0/Strip_all_non-ascii_characters_from_a_file.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Strip_all_non-ascii_characters_from_a_file.txt</guid>
 (???)                <description>This snippet strips all non-ascii characters from a file. It backs up the original file. This is handy if you have input for programs that bork on non-ascii input like older mainframes and such.</description> 
 (???)                <pubDate>Thu, 27 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 27 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Samba Shares with Active Directory Login on Ubuntu 12.04</title> 
 (???)                <link>gopher://raymii.org/0/SAMBA_Share_with_Active_Directory_Login_on_Ubuntu_12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/SAMBA_Share_with_Active_Directory_Login_on_Ubuntu_12.04.txt</guid>
 (???)                <description>This tutorial shows you how to set up a SAMBA server which authenticates all users to an Active Directory, including group based permissions. It uses Samba, Winbind, Kerberos and nsswitch. This allows you to have a Linux machine serving files via SMB, where your authentication and autorization for the files and folders is done via Active Directory.</description> 
 (???)                <pubDate>Thu, 27 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 27 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash Incremental History Search / Autocomplete </title> 
 (???)                <link>gopher://raymii.org/0/Bash_-_Incremental_History_Search_Autocomplete.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_-_Incremental_History_Search_Autocomplete.txt</guid>
 (???)                <description>This little snippet for your .bashrc or your .inputrc changes the Up/Down arrow behavior to autocomplete what is already typed instead of just go back in history.</description> 
 (???)                <pubDate>Wed, 26 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 26 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Dogtag / Red Hat Certificate System reset admin pkiconsole password</title> 
 (???)                <link>gopher://raymii.org/0/Dogtag_Red_Hat_Certificate_System_Reset_Admin_pkiconsole_Password.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Dogtag_Red_Hat_Certificate_System_Reset_Admin_pkiconsole_Password.txt</guid>
 (???)                <description>This tutorial shows you how to reset the password for the PKI Console within the Red Hat Certificate System (Dogtag).</description> 
 (???)                <pubDate>Wed, 19 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 19 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ejabberd SSL Certificate</title> 
 (???)                <link>gopher://raymii.org/0/Ejabberd_SSL_Certificate.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ejabberd_SSL_Certificate.txt</guid>
 (???)                <description>This tutorial shows you how to set up an SSL Certificate for use with Ejabberd. It covers both the creation of the Certificate Signing Request, the preparing of the certificate for use with Ejabberd and the installation of the certificate.</description> 
 (???)                <pubDate>Thu, 13 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 13 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ejabberd Active Directory LDAP Login</title> 
 (???)                <link>gopher://raymii.org/0/Ejabberd_Active_Directory_LDAP_Login.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ejabberd_Active_Directory_LDAP_Login.txt</guid>
 (???)                <description>This tutorial shows you how to set up ejabberd to authenticate to an Active Directory LDAP.</description> 
 (???)                <pubDate>Wed, 12 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 12 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set up a federated XMPP Chat Network with ejabberd, your own Google Talk Hangouts alternative</title> 
 (???)                <link>gopher://raymii.org/0/Set_up_a_federated_XMPP_Chat_Network_with_ejabberd.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Set_up_a_federated_XMPP_Chat_Network_with_ejabberd.txt</guid>
 (???)                <description>This tutorial shows you how to set up your own federated chat network using ejabberd. It covers a basic single node ejabberd server and also the setup of an ejabberd cluster, including errors and DNS SRV record examples. Last but not least federation is also covered.</description> 
 (???)                <pubDate>Tue, 11 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 11 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X - Turn Bonjour off or on via the command line</title> 
 (???)                <link>gopher://raymii.org/0/OS_X_Turn_Bonjour_off_or_on_via_the_command_line.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS_X_Turn_Bonjour_off_or_on_via_the_command_line.txt</guid>
 (???)                <description>This little snippet switches off Bonjour on OS X via the command line or Apple Remote Desktop. This is useful when you want to disable iChat or Messages chatting on the local network. Bonjour is Apple's implementation of Zero configuration networking (Zeroconf), a group of technologies that includes service discovery, address assignment, and hostname resolution. Bonjour locates devices such as printers, other computers, and the services that those devices offer on a local network using multicast Domain Name System (mDNS) service records.</description> 
 (???)                <pubDate>Tue, 04 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 04 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X - Turn off sleep from the command line</title> 
 (???)                <link>gopher://raymii.org/0/OS_X_Turn_off_sleep_from_the_command_line.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS_X_Turn_off_sleep_from_the_command_line.txt</guid>
 (???)                <description>This little snippet turns off Sleep on an OS X machine, either iMac or Macbook. Normally when a Mac is not used it goes in sleep mode, this turns that off.</description> 
 (???)                <pubDate>Mon, 03 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 03 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X - Create Hardware report SPX and save it to a AFP share</title> 
 (???)                <link>gopher://raymii.org/0/OS_X_Create_Hardware_report_spx_and_save_it_to_a_AFP_share.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS_X_Create_Hardware_report_spx_and_save_it_to_a_AFP_share.txt</guid>
 (???)                <description>This script creates a OS X hardware report (an SPX file) and saves it to a AFP share. This is usefull when you are rolling out new machines. Run this script via Apple Remote Desktop and you have all your administration in your AFP share, which you can later put in your CMDB. The report has all the hardware data, from firmware, serial number, model, MAC addresses, disk and memory information, in short everything you need for your CMDB and support contracts.</description> 
 (???)                <pubDate>Sun, 02 Jun 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 02 Jun 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Gitlab Active Directory LDAP Authentication</title> 
 (???)                <link>gopher://raymii.org/0/Gitlab_and_Active_Directory_LDAP_Authentication.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Gitlab_and_Active_Directory_LDAP_Authentication.txt</guid>
 (???)                <description>Gitlab is a self hosted git based source control application similar to Github, written in Ruby on Rails. It is used by many organisations and is a wonderfull piece of software. It supports LDAP Authentication (via the OmniAuth Gem), but it is tricky to set up with Active Directory and Windows Server 2003/2008/2012. This tutorials shows you how to set up Gitlab to authenticate against Active Directory LDAP.</description> 
 (???)                <pubDate>Tue, 28 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 28 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OS X: Turn firewall on or off from the command line</title> 
 (???)                <link>gopher://raymii.org/0/OS_X_-_Turn_firewall_on_or_off_from_the_command_line.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS_X_-_Turn_firewall_on_or_off_from_the_command_line.txt</guid>
 (???)                <description>This command lets you turn the build in OS X firewall on and off, on both for specific services or essential services. It works with OS X 10.5, 10.6, 10.7 and 10.8.</description> 
 (???)                <pubDate>Fri, 10 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 10 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Exchange 2007 and 2010 Autodiscovery DNS SRV record for BIND</title> 
 (???)                <link>gopher://raymii.org/0/Exchange_2007_2010_Autodiscovery_DNS_SRV_record_for_BIND.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Exchange_2007_2010_Autodiscovery_DNS_SRV_record_for_BIND.txt</guid>
 (???)                <description>This is a BIND configuration example to set up Exchange Autodiscovery. Autodiscovery is the ability for Outlook to automatically configure itself to an Exchange 2007/2010 server. The main benefit is for remote users to use Outlook on the Internet as if it was connected on the LAN, this is called Outlook Anywhere or Outlook RPC over HTTP. This is very easily accomplished by having a specific DNS record available for the domain. However, the only examples Microsoft gives you are for their own software. This is the BIND version of the record.</description> 
 (???)                <pubDate>Thu, 09 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 09 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Hide or determine BIND version number</title> 
 (???)                <link>gopher://raymii.org/0/Get_DNS_server_version_and_hide_it_in_BIND.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_DNS_server_version_and_hide_it_in_BIND.txt</guid>
 (???)                <description>The BIND nameserver (and many others) return their version number when queried a special DNS query. This tutorial shows you how to query the BIND version and how to stop your own BIND server sending its version out.</description> 
 (???)                <pubDate>Wed, 08 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 08 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nagios plugin to check an OCSP server</title> 
 (???)                <link>gopher://raymii.org/0/Nagios_plugin_to_check_OCSP.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nagios_plugin_to_check_OCSP.txt</guid>
 (???)                <description>This is a nagios plugin to check an OCSP server. You can give it a hard coded certificate or your own one. This is sent to the OCSP server and the response is then parsed to give the correct nagios result. It is targeted at administrators who have their own OCSP and need to know when it is not working.</description> 
 (???)                <pubDate>Mon, 06 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 06 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nagios plugin to check Safenet HSM</title> 
 (???)                <link>gopher://raymii.org/0/Nagios_Plugin_to_check_a_Safenet_HSM.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nagios_Plugin_to_check_a_Safenet_HSM.txt</guid>
 (???)                <description>This is a nagios plugin which checks a Safenet Protectserver External HSM via the Safenet tools.</description> 
 (???)                <pubDate>Fri, 03 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 03 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nagios plugin to check CRL expiry in minutes</title> 
 (???)                <link>gopher://raymii.org/0/Nagios_plugin_to_check_CRL_expiry.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nagios_plugin_to_check_CRL_expiry.txt</guid>
 (???)                <description>This is a nagios plugin which you can use to check if a CRL (Certificate Revocation List, public list with revoked certificates) is still valid.</description> 
 (???)                <pubDate>Thu, 02 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 02 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Join Mac OS X to an Active Directory / OpenDLAP directory from the commandline</title> 
 (???)                <link>gopher://raymii.org/0/OS-X-Add-or_Remove_Mac_to_Active_Directory_or_OpenLDAP_Domain.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS-X-Add-or_Remove_Mac_to_Active_Directory_or_OpenLDAP_Domain.txt</guid>
 (???)                <description>This little snippet joins an Mac OS X computer to a Windows Active Directory or OpenLDAP Directory domain from the Command Line or via Apple Remote Desktop.</description> 
 (???)                <pubDate>Thu, 02 May 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 02 May 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>HP ILO - Quickly gather ILO version and firmware information via CURL</title> 
 (???)                <link>gopher://raymii.org/0/HP-ILO-Quickly-gather-firmware-and-version-information-with-CUR.txt</link> 
 (???)                <guid>gopher://raymii.org/0/HP-ILO-Quickly-gather-firmware-and-version-information-with-CUR.txt</guid>
 (???)                <description>Have a lot of HP servers with ILO cards, and want to gather information from them quicly? By default you can get some information in XML format, for ILO, ILO2, ILO3 and ILO4, with curl.</description> 
 (???)                <pubDate>Sat, 13 Apr 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 13 Apr 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Munin plugin to show Logstash/Kibana messages per hour</title> 
 (???)                <link>gopher://raymii.org/0/Munin_plugin_Logstash_Kibana_messages_per_hour.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Munin_plugin_Logstash_Kibana_messages_per_hour.txt</guid>
 (???)                <description>This is a simple munin plugin which shows you the amount of log messages your logstash/kibana server receives per hour.</description> 
 (???)                <pubDate>Fri, 12 Apr 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 12 Apr 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set up a Collectd client</title> 
 (???)                <link>gopher://raymii.org/0/Collectd_client_setup_tutorial.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Collectd_client_setup_tutorial.txt</guid>
 (???)                <description>This tutorial shows you how to set up a collectd client for use with a collectd server. What is collectd? collectd gathers statistics about the system it is running on and stores this information. Those statistics can then be used to find current performance bottlenecks (i.e. performance analysis) and predict future system load (i.e. capacity planning). Or if you just want pretty graphs of your private server and are fed up with some homegrown solution you're at the right place, too ;).</description> 
 (???)                <pubDate>Tue, 09 Apr 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 09 Apr 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set up a Collectd server with web frontend</title> 
 (???)                <link>gopher://raymii.org/0/Collectd_server_setup_tutorial_with_web_frontend.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Collectd_server_setup_tutorial_with_web_frontend.txt</guid>
 (???)                <description>This tutorial shows you how to set up a collectd server. It also shows you how to set up the collectd-web frontend, an interactive gui for collectd, and has it all firewalled. What is collectd? collectd gathers statistics about the system it is running on and stores this information. Those statistics can then be used to find current performance bottlenecks (i.e. performance analysis) and predict future system load (i.e. capacity planning). Or if you just want pretty graphs of your private server and are fed up with some homegrown solution you're at the right place, too ;). A collectd server is able to receive data from collectd clients.</description> 
 (???)                <pubDate>Tue, 09 Apr 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 09 Apr 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NGINX: Proxy folders to different root</title> 
 (???)                <link>gopher://raymii.org/0/NGINX_proxy_folder_to_different_root.txt</link> 
 (???)                <guid>gopher://raymii.org/0/NGINX_proxy_folder_to_different_root.txt</guid>
 (???)                <description>This tutorial shows you how to have NGINX use different folders as different upstream proxy's, without the proxy also having the folder. For example, if you proxy www.example.com/wiki to server wiki.example.com, by default it will go to wiki.example.com/wiki. This tutorial has a rewrite rule to fix that.</description> 
 (???)                <pubDate>Thu, 04 Apr 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 04 Apr 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Silent unatended apt-get upgrade</title> 
 (???)                <link>gopher://raymii.org/0/Silent-automatic-apt-get-upgrade.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Silent-automatic-apt-get-upgrade.txt</guid>
 (???)                <description>This tutorial will show you how to setup completely silent apt-get upgrade via cron. It also defaults to not overwriting config files if a package has a newer version.</description> 
 (???)                <pubDate>Sat, 30 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 30 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - sudoers safety and sanity checking in playbook</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_-_Sudo_Safety_and_Sanity_Checks.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_-_Sudo_Safety_and_Sanity_Checks.txt</guid>
 (???)                <description>Using Ansible to manage the /etc/sudoers file is fine, except when you have a syntax error in your template. This method helps you to only deploy a correct sudoers file.</description> 
 (???)                <pubDate>Sat, 23 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 23 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NGINX: Catch all error codes</title> 
 (???)                <link>gopher://raymii.org/0/NGINX_Catch_all_error_codes.txt</link> 
 (???)                <guid>gopher://raymii.org/0/NGINX_Catch_all_error_codes.txt</guid>
 (???)                <description>This little nginx config snippet shows you how to catch all error codes and show a single unified error page.</description> 
 (???)                <pubDate>Wed, 13 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 13 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NGINX: Hide / Block .git and .svn folders</title> 
 (???)                <link>gopher://raymii.org/0/NGINX_Block_access_to_.git_or_.svn_project_folders.txt</link> 
 (???)                <guid>gopher://raymii.org/0/NGINX_Block_access_to_.git_or_.svn_project_folders.txt</guid>
 (???)                <description>This little nginx config snippets helps you prohibit access to .git or .svn folders in nginx</description> 
 (???)                <pubDate>Wed, 13 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 13 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ansible - pure ssh based configuration management and deployment</title> 
 (???)                <link>gopher://raymii.org/0/Ansible_Deployment_Framework.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ansible_Deployment_Framework.txt</guid>
 (???)                <description>This tutorial will get you started with Ansible. Ansible is a radically simple model-driven configuration management, deployment, and command execution framework. Other tools in this space have been too complicated for too long, require too much bootstrapping, and have too much learning curve. By comparison, Ansible is dead simple and painless to extend. Puppet and Chef have about 60k lines of code. Ansibles core is a little over 2000 lines.</description> 
 (???)                <pubDate>Sat, 09 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 09 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Hosted Piwik</title> 
 (???)                <link>gopher://raymii.org/0/Hosted_Piwik.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Hosted_Piwik.txt</guid>
 (???)                <description>Piwik is an open source alternative to Google Analytics. I used to provide a free hosted version at hosted-oswa.org, but as of 2018 that is no longer the case. Be warned.</description> 
 (???)                <pubDate>Sat, 09 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 09 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Screenfetch installation tutorial</title> 
 (???)                <link>gopher://raymii.org/0/Screenfetch_installation_tutorial.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Screenfetch_installation_tutorial.txt</guid>
 (???)                <description>This tutorial will show you how to install screenfetch, a bash information tool. It displays handy system information at login, including distro name, kernel, uptime, cpu, ram and nice distro-based artwork. The tutorial includes support for bash and zsh, for every supported linux OS (ubuntu, centos, arch, redhat, solusOS, linux mint and more.)</description> 
 (???)                <pubDate>Sat, 09 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 09 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Better Cron env and shell control with the SHELL variable</title> 
 (???)                <link>gopher://raymii.org/0/Better_cron_env_and_shell_control_with_the_SHELL_variale.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Better_cron_env_and_shell_control_with_the_SHELL_variale.txt</guid>
 (???)                <description>Have better control over env variables and shell settings in cron via the SHELL variable and a few scripts.</description> 
 (???)                <pubDate>Fri, 08 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 08 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Word occurrence counter and analyzer</title> 
 (???)                <link>gopher://raymii.org/0/Word_occurrence_counter_and_analyzer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Word_occurrence_counter_and_analyzer.txt</guid>
 (???)                <description>With these commands you can analyze a text file. It will count all the occurrences of all words and put out the stats. It is usefull for song lyrics, books, notes and everything.</description> 
 (???)                <pubDate>Thu, 07 Mar 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 07 Mar 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Create a VMWare ESXi 5  5.1 5.5 USB install disk</title> 
 (???)                <link>gopher://raymii.org/0/VMWare-ESXi-5-USB-installer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/VMWare-ESXi-5-USB-installer.txt</guid>
 (???)                <description>This tutorial will show you how you can convert a VMWare ESXi 5, 5.1 and 5.5 iso image to a USB install disk. You will learn how to create a USB drive from which you can install VMWare ESXi 5.1. This also works for the special HP version of ESXi with all the drivers.</description> 
 (???)                <pubDate>Wed, 27 Feb 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 27 Feb 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Basic website and database backups with Duplicity</title> 
 (???)                <link>gopher://raymii.org/0/Website-and-database-backup-with-Duplicity.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Website-and-database-backup-with-Duplicity.txt</guid>
 (???)                <description>This tutorial will help you backup your website and database with Duplicity. You can safely backup your MySQL, MongoDB, website and other data to an off-site location.</description> 
 (???)                <pubDate>Fri, 15 Feb 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 15 Feb 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Systemd rosetta / cheatsheet</title> 
 (???)                <link>gopher://raymii.org/0/Systemd_Rosetta_Reference.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Systemd_Rosetta_Reference.txt</guid>
 (???)                <description>A reference for systemd, for sysadmins who love plain old init.</description> 
 (???)                <pubDate>Sun, 10 Feb 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 10 Feb 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL match certificate and private key</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_match_certificate_with_private_key.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_match_certificate_with_private_key.txt</guid>
 (???)                <description>This check lets you know if a certificate matches a private key. Today I had to set up something but I kept getting ssl errors. Turns out, the certificate did not match the private key, because the private key file was damaged. This is how I found out.</description> 
 (???)                <pubDate>Sat, 09 Feb 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 09 Feb 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL Generate CSR non-interactive</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_generate_CSR_non-interactive.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_generate_CSR_non-interactive.txt</guid>
 (???)                <description>This is a short command to generate a CSR (certificate signing request) with openssl without being prompted for the values which go in the certificate's Subject field.</description> 
 (???)                <pubDate>Sat, 09 Feb 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 09 Feb 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Munin - Fix MySQL plugin on Ubuntu 12.04 and Debian 6</title> 
 (???)                <link>gopher://raymii.org/0/Munin-Fix-MySQL-Plugin-on-Ubuntu-12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Munin-Fix-MySQL-Plugin-on-Ubuntu-12.04.txt</guid>
 (???)                <description>On Debian 6 and Ubuntu 12.04 the Munin MySQL plugin does not work by default because of a missing package. Here is a little trick on fixing it.</description> 
 (???)                <pubDate>Sat, 02 Feb 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 02 Feb 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Munin - Set up the NGINX status plugin on Ubuntu 12.04</title> 
 (???)                <link>gopher://raymii.org/0/Munin-NGINX-Status-Plugin-Ubuntu-12.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Munin-NGINX-Status-Plugin-Ubuntu-12.04.txt</guid>
 (???)                <description>This post will show you how to set up the Munin plugin to monitor NGINX (nginx_request and nginx_status) and graph it. You need to change some URLs in the config because by default this is wrong.</description> 
 (???)                <pubDate>Thu, 31 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 31 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Exploring /proc/ - tips and tricks for the procfs</title> 
 (???)                <link>gopher://raymii.org/0/Procfs_tips_and_tricks.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Procfs_tips_and_tricks.txt</guid>
 (???)                <description>This article has a lot of nice tips and trics on using the procfs linux virtual file system.</description> 
 (???)                <pubDate>Mon, 28 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 28 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>OpenSSL one liner to get expiry date from SSL Certificate of any website</title> 
 (???)                <link>gopher://raymii.org/0/OpenSSL_Get_Certificate_Expiry_Date_and_Other_Info.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OpenSSL_Get_Certificate_Expiry_Date_and_Other_Info.txt</guid>
 (???)                <description>This little openssl one liner gets the expiry date from a website's ssl certificate.</description> 
 (???)                <pubDate>Wed, 23 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 23 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Fix CentOS IPTables rule saving (iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 274: restorecon: command not found)</title> 
 (???)                <link>gopher://raymii.org/0/CentOS_Save_iptables_restorecon_error.txt</link> 
 (???)                <guid>gopher://raymii.org/0/CentOS_Save_iptables_restorecon_error.txt</guid>
 (???)                <description>On a default CentOS installation, when trying to execute the iptables save command you can get an error like iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 274: restorecon: command not found. Read this article to find out how to fix it.</description> 
 (???)                <pubDate>Wed, 23 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 23 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Restrict SSH</title> 
 (???)                <link>gopher://raymii.org/0/Restrict_SSH.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Restrict_SSH.txt</guid>
 (???)                <description>restrict_ssh.sh is a bash script which restricts ssh for a user to a set of commands via .ssh/authorized_keys, and log it verbosely.</description> 
 (???)                <pubDate>Sun, 20 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 20 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>RT (Request Tracker) - find and delete big attachments</title> 
 (???)                <link>gopher://raymii.org/0/RT_find__and_delete_big_attachments.txt</link> 
 (???)                <guid>gopher://raymii.org/0/RT_find__and_delete_big_attachments.txt</guid>
 (???)                <description>RT (Request Tracker) can save attachments. It saves these in the database (mysql). I had an issue where my mysqldump used in backupping RT would fail due to an mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table Attachments at row: xxxxx error. Adding the --max_allowed_packet=500M parameter to the mysqldump command didn't work, so here is how to search and find big attachments in RT using mysql.</description> 
 (???)                <pubDate>Thu, 17 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 17 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Install python 2.7 or 3 under Debian 6</title> 
 (???)                <link>gopher://raymii.org/0/Install_Python_2.7_or_3_on_debian_6.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Install_Python_2.7_or_3_on_debian_6.txt</guid>
 (???)                <description>Debian 6 by default ships with python 2.6.6. If for some reason need a newer version of python you can either mess with repo's, compile from source or use pythonbrew. This tutorial will show you how to install python 2.7 or 3 under debian 6 using pythonbrew.</description> 
 (???)                <pubDate>Tue, 15 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 15 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ruby script to upload or convert a Maildir Inbox to an IMAP server</title> 
 (???)                <link>gopher://raymii.org/0/Ruby_script_to_upload_or_convert_a_Maildir_Inbox_to_an_IMAP_Server.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ruby_script_to_upload_or_convert_a_Maildir_Inbox_to_an_IMAP_Server.txt</guid>
 (???)                <description>This is an overview of all the servers in the Sparkling Network, mostly as an overview for myself, but it might be interesting for others. It also has a status overview of the nodes...</description> 
 (???)                <pubDate>Tue, 01 Jan 2013 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 01 Jan 2013 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Python script to monitor a file for changes and then mail the report with the file attached.</title> 
 (???)                <link>gopher://raymii.org/0/Python-script-to-monitor-a-file-for-changes-and-then-mail-the-report-with-the-file-attached.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Python-script-to-monitor-a-file-for-changes-and-then-mail-the-report-with-the-file-attached.txt</guid>
 (???)                <description>This is a script which checks a file's md5 hash, compares it to a previous (or given) hash and mails a report with the option of attaching the file with the email. I wrote it because I use AIDE on some systems, and I let it auto update the database. This script runs via cron before and after the AIDE run, so I have an archive of databases. But it can be used for all kind of files, not just for the AIDE database.</description> 
 (???)                <pubDate>Fri, 21 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 21 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Exchange 2010 - OWA - Lock user after x amount of failed logins</title> 
 (???)                <link>gopher://raymii.org/0/Exchange_2010_OWA_lock_users_after_x_amount_of_failed_logins.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Exchange_2010_OWA_lock_users_after_x_amount_of_failed_logins.txt</guid>
 (???)                <description>This is a tutorial to set up automatic user lockout in Exchange 2010 - Outlook Web Acces (OWA). When a user does 5 wrong login attempts, he/she is locked out from the webinterface. After for example 5 minutes he or she is unlocked again automatically. This helps you mitigate brute force attacks, since an attacker can only try 1 password/minute, but the user will not be blocked for to long. Exchange 2010 has some special register settings to make IIS stop caching, otherwise it would not work. As a bonus you get an LDAP saved search query to view locked out users</description> 
 (???)                <pubDate>Wed, 19 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 19 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Restore iptables rules after a reboot on debian</title> 
 (???)                <link>gopher://raymii.org/0/Restore-iptables-rules-after-a-reboot-on-debian.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Restore-iptables-rules-after-a-reboot-on-debian.txt</guid>
 (???)                <description>This small tutorial will help you set up iptables to survive a reboot.</description> 
 (???)                <pubDate>Wed, 12 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 12 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>CIDR Cheatsheet</title> 
 (???)                <link>gopher://raymii.org/0/CIDR-Cheatsheet.txt</link> 
 (???)                <guid>gopher://raymii.org/0/CIDR-Cheatsheet.txt</guid>
 (???)                <description>This is a handy CIDR cheatsheet.</description> 
 (???)                <pubDate>Tue, 11 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 11 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Resize OS X Mountain Lion installer to fit on a single layer 4.7 GB DVD</title> 
 (???)                <link>gopher://raymii.org/0/OS-X-Mountain_Lion_iso_resize_to_fit_on_a_single_layer_dvd.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS-X-Mountain_Lion_iso_resize_to_fit_on_a_single_layer_dvd.txt</guid>
 (???)                <description>This script will help you resize the OS X Mountain Lion InstallESD.dmg file to fit on a single layer DVD. The normal .dmg file will give an error that it is to big for a single layer DVD. The install works fine afterwards, the .dmg file just has a defined size of 4.75 GB. Resizing it via the Disk Utility will not work because it is a read only dmg image.</description> 
 (???)                <pubDate>Tue, 11 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 11 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Munin optimization guide for Debian (rrdcached, tmpfs, ionice and nice)</title> 
 (???)                <link>gopher://raymii.org/0/Munin_optimalization_on_Debian.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Munin_optimalization_on_Debian.txt</guid>
 (???)                <description>This is a tutorial to help you tune the performance of Munin using rrdcached, tmpfs, ionice, nice and a few other tricks.</description> 
 (???)                <pubDate>Sat, 08 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 08 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set OS X hostname from the commandline</title> 
 (???)                <link>gopher://raymii.org/0/OS-X-Change-Hostname.txt</link> 
 (???)                <guid>gopher://raymii.org/0/OS-X-Change-Hostname.txt</guid>
 (???)                <description>This little snippet helps you change the hostname of a computer running OS X. OS X defines the hostname/computer name in three places and you need to change all of them.</description> 
 (???)                <pubDate>Wed, 05 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 05 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>ClamAV installation and daily scan + report on Ubuntu</title> 
 (???)                <link>gopher://raymii.org/0/ClamAV.txt</link> 
 (???)                <guid>gopher://raymii.org/0/ClamAV.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Sat, 01 Dec 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 01 Dec 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Limit access to openssh features with the Match option</title> 
 (???)                <link>gopher://raymii.org/0/Limit_access_to_openssh_features_with_the_Match_keyword.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Limit_access_to_openssh_features_with_the_Match_keyword.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Sat, 24 Nov 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 24 Nov 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set up your own distributed, redundant, and encrypted storage grid with Tahoe-LAFS</title> 
 (???)                <link>gopher://raymii.org/0/Tahoe_LAFS_Storage_Grid.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Tahoe_LAFS_Storage_Grid.txt</guid>
 (???)                <description>This article covers the installation and configuration of Tahoe/LAFS, a distributed, encrypted and redundant storage clustering grid.</description> 
 (???)                <pubDate>Thu, 08 Nov 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 08 Nov 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Git-clean</title> 
 (???)                <link>gopher://raymii.org/0/Git-clean.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Git-clean.txt</guid>
 (???)                <description>git-clean - bash script to find big (binary) files in a git repo and history, and clean them</description> 
 (???)                <pubDate>Thu, 08 Nov 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 08 Nov 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Small low cost linux pc's, an overview from 11-2012</title> 
 (???)                <link>gopher://raymii.org/0/Small_Linux_PCs.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Small_Linux_PCs.txt</guid>
 (???)                <description>This is an overview of small linux computers, mostly ARM based.</description> 
 (???)                <pubDate>Wed, 07 Nov 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 07 Nov 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ray-Mon - PHP and Bash server status monitoring</title> 
 (???)                <link>gopher://raymii.org/0/Bash_PHP_Server_Status_Monitor.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_PHP_Server_Status_Monitor.txt</guid>
 (???)                <description>Ray-Mon is a linux server monitoring script written in PHP and Bash, utilizing JSON as data storage. It requires only bash and a webserver on the client side, and only php on the server side. The client currently supports monitoring processes, uptime, updates, amount of users logged in, disk usage, RAM usage and network traffic.</description> 
 (???)                <pubDate>Mon, 22 Oct 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 22 Oct 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Codename Geld</title> 
 (???)                <link>gopher://raymii.org/0/Codename_Geld.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Codename_Geld.txt</guid>
 (???)                <description>Codename Geld is a finance manager written in PHP. It uses a JSON text file for the values and the visual side is created with the excellent HTML5 Kickstart framework by Joshua Gatcke. It is not as fancy as mint.com or gnucash, so if you need advanced features (multiple accounts for example) you might want to use another piece of software. Also, the code is quite messy.</description> 
 (???)                <pubDate>Mon, 15 Oct 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 15 Oct 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>ed cheatsheet</title> 
 (???)                <link>gopher://raymii.org/0/ed_cheatsheet.txt</link> 
 (???)                <guid>gopher://raymii.org/0/ed_cheatsheet.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Sat, 06 Oct 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 06 Oct 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Persistent reverse (NAT bypassing) SSH tunnel access with autossh</title> 
 (???)                <link>gopher://raymii.org/0/Autossh_persistent_tunnels.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Autossh_persistent_tunnels.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Fri, 05 Oct 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 05 Oct 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Nagios plugin to check certificates on local file system</title> 
 (???)                <link>gopher://raymii.org/0/Nagios_check_local_certificate_files.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nagios_check_local_certificate_files.txt</guid>
 (???)                <description>This is a nagios plugin to check local ssl certifcates for expiry.</description> 
 (???)                <pubDate>Mon, 24 Sep 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 24 Sep 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NutsManager</title> 
 (???)                <link>gopher://raymii.org/0/NutsManager.txt</link> 
 (???)                <guid>gopher://raymii.org/0/NutsManager.txt</guid>
 (???)                <description>NutsManager is a power/gas/water usage tracker written in PHP. It uses a JSON text file for the values and the visual side is created with the excellent HTML5 Kickstart framework by Joshua Gatcke. The graphs are made with the flot framework. It helps me to keep track of my power usage, and shows me on which days I use a lot, and on which days I do not. That way, I know that a LAN party costs me a lot. Also, the code is quite messy.</description> 
 (???)                <pubDate>Sat, 15 Sep 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 Sep 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>PHP Task/Todo list</title> 
 (???)                <link>gopher://raymii.org/0/PHP-task-list-v2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/PHP-task-list-v2.txt</guid>
 (???)                <description>This is a task/todo list written in PHP. It uses a JSON text file for the tasks, and the visual side is created with the HTML5 Kickstart framework by Joshua Gatcke.</description> 
 (???)                <pubDate>Wed, 12 Sep 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 12 Sep 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Complete word count analysis of Security Now, episode 1 trough 370.</title> 
 (???)                <link>gopher://raymii.org/0/Security_Now_Word_Analyzer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Security_Now_Word_Analyzer.txt</guid>
 (???)                <description>Bash-based analysis of which words are used in the security now podcast by Steve Gibson and Leo Laporte</description> 
 (???)                <pubDate>Sun, 09 Sep 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 09 Sep 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Correctly grep and display the uptime, load average and amount of users</title> 
 (???)                <link>gopher://raymii.org/0/Get_uptime_load_and_users_with_grep_sed_and_awk.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Get_uptime_load_and_users_with_grep_sed_and_awk.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Thu, 06 Sep 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 06 Sep 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Packages</title> 
 (???)                <link>gopher://raymii.org/0/Software_packages.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Software_packages.txt</guid>
 (???)                <description>Some software I encounter does not have a debian .deb package available. Via the ./configure, make, sudo checkinstall I compile them into a package and put it up here for download.</description> 
 (???)                <pubDate>Sun, 02 Sep 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 02 Sep 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Tiny Tiny RSS</title> 
 (???)                <link>gopher://raymii.org/0/Tiny-Tiny-RSS.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Tiny-Tiny-RSS.txt</guid>
 (???)                <description>Tiny Tiny RSS is an open source web-based news feed (RSS/Atom) reader and aggregator, designed to allow you to read news from any location, while feeling as close to a real desktop application as possible. I will go over the features of TIny Tiny RSS, compare it to Google Reader and write some things I like about it, and things I miss about it.</description> 
 (???)                <pubDate>Sat, 01 Sep 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 01 Sep 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Wallbase.cc commandline bash wget downloader</title> 
 (???)                <link>gopher://raymii.org/0/Wallbase.cc_Command_line_script.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Wallbase.cc_Command_line_script.txt</guid>
 (???)                <description>This is a script to download wallpapers from wallbase.cc with bash and wget.</description> 
 (???)                <pubDate>Sun, 22 Jul 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 22 Jul 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Small Operating Systems / Linux Distributions</title> 
 (???)                <link>gopher://raymii.org/0/Small_Linux_Distros.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Small_Linux_Distros.txt</guid>
 (???)                <description>This is an overview of small operating systems and Linux distributions, most of them work well on older hardware (pre-dual core era). It provides screenshots, package information, size and specs and project information on the distro.</description> 
 (???)                <pubDate>Mon, 09 Jul 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 09 Jul 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Postfix snippets - not finished</title> 
 (???)                <link>gopher://raymii.org/0/Set_up_an_IMAPS_and_SMTPS_mail_server_with_Postfix_and_Dovecot.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Set_up_an_IMAPS_and_SMTPS_mail_server_with_Postfix_and_Dovecot.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 09 Jul 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 09 Jul 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>ProxBash - a bash script to manage Proxmox VE</title> 
 (???)                <link>gopher://raymii.org/0/ProxBash.txt</link> 
 (???)                <guid>gopher://raymii.org/0/ProxBash.txt</guid>
 (???)                <description>ProxMox VE is a very nice piece of software to setup a VM host very fast, which also is easy manageable via a webinterface. It supports both OpenVZ and KVM. I use it to manage a few VM's to test stuff on and it works really great. However, I'm a command line lover, and I thought it would be nice to be able to 'Manage' Proxmox VE from a bash shell. And I've written a script to do just that. </description> 
 (???)                <pubDate>Thu, 28 Jun 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 28 Jun 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Ubuntu/Debian update mailer</title> 
 (???)                <link>gopher://raymii.org/0/Ubuntu_update_mailer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ubuntu_update_mailer.txt</guid>
 (???)                <description>This is a bash script for Ubuntu and Debian, to be run by cron on a set interval. It checks if there are apt-updates, and if so, mails an overview of the packages which can be updated, whith their local version, the version available and an URL to the Ubuntu package site where you can see the changelog. I wrote this as an addition for my Nagios monitoring, that only shows how many updates there are, this is a lot more verbose. It also runs on Debian since 1 Nov 2012. Only the links don't work then, because the packages are different.</description> 
 (???)                <pubDate>Sun, 10 Jun 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 10 Jun 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Terrible Start</title> 
 (???)                <link>gopher://raymii.org/0/Terrible-start.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Terrible-start.txt</guid>
 (???)                <description>This is a python based Linux start/welcome screen written for Terrible Linux</description> 
 (???)                <pubDate>Thu, 07 Jun 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 07 Jun 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash - do something in every subdirectory</title> 
 (???)                <link>gopher://raymii.org/0/Bash_-_Do_something_in_every_subdirectory_of_a_folder.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash_-_Do_something_in_every_subdirectory_of_a_folder.txt</guid>
 (???)                <description>Snippet which has a copy paste bash for loop to do something in a directory.</description> 
 (???)                <pubDate>Wed, 16 May 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 16 May 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash script to list all changed files in certain period</title> 
 (???)                <link>gopher://raymii.org/0/List-all-changed-files-in-a-certain-period.txt</link> 
 (???)                <guid>gopher://raymii.org/0/List-all-changed-files-in-a-certain-period.txt</guid>
 (???)                <description>This is a little script I wrote and use to get a daily report of all the files that have changed on my servers. What it does is list all the files that are modified within a certain time period from a given directory. It can also be run from a desktop machine, or any machine which runs bash, find and ls. Usage is simple, save the script, chmod +x it, then run (./report.sh). If you want a specific directory to be scanned run it like ./report.sh /var/www/my/dir</description> 
 (???)                <pubDate>Sun, 13 May 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 13 May 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Set up a local Ubuntu (apt) repository with apt-mirror</title> 
 (???)                <link>gopher://raymii.org/0/Set_up_a_local_Ubuntu_debian_apt_mirror.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Set_up_a_local_Ubuntu_debian_apt_mirror.txt</guid>
 (???)                <description>This tutorial shows you how to setup your own debian/ubuntu package repository with apt-mirror.</description> 
 (???)                <pubDate>Wed, 28 Mar 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 28 Mar 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NurseCalc o2 - Bash script and online app for Oxygen Calculations</title> 
 (???)                <link>gopher://raymii.org/0/Nursecalc-o2.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nursecalc-o2.txt</guid>
 (???)                <description>This script will help you with nursing-related oxygen calculations. Available as bash script and as online HTML5 application.</description> 
 (???)                <pubDate>Sun, 12 Feb 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 12 Feb 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NurseCalc Infuus - Bash script and Online app for infusion and drip (speed) Calculations </title> 
 (???)                <link>gopher://raymii.org/0/Nursecalc-Infuus.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nursecalc-Infuus.txt</guid>
 (???)                <description>This script will help you with nursing-related infusion and drip speed calculations. Available as bash script and as online HTML5 application.</description> 
 (???)                <pubDate>Wed, 01 Feb 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 01 Feb 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Some Bash and Arch Tweaks </title> 
 (???)                <link>gopher://raymii.org/0/Arch-bash-pacman-bashrc-tips.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Arch-bash-pacman-bashrc-tips.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Sun, 01 Jan 2012 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 01 Jan 2012 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>MagicProg: Magic the Gathering (RPG/TGC) Life Program </title> 
 (???)                <link>gopher://raymii.org/0/Magicprog.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Magicprog.txt</guid>
 (???)                <description>I'm a fervent [Magic the Gathering][7] player. If you do not know what magic is, scroll down for an explanation. I play it a lot in my free time, and I participate in bootserdrafts and casual tournaments here locally. I've developed a program to keep the life in a 2 player game. It's called MagicProg. It will also work for TGC's like pokemon, yu-gi-oh, WoW TCG or any other TGC. And it has a note area.</description> 
 (???)                <pubDate>Tue, 27 Dec 2011 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 27 Dec 2011 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Chrome Extensions for Privacy, Adblocking and anti-tracking</title> 
 (???)                <link>gopher://raymii.org/0/Chrome-extensions-for-privacy.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Chrome-extensions-for-privacy.txt</guid>
 (???)                <description>This is a list with extensions for google chrome which help you block tracking and ads, and help you protect your privacy.</description> 
 (???)                <pubDate>Thu, 01 Sep 2011 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 01 Sep 2011 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Stopping fail2ban.server : ERROR Unexpected communication error and other errors in fail2ban on ubuntu 9.04</title> 
 (???)                <link>gopher://raymii.org/0/Stopping-fail2ban.server-ERROR-Unexpected-communication-error-and-other-errors-in-fail2ban-on-ubuntu-9.04.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Stopping-fail2ban.server-ERROR-Unexpected-communication-error-and-other-errors-in-fail2ban-on-ubuntu-9.04.txt</guid>
 (???)                <description>This tutorial will show you how to stop fail2ban.server : ERROR Unexpected communication errors on Ubuntu 9.04.</description> 
 (???)                <pubDate>Thu, 23 Jun 2011 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 23 Jun 2011 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Introduction to DokuWiki</title> 
 (???)                <link>gopher://raymii.org/0/Dokuwiki_Overview.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Dokuwiki_Overview.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Wed, 15 Jun 2011 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 15 Jun 2011 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Introduction to Markdown</title> 
 (???)                <link>gopher://raymii.org/0/Markdown_Introduction_Tutorial_Overview.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Markdown_Introduction_Tutorial_Overview.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Sun, 12 Jun 2011 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 12 Jun 2011 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Tether your Sonim XP3 phone with Linux</title> 
 (???)                <link>gopher://raymii.org/0/Tether-your-sonim-xp3-phone-with-linux.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Tether-your-sonim-xp3-phone-with-linux.txt</guid>
 (???)                <description>This tutorial shows you how tot tether your sonim xp3 phone with (arch) linux.</description> 
 (???)                <pubDate>Tue, 08 Feb 2011 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 08 Feb 2011 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>What to do if you cannot execute CHMOD</title> 
 (???)                <link>gopher://raymii.org/0/What-to-do-if-you-cannot-execute-chmod.txt</link> 
 (???)                <guid>gopher://raymii.org/0/What-to-do-if-you-cannot-execute-chmod.txt</guid>
 (???)                <description>This tutorial shows you how to execute chmod when you have screwed up the permissions of chmod.</description> 
 (???)                <pubDate>Sat, 15 May 2010 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 15 May 2010 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Debian packages clean up commands</title> 
 (???)                <link>gopher://raymii.org/0/Debian-apt-get-dpkg-packages-cleanup-commands.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Debian-apt-get-dpkg-packages-cleanup-commands.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Fri, 01 Jan 2010 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 01 Jan 2010 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>NoPriv.py - Easy IMAP email backup to HTML archive.</title> 
 (???)                <link>gopher://raymii.org/0/Nopriv.py.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Nopriv.py.txt</guid>
 (???)                <description>NoPriv.py is a python script to backup any IMAP capable email account to a HTML archive, nicely browsable, instead of weird folders (Maildir), one huge file (mbox), only needing a web browser to view (thunderbird) and no propritary code, so you can make sure I won't steal your password.</description> 
 (???)                <pubDate>Fri, 01 Jan 2010 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 01 Jan 2010 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Customize your Clonezilla Live CD</title> 
 (???)                <link>gopher://raymii.org/0/Customize-your-clonezilla-live-CD.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Customize-your-clonezilla-live-CD.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Fri, 01 Jan 2010 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Fri, 01 Jan 2010 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>EasyConverter</title> 
 (???)                <link>gopher://raymii.org/0/Easyconverter.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Easyconverter.txt</guid>
 (???)                <description>Zenity wrapper around ffmpeg to convert media files</description> 
 (???)                <pubDate>Wed, 23 Dec 2009 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 23 Dec 2009 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>SSHdialog</title> 
 (???)                <link>gopher://raymii.org/0/SSHDialog.txt</link> 
 (???)                <guid>gopher://raymii.org/0/SSHDialog.txt</guid>
 (???)                <description>SSHdialog - Small command line SSH helper</description> 
 (???)                <pubDate>Mon, 26 Oct 2009 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 26 Oct 2009 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Clonezilla Backup Script v0.2</title> 
 (???)                <link>gopher://raymii.org/0/Clonezilla-custom-backup-script.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Clonezilla-custom-backup-script.txt</guid>
 (???)                <description>Clonezilla is wonderfull software. At work we use it daily to image laptops. We have a windows PC with a big hard drive, which is shared via samba. Because we image an average of 10 laptops every morning, I decided to customize the script. So together with a colleague we made a script which automatically grabs our latest image from the share and restores it. </description> 
 (???)                <pubDate>Mon, 18 May 2009 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 18 May 2009 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Postfix: log message from, to and subject</title> 
 (???)                <link>gopher://raymii.org/0/Postfix_Log_message_from_to_and_subject_headers.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Postfix_Log_message_from_to_and_subject_headers.txt</guid>
 (???)                <description>This tutorial shows you how to set up postfix to log email subject and other headers.</description> 
 (???)                <pubDate>Sat, 28 Mar 2009 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sat, 28 Mar 2009 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash script for massive rename to numbers</title> 
 (???)                <link>gopher://raymii.org/0/Bash-massive-rename-to-numbers.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Bash-massive-rename-to-numbers.txt</guid>
 (???)                <description>Older snippet which was used for dynamic wallpaper switching.</description> 
 (???)                <pubDate>Sun, 14 Sep 2008 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 14 Sep 2008 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Javascript tricks</title> 
 (???)                <link>gopher://raymii.org/0/Javascript-tricks.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Javascript-tricks.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Tue, 08 Jul 2008 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Tue, 08 Jul 2008 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Convert FLV's to MP3</title> 
 (???)                <link>gopher://raymii.org/0/Convert-all-flv-files-in-a-folder-to-mp3.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Convert-all-flv-files-in-a-folder-to-mp3.txt</guid>
 (???)                <description>Bash snippet to convert all .flv files to .mp3.</description> 
 (???)                <pubDate>Sun, 15 Jun 2008 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 15 Jun 2008 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Setting up Motion with FTP and Email! support</title> 
 (???)                <link>gopher://raymii.org/0/Setting-up-motion-with-ftp-and-email-support.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Setting-up-motion-with-ftp-and-email-support.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Wed, 09 Apr 2008 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Wed, 09 Apr 2008 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Bash ja/nee keuze</title> 
 (???)                <link>gopher://raymii.org/0/Ja-Nee-keuze-toevoegen-in-een-bash-script.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Ja-Nee-keuze-toevoegen-in-een-bash-script.txt</guid>
 (???)                <description>Dutch snippet on adding a yes/no choice in a bash script</description> 
 (???)                <pubDate>Sun, 03 Feb 2008 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 03 Feb 2008 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Imagemagick thumbnailer</title> 
 (???)                <link>gopher://raymii.org/0/Imagemagick-thumbnailer.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Imagemagick-thumbnailer.txt</guid>
 (???)                <description>Create some nice thumbnails with Imagemagick</description> 
 (???)                <pubDate>Thu, 29 Nov 2007 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Thu, 29 Nov 2007 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>Vim Cheatsheet</title> 
 (???)                <link>gopher://raymii.org/0/Vim_Cheatsheet.txt</link> 
 (???)                <guid>gopher://raymii.org/0/Vim_Cheatsheet.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 01 Jan 2007 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 01 Jan 2007 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>RET Metro Type T SG/2</title> 
 (???)                <link>gopher://raymii.org/0/RET_Metro_Type_T.txt</link> 
 (???)                <guid>gopher://raymii.org/0/RET_Metro_Type_T.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 02 Jan 2006 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 02 Jan 2006 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>RET Metro Type M MG/2</title> 
 (???)                <link>gopher://raymii.org/0/RET_Metro_Type_M.txt</link> 
 (???)                <guid>gopher://raymii.org/0/RET_Metro_Type_M.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 02 Jan 2006 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 02 Jan 2006 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>RET Metro ZUB</title> 
 (???)                <link>gopher://raymii.org/0/RET_Metro_ZUB.txt</link> 
 (???)                <guid>gopher://raymii.org/0/RET_Metro_ZUB.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 02 Jan 2006 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 02 Jan 2006 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>RET Metro ATB</title> 
 (???)                <link>gopher://raymii.org/0/RET_Metro_ATB.txt</link> 
 (???)                <guid>gopher://raymii.org/0/RET_Metro_ATB.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Mon, 02 Jan 2006 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Mon, 02 Jan 2006 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)            <item>
 (???)                <title>About</title> 
 (???)                <link>gopher://raymii.org/0/About.txt</link> 
 (???)                <guid>gopher://raymii.org/0/About.txt</guid>
 (???)                <description>Not available.</description> 
 (???)                <pubDate>Sun, 01 Jan 2006 00:00:00 GMT</pubDate>
 (???)                <lastBuildDate>Sun, 01 Jan 2006 00:00:00 GMT</lastBuildDate>
 (???)            </item>
 (???)    
 (???)        </channel>
 (???)    </rss>
 (???)    
 (???)