summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <git@mx.buetow.org>2021-05-17 21:02:55 +0100
committerPaul Buetow <git@mx.buetow.org>2021-05-21 05:11:05 +0100
commit1079f927a27db9d194c8e25eb3a188396fdf8eab (patch)
tree624f19114f664d23f651cce07e0a59c564c1798a
parent66891ce50ed59d19f54ee3765b295dda6f806bf5 (diff)
refactor code
-rw-r--r--TODO.md6
-rwxr-xr-xbuetow.org.sh14
-rw-r--r--content/gemtext/gemfeed/atom.xml8
-rw-r--r--content/html/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html4
-rw-r--r--content/html/gemfeed/2021-04-24-welcome-to-the-geminispace.html2
-rw-r--r--content/html/gemfeed/atom.xml8
-rw-r--r--content/md/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md4
-rw-r--r--content/md/gemfeed/2021-04-24-welcome-to-the-geminispace.md2
-rw-r--r--packages/assert.source.sh (renamed from modules/assert.source.sh)2
-rw-r--r--packages/atomfeed.source.sh (renamed from modules/atomfeed.source.sh)0
-rw-r--r--packages/gemfeed.source.sh (renamed from modules/gemfeed.source.sh)0
-rw-r--r--packages/generate.source.sh (renamed from modules/generate.source.sh)10
-rw-r--r--packages/html.source.sh (renamed from modules/html.source.sh)17
-rw-r--r--packages/log.source.sh (renamed from modules/log.source.sh)0
-rw-r--r--packages/md.source.sh (renamed from modules/md.source.sh)0
15 files changed, 35 insertions, 42 deletions
diff --git a/TODO.md b/TODO.md
index 3562ffe1..b75b26a8 100644
--- a/TODO.md
+++ b/TODO.md
@@ -4,10 +4,4 @@ Adjust code to reflect the google style guide. Use this to practice navigating t
* comment complex functions
* comment all lib functions
-* TODOs always with a name in it, e.g. "TODO(paul): BLabla"
-* fix signle vs double quotes: strings without var interpolation
-* [[ ]] is preferred over [ ]
-* bash -c 'help readarray' trick, zsh alias/function for bash help
-* avoid a stand alone (( i++ ))
-* rename ./modules to ./packages
* buetow.org.conf: declare -xr FOO=bar both constant and env.
diff --git a/buetow.org.sh b/buetow.org.sh
index 21e19352..fb5f45f8 100755
--- a/buetow.org.sh
+++ b/buetow.org.sh
@@ -12,13 +12,13 @@ readonly DATE
readonly SED
source buetow.org.conf
-source ./modules/assert.source.sh
-source ./modules/atomfeed.source.sh
-source ./modules/gemfeed.source.sh
-source ./modules/generate.source.sh
-source ./modules/html.source.sh
-source ./modules/log.source.sh
-source ./modules/md.source.sh
+source ./packages/assert.source.sh
+source ./packages/atomfeed.source.sh
+source ./packages/gemfeed.source.sh
+source ./packages/generate.source.sh
+source ./packages/html.source.sh
+source ./packages/log.source.sh
+source ./packages/md.source.sh
help () {
cat <<HELPHERE
diff --git a/content/gemtext/gemfeed/atom.xml b/content/gemtext/gemfeed/atom.xml
index 3b6800da..acc1a984 100644
--- a/content/gemtext/gemfeed/atom.xml
+++ b/content/gemtext/gemfeed/atom.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
- <updated>2021-05-16T18:34:25+01:00</updated>
+ <updated>2021-05-17T21:01:05+01:00</updated>
<title>buetow.org feed</title>
<subtitle>Having fun with computers!</subtitle>
<link href="gemini://buetow.org/gemfeed/atom.xml" rel="self" />
@@ -354,7 +354,7 @@ fi
<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 &amp; 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>Earlier this year (2021) I noticed that my almost 7 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>
@@ -489,7 +489,7 @@ jgs\__/'---'\__/
<h2>Foreword</h2>
<p>This text first was published in the german IT-Administrator computer Magazine. 3 years have passed since and I decided to publish it on my blog too. </p>
<a class="textlink" href="https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot">https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot</a><br />
-<p>I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work involving I/O.</p>
+<p>I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O.</p>
<p>I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency.</p>
<p>Pleace notice that some of the screenshots show the command "ioreplay" instead of "ioriot". That's because the name has changed after taking those.</p>
<h1>The article</h1>
@@ -501,7 +501,7 @@ jgs\__/'---'\__/
<p>Testing in the production environment: For these reasons, benchmarks are often carried out in the production environment. In order to derive value from this such tests are especially performed during peak hours when systems are under high load. However, testing on production systems is associated with risks and can lead to failure or loss of data without adequate protection.</p>
<h2>Benchmarking the Email Cloud at Mimecast</h2>
<p>For email archiving, Mimecast uses an internally developed microservice, which is operated directly on Linux-based storage systems. A storage cluster is divided into several replication volumes. Data is always replicated three times across two secure data centers. Customer data is automatically allocated to one or more volumes, depending on throughput, so that all volumes are automatically assigned the same load. Customer data is archived on conventional, but inexpensive hard disks with several terabytes of storage capacity each. I/O benchmarking proved difficult for all the reasons mentioned above. Furthermore, there are no ready-made tools for this purpose in the case of self-developed software. The service operates on many block devices simultaneously, which can make the RAID controller a bottleneck. None of the freely available benchmarking tools can test several block devices at the same time without extra effort. In addition, emails typically consist of many small files. Randomized access to many small files is particularly inefficient. In addition to many software adaptations, the hardware and operating system must also be optimized.</p>
-<p>Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident related to disk I/O load.</p>
+<p>Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident caused by disk I/O load.</p>
<h2>Using I/O Riot</h2>
<p>First, all I/O events are logged to a file on a production system with I/O Riot. It is then copied to a test system where all events are replayed in the same way. The crucial point here is that you can reproduce I/O patterns as they are found on a production system as often as you like on a test system. This results in the possibility of optimizing the set screws on the system after each run.</p>
<h3>Installation</h3>
diff --git a/content/html/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html b/content/html/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html
index 53ef5543..c201997f 100644
--- a/content/html/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html
+++ b/content/html/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html
@@ -67,7 +67,7 @@ jgs\__/'---'\__/
<h2>Foreword</h2>
<p>This text first was published in the german IT-Administrator computer Magazine. 3 years have passed since and I decided to publish it on my blog too. </p>
<a class="textlink" href="https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot">https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot</a><br />
-<p>I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work involving I/O.</p>
+<p>I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O.</p>
<p>I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency.</p>
<p>Pleace notice that some of the screenshots show the command "ioreplay" instead of "ioriot". That's because the name has changed after taking those.</p>
<h1>The article</h1>
@@ -79,7 +79,7 @@ jgs\__/'---'\__/
<p>Testing in the production environment: For these reasons, benchmarks are often carried out in the production environment. In order to derive value from this such tests are especially performed during peak hours when systems are under high load. However, testing on production systems is associated with risks and can lead to failure or loss of data without adequate protection.</p>
<h2>Benchmarking the Email Cloud at Mimecast</h2>
<p>For email archiving, Mimecast uses an internally developed microservice, which is operated directly on Linux-based storage systems. A storage cluster is divided into several replication volumes. Data is always replicated three times across two secure data centers. Customer data is automatically allocated to one or more volumes, depending on throughput, so that all volumes are automatically assigned the same load. Customer data is archived on conventional, but inexpensive hard disks with several terabytes of storage capacity each. I/O benchmarking proved difficult for all the reasons mentioned above. Furthermore, there are no ready-made tools for this purpose in the case of self-developed software. The service operates on many block devices simultaneously, which can make the RAID controller a bottleneck. None of the freely available benchmarking tools can test several block devices at the same time without extra effort. In addition, emails typically consist of many small files. Randomized access to many small files is particularly inefficient. In addition to many software adaptations, the hardware and operating system must also be optimized.</p>
-<p>Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident related to disk I/O load.</p>
+<p>Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident caused by disk I/O load.</p>
<h2>Using I/O Riot</h2>
<p>First, all I/O events are logged to a file on a production system with I/O Riot. It is then copied to a test system where all events are replayed in the same way. The crucial point here is that you can reproduce I/O patterns as they are found on a production system as often as you like on a test system. This results in the possibility of optimizing the set screws on the system after each run.</p>
<h3>Installation</h3>
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
index 60058422..2488ccbe 100644
--- a/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace.html
+++ b/content/html/gemfeed/2021-04-24-welcome-to-the-geminispace.html
@@ -80,7 +80,7 @@ h2, h3 {
<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 &amp; 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>Earlier this year (2021) I noticed that my almost 7 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>
diff --git a/content/html/gemfeed/atom.xml b/content/html/gemfeed/atom.xml
index d626a57f..b87afe87 100644
--- a/content/html/gemfeed/atom.xml
+++ b/content/html/gemfeed/atom.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
- <updated>2021-05-16T18:34:25+01:00</updated>
+ <updated>2021-05-17T21:01:05+01:00</updated>
<title>buetow.org feed</title>
<subtitle>Having fun with computers!</subtitle>
<link href="https://buetow.org/gemfeed/atom.xml" rel="self" />
@@ -354,7 +354,7 @@ fi
<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 &amp; 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>Earlier this year (2021) I noticed that my almost 7 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>
@@ -489,7 +489,7 @@ jgs\__/'---'\__/
<h2>Foreword</h2>
<p>This text first was published in the german IT-Administrator computer Magazine. 3 years have passed since and I decided to publish it on my blog too. </p>
<a class="textlink" href="https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot">https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot</a><br />
-<p>I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work involving I/O.</p>
+<p>I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O.</p>
<p>I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency.</p>
<p>Pleace notice that some of the screenshots show the command "ioreplay" instead of "ioriot". That's because the name has changed after taking those.</p>
<h1>The article</h1>
@@ -501,7 +501,7 @@ jgs\__/'---'\__/
<p>Testing in the production environment: For these reasons, benchmarks are often carried out in the production environment. In order to derive value from this such tests are especially performed during peak hours when systems are under high load. However, testing on production systems is associated with risks and can lead to failure or loss of data without adequate protection.</p>
<h2>Benchmarking the Email Cloud at Mimecast</h2>
<p>For email archiving, Mimecast uses an internally developed microservice, which is operated directly on Linux-based storage systems. A storage cluster is divided into several replication volumes. Data is always replicated three times across two secure data centers. Customer data is automatically allocated to one or more volumes, depending on throughput, so that all volumes are automatically assigned the same load. Customer data is archived on conventional, but inexpensive hard disks with several terabytes of storage capacity each. I/O benchmarking proved difficult for all the reasons mentioned above. Furthermore, there are no ready-made tools for this purpose in the case of self-developed software. The service operates on many block devices simultaneously, which can make the RAID controller a bottleneck. None of the freely available benchmarking tools can test several block devices at the same time without extra effort. In addition, emails typically consist of many small files. Randomized access to many small files is particularly inefficient. In addition to many software adaptations, the hardware and operating system must also be optimized.</p>
-<p>Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident related to disk I/O load.</p>
+<p>Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident caused by disk I/O load.</p>
<h2>Using I/O Riot</h2>
<p>First, all I/O events are logged to a file on a production system with I/O Riot. It is then copied to a test system where all events are replayed in the same way. The crucial point here is that you can reproduce I/O patterns as they are found on a production system as often as you like on a test system. This results in the possibility of optimizing the set screws on the system after each run.</p>
<h3>Installation</h3>
diff --git a/content/md/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md b/content/md/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md
index 260a0368..77ee72ee 100644
--- a/content/md/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md
+++ b/content/md/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md
@@ -19,7 +19,7 @@ This text first was published in the german IT-Administrator computer Magazine.
[https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot](https://www.admin-magazin.de/Das-Heft/2018/06/Realistische-Lasttests-mit-I-O-Riot)
-I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work involving I/O.
+I havn't worked on I/O Riot for some time now, but all what is written here is still valid. I am still using I/O Riot to debug I/O issues and pattern once in a while, so by all means the tool is not obsolete yet. The tool even helped to resolve a major production incident at work caused by disk I/O.
I am eagerly looking forward to revamp I/O Riot so that it uses the new BPF Linux capabilities instead of plain old Systemtap (or alternatively: Newer versions of Systemtap can also use BPF as the backend I have learned). Also, when I wrote I/O Riot initially, I didn't have any experience with the Go programming language yet and therefore I wrote it in C. Once it gets revamped I might consider using Go instead of C as it would spare me from many segmentation faults and headaches during development ;-). I might also just stick to C for plain performance reasons and just refactor the code dealing with concurrency.
@@ -43,7 +43,7 @@ Testing in the production environment: For these reasons, benchmarks are often c
For email archiving, Mimecast uses an internally developed microservice, which is operated directly on Linux-based storage systems. A storage cluster is divided into several replication volumes. Data is always replicated three times across two secure data centers. Customer data is automatically allocated to one or more volumes, depending on throughput, so that all volumes are automatically assigned the same load. Customer data is archived on conventional, but inexpensive hard disks with several terabytes of storage capacity each. I/O benchmarking proved difficult for all the reasons mentioned above. Furthermore, there are no ready-made tools for this purpose in the case of self-developed software. The service operates on many block devices simultaneously, which can make the RAID controller a bottleneck. None of the freely available benchmarking tools can test several block devices at the same time without extra effort. In addition, emails typically consist of many small files. Randomized access to many small files is particularly inefficient. In addition to many software adaptations, the hardware and operating system must also be optimized.
-Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident related to disk I/O load.
+Mimecast encourages employees to be innovative and pursue their own ideas in the form of an internal competition, Pet Project. The goal of the pet project I/O Riot was to simplify OS and hardware level I/O benchmarking. The first prototype of I/O Riot was awarded an internal roadmap prize in the spring of 2017. A few months later, I/O Riot was used to reduce write latency in the storage clusters by about 50%. The improvement was first verified by I/O replay on a test system and then successively applied to all storage systems. I/O Riot was also used to resolve a production incident caused by disk I/O load.
## Using I/O Riot
diff --git a/content/md/gemfeed/2021-04-24-welcome-to-the-geminispace.md b/content/md/gemfeed/2021-04-24-welcome-to-the-geminispace.md
index fcc77ab5..8b6e229f 100644
--- a/content/md/gemfeed/2021-04-24-welcome-to-the-geminispace.md
+++ b/content/md/gemfeed/2021-04-24-welcome-to-the-geminispace.md
@@ -36,7 +36,7 @@ For some time I had to urge to revamp my personal website. Not to update the tec
### 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.
+Earlier this year (2021) I noticed that my almost 7 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.
diff --git a/modules/assert.source.sh b/packages/assert.source.sh
index d7c507a4..551d1623 100644
--- a/modules/assert.source.sh
+++ b/packages/assert.source.sh
@@ -3,7 +3,7 @@ assert::equals () {
local -r expected="$1"; shift
local -r callee=${FUNCNAME[1]}
- if [ "$result" != "$expected" ]; then
+ if [[ "$result" != "$expected" ]]; then
cat <<ERROR | log::pipe ERROR
In $callee expected
'$expected'
diff --git a/modules/atomfeed.source.sh b/packages/atomfeed.source.sh
index feb074a8..feb074a8 100644
--- a/modules/atomfeed.source.sh
+++ b/packages/atomfeed.source.sh
diff --git a/modules/gemfeed.source.sh b/packages/gemfeed.source.sh
index c68c5070..c68c5070 100644
--- a/modules/gemfeed.source.sh
+++ b/packages/gemfeed.source.sh
diff --git a/modules/generate.source.sh b/packages/generate.source.sh
index 171c31cf..0f07af56 100644
--- a/modules/generate.source.sh
+++ b/packages/generate.source.sh
@@ -15,7 +15,7 @@ generate::make_link () {
done < <(echo "$line" | tr ' ' '\n')
if grep -E -q "$IMAGE_PATTERN" <<< "$link"; then
- if [ "$what" == md ]; then
+ if [[ "$what" == md ]]; then
md::make_img "$link" "$descr"
else
html::make_img "$link" "$(html::special "$descr")"
@@ -23,7 +23,7 @@ generate::make_link () {
return
fi
- if [ "$what" == md ]; then
+ if [[ "$what" == md ]]; then
md::make_link "$link" "$descr"
else
html::make_link "$link" "$(html::special "$descr")"
@@ -38,11 +38,11 @@ generate::fromgmi_ () {
local dest_dir=$(dirname "$dest")
test ! -d "$dest_dir" && mkdir -p "$dest_dir"
- if [ "$format" == html ]; then
+ if [[ "$format" == html ]]; then
cat header.html.part > "$dest.tmp"
html::fromgmi < "$src" >> "$dest.tmp"
cat footer.html.part >> "$dest.tmp"
- elif [ "$format" == md ]; then
+ elif [[ "$format" == md ]]; then
md::fromgmi < "$src" >> "$dest.tmp"
fi
@@ -71,7 +71,7 @@ generate::convert_gmi_atom_to_html_atom () {
< $CONTENT_DIR/gemtext/gemfeed/atom.xml \
> $CONTENT_DIR/html/gemfeed/atom.xml
- test "$ADD_GIT" == yes && git add $CONTENT_DIR/html/gemfeed/atom.xml
+ test "$ADD_GIT" == yes && git add "$CONTENT_DIR/html/gemfeed/atom.xml"
}
generate::fromgmi_cleanup () {
diff --git a/modules/html.source.sh b/packages/html.source.sh
index 3eb2ee4e..d8d2fc66 100644
--- a/modules/html.source.sh
+++ b/packages/html.source.sh
@@ -14,7 +14,6 @@ html::make_paragraph () {
html::make_heading () {
local -r text=$($SED -E 's/^#+ //' <<< "$1"); shift
local -r level="$1"; shift
-
echo "<h${level}>$(html::special "$text")</h${level}>"
}
@@ -47,23 +46,23 @@ html::make_link () {
}
html::fromgmi () {
- local -i is_list=0
- local -i is_plain=0
+ local is_list=no
+ local is_plain=no
while IFS='' read -r line; do
- if [ $is_list -eq 1 ]; then
+ if [[ "$is_list" == yes ]]; then
if [[ "$line" == '* '* ]]; then
echo "<li>$(html::special "${line/\* /}")</li>"
else
- is_list=0
+ is_list=no
echo "</ul>"
fi
continue
- elif [ $is_plain -eq 1 ]; then
+ elif [[ "$is_plain" == yes ]]; then
if [[ "$line" == '```'* ]]; then
echo "</pre>"
- is_plain=0
+ is_plain=no
else
html::special "$line"
fi
@@ -72,12 +71,12 @@ html::fromgmi () {
case "$line" in
'* '*)
- is_list=1
+ is_list=yes
echo "<ul>"
echo "<li>${line/\* /}</li>"
;;
'```'*)
- is_plain=1
+ is_plain=yes
echo "<pre>"
;;
'# '*)
diff --git a/modules/log.source.sh b/packages/log.source.sh
index 55d693ec..55d693ec 100644
--- a/modules/log.source.sh
+++ b/packages/log.source.sh
diff --git a/modules/md.source.sh b/packages/md.source.sh
index 197bdcf7..197bdcf7 100644
--- a/modules/md.source.sh
+++ b/packages/md.source.sh