summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <git@mx.buetow.org>2021-05-25 09:48:08 +0100
committerPaul Buetow <git@mx.buetow.org>2021-05-25 09:48:10 +0100
commit103f284e7ffba7fa532ed200ca1adb781d0c955e (patch)
tree572d30db587d33a96ffe98eac9f7dee4869b8fd5
parent660c937865030bdf24af0086f292671eb73d0e2b (diff)
Reword to british english style
-rw-r--r--gemfeed/2016-04-16-offsite-backup-with-zfs-part2.md6
-rw-r--r--gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md24
-rw-r--r--gemfeed/2016-11-20-methods-in-c.md12
3 files changed, 21 insertions, 21 deletions
diff --git a/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.md b/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.md
index 72445954..af21526b 100644
--- a/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.md
+++ b/gemfeed/2016-04-16-offsite-backup-with-zfs-part2.md
@@ -19,11 +19,11 @@
[Read the first part before reading any furter here...](./2016-04-03-offsite-backup-with-zfs.md)
-I enhanced the procedure a bit. From now on I am having two external 2TB USB hard drives. Both are setup exactly the same way. To decrease the probability that they will not fail at about the same time both drives are of different brands. One drive is kept at the secret location. The other one is kept at home right next to my HP MicroServer.
+I enhanced the procedure a bit. From now on, I have two external 2TB USB hard drives. Both are set up precisely the same way. To decrease the probability that both drives will not fail simultaneously, they are of different brands. One drive is kept at a secret location. The other one is held at home, right next to my HP MicroServer.
-Whenever I am updating offsite backup, I am doing it to the drive which is kept locally. Afterwards I bring it to the secret location and swap the drives and bring the other one back home. This ensures that I will always have an offiste backup available at a different location than my home - even while updating one copy of it.
+Whenever I update the offsite backup, I am doing it to the drive, which is kept locally. Afterwards, I bring it to the secret location, swap the drives, and bring the other back home. This ensures that I will always have an offsite backup available at a different location than my home - even while updating one copy of it.
-Furthermore, I added scrubbing (*zpool scrub...*) to the script. It ensures that the file system is consistent and that there are no bad blocks on the disk and the file system. To increase the reliability I also run a *zfs set copies=2 zroot*. That setting is also synchronized to the offsite ZFS pool. ZFS stores every data block to disk twice now. Yes, it consumes twice as much disk space but it makes it better fault tolerant against hardware errors (e.g. only individual disk sectors going bad).
+Furthermore, I added scrubbing ("zpool scrub...") to the script. It ensures that the file system is consistent and that there are no bad blocks on the disk and the file system. To increase the reliability, I also run a "zfs set copies=2 zroot". That setting is also synchronized to the offsite ZFS pool. ZFS stores every data block to disk twice now. Yes, it consumes twice as much disk space, making it better fault-tolerant against hardware errors (e.g. only individual disk sectors going bad).
E-Mail me your thoughts at comments@mx.buetow.org!
diff --git a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md
index 21237eae..f73aef98 100644
--- a/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md
+++ b/gemfeed/2016-05-22-spinning-up-my-own-authoritative-dns-servers.md
@@ -4,13 +4,13 @@
## Background
-Finally, I had time to deploy my own authoritative DNS servers (master and slave) for my domains "buetow.org" and "buetow.zone". My domain name provider is Schlund Technologies. They allow their customers to manually edit the DNS records (BIND files). And they also give you the opportunity to set your own authoritative DNS servers for your domains. From now, I am making use of that option.
+Finally, I had time to deploy my authoritative DNS servers (master and slave) for my domains "buetow.org" and "buetow.zone". My domain name provider is Schlund Technologies. They allow their customers to edit the DNS records (BIND files) manually. And they also allow you to set your authoritative DNS servers for your domains. From now, I am making use of that option.
[Schlund Technologies](http://www.schlundtech.de)
## All FreeBSD Jails
-In order to set up my authoritative DNS servers I installed a FreeBSD Jail dedicated for DNS with Puppet on my root machine as follows:
+To set up my authoritative DNS servers, I installed a FreeBSD Jail dedicated for DNS with Puppet on my root machine as follows:
```
include freebsd
@@ -47,7 +47,7 @@ class { 'jail':
## PF firewall
-Please note that "dns.ian.buetow.org" is just the Jail name of the master DNS server (and "caprica.ian.buetow.org" the name of the Jail for the slave DNS server) and that I am using the DNS names "dns1.buetow.org" (master) and "dns2.buetow.org" (slave) for the actual service names (these are the DNS servers visible to the public). Please also note that the IPv4 address is an internal one. I have a PF to use NAT and PAT. The DNS ports are being forwarded (TCP and UDP) to that Jail. By default, all ports are blocked, so I am adding an exception rule for the IPv6 address as well. These are the PF rules in use:
+Please note that "dns.ian.buetow.org" is just the Jail name of the master DNS server (and "caprica.ian.buetow.org" the name of the Jail for the slave DNS server) and that I am using the DNS names "dns1.buetow.org" (master) and "dns2.buetow.org" (slave) for the actual service names (these are the DNS servers visible to the public). Please also note that the IPv4 address is an internal one. I have a PF to use NAT and PAT. The DNS ports are being forwarded (TCP and UDP) to that Jail. By default, all ports are blocked, so I am adding an exception rule for the IPv6 address. These are the PF rules in use:
```
% cat /etc/pf.conf
@@ -64,7 +64,7 @@ pass in on re0 inet6 proto udp from any to 2a01:4f8:120:30e8::15 port {53} flags
## Puppet managed BIND zone files
-In "manifests/dns.pp" (the Puppet manifest for the Master DNS Jail itself) I configured the BIND DNS server this way:
+In "manifests/dns.pp" (the Puppet manifest for the Master DNS Jail itself), I configured the BIND DNS server this way:
```
class { 'bind_freebsd':
@@ -73,9 +73,9 @@ class { 'bind_freebsd':
}
```
-The Puppet module is actually a pretty simple one. It installs the file "/usr/local/etc/named/named.conf" and it populates the "/usr/local/etc/named/dynamicdb" directory with all my zone files.
+The Puppet module is a pretty simple one. It installs the file "/usr/local/etc/named/named.conf" and it populates the "/usr/local/etc/named/dynamicdb" directory with all my zone files.
-Once (Puppet-) applied inside of the Jail I get this:
+Once (Puppet-) applied inside of the Jail, I get this:
```
paul uranus:~/git/blog/source [4268]% ssh admin@dns1.buetow.org.buetow.org pgrep -lf named
@@ -119,7 +119,7 @@ dns2 86400 IN AAAA 2a03:2500:1:6:20::
.
```
-That is my master DNS server. My slave DNS server runs in another Jail on another bare metal machine. Everything is set up similar to the master DNS server. However, that server is located in a different DC and in different IP subnets. The only difference is the "named.conf". It's configured to be a slave and that means that the "dynamicdb" gets populated by BIND itself while doing zone transfers from the master.
+That is my master DNS server. My slave DNS server runs in another Jail on another bare-metal machine. Everything is set up similar to the master DNS server. However, that server is located in a different DC and different IP subnets. The only difference is the "named.conf". It's configured to be a slave, and that means that the "dynamicdb" gets populated by BIND itself while doing zone transfers from the master.
```
paul uranus:~/git/blog/source [4279]% ssh admin@dns2.buetow.org tail -n 11 /usr/local/etc/namedb/named.conf
@@ -136,9 +136,9 @@ zone "buetow.zone" {
};
```
-## The end result
+## The result
-The end result looks like this now:
+The result looks like this now:
```
% dig -t ns buetow.org
@@ -198,7 +198,7 @@ dns2.buetow.org. 86400 IN AAAA 2a03:2500:1:6:20::
## Monitoring
-For monitoring I am using Icinga2 (I am operating two Icinga2 instances in two different DCs). I may have to post another blog article about Icinga2 but to get the idea these were the snippets added to my Icinga2 configuration:
+For monitoring, I am using Icinga2 (I am operating two Icinga2 instances in two different DCs). I may have to post another blog article about Icinga2, but to get the idea, these were the snippets added to my Icinga2 configuration:
```
apply Service "dig" {
@@ -225,12 +225,12 @@ apply Service "dig6" {
## DNS update workflow
-Whenever I have to change a DNS entry all have to do is:
+Whenever I have to change a DNS entry, all I have to do is:
* Git clone or update the Puppet repository
* Update/commit and push the zone file (e.g. "buetow.org")
* Wait for Puppet. Puppet will deploy that updated zone file. And it will reload the BIND server.
-* The BIND server will notify all slave DNS servers (at the moment only one). And it will transfer the new version of the zone.
+* The BIND server will notify all slave DNS servers (at the moment, only one). And it will transfer the new version of the zone.
That's much more comfortable now than manually clicking at some web UIs at Schlund Technologies.
diff --git a/gemfeed/2016-11-20-methods-in-c.md b/gemfeed/2016-11-20-methods-in-c.md
index 9906dbd5..8f0516d1 100644
--- a/gemfeed/2016-11-20-methods-in-c.md
+++ b/gemfeed/2016-11-20-methods-in-c.md
@@ -2,11 +2,11 @@
> Written by Paul Buetow 2016-11-20
-You can do some sort of object oriented programming in the C Programming Language. However, that is very limited. But also very easy and straight forward to use.
+You can do some sort of object-oriented programming in the C Programming Language. However, that is very limited. But also very easy and straightforward to use.
## Example
-Lets have a look at the following sample program. Basically all you have to do is to add a function pointer such as "calculate" to the definition of struct "something_s". Later, during the struct initialization, assign a function address to that function pointer:
+Let's have a look at the following sample program. All you have to do is to add a function pointer such as "calculate" to the definition of struct "something_s". Later, during the struct initialization, assign a function address to that function pointer:
```
#include <stdio.h>
@@ -42,7 +42,7 @@ int main(void) {
}
```
-As you can see you can call the function (pointed by the function pointer) the same way as in C++ or Java via:
+As you can see, you can call the function (pointed by the function pointer) the same way as in C++ or Java via:
```
printf("%s(%f, %f) => %f\n", mult.name, a, b, mult.calculate(a,b));
@@ -69,17 +69,17 @@ Not complicated at all, but nice to know and helps to make the code easier to re
## The flaw
-That's actually not really how it works in object oriented languages such as Java and C++. The method call in this example is not really a method call as "mult" and "div" in this example are not "message receivers". What I mean by that is that the functions can not access the state of the "mult" and "div" struct objects. In C you would need to do something like this instead if you wanted to access the state of "mult" from within the calculate function, you would have to pass it as an argument:
+However, that's not really how it works in object-oriented languages such as Java and C++. The method call in this example is not a method call as "mult" and "div" in this example are not "message receivers". I mean that the functions can not access the state of the "mult" and "div" struct objects. In C, you would need to do something like this instead if you wanted to access the state of "mult" from within the calculate function, you would have to pass it as an argument:
```
mult.calculate(mult,a,b));
```
-How to overcome this? You need to take it further...
+How to overcome this? You need to take it further.
## Taking it further
-If you want to take it further type "Object-Oriented Programming with ANSI-C" into your favorite internet search engine, you will find some crazy stuff. Some go as far as writing a C preprocessor in AWK, which takes some object oriented pseudo-C and transforms it to plain C so that the C compiler can compile it to machine code. This is actually similar to how the C++ language had its origins.
+If you want to take it further, type "Object-Oriented Programming with ANSI-C" into your favourite internet search engine, you will find some crazy stuff. Some go as far as writing a C preprocessor in AWK, which takes some object-oriented pseudo-C and transforms it to plain C so that the C compiler can compile it to machine code. This is similar to how the C++ language had its origins.
E-Mail me your thoughts at comments@mx.buetow.org!