diff options
63 files changed, 746 insertions, 518 deletions
diff --git a/gemfeed/2008-06-26-perl-poetry.md b/gemfeed/2008-06-26-perl-poetry.md index 0de1bdaf..e64cd0f4 100644 --- a/gemfeed/2008-06-26-perl-poetry.md +++ b/gemfeed/2008-06-26-perl-poetry.md @@ -2,6 +2,12 @@ > Published at 2008-06-26T21:43:51+01:00; Updated at 2021-05-04 +Here are some Perl Poems I wrote. They don't do anything useful when you run them, but they don't produce a compiler error either. They only exist for fun and demonstrate what you can do with Perl syntax. + +Wikipedia: "Perl poetry is the practice of writing poems that can be compiled as legal Perl code, for example the piece known as Black Perl. Perl poetry is made possible by the large number of English words that are used in the Perl language. New poems are regularly submitted to the community at PerlMonks." + +[https://en.wikipedia.org/wiki/Perl](https://en.wikipedia.org/wiki/Perl) + ``` '\|/' * -- * ----- @@ -28,20 +34,11 @@ _~~|~/_|_|__/|~~~~~~~ | / ~~~~~ | | ~~~~~~~~ ## Table of Contents * [⇢ Perl Poetry](#perl-poetry) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ math.pl](#mathpl) * [⇢ ⇢ christmas.pl](#christmaspl) * [⇢ ⇢ shopping.pl](#shoppingpl) * [⇢ ⇢ More...](#more) -## Introduction - -Here are some Perl Poems I wrote. They don't do anything useful when you run them, but they don't produce a compiler error either. They only exist for fun and demonstrate what you can do with Perl syntax. - -Wikipedia: "Perl poetry is the practice of writing poems that can be compiled as legal Perl code, for example the piece known as Black Perl. Perl poetry is made possible by the large number of English words that are used in the Perl language. New poems are regularly submitted to the community at PerlMonks." - -[https://en.wikipedia.org/wiki/Perl](https://en.wikipedia.org/wiki/Perl) - ## math.pl ```perl diff --git a/gemfeed/2010-04-09-standard-ml-and-haskell.md b/gemfeed/2010-04-09-standard-ml-and-haskell.md index daad07b5..cdf4c5d5 100644 --- a/gemfeed/2010-04-09-standard-ml-and-haskell.md +++ b/gemfeed/2010-04-09-standard-ml-and-haskell.md @@ -8,6 +8,16 @@ As you will see, SML and Haskell are very similar (at least when it comes to the Haskell is also a "pure functional" programming language, whereas SML also makes explicit use of imperative concepts. I am by far not a specialist in either of these languages, but here are a few functions implemented in both SML and Haskell: +## Table of Contents + +* [⇢ Standard ML and Haskell](#standard-ml-and-haskell) +* [⇢ ⇢ Defining a multi-data type](#defining-a-multi-data-type) +* [⇢ ⇢ Processing a multi](#processing-a-multi) +* [⇢ ⇢ Simplify function](#simplify-function) +* [⇢ ⇢ Delete all](#delete-all) +* [⇢ ⇢ Delete one](#delete-one) +* [⇢ ⇢ Higher-order functions](#higher-order-functions) + ## Defining a multi-data type Standard ML: diff --git a/gemfeed/2010-05-09-the-fype-programming-language.md b/gemfeed/2010-05-09-the-fype-programming-language.md index c7f8850d..3885a031 100644 --- a/gemfeed/2010-05-09-the-fype-programming-language.md +++ b/gemfeed/2010-05-09-the-fype-programming-language.md @@ -2,6 +2,12 @@ > Published at 2010-05-09T12:48:29+01:00; Updated at 2021-05-05 +Fype is an interpreted programming language created by me for learning and fun. The interpreter is written in C. It has been tested on FreeBSD and NetBSD and may also work on other Unix like operating systems such as Linux based ones. Besides learning and fun, there is no other use case of why Fype exists as many other programming languages are much faster and more powerful. + +The Fype syntax is straightforward and uses a maximum look ahead of 1 and an effortless top-down parsing mechanism. Fype is parsing and interpreting its code simultaneously. This means that syntax errors are only detected during program runtime. + +Fype is a recursive acronym and means "Fype is For Your Program Execution" or "Fype is Free Yak Programmed for ELF". You could also say, "It's not a hype - it's Fype!". + ``` ____ _ __ / / _|_ _ _ __ ___ _ _ ___ __ _| |__ / _|_ _ @@ -11,11 +17,33 @@ |___/|_| |___/ |___/ ``` -Fype is an interpreted programming language created by me for learning and fun. The interpreter is written in C. It has been tested on FreeBSD and NetBSD and may also work on other Unix like operating systems such as Linux based ones. Besides learning and fun, there is no other use case of why Fype exists as many other programming languages are much faster and more powerful. - -The Fype syntax is straightforward and uses a maximum look ahead of 1 and an effortless top-down parsing mechanism. Fype is parsing and interpreting its code simultaneously. This means that syntax errors are only detected during program runtime. - -Fype is a recursive acronym and means "Fype is For Your Program Execution" or "Fype is Free Yak Programmed for ELF". You could also say, "It's not a hype - it's Fype!". +## Table of Contents + +* [⇢ The Fype Programming Language](#the-fype-programming-language) +* [⇢ ⇢ Object-oriented C style](#object-oriented-c-style) +* [⇢ ⇢ Data types](#data-types) +* [⇢ ⇢ Syntax](#syntax) +* [⇢ ⇢ ⇢ Comments](#comments) +* [⇢ ⇢ ⇢ Variables](#variables) +* [⇢ ⇢ ⇢ Synonyms](#synonyms) +* [⇢ ⇢ Statements and expressions](#statements-and-expressions) +* [⇢ ⇢ ⇢ Parenthesis](#parenthesis) +* [⇢ ⇢ ⇢ Basic expressions](#basic-expressions) +* [⇢ ⇢ ⇢ Bitwise expressions](#bitwise-expressions) +* [⇢ ⇢ ⇢ Numeric expressions](#numeric-expressions) +* [⇢ ⇢ Control statements](#control-statements) +* [⇢ ⇢ Scopes](#scopes) +* [⇢ ⇢ Definedness ](#definedness-) +* [⇢ ⇢ System ](#system-) +* [⇢ ⇢ ⇢ I/O ](#io-) +* [⇢ ⇢ Procedures and functions](#procedures-and-functions) +* [⇢ ⇢ ⇢ Procedures](#procedures) +* [⇢ ⇢ ⇢ Nested procedures](#nested-procedures) +* [⇢ ⇢ ⇢ Functions](#functions) +* [⇢ ⇢ ⇢ Nested functions](#nested-functions) +* [⇢ ⇢ Arrays](#arrays) +* [⇢ ⇢ Fancy stuff](#fancy-stuff) +* [⇢ ⇢ May the source be with you](#may-the-source-be-with-you) ## Object-oriented C style diff --git a/gemfeed/2011-05-07-perl-daemon-service-framework.md b/gemfeed/2011-05-07-perl-daemon-service-framework.md index e393a1ea..7364826f 100644 --- a/gemfeed/2011-05-07-perl-daemon-service-framework.md +++ b/gemfeed/2011-05-07-perl-daemon-service-framework.md @@ -2,6 +2,8 @@ > Published at 2011-05-07T22:26:02+01:00; Updated at 2021-05-07 +PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided. + ``` a'! _,,_ a'! _,,_ a'! _,,_ \\_/ \ \\_/ \ \\_/ \.-, @@ -12,7 +14,6 @@ ## Table of Contents * [⇢ Perl Daemon (Service Framework)](#perl-daemon-service-framework) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ Features](#features) * [⇢ ⇢ Quick Guide](#quick-guide) * [⇢ ⇢ How to configure](#how-to-configure) @@ -23,10 +24,6 @@ * [⇢ ⇢ ⇢ Your own module](#your-own-module) * [⇢ ⇢ May the source be with you](#may-the-source-be-with-you) -## Introduction - -PerlDaemon is a minimal daemon for Linux and other Unix like operating systems programmed in Perl. It is a minimal but pretty functional and fairly generic service framework. This means that it does not do anything useful other than providing a framework for starting, stopping, configuring and logging. To do something useful, a module (written in Perl) must be provided. - ## Features PerlDaemon supports: diff --git a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md index fd54242c..f0c1af25 100644 --- a/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md +++ b/gemfeed/2015-12-05-run-debian-on-your-phone-with-debroid.md @@ -2,6 +2,12 @@ > Published at 2015-12-05T16:12:57+00:00; Updated at 2021-05-16 +You can use the following tutorial to install a full-blown Debian GNU/Linux Chroot on an LG G3 D855 CyanogenMod 13 (Android 6). First of all, you need to have root permissions on your phone, and you also need to have the developer mode activated. The following steps have been tested on Linux (Fedora 23). + +[](./run-debian-on-your-phone-with-debroid/Deboroid.png) + +A couple of years have passed since I last worked on Debroid. Currently, I am using the Termux app on Android, which is less sophisticated than a fully blown Debian installation but sufficient for my current requirements. The content of this site may be still relevant, and it would also work with more recent versions of Debian and Android. I would expect that some minor modifications need to be made, though. + ``` ____ _ _ _ | _ \ ___| |__ _ __ ___ (_) __| | @@ -11,13 +17,16 @@ ``` -You can use the following tutorial to install a full-blown Debian GNU/Linux Chroot on an LG G3 D855 CyanogenMod 13 (Android 6). First of all, you need to have root permissions on your phone, and you also need to have the developer mode activated. The following steps have been tested on Linux (Fedora 23). - -[](./run-debian-on-your-phone-with-debroid/Deboroid.png) +## Table of Contents -## Foreword - -A couple of years have passed since I last worked on Debroid. Currently, I am using the Termux app on Android, which is less sophisticated than a fully blown Debian installation but sufficient for my current requirements. The content of this site may be still relevant, and it would also work with more recent versions of Debian and Android. I would expect that some minor modifications need to be made, though. +* [⇢ Run Debian on your phone with Debroid](#run-debian-on-your-phone-with-debroid) +* [⇢ ⇢ Step by step guide](#step-by-step-guide) +* [⇢ ⇢ ⇢ First debootstrap stage](#first-debootstrap-stage) +* [⇢ ⇢ ⇢ Copy Debian image to the phone](#copy-debian-image-to-the-phone) +* [⇢ ⇢ ⇢ Second debootstrap stage](#second-debootstrap-stage) +* [⇢ ⇢ ⇢ Setup of various scripts](#setup-of-various-scripts) +* [⇢ ⇢ ⇢ Entering Debroid and enable a service](#entering-debroid-and-enable-a-service) +* [⇢ ⇢ ⇢ Include to Android startup:](#include-to-android-startup) ## Step by step guide diff --git a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md index 3879df57..60df5a1b 100644 --- a/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md +++ b/gemfeed/2016-04-09-jails-and-zfs-on-freebsd-with-puppet.md @@ -2,6 +2,8 @@ > Published at 2016-04-09T18:29:47+01:00 +Over the last couple of years I wrote quite a few Puppet modules in order to manage my personal server infrastructure. One of them manages FreeBSD Jails and another one ZFS file systems. I thought I would give a brief overview in how it looks and feels. + ``` __ __ (( \---/ )) @@ -25,16 +27,11 @@ ## Table of Contents * [⇢ Jails and ZFS with Puppet on FreeBSD](#jails-and-zfs-with-puppet-on-freebsd) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ ZFS](#zfs) * [⇢ ⇢ Jails](#jails) * [⇢ ⇢ Inside-Jail Puppet](#inside-jail-puppet) * [⇢ ⇢ Managing multiple Jails](#managing-multiple-jails) -## Introduction - -Over the last couple of years I wrote quite a few Puppet modules in order to manage my personal server infrastructure. One of them manages FreeBSD Jails and another one ZFS file systems. I thought I would give a brief overview in how it looks and feels. - ## ZFS The ZFS module is a pretty basic one. It does not manage ZFS pools yet as I am not creating them often enough which would justify implementing an automation. But let's see how we can create a ZFS file system (on an already given ZFS pool named ztank): diff --git a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md index b320bbab..23a30ce2 100644 --- a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md +++ b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md @@ -2,12 +2,20 @@ > Published at 2016-05-22T18:59:01+01:00 -## Background - Finally, I had time to deploy my authoritative DNS servers (master and slave) for my domains "buetow.org" and "buetow.zone". My domain name provider is Schlund Technologies. They allow their customers to edit the DNS records (BIND files) manually. And they also allow you to set your authoritative DNS servers for your domains. From now, I am making use of that option. [Schlund Technologies](http://www.schlundtech.de) +## Table of Contents + +* [⇢ Spinning up my own authoritative DNS servers](#spinning-up-my-own-authoritative-dns-servers) +* [⇢ ⇢ All FreeBSD Jails](#all-freebsd-jails) +* [⇢ ⇢ PF firewall](#pf-firewall) +* [⇢ ⇢ Puppet managed BIND zone files](#puppet-managed-bind-zone-files) +* [⇢ ⇢ The result](#the-result) +* [⇢ ⇢ Monitoring](#monitoring) +* [⇢ ⇢ DNS update workflow](#dns-update-workflow) + ## All FreeBSD Jails To set up my authoritative DNS servers, I installed a FreeBSD Jail dedicated for DNS with Puppet on my root machine as follows: diff --git a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md index 3c876f60..04846fdb 100644 --- a/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md +++ b/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md @@ -2,6 +2,16 @@ > Published at 2018-06-01T14:50:29+01:00; Updated at 2021-05-08 +This text first was published in the german IT-Administrator computer Magazine. 3 years have passed since and I decided to publish it on my blog too. + +[https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot](https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot) + +I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O. + +I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency. + +Pleace notice that some of the screenshots show the command "ioreplay" instead of "ioriot". That's because the name has changed after taking those. + ``` .---. / \ @@ -13,17 +23,21 @@ jgs\__/'---'\__/ ``` -## Foreword - -This text first was published in the german IT-Administrator computer Magazine. 3 years have passed since and I decided to publish it on my blog too. - -[https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot](https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot) - -I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O. - -I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency. - -Pleace notice that some of the screenshots show the command "ioreplay" instead of "ioriot". That's because the name has changed after taking those. +## Table of Contents + +* [⇢ Realistic load testing with I/O Riot for Linux](#realistic-load-testing-with-io-riot-for-linux) +* [⇢ The article](#the-article) +* [⇢ ⇢ Background: Existing Techniques](#background-existing-techniques) +* [⇢ ⇢ Benchmarking the Email Cloud at Mimecast](#benchmarking-the-email-cloud-at-mimecast) +* [⇢ ⇢ Using I/O Riot](#using-io-riot) +* [⇢ ⇢ ⇢ Installation](#installation) +* [⇢ ⇢ ⇢ Recording of I/O events](#recording-of-io-events) +* [⇢ ⇢ ⇢ Test preparation](#test-preparation) +* [⇢ ⇢ ⇢ Test Initialization](#test-initialization) +* [⇢ ⇢ ⇢ Replay](#replay) +* [⇢ ⇢ I/O Riot is Open Source](#io-riot-is-open-source) +* [⇢ ⇢ Systemtap](#systemtap) +* [⇢ ⇢ More refereces](#more-refereces) # The article diff --git a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md index b0a2bf0f..0caa64b0 100644 --- a/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md +++ b/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.md @@ -2,12 +2,23 @@ > Published at 2021-04-22T19:28:41+01:00; Updated at 2021-04-26 +This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too. + +[Original Mimecast Engineering Blog post at Medium](https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb) + +Running a large cloud-based service requires monitoring the state of huge numbers of machines, a task for which many standard UNIX tools were not really designed. In this post, I will describe a simple program, DTail, that Mimecast has built and released as Open-Source, which enables us to monitor log files of many servers at once without the costly overhead of a full-blown log management system. + +At Mimecast, we run over 10 thousand server boxes. Most of them host multiple microservices and each of them produces log files. Even with the use of time series databases and monitoring systems, raw application logs are still an important source of information when it comes to analysing, debugging, and troubleshooting services. + +Every engineer familiar with UNIX or a UNIX-like platform (e.g., Linux) is well aware of tail, a command-line program for displaying a text file content on the terminal which is also especially useful for following application or system log files with tail -f logfile. + +Think of DTail as a distributed version of the tail program which is very useful when you have a distributed application running on many servers. DTail is an Open-Source, cross-platform, fairly easy to use, support and maintain log file analysis & statistics gathering tool designed for Engineers and Systems Administrators. It is programmed in Google Go. + [](./dtail-the-distributed-log-tail-program/title.png) ## Table of Contents * [⇢ DTail - The distributed log tail program](#dtail---the-distributed-log-tail-program) -* [⇢ ⇢ Introduction](#introduction) * [⇢ ⇢ A Mimecast Pet Project](#a-mimecast-pet-project) * [⇢ ⇢ Differentiating from log management systems](#differentiating-from-log-management-systems) * [⇢ ⇢ Combining simplicity, security and efficiency](#combining-simplicity-security-and-efficiency) @@ -18,20 +29,6 @@ * [⇢ ⇢ For the future](#for-the-future) * [⇢ ⇢ Open Source](#open-source) -## Introduction - -This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal internet site too. - -[Original Mimecast Engineering Blog post at Medium](https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb) - -Running a large cloud-based service requires monitoring the state of huge numbers of machines, a task for which many standard UNIX tools were not really designed. In this post, I will describe a simple program, DTail, that Mimecast has built and released as Open-Source, which enables us to monitor log files of many servers at once without the costly overhead of a full-blown log management system. - -At Mimecast, we run over 10 thousand server boxes. Most of them host multiple microservices and each of them produces log files. Even with the use of time series databases and monitoring systems, raw application logs are still an important source of information when it comes to analysing, debugging, and troubleshooting services. - -Every engineer familiar wit |
