diff options
| -rw-r--r-- | gemfeed/atom.xml | 4720 | ||||
| -rw-r--r-- | index.gmi | 2 | ||||
| -rw-r--r-- | index.gmi.tpl | 35 | ||||
| -rw-r--r-- | stats/by-host.gmi | 146 |
4 files changed, 4706 insertions, 197 deletions
diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index 11d031a3..f2ff6f67 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> - <updated>2023-03-12T17:13:52+02:00</updated> + <updated>2023-03-12T19:25:07+02:00</updated> <title>foo.zone feed</title> <subtitle>To be in the .zone!</subtitle> <link href="gemini://foo.zone/gemfeed/atom.xml" rel="self" /> @@ -10,16 +10,16 @@ <title>How to shut down after work</title> <link href="gemini://foo.zone/gemfeed/2023-02-26-how-to-shut-down-after-work.gmi" /> <id>gemini://foo.zone/gemfeed/2023-02-26-how-to-shut-down-after-work.gmi</id> - <updated>2023-02-26T17:13:52+02:00</updated> + <updated>2023-02-26T23:48:01+02:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>Do you need help fully discharging from work in the evenings or for the weekend? Shutting down from work won't just improve your work-life balance; it will also significantly improve the quality of your personal life and work. After a restful weekend, you will be much more energized and productive the next working day. So it should not just be in your own, but also your employers' interest that you fully relax and shut down after work. . .....to read on please visit my site.</summary> + <summary>Do you need help fully discharging from work in the evenings or for the weekend? Shutting down from work won't just improve your work-life balance; it will also significantly improve the quality of your personal life and work. After a restful weekend, you will be much more energized and productive the next working day. So it should not just be in your own, but also your employers' interest that you fully relax and shut down after work. </summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>How to shut down after work</h1> -<p class="quote"><i>Author: Paul; Published: 2023-02-26T23:48:01+02:00</i></p> +<p class="quote"><i>Published at 2023-02-26T23:48:01+02:00</i></p> <pre> |\ "Music should be heard not only with the ears, but also the soul." |---|--\-----------------------|-----------------------------------------| @@ -75,16 +75,16 @@ <title>Why GrapheneOS rox</title> <link href="gemini://foo.zone/gemfeed/2023-01-23-why-grapheneos-rox.gmi" /> <id>gemini://foo.zone/gemfeed/2023-01-23-why-grapheneos-rox.gmi</id> - <updated>2023-01-23T17:13:52+02:00</updated> + <updated>2023-01-23T15:31:52+02:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>Art by Joan Stark. .....to read on please visit my site.</summary> + <summary>Art by Joan Stark</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>Why GrapheneOS rox</h1> -<p class="quote"><i>Author: Paul; Published: 2023-01-23T15:31:52+02:00</i></p> +<p class="quote"><i>Published at 2023-01-23T15:31:52+02:00</i></p> <pre> Art by Joan Stark _.===========================._ @@ -174,16 +174,16 @@ Art by Joan Stark <title>Ultra(re)learning Java - My takeaways</title> <link href="gemini://foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.gmi" /> <id>gemini://foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways.gmi</id> - <updated>2022-12-24T17:13:52+02:00</updated> + <updated>2022-12-24T23:18:40+02:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>As a regular participant in the annual Pet Project competition at work, I always try to find a project where I can learn something new. In this post, I would like to share my takeaways after revisiting Java. You can read about my motivations in my 'Creative universe' post:. .....to read on please visit my site.</summary> + <summary>As a regular participant in the annual Pet Project competition at work, I always try to find a project where I can learn something new. In this post, I would like to share my takeaways after revisiting Java. You can read about my motivations in my 'Creative universe' post:</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>Ultra(re)learning Java - My takeaways</h1> -<p class="quote"><i>Author: Paul; Published: 2022-12-24T23:18:40+02:00</i></p> +<p class="quote"><i>Published at 2022-12-24T23:18:40+02:00</i></p> <a href="https://foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg"><img src="https://foo.zone/gemfeed/2022-12-24-ultrarelearning-java-my-takeaways/learnjava.jpg" /></a><br /> <p>As a regular participant in the annual Pet Project competition at work, I always try to find a project where I can learn something new. In this post, I would like to share my takeaways after revisiting Java. You can read about my motivations in my "Creative universe" post:</p> <a class="textlink" href="https://foo.zone/gemfeed/2022-04-10-creative-universe.html">Creative universe</a><br /> @@ -256,16 +256,16 @@ Art by Joan Stark <title>I tried (Doom) Emacs, but I switched back to (Neo)Vim</title> <link href="gemini://foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.gmi" /> <id>gemini://foo.zone/gemfeed/2022-11-24-i-tried-emacs-but-i-switched-back-to-neovim.gmi</id> - <updated>2022-11-24T17:13:52+02:00</updated> + <updated>2022-11-24T11:17:15+02:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>Art by \ \_! / __!. .....to read on please visit my site.</summary> + <summary>Art by \ \_! / __!</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>I tried (Doom) Emacs, but I switched back to (Neo)Vim</h1> -<p class="quote"><i>Author: Paul; Published: 2022-11-24T11:17:15+02:00; Updated: 2022-11-26</i></p> +<p class="quote"><i>Published at 2022-11-24T11:17:15+02:00; Updated at 2022-11-26</i></p> <pre> _/ \ _(\(o / \ / _ ^^^o @@ -400,16 +400,16 @@ nmap ,j :call OpenJournalPage()<CR> <title>Installing DTail on OpenBSD</title> <link href="gemini://foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi" /> <id>gemini://foo.zone/gemfeed/2022-10-30-installing-dtail-on-openbsd.gmi</id> - <updated>2022-10-30T17:13:52+02:00</updated> + <updated>2022-10-30T11:03:19+02:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-). .....to read on please visit my site.</summary> + <summary>This will be a quick blog post, as I am busy with my personal life now. I have relocated to a different country and am still busy arranging things. So bear with me :-)</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>Installing DTail on OpenBSD</h1> -<p class="quote"><i>Author: Paul; Published: 2022-10-30T11:03:19+02:00</i></p> +<p class="quote"><i>Published at 2022-10-30T11:03:19+02:00</i></p> <pre> ,_---~~~~~----._ _,,_,*^____ _____``*g*\"*, @@ -695,16 +695,16 @@ REMOTE|fishfinger|100|7|fstab|093f510ec5c0f512.h /usr/local ffs rw,wxallowed,nod <title>After a bad night's sleep</title> <link href="gemini://foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi" /> <id>gemini://foo.zone/gemfeed/2022-09-30-after-a-bad-nights-sleep.gmi</id> - <updated>2022-09-30T17:13:52+03:00</updated> + <updated>2022-09-30T09:53:23+03:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>Everyone has it once in a while: A bad night's sleep. Here I attempt to list valuable tips on how to deal with it.. .....to read on please visit my site.</summary> + <summary>Everyone has it once in a while: A bad night's sleep. Here I attempt to list valuable tips on how to deal with it.</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>After a bad night's sleep</h1> -<p class="quote"><i>Author: Paul; Published: 2022-09-30T09:53:23+03:00; Updated: 2022-10-12</i></p> +<p class="quote"><i>Published at 2022-09-30T09:53:23+03:00; Updated at 2022-10-12</i></p> <pre> z z @@ -769,16 +769,16 @@ jgs (________\ \ <title>Gemtexter 1.1.0 - Let's Gemtext again</title> <link href="gemini://foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi" /> <id>gemini://foo.zone/gemfeed/2022-08-27-gemtexter-1.1.0-lets-gemtext-again.gmi</id> - <updated>2022-08-27T17:13:52+03:00</updated> + <updated>2022-08-27T18:25:57+01:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>I am proud to announce that I've released Gemtexter version . What is Gemtexter? It's my static site generator written in GNU Bash:. .....to read on please visit my site.</summary> + <summary>I am proud to announce that I've released Gemtexter version `1.1.0`. What is Gemtexter? It's my static site generator written in GNU Bash:</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>Gemtexter 1.1.0 - Let's Gemtext again</h1> -<p class="quote"><i>Author: Paul; Published: 2022-08-27T18:25:57+01:00</i></p> +<p class="quote"><i>Published at 2022-08-27T18:25:57+01:00</i></p> <pre> -=[ typewriter ]=- 1/98 @@ -845,16 +845,16 @@ check_dependencies () { <title>Let's Encrypt with OpenBSD and Rex</title> <link href="gemini://foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi" /> <id>gemini://foo.zone/gemfeed/2022-07-30-lets-encrypt-with-openbsd-and-rex.gmi</id> - <updated>2022-07-30T17:13:52+03:00</updated> + <updated>2022-07-30T12:14:31+01:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>I was amazed at how easy it is to automatically generate and update Let's Encrypt certificates with OpenBSD.. .....to read on please visit my site.</summary> + <summary>I was amazed at how easy it is to automatically generate and update Let's Encrypt certificates with OpenBSD.</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>Let's Encrypt with OpenBSD and Rex</h1> -<p class="quote"><i>Author: Paul; Published: 2022-07-30T12:14:31+01:00</i></p> +<p class="quote"><i>Published at 2022-07-30T12:14:31+01:00</i></p> <pre> / _ \ The Hebern Machine \ ." ". / @@ -1452,16 +1452,16 @@ rex commons <title>Sweating the small stuff - Tiny projects of mine</title> <link href="gemini://foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff.gmi" /> <id>gemini://foo.zone/gemfeed/2022-06-15-sweating-the-small-stuff.gmi</id> - <updated>2022-06-15T17:13:52+03:00</updated> + <updated>2022-06-15T08:47:44+01:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>This blog post is a bit different from the others. It consists of multiple but smaller projects worth mentioning. I got inspired by Julia Evan's 'Tiny programs' blog post and the side projects of The Sephist, so I thought I would also write a blog posts listing a couple of small projects of mine:. .....to read on please visit my site.</summary> + <summary>This blog post is a bit different from the others. It consists of multiple but smaller projects worth mentioning. I got inspired by Julia Evan's 'Tiny programs' blog post and the side projects of The Sephist, so I thought I would also write a blog posts listing a couple of small projects of mine:</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>Sweating the small stuff - Tiny projects of mine</h1> -<p class="quote"><i>Author: Paul; Published: 2022-06-15T08:47:44+01:00; Updated: 2022-06-18</i></p> +<p class="quote"><i>Published at 2022-06-15T08:47:44+01:00; Updated at 2022-06-18</i></p> <pre> _ /_/_ .'''. @@ -1693,16 +1693,16 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs <title>Perl is still a great choice</title> <link href="gemini://foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi" /> <id>gemini://foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice.gmi</id> - <updated>2022-05-27T17:13:52+03:00</updated> + <updated>2022-05-27T07:50:12+01:00</updated> <author> - <name>Paul C. Buetow</name> - <email>comments@mx.buetow.org</email> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> </author> - <summary>Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it's not called PERL, neither P.E.R.L. nor Pearl. 'Perl' is the name of the language and the name of the interpreter or the interpreter command.. .....to read on please visit my site.</summary> + <summary>Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it's not called PERL, neither P.E.R.L. nor Pearl. 'Perl' is the name of the language and `perl` the name of the interpreter or the interpreter command.</summary> <content type="xhtml"> <div xmlns="http://www.w3.org/1999/xhtml"> <h1>Perl is still a great choice</h1> -<p class="quote"><i>Author: Paul; Published: 2022-05-27T07:50:12+01:00; Updated: 2023-01-28</i></p> +<p class="quote"><i>Published at 2022-05-27T07:50:12+01:00; Updated at 2023-01-28</i></p> <a href="https://foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice/regular_expressions.png"><img alt="Comic source: XKCD" title="Comic source: XKCD" src="https://foo.zone/gemfeed/2022-05-27-perl-is-still-a-great-choice/regular_expressions.png" /></a><br /> <p>Perl (the Practical Extraction and Report Language) is a battle-tested, mature, multi-paradigm dynamic programming language. Note that it's not called PERL, neither P.E.R.L. nor Pearl. "Perl" is the name of the language and <span class="inlinecode">perl</span> the name of the interpreter or the interpreter command.</p> <p>Unfortunately (it makes me sad), Perl's popularity has been declining over the last years as Google trends shows:</p> @@ -1798,4 +1798,4622 @@ v = 008 [v = p*c*(s != c ? 2 : 1)] Total logical CPUs </div> </content> </entry> + <entry> + <title>Creative universe</title> + <link href="gemini://foo.zone/gemfeed/2022-04-10-creative-universe.gmi" /> + <id>gemini://foo.zone/gemfeed/2022-04-10-creative-universe.gmi</id> + <updated>2022-04-10T10:09:11+01:00</updated> + <author> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> + </author> + <summary>I have been participating in an annual work-internal project contest (we call it Pet Project contest) since I moved to London and switched jobs to my current employer. I am very happy to say that I won a 'silver' prize last week here 🎆. Over the last couple of years I have been a finalist in this contest six times and won some kind of prize five times. Some of my projects were also released as open source software. One had a magazine article published, and for another one I wrote an article on my employer's engineering blog. If you have followed all my posts on this blog (the one you are currently reading), then you have probably figured out what these projects were:</summary> + <content type="xhtml"> + <div xmlns="http://www.w3.org/1999/xhtml"> + <h1>Creative universe</h1> +<p class="quote"><i>Published at 2022-04-10T10:09:11+01:00; Updated at 2022-04-18</i></p> +<pre> + . + . . . . . . + . . . * + . * . . . . . . + . + "You Are Here" . . + . . . +. | . . . . . . + | . . . +. + . + \|/ . . . . + . . V . * . . . . + . + + . . . + + . . + .+. . + . . . + . . . . . + . . . . . . . . ! / + * . . . + . . - O - + . . . + . . * . . / | + . + . . . .. + . +. . . . * . * . +.. . * + . . . . . . . . + . . + + - the universe +</pre><br /> +<h2>Prelude</h2> +<p>I have been participating in an annual work-internal project contest (we call it Pet Project contest) since I moved to London and switched jobs to my current employer. I am very happy to say that I won a "silver" prize last week here 🎆. Over the last couple of years I have been a finalist in this contest six times and won some kind of prize five times. Some of my projects were also released as open source software. One had a magazine article published, and for another one I wrote an article on my employer's engineering blog. If you have followed all my posts on this blog (the one you are currently reading), then you have probably figured out what these projects were:</p> +<a class="textlink" href="https://foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html">DTail - The distributed log tail program</a><br /> +<a class="textlink" href="https://foo.zone/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html">Realistic load testing with I/O Riot for linux</a><br /> +<p>Note that my latest silver prize project isn't open source software and because of that there is no public material I can refer to. Maybe the next one again?</p> +<p>I want to point out that I never won the "gold" prize and it's the first time I won "silver", though. I believe, looking at the company's contest history, I am the employee with the most consecutive successful project submissions (my streak broke as I didn't participate last year) and am also the one with the highest successful project count in total. Sorry if this all sounds a bit self-promotional, but I think it is something to be proud of. Consistency beats a one-off success.</p> +<p>I often put endless hours and sometimes sleepless nights into such projects and all of that in my own time. I, an engineer whose native tongue is not English, also have to present such a project in front of the CEO, CTO and CPO, the Chief Scientist, the founders of the company, and, if it is not enough, to all other staff of the company too. I usually also demonstrate a working prototype live on a production grid during the presentation. 😓</p> +<p>So why would I sign up myself for such side projects? Isn't it a lot of stress and extra work? Besides the prize in form of money (you can not count on that, you may win or you may not win something) and recognition, there are also other motivational points:</p> +<ul> +<li>I want to learn new technologies or to deepen my knowledge of a given technology. I want to have a personal benefit from the project, even when I don't win any prize. So when the company is offering a contest, why not use it as a motivational trampoline? It's good to have a hard deadline for a project. And the project will also benefit the company in some way. So it's a win-win.</li> +<li>I love the idea of combining several old things into a new thing. You can call this creativity. At work, we call this sometimes Lego: Building new things from given blocks. But I also love to add something new and unique to the mix, something that didn't exist as a Lego block before and could not be built by using only the already existing blocks.</li> +</ul> +<h2>How to be creative</h2> +<p>How did I manage to be creative with all these Pet Projects? Unfortunately, there is no step-by-step guide I could point you to. But what I want to do in this blog post is share my personal experience so far.</p> +<h3>Know which problem you want to solve</h3> +<p>There must be a problem to be solved or a thing to be improved. It makes no sense to have a project without a goal. A problem might be obvious to you, and you don't even need to think about it. In that case, you are all set, and you can immerse yourself with the problem.</p> +<p>If, however, you don't know what problem you want to solve: Do you really need to be creative? All problems are solved anyway, correct? In that case, just go on with your work. As you immerse yourself with your daily work, you will find a project naturally after a while. I don't believe you should artificially find a project. It should come naturally to you. You should have an interest in the problem domain and a strong desire to find a proper solution for the problem. Artificially created projects come with the catch that you might give up on it rather sooner than later due to lack of motivation and desire.</p> +<h3>Immerse / deep dive</h3> +<p>If you want to be creative in a field, you must know a lot about it. The more you know about it, the more dots you can connect. When you are learning a new technology or if you are thinking about a tough problem, do it thoroughly. Don't let anything distract you. Read books, watch lectures, listen to podcasts or audiobooks about the topic, talk to other people working on similar topics. Immerse yourself for multiple hours per day, multiple days per week, multiple weeks and maybe even months. Create your own inner universe.</p> +<p>But once a day is over, shut your thoughts down. Hit the off-switch. Stop thinking about this problem for the remainder of the day. This can be difficult, as you didn't solve the problem- or didn't understand everything of the new technology yet, and you really want to get to the point. But be strict to yourself and stop thinking about it for a while.</p> +<p>You must understand that you are more than just your conscious thoughts. Your brain does a lot of work in the background that you aren't aware of consciously. What happens when you stop consciously thinking about a problem is that your brain continues processing it. You might have experienced the "AHA"-effect, where suddenly you had an idea out of nowhere (e.g. during a walk, in the shower, or in the morning when you woke up)? This is your conscious self downloading a result from the background thread of your brain. You can elevate this effect by immersing with the problem immensely before giving your conscious self a break.</p> +<p>Sometimes, depending on how deeply you were immersed, you may need to let the problem go for a couple of days (e.g. over a weekend) before you can download a new insight.</p> +<h3>Always have a notebook with you</h3> +<p>Wherever you go, ensure that you always have something to take notes with you. Once you have an idea from nowhere (or from your unconscious but volatile brain), you really want to write it down to persistent storage. It doesn't matter what kind of note-taking device you use here. It can be a paper journal, or it can be your smartphone. </p> +<p>My advice is to have a separate section where you put your notes of all of your ideas. At home or in the office, I write everything in my paper journal. When I am not at home, I use a digital note-taking app on my phone. Later, I copy the digital notes from it into a project-specific section of my paper journal.</p> +<p>I prefer taking notes on paper, as it gives you more freedom of how to structure it. You can use any colour, and you can also quickly create diagrams without the use of any complex computer program.</p> +<h3>When you didn't sleep enough</h3> +<p>I noticed while being sleep-deprived I am (obviously) unable to concentrate so much, and it is difficult to be immersed in a focused way. But on the other hand, I am a lot more creative compared to when I am not sleep-deprived. Then, my brain suddenly presents me with connections I have not thought of before. Here, I usually write any idea I have down on a sheet of paper or in my journal, so I can pick it up later. I then often continue to philosophise about a possible solution. Sometimes to the absurd, and sometimes to something pretty useful.</p> +<p>I am not saying that you should skip sleep. By all means, if you can sleep, then sleep. But there are some days when you don't manage to sleep (e.g. think too much about a project and didn't manage to hit the off switch). This is, where you can take advantage of your current state of mind. Disclaimer: Skipping sleep damages your health. So, please don't try this out on purpose. But in case you had a bad night, remember this trick.</p> +<h3>Have regular breaks and relax</h3> +<p>Have regular breaks. Don't skip your lunch break. Best, have a walk during lunchtime. And after work, do some kind of workout or visit a sports class. Do something completely unrelated to work before going to sleep (e.g. visit a parallel universe and read a Science Fiction novel). In short: Totally hit the off-switch after your work for the day is finished. You will be much more energised and motivated the next time you open your work laptop.</p> +<a class="textlink" href="../other-resources.html">I personally love to read Science Fiction novels</a><br /> +<p>I skip breakfast and lunch during the week. This means that on average, I intermittent fast on average 18-20 hours daily. It may sound odd to most people (who don't intermittent fast), but in a fasted state, I can be even more focused, thus helping me immerse myself in something even more. Not having breakfast and lunch also gives me back some time for other things (e.g. a nice walk, where I listen to podcasts or audiobooks or practise using my camera (street photography)). I relax my routine during the week ends, where I may enjoy a meal at any given time of the day.</p> +<p>It also helps a lot eat healthy. Healthy food makes your brain work more efficiently. But I won't go into more details here, as nothing is as contradictory as the health and food industry. Conduct your own research. Your opinion may be different from mine anyway, and everyone's body reacts to certain foods differently. What for one person works may not work for another person. But be aware that you will find a lot of wrong and also conflicting information on the internet. So always use multiple resources for your research.</p> +<h3>Upside-down approach</h3> +<p>It's easy to fall into the habit of "boxed" thinking, but creativity is exactly the opposite. Once in a while, make yourself think "Is A really required to do B?". Many assumptions are believed to be true. But are they really? A concrete example: "At work we only use the programming language L and framework F" and therefore, it is the standard we must use.</p> +<p>Another way to think about it is "Is there an alternative way to accomplish the desired result? What if there were no programming language L and framework F? What would I do instead?". Maybe you would use programming language X to implement your own domain-specific language, which does what framework F would have done but in exactly the way you want to + much more flexible than F! And maybe language X would be much better suitable than L to implement a DSL anyway. Conclusion: It never hurts to verify your assumptions.</p> +<p>Often, you will also find solutions to problems you never intended to solve and find new problems you never imagined to actually exist. That might not be a bad thing, but it might sidetrack you on your path to finding a solution for a particular problem. So be careful not to get sidetracked too much. In this case, just save a note for later reference (maybe your next Pet Project?) somewhere and go on with your actual problem.</p> +<p>Don't be afraid to think about weird and unconventional solutions. Sometimes, the most unconventional solution is the best solution to a problem. Also, try to keep to the basics. The best solutions are KISS.</p> +<a class="textlink" href="https://foo.zone/gemfeed/2021-09-12-keep-it-simple-and-stupid.html">Keep it simple and stupid</a><br /> +<p>A small additional trick: you can train yourself to generate new and unconventional ideas. Just write down 20 random ideas every day. It doesn't matter what the ideas are about and whether they are useful or not. The purpose of this exercise is to make your brain think about something new and unconventional. These can be absurd ideas such as "Jump out of the window naked in the morning in order to wake up faster". Of course, you would never do that, but at least you had an idea and made your brain generate something.</p> +<h3>Don't be busy all the time</h3> +<p>Especially as a DevOps Engineer, you could be busy all the time with small, but frequent, ad hoc tasks. Don't lose yourself here. Yes, you should pay attention to your job and those tasks, but you should also make some room for creativity. Don't schedule meeting after ad hoc work after meeting after Jira ticket work after another Jira ticket. There should also be some "free" space in your calendar.</p> +<p>Use the "free" time to play around with your tech stack. Try out new options, explore the system metrics, explore new tools, etc. Dividends will pay off with new ideas, which you would have never come up with if you were "just busy" like a machine.</p> +<p>Sometimes, I pick a Unix manual page of a random command and start reading it. I have a bash helper function which will pick one for me:</p> +<pre> +❯ where learn +learn () { + man $(ls /bin /sbin /usr/bin /usr/sbin 2>/dev/null | shuf -n 1) | + sed -n "/^NAME/ { n;p;q }" +} +❯ learn + perltidy - a perl script indenter and reformatter +❯ learn + timedatectl - Control the system time and date +</pre><br /> +<h2>Conclusion</h2> +<p>This all summarises advice I have, really. I hope this was interesting and helpful for you.</p> +<p>I have one more small tip: I never published a blog post the same day I wrote it. After finishing writing it, I always wait for a couple of days. In all cases so far, I had an additional idea to add or to fine tune the blog post.</p> +<p>Another article I found interesting and relevant is</p> +<a class="textlink" href="https://thesephist.com/posts/paradise/">Creative Paradise by The Sephist</a><br /> +<p>Relevant books I can recommend are:</p> +<ul> +<li>Consciousness: A Very Short Introduction; Susan Blackmore; Oxford Uiversity Press</li> +<li>Deep Work; Cal Newport; Piatkus</li> +<li>So Good They Can't Ignore You; Cal Newport; Business Plus</li> +<li>The Off Switch; Mark Cropley; Virgin Books</li> +<li>Ultralearning; Scott Young; Thorsons</li> +</ul> +<p>E-Mail your comments to hi@paul.cyou :-)</p> + </div> + </content> + </entry> + <entry> + <title>The release of DTail 4.0.0</title> + <link href="gemini://foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi" /> + <id>gemini://foo.zone/gemfeed/2022-03-06-the-release-of-dtail-4.0.0.gmi</id> + <updated>2022-03-06T18:11:39+00:00</updated> + <author> + <name>Paul Buetow</name> + <email>hi@paul.cyou</email> + </author> + <summary>I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. You can also read my previous post about DTail in case you wonder what DTail is:</summary> + <content type="xhtml"> + <div xmlns="http://www.w3.org/1999/xhtml"> + <h1>The release of DTail 4.0.0</h1> +<p class="quote"><i>Published at 2022-03-06T18:11:39+00:00</i></p> +<pre> + ,_---~~~~~----._ + _,,_,*^____ _____``*g*\"*, + ____ _____ _ _ / __/ /' ^. / \ ^@q f + | _ \_ _|_ _(_) | @f | @)) | | @)) l 0 _/ + | | | || |/ _` | | | \`/ \~____ / __ \_____/ \ + | |_| || | (_| | | | | _l__l_ I + |____/ |_|\__,_|_|_| } [______] I + ] | | | | + ] ~ ~ | + | | + | | +</pre><br /> +<p>I have recently released DTail 4.0.0 and this blog post goes through all the new goodies. You can also read my previous post about DTail in case you wonder what DTail is:</p> +<a class="textlink" href="https://foo.zone/gemfeed/2021-04-22-dtail-the-distributed-log-tail-program.html">DTail - The distributed log tail program</a><br /> +<p>If you want to jump directly to DTail, do it here (there are nice animated gifs which demonstrates the usage pretty well):</p> +<a class="textlink" href="https://dtail.dev">https://dtail.dev</a><br /> +<h2>So, what's new in 4.0.0?</h2> +<h3>Rewritten logging</h3> +<p>For DTail 4, logging has been completely rewritten. The new package name is "internal/io/dlog". I rewrote the logging because DTail is a special case here: There are logs processed by DTail, there are logs produced by the DTail server itself, there are logs produced by a DTail client itself, there are logs only logged by a DTail client, there are logs only logged by the DTail server, and there are logs logged by both, server and client. There are also different logging levels and outputs involved.</p> +<p>As you can imagine, it becomes fairly complex. There is no ready Go off-shelf logging library which suits my needs and the logging code in DTail 3 was just one big source code file with global variables and it wasn't sustainable to maintain anymore. So why not rewrite it for profit and fun? </p> +<p>There's a are new log level structure now (The log level now can be specified with the "-logLevel" command line flag):</p> +<pre> +// Available log levels. +const ( + None level = iota + Fatal level = iota + Error level = iota + Warn level = iota + Info level = iota + Default level = iota + Verbose level = iota + Debug level = iota + Devel level = iota + Trace level = iota + All level = iota +) +</pre><br /> +<p>DTail also supports multiple log outputs (e.g. to file or to stdout). More are now easily pluggable with the new logging package. The output can also be "enriched" (default) or "plain" (read more about that further below).</p> +<h3>Configurable terminal color codes</h3> +<p>A complaint I received from the users of DTail 3 were the terminal colors used for the output. Under some circumstances (terminal configuration) it made the output difficult to read so that users defaulted to "--noColor" (disabling colored output completely). I toke it by heart and also rewrote the color handling. It's now possible to configure the foreground and background colors and an attribute (e.g. dim, bold, ...).</p> +<p>The example "dtail.json" configuration file represents the default (now, more reasonable default) color codes used, and it is free to the user to customize them:</p> +<pre> +{ + "Client": { + "TermColorsEnable": true, + "TermColors": { + "Remote": { + "DelimiterAttr": "Dim", + "DelimiterBg": "Blue", + "DelimiterFg": "Cyan", + "RemoteAttr": "Dim", + "RemoteBg": "Blue", + "RemoteFg": "White", + "CountAttr": "Dim", + "CountBg": "Blue", + "CountFg": "White", + "HostnameAttr": "Bold", + "HostnameBg": "Blue", + "HostnameFg": "White", + "IDAttr": "Dim", + "IDBg": "Blue", + "IDFg": "White", + "StatsOkAttr": "None", + "StatsOkBg": "Green", + "StatsOkFg": "Black", + "StatsWarnAttr": "None", + "StatsWarnBg": "Red", + "StatsWarnFg": "White", + "TextAttr": "None", + "TextBg": "Black", + "TextFg": "White" + }, + "Client": { + "DelimiterAttr": "Dim", + "DelimiterBg": "Yellow", + "DelimiterFg": "Black", + "ClientAttr": "Dim", + "ClientBg": "Yellow", + "ClientFg": "Black", + "HostnameAttr": "Dim", + "HostnameBg": "Yellow", + "HostnameFg": "Black", + "TextAttr": "None", + "TextBg": "Black", + "TextFg": "White" + }, + "Server": { + "DelimiterAttr": "AttrDim", + "DelimiterBg": "BgCyan", + "DelimiterFg": "FgBlack", + "ServerAttr": "AttrDim", + "ServerBg": "BgCyan", + "ServerFg": "FgBlack", + "HostnameAttr": "AttrBold", + "HostnameBg": "BgCyan", + "HostnameFg": "FgBlack", + "TextAttr": "AttrNone", + "TextBg": "BgBlack", + "TextFg": "FgWhite" + }, + "Common": { + "SeverityErrorAttr": "AttrBold", + "SeverityErrorBg": "BgRed", + "SeverityErrorFg": "FgWhite", + "SeverityFatalAttr": "AttrBold", + "SeverityFatalBg": "BgMagenta", + "SeverityFatalFg": "FgWhite", + "SeverityWarnAttr": "AttrBold", + "SeverityWarnBg": "BgBlack", + "SeverityWarnFg": "FgWhite" + }, + "MaprTable": { + "DataAttr": "AttrNone", + "DataBg": "BgBlue", + "DataFg": "FgWhite", + "DelimiterAttr": "AttrDim", + "DelimiterBg": "BgBlue", + "DelimiterFg": "FgWhite", + "HeaderAttr": "AttrBold", + "HeaderBg": "BgBlue", + "HeaderFg": "FgWhite", + "HeaderDelimiterAttr": "AttrDim", + "HeaderDelimiterBg": "BgBlue", + "HeaderDelimiterFg": "FgWhite", + "HeaderSortKeyAttr": "AttrUnderline", + "HeaderGroupKeyAttr": "AttrReverse", + "RawQueryAttr": "AttrDim", + "RawQueryBg": "BgBlack", + "RawQueryFg": "FgCyan" + } + } + }, + ... +} +</pre><br /> +<p>You notice the different sections - these are different contexts:</p> +<ul> +<li>Remote: Color configuration for all log lines sent remotely from the server to the client. </li> +<li>Client: Color configuration for all lines produced by a DTail client by itself (e.g. status information).</li> +<li>Server: Color configuration for all lines produced by the DTail server by itself and sent to the client (e.g. server warnings or errors)</li> +<li>MaprTable: Color configuration for the map-reduce table output.</li> +<li>Common: Common color configuration used in various places (e.g. when it's not clear what's the current context of a line).</li> +</ul> +<p>When you do so, make sure that you check your "dtail.json" against the JSON schema file. This is to ensure that you don't configure an invalid color accidentally (requires "jsonschema" to be installed on your computer). Furthermore, the schema file is also a good reference for all possible colors available:</p> +<pre> +jsonschema -i dtail.json schemas/dtail.schema.json +</pre><br /> +<h3>Serverless mode</h3> +<p>All DTail commands can now operate on log files (and other text files) directly without any DTail server running. So there isn't a need anymore to install a DTail server when you are on the target server already anyway, like the following example shows:</p> +<pre> +% dtail --files /var/log/foo.log +</pre><br /> +<p>or</p> +<pre> +% dmap --files /var/log/foo.log --query 'from TABLE select .... outfile result.csv' +</pre><br /> +<p>The way it works in Go code is that a connection to a server is managed through an interface and in serverless mode DTail calls through that interface to the server code directly without any TCP/IP and SSH connection made in the background. This means, that the binaries are a bit larger (also ship with the code which normally would be executed by the server) but the increase of binary size is not much.</p> +<h3>Shorthand flags</h3> +<p>The "--files" from the previous example is now redundant. As a shorthand, It is now possible to do the following instead:</p> +<pre> +% dtail /var/log/foo.log +</pre><br /> +<p>Of course, this also works with all other DTail client commands (dgrep, dcat, ... etc).</p> +<h3>Spartan (aka plain) mode</h3> +<p>There's a plain mode, which makes DTail only print out the "plain" text of the files operated on (without any DTail specific enriched output). E.g.:</p> +<pre> +% dcat --plain /etc/passwd > /etc/test +% diff /etc/test /etc/passwd # Same content, no diff +</pre><br /> +<p>This might be useful if you wanted to post-process the output. </p> +<h3>Standard input pipe</h3> +<p>In serverless mode, you might want to process your data in a pipeline. You can do that now too through an input pipe:</p> +<pre> +% dgrep --plain --regex 'somethingspecial' /var/log/foo.log | + dmap --query 'from TABLE select .... outfile result.csv' +</pre><br /> +<p>Or, use any other "standard" tool:</p> +<pre> +% awk '.....' < /some/file | dtail .... +</pre><br /> +<h3>New command dtailhealth</h3> +<p>Prior to DTail 4, there was a flag for the "dtail" command to check the health of a remote DTail server (for use with monitoring system such as Nagios). That has been moved out to a separate binary to reduce complexity of the "dtail" command. The following checks whether DTail is operational on the current machine (you could also check a remote instance of DTail server, just adjust the server address).</p> +<pre> +% cat check_dtail.sh +#!/bin/sh + +exec /usr/local/bin/dtailhealth --serve |
