diff options
| author | Paul Buetow <git@mx.buetow.org> | 2021-05-17 21:02:55 +0100 |
|---|---|---|
| committer | Paul Buetow <git@mx.buetow.org> | 2021-05-21 05:11:05 +0100 |
| commit | 1079f927a27db9d194c8e25eb3a188396fdf8eab (patch) | |
| tree | 624f19114f664d23f651cce07e0a59c564c1798a | |
| parent | 66891ce50ed59d19f54ee3765b295dda6f806bf5 (diff) | |
refactor code
| -rw-r--r-- | TODO.md | 6 | ||||
| -rwxr-xr-x | buetow.org.sh | 14 | ||||
| -rw-r--r-- | content/gemtext/gemfeed/atom.xml | 8 | ||||
| -rw-r--r-- | content/html/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.html | 4 | ||||
| -rw-r--r-- | content/html/gemfeed/2021-04-24-welcome-to-the-geminispace.html | 2 | ||||
| -rw-r--r-- | content/html/gemfeed/atom.xml | 8 | ||||
| -rw-r--r-- | content/md/gemfeed/2018-06-01-realistic-load-testing-with-ioriot-for-linux.md | 4 | ||||
| -rw-r--r-- | content/md/gemfeed/2021-04-24-welcome-to-the-geminispace.md | 2 | ||||
| -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
@@ -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 & 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 & 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 & 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 |
