diff options
Diffstat (limited to 'content')
21 files changed, 703 insertions, 0 deletions
diff --git a/content/footer.html b/content/footer.html new file mode 100644 index 00000000..308b1d01 --- /dev/null +++ b/content/footer.html @@ -0,0 +1,2 @@ +</body> +</html> diff --git a/content/gemtext/contact-information.gmi b/content/gemtext/contact-information.gmi new file mode 100644 index 00000000..548e0972 --- /dev/null +++ b/content/gemtext/contact-information.gmi @@ -0,0 +1,38 @@ +=> ./ Go back to the main site + +# Contact information + +## E-Mail + +* Secure E-Mail: paul.buetow at protonmail dot com +* E-Mail: paul at buetow dot org (forwards to the ProtonMail address) + +Why did I just mention 2 E-Mail addresses here? The buetow.org address will always stay. It is my lifetime E-Mail address as I own the domain name. The address will stay even when I decided to change my email provider. + +Use the ProtonMail address if you care about security for now. The address stays valid as long as I am ProtonMail user. Especially if you are ProtonMail user too we could have real E-Mail end-2-end encryption for our conversation. + +## Quick Links + +### Social Media + +I am sharing articles which I found interesting regularly on all the social media channels. To get you navigated quickly, here are the links: + +=> https://www.linkedin.com/in/paul-buetow-b4857270/ My LinkedIn profile +=> https://twitter.com/snonux My Twitter profile +=> https://t.me/snonux My Telegram channel + +### My Open Source code repositories + +=> https://github.com/snonux My personal GitHub page +=> https://github.com/mimecast/dtail DTail at Mimecast +=> https://github.com/mimecast/ioriot I/O Riot at Mimecast + +### My old personal website + +It's still there for fun + profit. I might move some of the content over to Gemini slowly. + +=> http://paul.buetow.org + +It's powered by Xerl, my own CMS: + +=> http://xerl.buetow.org diff --git a/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi new file mode 100644 index 00000000..3bfeae19 --- /dev/null +++ b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi @@ -0,0 +1,108 @@ +> Written by Paul Buetow 2021-04-22, last updated 2021-04-26 + +=> ../ Go back to the main site + +# DTail - The distributed log tail program + +=> ./2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png DTail logo image + +This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal Gemini capsule too. + +=> https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb Original Mimecast Engineering Blog post at Medium + +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. + +## A Mimecast Pet Project + +DTail got its inspiration from public domain tools available already in this area but it is a blue sky from-scratch development which was first presented at Mimecast’s annual internal Pet Project competition (awarded with a Bronze prize). It has gained popularity since and is one of the most widely deployed DevOps tools at Mimecast (reaching nearly 10k server installations) and many engineers use it on a regular basis. The Open-Source version of DTail is available at: + +=> https://dtail.dev + +Try it out — We would love any feedback. But first, read on… + +## Differentiating from log management systems + +Why not just use a full-blown log management system? There are various Open-Source and commercial log management solutions available on the market you could choose from (e.g. the ELK stack). Most of them store the logs in a centralised location and are fairly complex to set up and operate. Possibly they are also pretty expensive to operate if you have to buy dedicated hardware (or pay fees to your cloud provider) and have to hire support staff for it. + +DTail does not aim to replace any of the log management tools already available but is rather an additional tool crafted especially for ad-hoc debugging and troubleshooting purposes. DTail is cheap to operate as it does not require any dedicated hardware for log storage as it operates directly on the source of the logs. It means that there is a DTail server installed on all server boxes producing logs. This decentralised approach comes with the direct advantages that there is no introduced delay because the logs are not shipped to a central log storage device. The reduced complexity also makes it more robust against outages. You won’t be able to troubleshoot your distributed application very well if the log management infrastructure isn’t working either. + +=> ./2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif DTail sample session animated gif + +As a downside, you won’t be able to access any logs with DTail when the server is down. Furthermore, a server can store logs only up to a certain capacity as disks will fill up. For the purpose of ad-hoc debugging, these are not typically issues. Usually, it’s the application you want to debug and not the server. And disk space is rarely an issue for bare metal and VM-based systems these days, with sufficient space for several weeks’ worth of log storage being available. DTail also supports reading compressed logs. The currently supported compression algorithms are gzip and zstd. + +## Combining simplicity, security and efficiency + +DTail also has a client component that connects to multiple servers concurrently for log files (or any other text files). + +The DTail client interacts with a DTail server on port TCP/2222 via SSH protocol and does not interact in any way with the system’s SSH server (e.g., OpenSSH Server) which might be running at port TCP/22 already. As a matter of fact, you don’t need a regular SSH server running for DTail at all. There is no support for interactive login shells at TCP/2222 either, as by design that port can only be used for text data streaming. The SSH protocol is used for the public/private key infrastructure and transport encryption only and DTail implements its own protocol on top of SSH for the features provided. There is no need to setup or buy any additional TLS certificates. The port 2222 can be easily reconfigured if you preferred to use a different one. + +The DTail server, which is a single static binary, will not fork an external process. This means that all features are implemented in native Go code (exception: Linux ACL support is implemented in C, but it must be enabled explicitly on compile time) and therefore helping to make it robust, secure, efficient, and easy to deploy. A single client, running on a standard Laptop, can connect to thousands of servers concurrently while still maintaining a small resource footprint. + +Recent log files are very likely still in the file system caches on the servers. Therefore, there tends to be a minimal I/O overhead involved. + +## The DTail family of commands + +Following the UNIX philosophy, DTail includes multiple command-line commands each of them for a different purpose: + +* dserver: The DTail server, the only binary required to be installed on the servers involved. +* dtail: The distributed log tail client for following log files. +* dcat: The distributed cat client for concatenating and displaying text files. +* dgrep: The distributed grep client for searching text files for a regular expression pattern. +* dmap: The distributed map-reduce client for aggregating stats from log files. + +=> ./2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif DGrep sample session animated gif + +## Usage example + +The use of these commands is almost self-explanatory for a person already used to the standard command line in Unix systems. One of the main goals is to make DTail easy to use. A tool that is too complicated to use under high-pressure scenarios (e.g., during an incident) can be quite detrimental. + +The basic idea is to start one of the clients from the command line and provide a list of servers to connect to with –servers. You also must provide a path of remote (log) files via –files. If you want to process multiple files per server, you could either provide a comma-separated list of file paths or make use of file system globbing (or a combination of both). + +The following example would connect to all DTail servers listed in the serverlist.txt, follow all files with the ending .log and filter for lines containing the string error. You can specify any Go compatible regular expression. In this example we add the case-insensitive flag to the regex: + +``` +dtail –servers serverlist.txt –files ‘/var/log/*.log’ –regex ‘(?i:error)’ +``` + +You usually want to specify a regular expression as a client argument. This will mean that responses are pre-filtered for all matching lines on the server-side and thus sending back only the relevant lines to the client. If your logs are growing very rapidly and the regex is not specific enough there might be the chance that your client is not fast enough to keep up processing all of the responses. This could be due to a network bottleneck or just as simple as a slow terminal emulator displaying the log lines on the client-side. + +A green 100 in the client output before each log line received from the server always indicates that there were no such problems and 100% of all log lines could be displayed on your terminal (have a look at the animated Gifs in this post). If the percentage falls below 100 it means that some of the channels used by the serves to send data to the client are congested and lines were dropped. In this case, the colour will change from green to red. The user then could decide to run the same query but with a more specific regex. + +You could also provide a comma-separated list of servers as opposed to a text file. There are many more options you could use. The ones listed here are just the very basic ones. There are more instructions and usage examples on the GitHub page. Also, you can study even more of the available options via the –help switch (some real treasures might be hidden there). + +## Fitting it in + +DTail integrates nicely into the user management of existing infrastructure. It follows normal system permissions and does not open new “holes” on the server which helps to keep security departments happy. The user would not have more or less file read permissions than he would have via a regular SSH login shell. There is a full SSH key, traditional UNIX permissions, and Linux ACL support. There is also a very low resource footprint involved. On average for tailing and searching log files less than 100MB RAM and less than a quarter of a CPU core per participating server are required. Complex map-reduce queries on big data sets will require more resources accordingly. + +## Advanced features + +The features listed here are out of the scope of this blog post but are worthwhile to mention: + +* Distributed map-reduce queries on stats provided in log files with dmap. dmap comes with its own SQL-like aggregation query language. +* Stats streaming with continuous map-reduce queries. The difference to normal queries is that the stats are aggregated over a specified interval only on the newly written log lines. Thus, giving a de-facto live stat view for each interval. +* Server-side scheduled queries on log files. The queries are configured in the DTail server configuration file and scheduled at certain time intervals. Results are written to CSV files. This is useful for generating daily stats from the log files without the need for an interactive client. +* Server-side stats streaming with continuous map-reduce queries. This for example can be used to periodically generate stats from the logs at a configured interval, e.g., log error counts by the minute. These then can be sent to a time-series database (e.g., Graphite) and then plotted in a Grafana dashboard. +* Support for custom extensions. E.g., for different server discovery methods (so you don’t have to rely on plain server lists) and log file formats (so that map-reduce queries can parse more stats from the logs). + +## For the future + +There are various features we want to see in the future. + +* A spartan mode, not printing out any extra information but the raw remote log files would be a nice feature to have. This will make it easier to post-process the data produced by the DTail client with common UNIX tools. (To some degree this is possible already, just disable the ANSI terminal colour output of the client with -noColors and pipe the output to another program). +* Tempting would be implementing the dgoawk command, a distributed version of the AWK programming language purely implemented in Go, for advanced text data stream processing capabilities. There are 3rd party libraries available implementing AWK in pure Go which could be used. +* A more complex change would be the support of federated queries. You can connect to thousands of servers from a single client running on a laptop. But does it scale to 100k of servers? Some of the servers could be used as middleware for connecting to even more servers. +* Another aspect is to extend the documentation. Especially the advanced features such as map-reduce query language and how to configure the server-side queries currently do require more documentation. For now, you can read the code, sample config files or just ask the author for that! But this will be certainly addressed in the future. + +## Open Source + +Mimecast highly encourages you to have a look at DTail and submit an issue for any features you would like to see. Have you found a bug? Maybe you just have a question or comment? If you want to go a step further: We would also love to see pull requests for any features or improvements. Either way, if in doubt just contact us via the DTail GitHub page. + +=> https://dtail.dev + +Write me an E-Mail to comments@mx.buetow.org and let me know your thoughts! diff --git a/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif Binary files differnew file mode 100644 index 00000000..e2f2ac64 --- /dev/null +++ b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif diff --git a/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png Binary files differnew file mode 100644 index 00000000..8cfe4889 --- /dev/null +++ b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png diff --git a/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif Binary files differnew file mode 100644 index 00000000..8f6b56bf --- /dev/null +++ b/content/gemtext/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif diff --git a/content/gemtext/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi b/content/gemtext/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi new file mode 100644 index 00000000..ea0db5c5 --- /dev/null +++ b/content/gemtext/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi @@ -0,0 +1,56 @@ +> Written by Paul Buetow 2021-04-24, last updated 2021-04-27 + +=> ../ Go back to the main site + +# Welcome to the Geminispace + +Have you reached this article already via Gemini? You need a special client for that, web browsers such as Firefox, Chrome, Safari etc. don't support the Gemini protocol. The Gemini address of this site (or the address of this capsule as people say in Geminispace) is: + +=> gemini://buetow.org + +If you however still use HTTP then you are just surfing the fallback HTML version of this capsule. In that case I suggest to read on what this is all about :-). + +## Motivation + +### My urge to revamp my personal website + +For some time I had to urge to revamp my personal website. Not to update the technology and the design of it but to update all the content (+ keep it current) and also to start a small tech blog again. So unconsciously I started to search for a good platform and/or software to do all of that in a KISS (keep it simple & stupid) way. + +### My still great Laptop running hot + +Earlier this year (2021) I noticed that my 6 year old but still great Laptop started to become hot and slowed down while surfing the web. Also, the Laptop's fan became quite noisy. This is all due to the additional bloat such as JavaScript, excessive use of CSS, tracking cookies+pixels, ads and so on there was on the website. + +All what I wanted was to read an interesting article but after a big advertising pop-up banner appeared and made everything worse I gave up and closed the browser tab. + +## Discovering the Gemini internet protocol + +Around the same time I discovered a relatively new more lightweight protocol named Gemini which does not support all these CPU intensive features like HTML, JavaScript and CSS do. Also, tracking and ads is not supported by the Gemini protocol. + +The "downside" is that due to the limited capabilities of the Gemini protocol all sites look very old and spartanic. But that is not really a downside, that is in fact a design choice people made. It is up to the client software how your capsule looks. For example you could use a graphical client with nice font renderings and colours to improve the appearance. Or you could just use a very minimalistic command line black-and-white Gemini client. It's your (the user's) choice. + +=> ./2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png Screenshot Amfora Gemini terminal client surfing this site + +Why is there a need for a new protocol? As the modern web is a superset of Gemini, can't we just use simple HTML 1.0? That's a good and valid question. It is not a technical problem but a human problem. We tend to abuse the features once they are available. You can be sure that things stay simple and efficient as long as you are using the Gemini protocol. On the other hand you can't force every website in the modern web to only create plain and simple looking HTML pages. + +## My own Gemini capsule + +As it is very easy to setup and maintain your own Gemini capsule (Gemini server + content composed via the Gemtext markup language) I decided to create my own. What I really like about Gemini is that I can just use my favourite text editor and get typing. I don't need to worry about the style and design of the presence and I also don't have to test anything in ten different web browsers. I can only focus on the content! As a matter of fact I am using the Vim editor + it's spellchecker + auto word completion functionality to write this. + +## Advantages summarised + +* Supports an alternative to the modern bloated web +* Easy to operate and easy to write content +* No need to worry about various web browser compatibilities +* It's the client's responsibility how the content is designed+presented +* Lightweight (although not as lightweight as the Gopher protocol) +* Supports privacy (no cookies, no request header fingerprinting, TLS encryption) +* Fun to play with (it's a bit geeky yes, but a lot of fun!) + +## Dive into deep Gemini space + +Check out one of the following links for more information about Gemini. For example you will find a FAQ which explains why the protocol is named "Gemini". Many Gemini capsules are dual hosted via Gemini and HTTP(S), so that people new to Gemini can sneak peak the content with a normal web browser. As a matter of fact, some people go as far as tri-hosting all their content via HTTP(S), Gemini and Gopher. + +=> gemini://gemini.circumlunar.space +=> https://gemini.circumlunar.space + +Write me an E-Mail to comments@mx.buetow.org and let me know your thoughts! diff --git a/content/gemtext/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png b/content/gemtext/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png Binary files differnew file mode 100644 index 00000000..093aec79 --- /dev/null +++ b/content/gemtext/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png diff --git a/content/gemtext/gemfeed/atom.xml b/content/gemtext/gemfeed/atom.xml new file mode 100644 index 00000000..68f1f276 --- /dev/null +++ b/content/gemtext/gemfeed/atom.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <title>buetow.org feed</title> + <subtitle>Putting the dot before the org!</subtitle> + <link href="gemini://buetow.org/gemfeed/" rel="self" /> + <link href="gemini://buetow.org/" /> + <id>gemini://buetow.org</id> + <updated>2021-04-29T22:44:42+01:00</updated> + <entry> + <title>Welcome to the Geminispace</title> + <link href="gemini://buetow.org/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi" /> + <id>gemini://buetow.org/gemfeed/2021-04-24-welcome-to-the-geminispace.gmi</id> + <updated>2021-04-29T22:44:42+01:00</updated> + <summary>Have you reached this article already via Gemini? You need a special client for that, web browsers such as Firefox, Chrome, Safari etc. don't support the Gemini protocol. The Gemini address of this site (or the address of this capsule as people say in Geminispace) is:</summary> + <author> + <name>Paul Buetow</name> + <email>comments@mx.buetow.org</email> + </author> + </entry> + <entry> + <title>DTail - The distributed log tail program</title> + <link href="gemini://buetow.org/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi" /> + <id>gemini://buetow.org/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi</id> + <updated>2021-04-29T22:44:42+01:00</updated> + <summary>This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal Gemini capsule too.</summary> + <author> + <name>Paul Buetow</name> + <email>comments@mx.buetow.org</email> + </author> + </entry> +</feed> diff --git a/content/gemtext/index.gmi b/content/gemtext/index.gmi new file mode 100644 index 00000000..0febd0a3 --- /dev/null +++ b/content/gemtext/index.gmi @@ -0,0 +1,33 @@ +``` + _ _ +| |__ _ _ ___| |_ _____ _____ _ __ __ _ +| '_ \| | | |/ _ \ __/ _ \ \ /\ / / _ \| '__/ _` | +| |_) | |_| | __/ || (_) \ V V / (_) | | | (_| | +|_.__/ \__,_|\___|\__\___/ \_/\_(_)___/|_| \__, | + |___/ +``` + +## Why does this site look so old? + +If you reach this site via the modern web, please read this: + +=> ./gemfeed/2021-04-24-welcome-to-the-geminispace.gmi Welcome to the Geminispace + +## Introduction + +My name is Paul Buetow and this is my personal internet site. You can call me a Linux/*BSD enthusiast, hobbyist and also a Linux Systems Administrator, DevOps Engineer, Programmer, Site Reliability Engineer professional with over 25 years of personal and around 15 years of professional working experience. + +You will encounter mostly (if not only) technical content on this site. I have published some Open-Source software, you will find some reference to it on this site or on my GitHub page(s). I also read a lot of tech newsletters and blogs. I re-share the most interesting ones on my social media feeds. You can find links to my GitHub pages and to my social media accounts in my contact information page: + +=> ./contact-information.gmi Contact information + +I have also compiled a list of resources which made an impact on me: + +=> ./resources.gmi List of resources + +## Blog posts + +English is not my mother tongue. So please ignore any errors you might encounter. + +=> ./gemfeed/2021-04-24-welcome-to-the-geminispace.gmi 2021-04-24 Welcome to the Geminispace +=> ./gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.gmi 2021-04-22 DTail - The distributed log tail program diff --git a/content/gemtext/resources.gmi b/content/gemtext/resources.gmi new file mode 100644 index 00000000..6ff51e6d --- /dev/null +++ b/content/gemtext/resources.gmi @@ -0,0 +1,94 @@ +> Last updated 2021-04-29 + +=> ./ Go back to the main site + +# Resources + +This is a list of resources I found useful. I am not an expert in all (but some) of these topics but all the resources listed here made an impact on me. I've read some of the books quite a long time ago, so there might be newer editions out there already and I might need to refresh some of the knowledge. + +The list may not be exhaustive but I will be adding more in the future. I strongly believe that educating yourself further is one of the most important things you should do in order to advance. The lists are in random order and reshuffled every time (via *sort -R*) when updates are made. + +You won't find any links on this site because over time the links will break. Please use your favourite search engine when you are interested in one of the resources... + +## Technical books + +* Effective awk programming; Arnold Robbins; O'Reilly +* Advanced Bash-Scripting Guide; Not a book by per-se but could be +* Java ist auch eine Insel; Christian Ullenboom; +* Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press +* Site Reliability Engineering; How Google runs production systems; O'Reilly +* The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional +* C++ Programming Language; Bjarne Stroustrup; (I've to admit that was a long time ago I've read this book) +* Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly +* Modern Perl; Chromatic ; Onyx Neon Press +* Pro Puppet; James Turnbull, Jeffrey McCune; Apress +* Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner +* Concurrency in Go; Katherine Cox-Buday; O'Reilly +* The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional +* DNS and BIND; Cricket Liu; O'Reilly +* Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly +* Structure and Interpretation of Computer Programs; Harold Abelson and more...; MIT Press +* The Docker Book; James Turnbull; Kindle +* 21st Century C: C Tips from the New School; Ben Klemens; O'Reilly + +## Technical bibles + +I didn't read them from the beginning to the end, but I am using them to look up things. + +* The Linux Programming Interface; Michael Kerrisk; No Starch Press +* Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly +* Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley + +## Self-development and soft-skills books + +* Time Management for System Administrators; Thomas A. Limoncelli; O'Reilly +* Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion +* The Bullet Journal Method; Ryder Carroll; Fourth Estate +* Psycho-Cybernetics; Maxwell Maltz; Perigee Books +* The Complete Software Developer's Career Guide; John Sonmez; Audible +* Eat That Frog!; Brian Tracy; Hodder Paperbacks +* The Off Switch; Mark Cropley; Virgin Books +* So Good They Can't Ignore You; Cal Newport; Business Plus +* Stop starting, start finishing; Arne Roock; Lean-Kanban University +* Deep Work; Cal Newport; Piatkus +* Digital Minimalism; Cal Newport; Portofolio Penguin +* Atomic Habits; James Clear; Random House Business +* The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books +* The Power of Now; Eckhard Tolle; Yellow Kite +* Ultralearning; Scott Young; Thorsons +* The Joy of Missing Out; Christina Crook; New Society Publishers + +## Technical video lectures and courses + +Some of these were in-person with exams, others were online learning lectures only. + +* Linux Security and Isolation APIs Training; Michael Kerrisk; 3 day on-site training +* The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online +* Ultimate Go Programming; Bill Kennedy; O'Reilly Online +* Scripting Vim; Damian Conway; O'Reilly Online +* F5 Loadbalancers Training; 2 day on-site training; F5, Inc. +* Functional programming lecture; Remote University of Hagen +* Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online +* Red Hat Certified System Administrator; Course + certification (Although I had the option I decided not to take the next course as it is more effective to self learn what I need) +* Apache Tomcat Best Practises; 3 day on-site training +* MySQL Deep Dive Workshop; 2 day on-site training + +## Fiction and more books + +Many fiction and non-fiction books I read are not listed here. This site mostly includes resources which made an impact on me regarding the work I do only and not on my personal life. Do you recommend a good Science Fiction Novel? E-Mail me; I can also provide my own recommendations! :-) + +## Formal education + +I have met many self-taught IT professionals I highly respect. In my own opinion a formal degree does not automatically qualify a person for a certain job. It is more about how you educate yourself further *after* formal education. The pragmatic way of thinking and getting things done do not require a college or university degree. + +However, I still believe a degree in Computer Science helps to achieve a good understanding of all the theory involved which you would have never learned about otherwise. Isn't it cool to understand how compiler work under the hood (automata theory) even if in your current position you are not required to hack the compiler? You could apply the same theory for other things also. This was just *one* example. + +* Student Exchange; I lived 1 year abroad and went to a US high school. +* German School Majors (Abitur), focus areas: German and Mathematics +* Practical working semester; I spent half a year as a C/C++ programmer abroad in Sofia, Bulgaria +* Diplom-Inform. (FH); Aachen University of Applied Sciences +* Diploma Thesis: Design and implementation of a Distributed Systems Simulator implemented in Java + +I was one of the last students to whom was handed out an old fashioned German Diploma degree before the University switched to the international Bachelor and Master versions. To give you an idea: The "Diplom-Inform. (FH)" means literally translated "Diploma in Informatics from a University of Applied Sciences (FH: Fachhochschule)". Going after the international student credit score it is settled between a Bachelor of Computer Science and a Master of Computer Science degree. + +Colleges and Universities are very expensive in many countries. Come to Germany, the first college degree is for free (if you finish within a certain deadline!) diff --git a/content/header.html b/content/header.html new file mode 100644 index 00000000..a1c4feac --- /dev/null +++ b/content/header.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<title>buetow.org</title> +<meta charset='utf-8'> +<style> +body { background-color: #282c34; color: #dfdfdf; margin: auto; max-width: 900px; } +img { display: block; max-width: 70%;} +pre { color: #ecbe7b; } +blockquote { color: #ecbe7b; } +a { color: #c678dd; text-decoration: none; } +a.textlink:before { content: " > "; } +a:hover { color: #51afef; text-decoration: underline; } +h1 { color: #ff6c6b; } +h2, h3, h4, h5, h6 { color: #51afef; } +li { color: #98be65; } +</style> +</head> +<body> diff --git a/content/html/contact-information.html b/content/html/contact-information.html new file mode 100644 index 00000000..0de6e0ee --- /dev/null +++ b/content/html/contact-information.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<title>buetow.org</title> +<meta charset='utf-8'> +<style> +body { background-color: #282c34; color: #dfdfdf; margin: auto; max-width: 900px; } +img { display: block; max-width: 70%;} +pre { color: #ecbe7b; } +blockquote { color: #ecbe7b; } +a { color: #c678dd; text-decoration: none; } +a.textlink:before { content: " > "; } +a:hover { color: #51afef; text-decoration: underline; } +h1 { color: #ff6c6b; } +h2, h3, h4, h5, h6 { color: #51afef; } +li { color: #98be65; } +</style> +</head> +<body> +<a href="./">Go back to the main site</a><br /> +<h1>Contact information</h1> +<h2>E-Mail</h2> +<ul> +<li>E-Mail: paul at buetow dot org (forwards to the ProtonMail address)</li> +</ul> +<p>Why did I just mention 2 E-Mail addresses here? The buetow.org address will always stay. It is my lifetime E-Mail address as I own the domain name. The address will stay even when I decided to change my email provider.</p> +<p>Use the ProtonMail address if you care about security for now. The address stays valid as long as I am ProtonMail user. Especially if you are ProtonMail user too we could have real E-Mail end-2-end encryption for our conversation.</p> +<h2>Quick Links</h2> +<h3>Social Media</h3> +<p>I am sharing articles which I found interesting regularly on all the social media channels. To get you navigated quickly, here are the links:</p> +<a href="https://www.linkedin.com/in/paul-buetow-b4857270/">My LinkedIn profile</a><br /> +<a href="https://twitter.com/snonux">My Twitter profile</a><br /> +<a href="https://t.me/snonux">My Telegram channel</a><br /> +<h3>My Open Source code repositories</h3> +<a href="https://github.com/snonux">My personal GitHub page</a><br /> +<a href="https://github.com/mimecast/dtail">DTail at Mimecast</a><br /> +<a href="https://github.com/mimecast/ioriot">I/O Riot at Mimecast</a><br /> +<h3>My old personal website</h3> +<p>It's still there for fun + profit. I might move some of the content over to Gemini slowly.</p> +<a href="http://paul.buetow.org">http://paul.buetow.org</a><br /> +<p>It's powered by Xerl, my own CMS:</p> +<a href="http://xerl.buetow.org">http://xerl.buetow.org</a><br /> +</body> +</html> diff --git a/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html new file mode 100644 index 00000000..6c591fb6 --- /dev/null +++ b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<title>buetow.org</title> +<meta charset='utf-8'> +<style> +body { background-color: #282c34; color: #dfdfdf; margin: auto; max-width: 900px; } +img { display: block; max-width: 70%;} +pre { color: #ecbe7b; } +blockquote { color: #ecbe7b; } +a { color: #c678dd; text-decoration: none; } +a.textlink:before { content: " > "; } +a:hover { color: #51afef; text-decoration: underline; } +h1 { color: #ff6c6b; } +h2, h3, h4, h5, h6 { color: #51afef; } +li { color: #98be65; } +</style> +</head> +<body> +<pre>Written by Paul Buetow 2021-04-22, last updated 2021-04-26</pre> +<a href="../">Go back to the main site</a><br /> +<h1>DTail - The distributed log tail program</h1> +<i>DTail logo image:</i><a href="./2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png"><img alt="DTail logo image" title="DTail logo image" src="./2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png" /></a><br /> +<p>This article first appeared at the Mimecast Engineering Blog but I made it available here in my personal Gemini capsule too.</p> +<a href="https://medium.com/mimecast-engineering/dtail-the-distributed-log-tail-program-79b8087904bb">Original Mimecast Engineering Blog post at Medium</a><br /> +<p>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.</p> +<p>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.</p> +<p>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.</p> +<p>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.</p> +<h2>A Mimecast Pet Project</h2> +<p>DTail got its inspiration from public domain tools available already in this area but it is a blue sky from-scratch development which was first presented at Mimecast’s annual internal Pet Project competition (awarded with a Bronze prize). It has gained popularity since and is one of the most widely deployed DevOps tools at Mimecast (reaching nearly 10k server installations) and many engineers use it on a regular basis. The Open-Source version of DTail is available at:</p> +<a href="https://dtail.dev">https://dtail.dev</a><br /> +<p>Try it out — We would love any feedback. But first, read on…</p> +<h2>Differentiating from log management systems</h2> +<p>Why not just use a full-blown log management system? There are various Open-Source and commercial log management solutions available on the market you could choose from (e.g. the ELK stack). Most of them store the logs in a centralised location and are fairly complex to set up and operate. Possibly they are also pretty expensive to operate if you have to buy dedicated hardware (or pay fees to your cloud provider) and have to hire support staff for it.</p> +<p>DTail does not aim to replace any of the log management tools already available but is rather an additional tool crafted especially for ad-hoc debugging and troubleshooting purposes. DTail is cheap to operate as it does not require any dedicated hardware for log storage as it operates directly on the source of the logs. It means that there is a DTail server installed on all server boxes producing logs. This decentralised approach comes with the direct advantages that there is no introduced delay because the logs are not shipped to a central log storage device. The reduced complexity also makes it more robust against outages. You won’t be able to troubleshoot your distributed application very well if the log management infrastructure isn’t working either.</p> +<i>DTail sample session animated gif:</i><a href="./2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif"><img alt="DTail sample session animated gif" title="DTail sample session animated gif" src="./2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif" /></a><br /> +<p>As a downside, you won’t be able to access any logs with DTail when the server is down. Furthermore, a server can store logs only up to a certain capacity as disks will fill up. For the purpose of ad-hoc debugging, these are not typically issues. Usually, it’s the application you want to debug and not the server. And disk space is rarely an issue for bare metal and VM-based systems these days, with sufficient space for several weeks’ worth of log storage being available. DTail also supports reading compressed logs. The currently supported compression algorithms are gzip and zstd.</p> +<h2>Combining simplicity, security and efficiency</h2> +<p>DTail also has a client component that connects to multiple servers concurrently for log files (or any other text files).</p> +<p>The DTail client interacts with a DTail server on port TCP/2222 via SSH protocol and does not interact in any way with the system’s SSH server (e.g., OpenSSH Server) which might be running at port TCP/22 already. As a matter of fact, you don’t need a regular SSH server running for DTail at all. There is no support for interactive login shells at TCP/2222 either, as by design that port can only be used for text data streaming. The SSH protocol is used for the public/private key infrastructure and transport encryption only and DTail implements its own protocol on top of SSH for the features provided. There is no need to setup or buy any additional TLS certificates. The port 2222 can be easily reconfigured if you preferred to use a different one.</p> +<p>The DTail server, which is a single static binary, will not fork an external process. This means that all features are implemented in native Go code (exception: Linux ACL support is implemented in C, but it must be enabled explicitly on compile time) and therefore helping to make it robust, secure, efficient, and easy to deploy. A single client, running on a standard Laptop, can connect to thousands of servers concurrently while still maintaining a small resource footprint.</p> +<p>Recent log files are very likely still in the file system caches on the servers. Therefore, there tends to be a minimal I/O overhead involved.</p> +<h2>The DTail family of commands</h2> +<p>Following the UNIX philosophy, DTail includes multiple command-line commands each of them for a different purpose:</p> +<ul> +<li>dtail: The distributed log tail client for following log files.</li> +<li>dcat: The distributed cat client for concatenating and displaying text files.</li> +<li>dgrep: The distributed grep client for searching text files for a regular expression pattern.</li> +<li>dmap: The distributed map-reduce client for aggregating stats from log files.</li> +</ul> +<i>DGrep sample session animated gif:</i><a href="./2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif"><img alt="DGrep sample session animated gif" title="DGrep sample session animated gif" src="./2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif" /></a><br /> +<h2>Usage example</h2> +<p>The use of these commands is almost self-explanatory for a person already used to the standard command line in Unix systems. One of the main goals is to make DTail easy to use. A tool that is too complicated to use under high-pressure scenarios (e.g., during an incident) can be quite detrimental.</p> +<p>The basic idea is to start one of the clients from the command line and provide a list of servers to connect to with –servers. You also must provide a path of remote (log) files via –files. If you want to process multiple files per server, you could either provide a comma-separated list of file paths or make use of file system globbing (or a combination of both).</p> +<p>The following example would connect to all DTail servers listed in the serverlist.txt, follow all files with the ending .log and filter for lines containing the string error. You can specify any Go compatible regular expression. In this example we add the case-insensitive flag to the regex:</p> +<pre> +dtail –servers serverlist.txt –files ‘/var/log/*.log’ –regex ‘(?i:error)’ +</pre> +<p>You usually want to specify a regular expression as a client argument. This will mean that responses are pre-filtered for all matching lines on the server-side and thus sending back only the relevant lines to the client. If your logs are growing very rapidly and the regex is not specific enough there might be the chance that your client is not fast enough to keep up processing all of the responses. This could be due to a network bottleneck or just as simple as a slow terminal emulator displaying the log lines on the client-side.</p> +<p>A green 100 in the client output before each log line received from the server always indicates that there were no such problems and 100% of all log lines could be displayed on your terminal (have a look at the animated Gifs in this post). If the percentage falls below 100 it means that some of the channels used by the serves to send data to the client are congested and lines were dropped. In this case, the colour will change from green to red. The user then could decide to run the same query but with a more specific regex.</p> +<p>You could also provide a comma-separated list of servers as opposed to a text file. There are many more options you could use. The ones listed here are just the very basic ones. There are more instructions and usage examples on the GitHub page. Also, you can study even more of the available options via the –help switch (some real treasures might be hidden there).</p> +<h2>Fitting it in</h2> +<p>DTail integrates nicely into the user management of existing infrastructure. It follows normal system permissions and does not open new “holes” on the server which helps to keep security departments happy. The user would not have more or less file read permissions than he would have via a regular SSH login shell. There is a full SSH key, traditional UNIX permissions, and Linux ACL support. There is also a very low resource footprint involved. On average for tailing and searching log files less than 100MB RAM and less than a quarter of a CPU core per participating server are required. Complex map-reduce queries on big data sets will require more resources accordingly.</p> +<h2>Advanced features</h2> +<p>The features listed here are out of the scope of this blog post but are worthwhile to mention:</p> +<ul> +<li>Stats streaming with continuous map-reduce queries. The difference to normal queries is that the stats are aggregated over a specified interval only on the newly written log lines. Thus, giving a de-facto live stat view for each interval.</li> +<li>Server-side scheduled queries on log files. The queries are configured in the DTail server configuration file and scheduled at certain time intervals. Results are written to CSV files. This is useful for generating daily stats from the log files without the need for an interactive client.</li> +<li>Server-side stats streaming with continuous map-reduce queries. This for example can be used to periodically generate stats from the logs at a configured interval, e.g., log error counts by the minute. These then can be sent to a time-series database (e.g., Graphite) and then plotted in a Grafana dashboard.</li> +<li>Support for custom extensions. E.g., for different server discovery methods (so you don’t have to rely on plain server lists) and log file formats (so that map-reduce queries can parse more stats from the logs).</li> +</ul> +<h2>For the future</h2> +<p>There are various features we want to see in the future.</p> +<ul> +<li>Tempting would be implementing the dgoawk command, a distributed version of the AWK programming language purely implemented in Go, for advanced text data stream processing capabilities. There are 3rd party libraries available implementing AWK in pure Go which could be used.</li> +<li>A more complex change would be the support of federated queries. You can connect to thousands of servers from a single client running on a laptop. But does it scale to 100k of servers? Some of the servers could be used as middleware for connecting to even more servers.</li> +<li>Another aspect is to extend the documentation. Especially the advanced features such as map-reduce query language and how to configure the server-side queries currently do require more documentation. For now, you can read the code, sample config files or just ask the author for that! But this will be certainly addressed in the future.</li> +</ul> +<h2>Open Source</h2> +<p>Mimecast highly encourages you to have a look at DTail and submit an issue for any features you would like to see. Have you found a bug? Maybe you just have a question or comment? If you want to go a step further: We would also love to see pull requests for any features or improvements. Either way, if in doubt just contact us via the DTail GitHub page.</p> +<a href="https://dtail.dev">https://dtail.dev</a><br /> +<p>Write me an E-Mail to comments@mx.buetow.org and let me know your thoughts!</p> +</body> +</html> diff --git a/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif Binary files differnew file mode 100644 index 00000000..e2f2ac64 --- /dev/null +++ b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dgrep.gif diff --git a/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png Binary files differnew file mode 100644 index 00000000..8cfe4889 --- /dev/null +++ b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail-logo.png diff --git a/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif Binary files differnew file mode 100644 index 00000000..8f6b56bf --- /dev/null +++ b/content/html/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program/dtail.gif diff --git a/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace.html b/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace.html new file mode 100644 index 00000000..94508ee3 --- /dev/null +++ b/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace.html @@ -0,0 +1,54 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<title>buetow.org</title> +<meta charset='utf-8'> +<style> +body { background-color: #282c34; color: #dfdfdf; margin: auto; max-width: 900px; } +img { display: block; max-width: 70%;} +pre { color: #ecbe7b; } +blockquote { color: #ecbe7b; } +a { color: #c678dd; text-decoration: none; } +a.textlink:before { content: " > "; } +a:hover { color: #51afef; text-decoration: underline; } +h1 { color: #ff6c6b; } +h2, h3, h4, h5, h6 { color: #51afef; } +li { color: #98be65; } +</style> +</head> +<body> +<pre>Written by Paul Buetow 2021-04-24, last updated 2021-04-27</pre> +<a href="../">Go back to the main site</a><br /> +<h1>Welcome to the Geminispace</h1> +<p>Have you reached this article already via Gemini? You need a special client for that, web browsers such as Firefox, Chrome, Safari etc. don't support the Gemini protocol. The Gemini address of this site (or the address of this capsule as people say in Geminispace) is:</p> +<a href="gemini://buetow.org">gemini://buetow.org</a><br /> +<p>If you however still use HTTP then you are just surfing the fallback HTML version of this capsule. In that case I suggest to read on what this is all about :-).</p> +<h2>Motivation</h2> +<h3>My urge to revamp my personal website</h3> +<p>For some time I had to urge to revamp my personal website. Not to update the technology and the design of it but to update all the content (+ keep it current) and also to start a small tech blog again. So unconsciously I started to search for a good platform and/or software to do all of that in a KISS (keep it simple & stupid) way.</p> +<h3>My still great Laptop running hot</h3> +<p>Earlier this year (2021) I noticed that my 6 year old but still great Laptop started to become hot and slowed down while surfing the web. Also, the Laptop's fan became quite noisy. This is all due to the additional bloat such as JavaScript, excessive use of CSS, tracking cookies+pixels, ads and so on there was on the website. </p> +<p>All what I wanted was to read an interesting article but after a big advertising pop-up banner appeared and made everything worse I gave up and closed the browser tab.</p> +<h2>Discovering the Gemini internet protocol</h2> +<p>Around the same time I discovered a relatively new more lightweight protocol named Gemini which does not support all these CPU intensive features like HTML, JavaScript and CSS do. Also, tracking and ads is not supported by the Gemini protocol.</p> +<p>The "downside" is that due to the limited capabilities of the Gemini protocol all sites look very old and spartanic. But that is not really a downside, that is in fact a design choice people made. It is up to the client software how your capsule looks. For example you could use a graphical client with nice font renderings and colours to improve the appearance. Or you could just use a very minimalistic command line black-and-white Gemini client. It's your (the user's) choice.</p> +<i>Screenshot Amfora Gemini terminal client surfing this site:</i><a href="./2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png"><img alt="Screenshot Amfora Gemini terminal client surfing this site" title="Screenshot Amfora Gemini terminal client surfing this site" src="./2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png" /></a><br /> +<p>Why is there a need for a new protocol? As the modern web is a superset of Gemini, can't we just use simple HTML 1.0? That's a good and valid question. It is not a technical problem but a human problem. We tend to abuse the features once they are available. You can be sure that things stay simple and efficient as long as you are using the Gemini protocol. On the other hand you can't force every website in the modern web to only create plain and simple looking HTML pages.</p> +<h2>My own Gemini capsule</h2> +<p>As it is very easy to setup and maintain your own Gemini capsule (Gemini server + content composed via the Gemtext markup language) I decided to create my own. What I really like about Gemini is that I can just use my favourite text editor and get typing. I don't need to worry about the style and design of the presence and I also don't have to test anything in ten different web browsers. I can only focus on the content! As a matter of fact I am using the Vim editor + it's spellchecker + auto word completion functionality to write this. </p> +<h2>Advantages summarised</h2> +<ul> +<li>Easy to operate and easy to write content</li> +<li>No need to worry about various web browser compatibilities</li> +<li>It's the client's responsibility how the content is designed+presented</li> +<li>Lightweight (although not as lightweight as the Gopher protocol)</li> +<li>Supports privacy (no cookies, no request header fingerprinting, TLS encryption)</li> +<li>Fun to play with (it's a bit geeky yes, but a lot of fun!)</li> +</ul> +<h2>Dive into deep Gemini space</h2> +<p>Check out one of the following links for more information about Gemini. For example you will find a FAQ which explains why the protocol is named "Gemini". Many Gemini capsules are dual hosted via Gemini and HTTP(S), so that people new to Gemini can sneak peak the content with a normal web browser. As a matter of fact, some people go as far as tri-hosting all their content via HTTP(S), Gemini and Gopher.</p> +<a href="gemini://gemini.circumlunar.space">gemini://gemini.circumlunar.space</a><br /> +<a href="https://gemini.circumlunar.space">https://gemini.circumlunar.space</a><br /> +<p>Write me an E-Mail to comments@mx.buetow.org and let me know your thoughts!</p> +</body> +</html> diff --git a/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png b/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png Binary files differnew file mode 100644 index 00000000..093aec79 --- /dev/null +++ b/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace/amfora-screenshot.png diff --git a/content/html/index.html b/content/html/index.html new file mode 100644 index 00000000..f4185a1b --- /dev/null +++ b/content/html/index.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<title>buetow.org</title> +<meta charset='utf-8'> +<style> +body { background-color: #282c34; color: #dfdfdf; margin: auto; max-width: 900px; } +img { display: block; max-width: 70%;} +pre { color: #ecbe7b; } +blockquote { color: #ecbe7b; } +a { color: #c678dd; text-decoration: none; } +a.textlink:before { content: " > "; } +a:hover { color: #51afef; text-decoration: underline; } +h1 { color: #ff6c6b; } +h2, h3, h4, h5, h6 { color: #51afef; } +li { color: #98be65; } +</style> +</head> +<body> +<pre> + _ _ +| |__ _ _ ___| |_ _____ _____ _ __ __ _ +| '_ \| | | |/ _ \ __/ _ \ \ /\ / / _ \| '__/ _` | +| |_) | |_| | __/ || (_) \ V V / (_) | | | (_| | +|_.__/ \__,_|\___|\__\___/ \_/\_(_)___/|_| \__, | + |___/ +</pre> +<h2>Why does this site look so old?</h2> +<p>If you reach this site via the modern web, please read this:</p> +<a href="./gemfeed/2021-04-24-welcome-to-the-geminispace.html">Welcome to the Geminispace</a><br /> +<h2>Introduction</h2> +<p>My name is Paul Buetow and this is my personal internet site. You can call me a Linux/*BSD enthusiast, hobbyist and also a Linux Systems Administrator, DevOps Engineer, Programmer, Site Reliability Engineer professional with over 25 years of personal and around 15 years of professional working experience.</p> +<p>You will encounter mostly (if not only) technical content on this site. I have published some Open-Source software, you will find some reference to it on this site or on my GitHub page(s). I also read a lot of tech newsletters and blogs. I re-share the most interesting ones on my social media feeds. You can find links to my GitHub pages and to my social media accounts in my contact information page:</p> +<a href="./contact-information.html">Contact information</a><br /> +<p>I have also compiled a list of resources which made an impact on me:</p> +<a href="./resources.html">List of resources</a><br /> +<h2>Blog posts</h2> +<p>English is not my mother tongue. So please ignore any errors you might encounter.</p> +<a href="./gemfeed/2021-04-24-welcome-to-the-geminispace.html">2021-04-24 Welcome to the Geminispace</a><br /> +<a href="./gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html">2021-04-22 DTail - The distributed log tail program</a><br /> +</body> +</html> diff --git a/content/html/resources.html b/content/html/resources.html new file mode 100644 index 00000000..6485da10 --- /dev/null +++ b/content/html/resources.html @@ -0,0 +1,97 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<title>buetow.org</title> +<meta charset='utf-8'> +<style> +body { background-color: #282c34; color: #dfdfdf; margin: auto; max-width: 900px; } +img { display: block; max-width: 70%;} +pre { color: #ecbe7b; } +blockquote { color: #ecbe7b; } +a { color: #c678dd; text-decoration: none; } +a.textlink:before { content: " > "; } +a:hover { color: #51afef; text-decoration: underline; } +h1 { color: #ff6c6b; } +h2, h3, h4, h5, h6 { color: #51afef; } +li { color: #98be65; } +</style> +</head> +<body> +<pre>Last updated 2021-04-29</pre> +<a href="./">Go back to the main site</a><br /> +<h1>Resources</h1> +<p>This is a list of resources I found useful. I am not an expert in all (but some) of these topics but all the resources listed here made an impact on me. I've read some of the books quite a long time ago, so there might be newer editions out there already and I might need to refresh some of the knowledge.</p> +<p>The list may not be exhaustive but I will be adding more in the future. I strongly believe that educating yourself further is one of the most important things you should do in order to advance. The lists are in random order and reshuffled every time (via *sort -R*) when updates are made.</p> +<p>You won't find any links on this site because over time the links will break. Please use your favourite search engine when you are interested in one of the resources...</p> +<h2>Technical books</h2> +<ul> +<li>Advanced Bash-Scripting Guide; Not a book by per-se but could be</li> +<li>Java ist auch eine Insel; Christian Ullenboom; </li> +<li>Learn You a Haskell for Great Good!; Miran Lipovaca; No Starch Press</li> +<li>Site Reliability Engineering; How Google runs production systems; O'Reilly</li> +<li>The Practise of System and Network Administration; Thomas A. Limoncelli, Christina J. Hogan, Strata R. Chalup; Addison-Wesley Professional</li> +<li>C++ Programming Language; Bjarne Stroustrup; (I've to admit that was a long time ago I've read this book)</li> +<li>Think Raku (aka Think Perl 6); Laurent Rosenfeld, Allen B. Downey; O'Reilly</li> +<li>Modern Perl; Chromatic ; Onyx Neon Press</li> +<li>Pro Puppet; James Turnbull, Jeffrey McCune; Apress</li> +<li>Object-Oriented Programming with ANSI-C; Axel-Tobias Schreiner</li> +<li>Concurrency in Go; Katherine Cox-Buday; O'Reilly</li> +<li>The Go Programming Language; Alan A. A. Donovan; Addison-Wesley Professional</li> +<li>DNS and BIND; Cricket Liu; O'Reilly</li> +<li>Programming Perl aka "The Camel Book"; Tom Christiansen, brian d foy, Larry Wall & Jon Orwant; O'Reilly</li> +<li>Structure and Interpretation of Computer Programs; Harold Abelson and more...; MIT Press</li> +<li>The Docker Book; James Turnbull; Kindle</li> +<li>21st Century C: C Tips from the New School; Ben Klemens; O'Reilly</li> +</ul> +<h2>Technical bibles</h2> +<p>I didn't read them from the beginning to the end, but I am using them to look up things.</p> +<ul> +<li>Understanding the Linux Kernel; Daniel P. Bovet, Marco Cesati; O'Reilly</li> +<li>Algorithms; Robert Sedgewick, Kevin Wayne; Addison Wesley</li> +</ul> +<h2>Self-development and soft-skills books</h2> +<ul> +<li>Who Moved My Cheese?; Dr. Spencer Johnson; Vermilion</li> +<li>The Bullet Journal Method; Ryder Carroll; Fourth Estate</li> +<li>Psycho-Cybernetics; Maxwell Maltz; Perigee Books</li> +<li>The Complete Software Developer's Career Guide; John Sonmez; Audible</li> +<li>Eat That Frog!; Brian Tracy; Hodder Paperbacks</li> +<li>The Off Switch; Mark Cropley; Virgin Books</li> +<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> +<li>Stop starting, start finishing; Arne Roock; Lean-Kanban University</li> +<li>Deep Work; Cal Newport; Piatkus</li> +<li>Digital Minimalism; Cal Newport; Portofolio Penguin</li> +<li>Atomic Habits; James Clear; Random House Business</li> +<li>The Daily Stoic; Ryan Holiday, Stephen Hanselman; Profile Books</li> +<li>The Power of Now; Eckhard Tolle; Yellow Kite</li> +<li>Ultralearning; Scott Young; Thorsons</li> +<li>The Joy of Missing Out; Christina Crook; New Society Publishers</li> +</ul> +<h2>Technical video lectures and courses</h2> +<p>Some of these were in-person with exams, others were online learning lectures only.</p> +<ul> +<li>The Ultimate Kubernetes Bootcamp; School of Devops; O'Reilly Online</li> +<li>Ultimate Go Programming; Bill Kennedy; O'Reilly Online</li> +<li>Scripting Vim; Damian Conway; O'Reilly Online</li> +<li>F5 Loadbalancers Training; 2 day on-site training; F5, Inc. </li> +<li>Functional programming lecture; Remote University of Hagen</li> +<li>Algorithms Video Lectures; Robert Sedgewick; O'Reilly Online</li> +<li>Red Hat Certified System Administrator; Course + certification (Although I had the option I decided not to take the next course as it is more effective to self learn what I need)</li> +<li>Apache Tomcat Best Practises; 3 day on-site training</li> +<li>MySQL Deep Dive Workshop; 2 day on-site training</li> +</ul> +<h2>Fiction and more books</h2> +<p>Many fiction and non-fiction books I read are not listed here. This site mostly includes resources which made an impact on me regarding the work I do only and not on my personal life. Do you recommend a good Science Fiction Novel? E-Mail me; I can also provide my own recommendations! :-)</p> +<h2>Formal education</h2> +<p>I have met many self-taught IT professionals I highly respect. In my own opinion a formal degree does not automatically qualify a person for a certain job. It is more about how you educate yourself further *after* formal education. The pragmatic way of thinking and getting things done do not require a college or university degree.</p> +<p>However, I still believe a degree in Computer Science helps to achieve a good understanding of all the theory involved which you would have never learned about otherwise. Isn't it cool to understand how compiler work under the hood (automata theory) even if in your current position you are not required to hack the compiler? You could apply the same theory for other things also. This was just *one* example.</p> +<ul> +<li>German School Majors (Abitur), focus areas: German and Mathematics</li> +<li>Practical working semester; I spent half a year as a C/C++ programmer abroad in Sofia, Bulgaria</li> +<li>Diplom-Inform. (FH); Aachen University of Applied Sciences</li> +<li>Diploma Thesis: Design and implementation of a Distributed Systems Simulator implemented in Java</li> +</ul> +<p>I was one of the last students to whom was handed out an old fashioned German Diploma degree before the University switched to the international Bachelor and Master versions. To give you an idea: The "Diplom-Inform. (FH)" means literally translated "Diploma in Informatics from a University of Applied Sciences (FH: Fachhochschule)". Going after the international student credit score it is settled between a Bachelor of Computer Science and a Master of Computer Science degree. </p> +<p>Colleges and Universities are very expensive in many countries. Come to Germany, the first college degree is for free (if you finish within a certain deadline!)</p> +</body> +</html> |
