"Hi, my name is Jesse Harris. I'm a self professed operating systems nerd.
+I actively use current versions of Windows,
+GNU/Linux, Macos and dabble in
+the BSDs.
+
+
I work for a University in the client systems area, where
+I do a fair amount of scripting.
I want to use this site to share my insites about the differences in the
+operating systems in an unbiased way."
+
+
+
+
+
+
+
diff --git a/about.md b/about.md
new file mode 100644
index 0000000..f8fdfcb
--- /dev/null
+++ b/about.md
@@ -0,0 +1,16 @@
+About
+
+"Hi, my name is Jesse Harris. I'm a self professed operating systems nerd.
+I actively use current versions of [Windows](windows.html),
+[GNU/Linux](gnu-linux.html), [Macos](macos.html) and dabble in
+[the BSDs](the-bsds.html).
+
+I work for a [University](https://usc.edu.au) in the client systems area, where
+I do a fair amount of scripting.
+
+Read about:
+
+* [My setup](my-setup.html)
+
+I want to use this site to share my insites about the differences in the
+operating systems in an unbiased way."
diff --git a/all_posts.html b/all_posts.html
new file mode 100644
index 0000000..0183b7c
--- /dev/null
+++ b/all_posts.html
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+zigford.org — All posts
+
+
Sometime ago I was searching the interwebs for inspiration to spruce up my
+powershell prompt. I came across someone's prompt they shared on
+stackoverflow or superuser and unfortunatly I could not find the link
+again to give proper credit.
+
+
Today, I'm essentially using the same prompt but I've had to adjust it to work
+on Windows and MacOS with the two areas of compatability being that
+Windows uses backslash \ and Unixes like GNU/Linux and MacOS use
+forwardslash /.
+
With Windows powershell, in order to get colorized text, you had to use the
+Write-Host commandlet, but when switching to PSCore, the same code produced
+strange results. Initially the prompt would look fine, but if you were in a
+deep path, as soon as you typed a key, much of the prompt would be overwritten
+or word or some letters would be duplicated.
+
After a bit of research I found the Windows Console had had VT100 escape
+sequence support added. You could, in theory, enable any Windows 10 1607+
+console to support VT100, but you would need to use the WinAPI
+SetConsoleMode
+
It turns out, that PSCore on Windows, does this very thing, and so without any
+extra work, VT100 escape sequences work out of the box on this.
+
function ConvertTo-ShortPath {
+ Param([string]$Path)
+ # Replace Home with ~ symbol
+ $Location = $Path.Replace($HOME, '~')
+ # Remove prefix for UNC paths
+ $Location = $Location -replace '^[^:]+::', ''
+ # Handle paths starting with \\ and . correctly
+ # For paths not the current directory, display only a single
+ # character for each directory in the tree
+ If ($IsMacOS -or $IsLinux) {
+ # Systems with / paths
+ $Location = $Location -replace '(.?)([^/])[^/]*(?=/)','$1$2'
+ } else {
+ # Systems with \ paths
+ $Location = $Location -replace '\\(\.?)([^\\])[^\\]*(?=\\)','\$1$2'
+ }
+ return $Location
+ }
+
+ function prompt {
+ If ($PSEdition -eq "Core") {
+ $BC = "`e[96m" #Bright Cyan
+ $C = "`e[36m" #Cyan
+ $G = "`e[32m" #Green
+ $N = "`e[0m" #No Color
+ } else {
+ $C = [ConsoleColor]::DarkCyan
+ $G = [ConsoleColor]::Green
+ $BC = [ConsoleColor]::Cyan
+ }
+
+ $root = [char]0x0E3
+ $nonroot = [char]0x0A7
+ $H = $([net.dns]::GetHostName())
+
+ if (Test-CurrentAdminRights) {
+ $priv = $root
+ } else {
+ $priv = $nonroot
+ }
+
+ if ($PSEdition -eq "Core"){
+ # PSCore doesn't like a prompt using Write-Host
+ # thankfully, using VT100 signals works fine
+ "${BC}${priv} $G$H $C{ $BC$(ConvertTo-ShortPath ((pwd).Path)) $C }$N "
+ } else {
+ Write-Host "$priv " -NoNewline -ForegroundColor $BC
+ Write-Host $H -NoNewline -ForegroundColor $G
+ Write-Host ' {' -NoNewline -ForegroundColor $C
+ Write-Host (ConvertTo-ShortPath (pwd).Path) -NoNewline -ForegroundColor $BC
+ Write-Host '}' -NoNewline -ForegroundColor $C
+ return ' '
+ }
+ }
+
+
diff --git a/ansi-vt100-colors-in-powershell-core-prompt.md b/ansi-vt100-colors-in-powershell-core-prompt.md
new file mode 100644
index 0000000..1279359
--- /dev/null
+++ b/ansi-vt100-colors-in-powershell-core-prompt.md
@@ -0,0 +1,91 @@
+ANSI VT100 colors in Powershell Core prompt
+
+Sometime ago I was searching the interwebs for inspiration to spruce up my
+powershell prompt. I came across someone's prompt they shared on
+[stackoverflow][1] or [superuser][2] and unfortunatly I could not find the link
+again to give proper credit.
+
+---
+
+Today, I'm essentially using the same prompt but I've had to adjust it to work
+on [Windows][3] and [MacOS][4] with the two areas of compatability being that
+Windows uses backslash `\` and Unixes like [GNU/Linux][5] and MacOS use
+forwardslash `/`.
+
+With Windows powershell, in order to get colorized text, you had to use the
+`Write-Host` commandlet, but when switching to PSCore, the same code produced
+strange results. Initially the prompt would look fine, but if you were in a
+deep path, as soon as you typed a key, much of the prompt would be overwritten
+or word or some letters would be duplicated.
+
+After a bit of research I found the Windows Console had had VT100 escape
+sequence support added. You could, in theory, enable any Windows 10 1607+
+console to support VT100, but you would need to use the WinAPI
+[SetConsoleMode][6]
+
+It turns out, that PSCore on Windows, does this very thing, and so without any
+extra work, VT100 escape sequences work out of the box on this.
+
+ function ConvertTo-ShortPath {
+ Param([string]$Path)
+ # Replace Home with ~ symbol
+ $Location = $Path.Replace($HOME, '~')
+ # Remove prefix for UNC paths
+ $Location = $Location -replace '^[^:]+::', ''
+ # Handle paths starting with \\ and . correctly
+ # For paths not the current directory, display only a single
+ # character for each directory in the tree
+ If ($IsMacOS -or $IsLinux) {
+ # Systems with / paths
+ $Location = $Location -replace '(.?)([^/])[^/]*(?=/)','$1$2'
+ } else {
+ # Systems with \ paths
+ $Location = $Location -replace '\\(\.?)([^\\])[^\\]*(?=\\)','\$1$2'
+ }
+ return $Location
+ }
+
+ function prompt {
+ If ($PSEdition -eq "Core") {
+ $BC = "`e[96m" #Bright Cyan
+ $C = "`e[36m" #Cyan
+ $G = "`e[32m" #Green
+ $N = "`e[0m" #No Color
+ } else {
+ $C = [ConsoleColor]::DarkCyan
+ $G = [ConsoleColor]::Green
+ $BC = [ConsoleColor]::Cyan
+ }
+
+ $root = [char]0x0E3
+ $nonroot = [char]0x0A7
+ $H = $([net.dns]::GetHostName())
+
+ if (Test-CurrentAdminRights) {
+ $priv = $root
+ } else {
+ $priv = $nonroot
+ }
+
+ if ($PSEdition -eq "Core"){
+ # PSCore doesn't like a prompt using Write-Host
+ # thankfully, using VT100 signals works fine
+ "${BC}${priv} $G$H $C{ $BC$(ConvertTo-ShortPath ((pwd).Path)) $C }$N "
+ } else {
+ Write-Host "$priv " -NoNewline -ForegroundColor $BC
+ Write-Host $H -NoNewline -ForegroundColor $G
+ Write-Host ' {' -NoNewline -ForegroundColor $C
+ Write-Host (ConvertTo-ShortPath (pwd).Path) -NoNewline -ForegroundColor $BC
+ Write-Host '}' -NoNewline -ForegroundColor $C
+ return ' '
+ }
+ }
+
+Tags: vt100, powershell, profile
+
+[1]:https://stackoverflow.com
+[2]:https://superuser.com
+[3]:windows.html
+[4]:macos.html
+[5]:gnu-linux.html
+[6]:https://docs.microsoft.com/en-us/windows/console/setconsolemode
diff --git a/blog.css b/blog.css
new file mode 100644
index 0000000..894783e
--- /dev/null
+++ b/blog.css
@@ -0,0 +1,76 @@
+#title{
+ font-size: x-large;
+ color:#d65d0e;
+ text-align: center
+}
+a.ablack{
+ /* headings n the like */
+ color:#d65d0e !important;
+}
+a.gbrown{
+ color:#3c3836 !important;
+}
+li{
+ margin-bottom:8px;
+}
+ul,ol{
+ margin-left:24px;
+ margin-right:24px;
+}
+#all_posts{
+ margin-top:24px;
+ text-align:center;
+}
+.subtitle{
+ font-size:small;
+ margin:12px 0px;
+}
+.content p{
+ margin-left:24px;
+ margin-right:24px;
+}
+h1{
+ color:#fe8019;
+ margin-bottom:12px !important;
+}
+#description{
+ font-size:large;
+ margin-bottom:12px;
+}
+h3{
+ color:#fe8019;
+ margin-top:42px;
+ margin-bottom:8px;
+}
+h4{
+ color:#fe8019;
+ margin-left:24px;
+ margin-right:24px;
+}
+hr{
+ border-color:#665c54
+}
+img{
+ max-width:100%;
+}
+#twitter{
+ line-height:20px;
+ vertical-align:top;
+ text-align:right;
+ font-style:italic;
+ color:#ebdbb2;
+ margin-top:24px;
+ font-size:14px;
+}
+pre{
+ white-space: pre-wrap,
+ -moz-pre-wrap,
+ -pre-wrap
+ -o-pre-wrap;
+ word-wrap: break-word;
+}
+table,th,td{
+ border: 1px solid #d65d0e;
+ border-collapse: collapse;
+ padding: 5px;
+}
diff --git a/burning-a-cd-cli-style.html b/burning-a-cd-cli-style.html
new file mode 100644
index 0000000..61f0ac6
--- /dev/null
+++ b/burning-a-cd-cli-style.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+Burning a CD CLI Style
+
+
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
+
+
So, you got your Audio files. They may not be titled with nice numbers so
+that the list well with ls or a * glob. Not to worry. You probably
+downloaded them in order. We can fix this in bash. The ls command sorts
+files by default in alphabetical order. ls -U on the other hand, disables
+sorting and they should be shown in order they were added to the filesystem
+:
+
i=1
+ ls -U | while read f
+ do
+ mv "${f}" "$(printf %02d $i)_${f}"
+ i=$((i+1));
+ done
+
+
With this touch of cli magic, we have prepended a 01..etc number to each
+file.
+
Next we need to ensure the files are in the right format for cdrecord to
+burn. The command line tool cdrecord, needs files to be in WAV, stereo at
+44100hz. ffmpeg to the rescue! PS, you might need to adjust for file ext
+
mkdir burn
+ for i in *.webm
+ do
+ ffmpeg -i "${i}" -ar 44100 burn/"${i}".wav
+ done
+
+
Now we are ready to burn those files to disc with cdrecord:
+
cdrecord -v -nofix -audio -pad *.wav
+
+
And finally we need to finalize the disc if we want any hope of reading it
+on a regular old cd player
+
diff --git a/burning-a-cd-cli-style.md b/burning-a-cd-cli-style.md
new file mode 100644
index 0000000..d6445fb
--- /dev/null
+++ b/burning-a-cd-cli-style.md
@@ -0,0 +1,51 @@
+Burning a CD CLI Style
+
+I've written about [ripping an album cli style][1], and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
+Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
+
+---
+
+So, you got your Audio files. They may not be titled with nice numbers so
+that the list well with `ls` or a `*` glob. Not to worry. You probably
+downloaded them in order. We can fix this in bash. The `ls` command sorts
+files by default in alphabetical order. `ls -U` on the other hand, disables
+sorting and they should be shown in order they were added to the filesystem
+:
+
+ i=1
+ ls -U | while read f
+ do
+ mv "${f}" "$(printf %02d $i)_${f}"
+ i=$((i+1));
+ done
+
+With this touch of cli magic, we have prepended a 01..etc number to each
+file.
+
+Next we need to ensure the files are in the right format for cdrecord to
+burn. The command line tool cdrecord, needs files to be in WAV, stereo at
+44100hz. ffmpeg to the rescue! _PS, you might need to adjust for file ext_
+
+ mkdir burn
+ for i in *.webm
+ do
+ ffmpeg -i "${i}" -ar 44100 burn/"${i}".wav
+ done
+
+Now we are ready to burn those files to disc with cdrecord:
+
+ cdrecord -v -nofix -audio -pad *.wav
+
+And finally we need to finalize the disc if we want any hope of reading it
+on a regular old cd player
+
+ cdrecord -v -fix -eject
+
+Tags: ffmpeg, cli, burn-a-cd, linux, mp3, music, bash, youtube
+
+[1]:ripping-an-album-from-youtube---cli-style.html
diff --git a/burning-a-dvd-video-on-gentoo.html b/burning-a-dvd-video-on-gentoo.html
new file mode 100644
index 0000000..d2386a0
--- /dev/null
+++ b/burning-a-dvd-video-on-gentoo.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+Burning a DVD Video on Gentoo
+
+
+
diff --git a/burning-a-dvd-video-on-gentoo.md b/burning-a-dvd-video-on-gentoo.md
new file mode 100755
index 0000000..9311283
--- /dev/null
+++ b/burning-a-dvd-video-on-gentoo.md
@@ -0,0 +1,56 @@
+Burning a DVD Video on Gentoo
+
+Quick note for my future self
+
+---
+
+Overview
+========
+1. Convert media to dvd compatible format
+2. Author DVD title
+3. Author DVD Table of Contents
+4. Convert DVD folder to ISO
+5. (Optional) Loopback mount ISO and test.
+6. Burn ISO to DVD
+
+Packages Required
+=================
+media-video/ffmpeg
+media-video/dvdauthor
+app-cdr/dvd+rw-tools
+
+Commands
+================
+Start by using ffmpeg to convert the media to a dvd compatible format:
+
+ ffmpeg -i Big\ Buck\ Bunny.mp4 -target pal-dvd BigBuckBunny.mpg
+
+Now use dvdauthor to author a title
+
+ dvdauthor -t -o dvd --video=pal -f BigBuckBunny.mpg
+
+Add a table of contents
+
+ dvdauthor -T -o dvd
+
+Create the ISO file
+
+ mkisofs -dvd-video -o BigBuckBunny.iso dvd/
+
+(Optional) Mount to a loopback for testing
+
+ mkdir mount
+ mount -o loop BigBuckBunny.iso mount/
+
+Play the video using VLC or some other tool to check it, then unmount
+
+ umount mount/
+
+Burn to a disc
+
+ growisofs -dvd-compat -Z /dev/sr0=BigBuckBunny.iso
+
+Credit to [andrew.46 over at the ubuntuforums](https://ubuntuforums.org/showthread.php?t=2121309)
+
+
+Tags: burn-a-dvd,gentoo,ffmpeg,linux
diff --git a/cascadia-code.html b/cascadia-code.html
new file mode 100644
index 0000000..f8215c4
--- /dev/null
+++ b/cascadia-code.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+Cascadia Code
+
+
Microsoft released a new open source font yesterday to go along with their
+Windows Terminal project. I wipped up a quick ebuild to use it on my Gentoo
+systems.
+
+
My first thoughts are that it is very refeshing to a have a nice new font to
+look at. I particularly like the letter spacing. While I've been using Fira
+Code for a while, I've felt it takes just a tad too much spacing between
+letters. Cascadia Code on the other hand feels tight and fun.
+
The font also supports ligatures which allows specific combinations of
+characters (commonly used in programming) to join together to and become a
+single character symbolic of its function.
+
Unfortunatly, the terminal and editor apps I use on Gentoo don't currently
+support ligatures. Regardless, I think it looks quite nice at the moment.
+
diff --git a/cascadia-code.md b/cascadia-code.md
new file mode 100644
index 0000000..0dcbd88
--- /dev/null
+++ b/cascadia-code.md
@@ -0,0 +1,31 @@
+Cascadia Code
+
+Microsoft released a new open source font yesterday to go along with their
+Windows Terminal project. I wipped up a quick ebuild to use it on my Gentoo
+systems.
+
+---
+
+My first thoughts are that it is very refeshing to a have a nice new font to
+look at. I particularly like the letter spacing. While I've been using [Fira
+Code][1] for a while, I've felt it takes just a tad too much spacing between
+letters. [Cascadia Code][2] on the other hand feels tight and fun.
+
+The font also supports [ligatures][5] which allows specific combinations of
+characters (commonly used in programming) to join together to and become a
+single character symbolic of its function.
+
+Unfortunatly, the terminal and editor apps I use on Gentoo don't currently
+support ligatures. Regardless, I think it looks quite nice at the moment.
+
+Here is a screenshot: ![screenshot][3]
+
+And you can find my ebuild [here][4]
+
+Tags: fonts, gentoo
+
+[1]: https://github.com/tonsky/FiraCode
+[2]: https://github.com/microsoft/cascadia-code
+[3]: images/cascadiacode.png
+[4]: https://github.com/zigford/gentoo-zigford/tree/master/media-fonts/cascadia-code
+[5]: https://www.hanselman.com/blog/MonospacedProgrammingFontsWithLigatures.aspx
diff --git a/christmas-2018.html b/christmas-2018.html
new file mode 100644
index 0000000..866e6b4
--- /dev/null
+++ b/christmas-2018.html
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+Christmas 2018
+
+
As a Windows Admin by day, but a longtime vim and linux user, I've flocked to
+Microsoft's WSL
+like a moth to the flame.
+
Being a heavy vim user with a distaste for tmux (due to the incompatible
+keybindings, PS, I know they can be changed to somewhat match vim), I was very
+excited to hear about vim's new terminal feature in version 8.1!! I immediatley
+installed the latest vim in Windows and it's cool. However I want a matching
+linux version in the WSL, so I thought I'd write this quick article on compiling
+for Ubuntu 18.04.
+
Preperation
+
You will need to install a few dev packages and build tools
+before we get started. The WSL file-system isn't known for
+it's speed, so do this prep work in the background while doing
+something else.
+
Note, this build is doesn't contain any
+requiremnts to build with the gui. If your looking for that,
+try here
mkdir src cd src git clone https://github.com/vim/vim
+
Configure the source
+
./configure --with-compiledby="${USER}@$(hostname)" --enable-terminal --enable-python3interp --enable-perlinterp --enable-luainterp --disable-gui make
+
Install vim
+
sudo make install
+
Now go off into the sunset and happily vim.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/compiling-vim-on-ubuntu-with-wsl.md b/compiling-vim-on-ubuntu-with-wsl.md
new file mode 100755
index 0000000..5083da7
--- /dev/null
+++ b/compiling-vim-on-ubuntu-with-wsl.md
@@ -0,0 +1,49 @@
+Compiling VIM on Ubuntu with WSL
+
+As a Windows Admin by day, but a longtime vim and linux user, I've flocked to
+Microsoft's [WSL](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux)
+like a moth to the flame.
+
+Being a heavy vim user with a distaste for tmux (due to the incompatible
+keybindings, PS, I know they can be changed to somewhat match vim), I was very
+excited to hear about vim's new terminal feature in version 8.1!! I immediatley
+installed the latest vim in Windows and it's cool. However I want a matching
+linux version in the WSL, so I thought I'd write this quick article on compiling
+for Ubuntu 18.04.
+
+# Preperation
+
+You will need to install a few dev packages and build tools
+before we get started. The WSL file-system isn't known for
+it's speed, so do this prep work in the background while doing
+something else.
+
+_Note, this build is doesn't contain any
+requiremnts to build with the gui. If your looking for that,
+try [here](https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source)_
+
+```
+sudo apt-get update sudo apt-get install libncurses5-dev libatk1.0-dev python3-dev ruby-dev lua5.3-0 lua5.3-dev libperl-dev git build-essential
+```
+
+Clone the vim source tree
+
+```
+mkdir src cd src git clone https://github.com/vim/vim
+```
+
+Configure the source
+
+```
+./configure --with-compiledby="${USER}@$(hostname)" --enable-terminal --enable-python3interp --enable-perlinterp --enable-luainterp --disable-gui make
+```
+
+Install vim
+
+```
+sudo make install
+```
+
+Now go off into the sunset and happily vim.
+
+Tags: vim, ubuntu, wsl
diff --git a/converting-vhs-and-dv-to-modern-formats---part-1.html b/converting-vhs-and-dv-to-modern-formats---part-1.html
new file mode 100644
index 0000000..bf00674
--- /dev/null
+++ b/converting-vhs-and-dv-to-modern-formats---part-1.html
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+Converting VHS and DV to Modern Formats - Part 1
+
+
Over the past 10 years I've been meaning to convert my family's VHS tapes to a
+modern format. Originally that would have been DVD, but as it seems that DVD
+and Blu-Ray would have a limited lifespan, I've opted to go directly to modern
+encoding formats.
+
+
This will be a multi-part series stepping through all the challenges with
+converting these formats using Linux. This post, focuses around getting Video
+Grabber's (USB Dongles) to work under Linux.
+
+
In order to get VHS content to a modern video format, you will need a compatible
+USB capture device, a VHS Player and a PC.
+
The process should be fairly straight forward, but there were a number of issues
+which made the task difficult to achieve without compromise.
+
Conceptually it should be as follows:
+
+
Connect VHS Player to USB Capture Device
+
Connect USB Capture Device to PC
+
Install->Launch Capture software
+
Press Record in the Software
+
Press Play on the VHS player
+
+
Step 2 is where it get's tricky on Linux. While there are a significant number
+of capture devices supported on Linux, it is still luck-of-the-draw when
+purchasing a device with Linux in mind.
+
From what I have found many devices are rebranded. E.g. Four same branded
+devices may contain 4 different chipsets. Maybe only 2 of them contain the Linux
+supported chipset. To make matters worse, vendors don't typically list the
+chipset on their site or packaging.
+
The following is a description of my journey to get a couple of different
+capture devices to work on Linux. Your mileage may vary.
+
In my case, I had two USB capture devices. One was very old Pinnacle Dazzle
+obtained from my Dad that he was throwing out and the other was purchased at
+Aldi by my Mother-In-Law. This one had no label on
+the device, but the box stated:
+Bauhn DVD Maker
+
Dazzle
+
I started with the Dazzle. This unit looked very old. Sometimes with Linux, Old=
+Good. As devices age, the likelihood that some enthusiastic Linux hacker will
+add driver support goes up (I don't actually know this and cannot prove it, but
+you probably can't disprove it either, so there).
+
So, I plugged it in and typed lsusb
+
Bus 003 Device 007: ID 2304:021d Pinnacle Systems, Inc. Dazzle DVC130
+
+
Figure 1. Content snipped for brevity
+
The important part of the lsusb output is the ID 2304:021d
+
We now know what this beast is. Let's check if the kernel has already recognized
+it. You can usually do this by checking your kernel messages and see if a driver
+module loaded and told you it registered anything. Therefore: dmesg
+
[14842.638559] usb 3-11.3: new high-speed USB device number 7 using xhci_hcd
+ [14842.714905] usb 3-11.3: New USB device found, idVendor=2304, idProduct=021d, bcdDevice= 0.00
+ [14842.714907] usb 3-11.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
+ [14842.714908] usb 3-11.3: Product: DVC 130
+ [14842.714909] usb 3-11.3: Manufacturer: Pinnacle Systems, Inc.
+ [14843.570702] usb 3-11.2: reset low-speed USB device number 5 using xhci_hcd
+
+
Figure 2
+
The output shows the idVendor and idProduct match the ID from the output of
+lsusb in Figure 1
+
Essentially, the kernel is reporting the USB device, but the absence of messages
+from drivers other than usb are not a good sign.
+
We know by the output of dmesg that a kernel module has not loaded. It is time
+to check that the kernel modules we need are indeed compiled and available.
+Luckily for me, I'm running Gentoo so always have the
+kernel source at hand. With video capture devices, these parts of the kernel are
+referred to as the Video For Linux subsystem.
+(Technically, Video for Linux 2)
+
These kernel modules can be found under: Drivers->Media->USB.
+
Device Drivers --->
+ <*> Multimedia support --->
+ [*] Analog TV support
+ [*] Media USB Adapters --->
+ <M> USB video devices based on Nogatech NT1003/1004/1005
+ <M> STK1160 USB video capture support
+ <M> WIS GO7007 MPEG encoder support
+ <M> WIS GO7007 USB support
+ <M> WIS GO7007 Loader support
+ <M> Conexant cx231xx USB video capture support
+ <M> Empia EM28xx USB devices support
+
+
Figure 3 shows kernel options to enable video capture
+
After enabling all the relevant looking ones, I compiled them all and unplugged
+and re plugged my device, then checked dmesg again. Still no luck.
+
This is the point I recommend most people give up. I myself am not a big fan of
+giving up. So what do I do? I bust out my trusty screw driver and pop that
+sucker open to see whats inside. Under the magnifying glass I read out and
+google all the names on the chips. One of them catches my eye:
+
go7007
+
Well would you look at that. There is a module for this chipset. Perhaps all we
+need to do, is teach it to use my USB device. I start exploring the .c files
+to find which one of them contains definitions looking like USB device and
+product IDs. I began poking around in the source files looking for a struct
+recording all the supported USB Product and Device ID's.
The figure above is one device in the struct, so in vim of course, I yank
+yank a bit of text here and there and try to add support for my own USB device.
+The main thing to get right, is to substitute the idVendor and idProduct
+from the struct with the ID's we discovered in Figure 1 and Figure 2.
+
For other interfaces of the struct I'm mostly guessing, but hoping I can just
+copy some of the other devices, recompile and it might work. But if it doesn't
+work, change things around a bit, like some of the other cards and try again.
+
If done correctly, the kernel module should load automatically when the device
+is plugged in.
+
Sadly, I tried many combinations, caused a couple of kernel panics and sometimes
+the card would load and I could get to see a blue screen when viewing the
+device, but no content :( I was also able to setup a USB trace and see that the
+driver was successfully uploading the firmware to the device.
+
In the end, I gave up on this device.
+
PS, I tried to capture using this device from a Windows VM. The device was so
+old it would only work on 32-bit Windows 7 or older. While I was able to get
+a driver, I could not find the original special software required to capture
+and regular DirectShow capture to VirtualDub or OBS didn't work either.
+
Bauhn DVD Maker
+
This devices seemed a tad more modern. It has cables for capturing Component
+and Composite. It came with a CD with drivers and software for Windows. Other
+than that, there was little evidence online of this device. No-one mentioned
+this model and certainly not in relation to Linux. I tried the obvious tests
+(lsusb, dmesg) but didn't spend too much time trying to make it work for Linux.
+
On my Windows 7 VM though, I did have some luck. I got the software working
+and was able to capture some VHS tapes. Although the capture was successful
+there was no flexibility with the file format. The files came out in MPEG 2
+(essentially DVD type files), which are okay, but if I wanted these files to
+be online, I would need to re-encode them. That would mean a potential
+degradation in quality. I mean, come on! Haven't these videos degraded in
+quality enough!
+
What I wanted to do, was for the videos to be captured in a near lossless format
+and then re-encode to 2 files. 1 for showing on the internets (so that means
+smallish file size, optimized for streaming and compatibility) and 2 for
+archival purposes (use the most forward leaning tech available large close to
+lossless).
+
My thinking is that future generations will be having to convert historical
+videos to another format and I want to make a large lossless file available
+for that purpose.
+
I decided to crack open the Bauhn DVD maker and see what makes it tick.
+
+
Okay, I know how to do this, google all the little numbers and words. It didn't
+take long to discover the chip and the existing Linux module for this baby.
+Like the go7007, the cx231xx module supports many devices that use this
+chip. Again, I had a crack at setting up the .c driver and adding in the Product
+and Device ID's to make it work. And guess what?
+
Boom It worked. And that, my friends is joy. I tested using VLC --> Media -->
+Open Capture Device..., then click the 'Video device name' dropdown box and
+choose /dev/video0
+
You can download my patch file against kernel 4.19.44
+
Now onto the task of actually doing something with the video files which I will
+cover in my next post.
+
diff --git a/converting-vhs-and-dv-to-modern-formats---part-1.md b/converting-vhs-and-dv-to-modern-formats---part-1.md
new file mode 100644
index 0000000..290668d
--- /dev/null
+++ b/converting-vhs-and-dv-to-modern-formats---part-1.md
@@ -0,0 +1,211 @@
+Converting VHS and DV to Modern Formats - Part 1
+
+Over the past 10 years I've been meaning to convert my family's VHS tapes to a
+modern format. Originally that would have been DVD, but as it seems that DVD
+and Blu-Ray would have a limited lifespan, I've opted to go directly to modern
+encoding formats.
+
+---
+
+This will be a multi-part series stepping through all the challenges with
+converting these formats using Linux. This post, focuses around getting Video
+Grabber's (USB Dongles) to work under Linux.
+
+---
+
+In order to get VHS content to a modern video format, you will need a compatible
+USB capture device, a VHS Player and a PC.
+
+The process should be fairly straight forward, but there were a number of issues
+which made the task difficult to achieve without compromise.
+
+Conceptually it should be as follows:
+
+1. Connect VHS Player to USB Capture Device
+2. Connect USB Capture Device to PC
+3. Install-\>Launch Capture software
+4. Press Record in the Software
+5. Press Play on the VHS player
+
+Step 2 is where it get's tricky on Linux. While there are a significant number
+of capture devices supported on Linux, it is still *luck-of-the-draw* when
+purchasing a device with Linux in mind.
+
+From what I have found many devices are rebranded. E.g. Four same branded
+devices may contain 4 different chipsets. Maybe only 2 of them contain the Linux
+supported chipset. To make matters worse, vendors don't typically list the
+chipset on their site or packaging.
+
+The following is a description of my journey to get a couple of different
+capture devices to work on Linux. Your mileage may vary.
+
+In my case, I had two USB capture devices. One was very old *Pinnacle Dazzle*
+obtained from my Dad that he was throwing out and the other was purchased at
+[Aldi](https://www.aldi.com.au/) by my Mother-In-Law. This one had no label on
+the device, but the box stated:
+*Bauhn DVD Maker*
+
+### Dazzle
+
+I started with the Dazzle. This unit looked very old. Sometimes with Linux, Old=
+Good. As devices age, the likelihood that some enthusiastic Linux hacker will
+add driver support goes up (I don't actually know this and cannot prove it, but
+you probably can't disprove it either, so there).
+
+So, I plugged it in and typed `lsusb`
+
+ Bus 003 Device 007: ID 2304:021d Pinnacle Systems, Inc. Dazzle DVC130
+
+*Figure 1. Content snipped for brevity*
+
+The important part of the `lsusb` output is the ID `2304:021d`
+
+We now know what this beast is. Let's check if the kernel has already recognized
+it. You can usually do this by checking your kernel messages and see if a driver
+module loaded and told you it registered anything. Therefore: `dmesg`
+
+ [14842.638559] usb 3-11.3: new high-speed USB device number 7 using xhci_hcd
+ [14842.714905] usb 3-11.3: New USB device found, idVendor=2304, idProduct=021d, bcdDevice= 0.00
+ [14842.714907] usb 3-11.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
+ [14842.714908] usb 3-11.3: Product: DVC 130
+ [14842.714909] usb 3-11.3: Manufacturer: Pinnacle Systems, Inc.
+ [14843.570702] usb 3-11.2: reset low-speed USB device number 5 using xhci_hcd
+
+*Figure 2*
+
+The output shows the `idVendor` and `idProduct` match the ID from the output of
+`lsusb` in *Figure 1*
+
+Essentially, the kernel is reporting the USB device, but the absence of messages
+from drivers other than `usb` are not a good sign.
+
+We know by the output of `dmesg` that a kernel module has not loaded. It is time
+to check that the kernel modules we need are indeed compiled and available.
+Luckily for me, I'm running [Gentoo](https://gentoo.org) so always have the
+kernel source at hand. With video capture devices, these parts of the kernel are
+referred to as the Video For Linux subsystem.
+_(Technically, Video for Linux 2)_
+
+These kernel modules can be found under: Drivers-\>Media-\>USB.
+
+ Device Drivers --->
+ <*> Multimedia support --->
+ [*] Analog TV support
+ [*] Media USB Adapters --->
+ USB video devices based on Nogatech NT1003/1004/1005
+ STK1160 USB video capture support
+ WIS GO7007 MPEG encoder support
+ WIS GO7007 USB support
+ WIS GO7007 Loader support
+ Conexant cx231xx USB video capture support
+ Empia EM28xx USB devices support
+
+*Figure 3 shows kernel options to enable video capture*
+
+After enabling all the relevant looking ones, I compiled them all and unplugged
+and re plugged my device, then checked `dmesg` again. Still no luck.
+
+This is the point I recommend most people give up. I myself am not a big fan of
+giving up. So what do I do? I bust out my trusty screw driver and pop that
+sucker open to see whats _inside_. Under the magnifying glass I read out and
+google all the names on the chips. One of them catches my eye:
+
+*go7007*
+
+Well would you look at that. There is a module for this chipset. Perhaps all we
+need to do, is _teach_ it to use my USB device. I start exploring the `.c` files
+to find which one of them contains definitions looking like USB device and
+product IDs. I began poking around in the source files looking for a `struct`
+recording all the supported USB Product and Device ID's.
+
+Here is the `struct` I found in `go7007-usb.c`
+
+ static const struct usb_device_id go7007_usb_id_table[] = {
+ {
+ .match_flags = USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION |
+ USB_DEVICE_ID_MATCH_INT_INFO,
+ .idVendor = 0x0eb1, /* Vendor ID of WIS Technologies */
+ .idProduct = 0x7007, /* Product ID of GO7007SB chip */
+ .bcdDevice_lo = 0x200, /* Revision number of XMen */
+ .bcdDevice_hi = 0x200,
+ .bInterfaceClass = 255,
+ .bInterfaceSubClass = 0,
+ .bInterfaceProtocol = 255,
+ .driver_info = (kernel_ulong_t)GO7007_BOARDID_XMEN,
+
+ },
+ {}
+ };
+
+*Figure 4*
+
+The figure above is one device in the `struct,` so in `vim` of course, I yank
+yank a bit of text here and there and try to add support for my own USB device.
+The main thing to get right, is to substitute the `idVendor` and `idProduct`
+from the `struct` with the ID's we discovered in *Figure 1 and Figure 2*.
+
+For other interfaces of the `struct` I'm mostly guessing, but hoping I can just
+copy some of the other devices, recompile and it might work. But if it doesn't
+work, change things around a bit, like some of the other cards and try again.
+
+If done correctly, the kernel module should load automatically when the device
+is plugged in.
+
+Sadly, I tried many combinations, caused a couple of kernel panics and sometimes
+the card would load and I could get to see a blue screen when viewing the
+device, but no content :( I was also able to setup a USB trace and see that the
+driver was successfully uploading the firmware to the device.
+
+In the end, I gave up on this device.
+
+PS, I tried to capture using this device from a Windows VM. The device was so
+old it would only work on 32-bit Windows 7 or older. While I was able to get
+a driver, I could not find the original special software required to capture
+and regular DirectShow capture to VirtualDub or OBS didn't work either.
+
+### Bauhn DVD Maker
+
+This devices seemed a tad more modern. It has cables for capturing Component
+and Composite. It came with a CD with drivers and software for Windows. Other
+than that, there was little evidence online of this device. No-one mentioned
+this model and certainly not in relation to Linux. I tried the obvious tests
+(lsusb, dmesg) but didn't spend too much time trying to make it work for Linux.
+
+On my Windows 7 VM though, I did have some luck. I got the software working
+and was able to capture some VHS tapes. Although the capture was successful
+there was no flexibility with the file format. The files came out in MPEG 2
+(essentially DVD type files), which are okay, but if I wanted these files to
+be online, I would need to re-encode them. That would mean a potential
+degradation in quality. I mean, come on! Haven't these videos degraded in
+quality enough!
+
+What I wanted to do, was for the videos to be captured in a near lossless format
+and then re-encode to 2 files. 1 for showing on the internets (so that means
+smallish file size, optimized for streaming and compatibility) and 2 for
+archival purposes (use the most forward leaning tech available large close to
+lossless).
+
+My thinking is that future generations will be having to convert historical
+videos to another format and I want to make a large lossless file available
+for that purpose.
+
+I decided to crack open the Bauhn DVD maker and see what makes it tick.
+
+
+
+Okay, I know how to do this, google all the little numbers and words. It didn't
+take long to discover the chip and the existing Linux module for this baby.
+Like the `go7007`, the `cx231xx` module supports many devices that use this
+chip. Again, I had a crack at setting up the .c driver and adding in the Product
+and Device ID's to make it work. And guess what?
+
+*Boom* It worked. And that, my friends is joy. I tested using VLC --> Media -->
+Open Capture Device..., then click the 'Video device name' dropdown box and
+choose /dev/video0
+
+You can download my [patch file](files/cx231xx.patch) against kernel 4.19.44
+
+Now onto the task of actually doing something with the video files which I will
+cover in my next post.
+
+Tags: linux, ffmpeg, gentoo, kernel
diff --git a/defragging-files-in-btrfs---oneliner.html b/defragging-files-in-btrfs---oneliner.html
new file mode 100644
index 0000000..e95d56a
--- /dev/null
+++ b/defragging-files-in-btrfs---oneliner.html
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+Defragging files in btrfs - Oneliner
+
+
Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
+
+
find -size +1024k -size 50000k -type f -exec filefrag {} \; |
+ awk '{a=NF-2; if ($a>50) {sub(/:.*/,"");print$0}}'|
+ xargs -I{} btrfs fi defrag "{}"
+
+
Pulling it apart
+
find
+
-size +1024k -size -50000k
+ # this tells find to only show files between 1mb and 50mb
+
+ -type f
+ # only find files
+
+ -exec filefrag {} ;\
+ # run filefrag on each file, which shows a count of fragments on each
+ # file
+
+
awk
+
a=NF-2
+ # files may have spaces in the name and filefrag lists the filename
+ # first, instead lets look the second from the last field number (NF =
+ Number of fields in a given line)
+
+ if ($a>50)
+ # only work on files with frags over 50
+
+ sub(/:.*/,"")
+ # from $0 (the whole line), substitue anything past : with nothing,
+ # making $0 reference the filename, spaces and all
+
+
xargs
+
-I{}
+ # in the following command substitue {} with the incoming stdin (ie the
+ # filename
+
+ btrfs fi defrag "{}"
+ # defrag the file.
+
+
diff --git a/defragging-files-in-btrfs---oneliner.md b/defragging-files-in-btrfs---oneliner.md
new file mode 100644
index 0000000..2f6d23b
--- /dev/null
+++ b/defragging-files-in-btrfs---oneliner.md
@@ -0,0 +1,54 @@
+Defragging files in btrfs - Oneliner
+
+Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
+
+---
+
+ find -size +1024k -size 50000k -type f -exec filefrag {} \; |
+ awk '{a=NF-2; if ($a>50) {sub(/:.*/,"");print$0}}'|
+ xargs -I{} btrfs fi defrag "{}"
+
+Pulling it apart
+================
+
+find
+----
+
+ -size +1024k -size -50000k
+ # this tells find to only show files between 1mb and 50mb
+
+ -type f
+ # only find files
+
+ -exec filefrag {} ;\
+ # run filefrag on each file, which shows a count of fragments on each
+ # file
+
+awk
+---
+
+ a=NF-2
+ # files may have spaces in the name and filefrag lists the filename
+ # first, instead lets look the second from the last field number (NF =
+ Number of fields in a given line)
+
+ if ($a>50)
+ # only work on files with frags over 50
+
+ sub(/:.*/,"")
+ # from $0 (the whole line), substitue anything past : with nothing,
+ # making $0 reference the filename, spaces and all
+
+xargs
+-----
+
+ -I{}
+ # in the following command substitue {} with the incoming stdin (ie the
+ # filename
+
+ btrfs fi defrag "{}"
+ # defrag the file.
+
+Tags: btrfs, bash, bash-tips, awk
diff --git a/downgrade-gentoo-from-testing-to-stable.html b/downgrade-gentoo-from-testing-to-stable.html
new file mode 100644
index 0000000..a7ff5a4
--- /dev/null
+++ b/downgrade-gentoo-from-testing-to-stable.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+Downgrade Gentoo from testing to stable
+
+
At some point in my main Gentoo boxes life I added the ~amd64 keyword into
+my make.conf. I don't remeber why I did this, but I can't think of a reason
+I need my entire install to be bleeding edge.
+
+
I did some googling around on the best approach to achieve this and from
+what I read on forums, having a bunch of testing packages downgrade to
+stable is not such a good idea.
+
One reason might be that per app config files are usually only designed to
+be backward compatible, not forward compatible.
+
At any rate, the idea is to gather a list of currently installed testing
+packages and add them to package.keywords for their current version.
+
With this method, eventually those packages will become stable.
+
The method I used is basically from the sabayon wiki with a few
+tweaks.
+
+
First, edit make.conf ACCEPT_KEYWORDS to:
+
ACCEPT_KEYWORDS=amd64
+
+
+
Now use equery, sed and grep to construct a new packge.keywords
Examine testpackages for sanity, and then test with a world upgrade.
+
emerge --ask --update --newuse --deep --with-bdeps=y @world
+
+ These are the packages that would be merged, in order:
+
+ Calculating dependencies... done!
+
+ Nothing to merge; quitting.
+
+
+
+
Update
+
18 months since making this change I thought I'd see how many of the original
+testing packages are still on my system. This little shell snippit uses equery
+to check if a package listed in the testpackages portage file made earlier is
+still installed on the system, and if not, update the file with a # in front.
+
for i in $(awk '/=/ {print $1}' testpackages)
+ do
+ if ! equery l "$i" > /dev/null;
+ then
+ sudo sed -ie "s/\(${i/\//\\/}\)/#\1/" \
+ testpackages
+ fi
+ done
+
+
After running this grep -c '^#' testpackages shows 368 packages no longer
+needed in here and conversely 118 are still required.
+
diff --git a/downgrade-gentoo-from-testing-to-stable.md b/downgrade-gentoo-from-testing-to-stable.md
new file mode 100644
index 0000000..43c7aa0
--- /dev/null
+++ b/downgrade-gentoo-from-testing-to-stable.md
@@ -0,0 +1,65 @@
+Downgrade Gentoo from testing to stable
+
+At some point in my main Gentoo boxes life I added the ~amd64 keyword into
+my make.conf. I don't remeber why I did this, but I can't think of a reason
+I need my entire install to be bleeding edge.
+
+---
+
+I did some googling around on the best approach to achieve this and from
+what I read on forums, having a bunch of testing packages downgrade to
+stable is not such a good idea.
+
+One reason might be that per app config files are usually only designed to
+be backward compatible, not forward compatible.
+
+At any rate, the idea is to gather a list of currently installed testing
+packages and add them to package.keywords for their current version.
+
+With this method, eventually those packages will become stable.
+
+The method I used is basically from the [sabayon wiki](https://wiki.sabayon.org/index.php?title=HOWTO:_Switch_from_Test_to_Stable_Packages) with a few
+tweaks.
+
+1. First, edit make.conf ACCEPT_KEYWORDS to:
+
+ ACCEPT_KEYWORDS=amd64
+
+2. Now use equery, sed and grep to construct a new packge.keywords
+
+ equery -C -N list -F '=$cpv $mask2' '*' | \
+ grep \~ | sed 's/\[~amd64 keyword\]/~amd64/' > \
+ /etc/portage/package.keywords/testpackages
+_Basically I added '-C' to remove colours and grep_
+
+3. Examine testpackages for sanity, and then test with a world upgrade.
+
+ emerge --ask --update --newuse --deep --with-bdeps=y @world
+
+ These are the packages that would be merged, in order:
+
+ Calculating dependencies... done!
+
+ Nothing to merge; quitting.
+
+Update
+------
+
+18 months since making this change I thought I'd see how many of the original
+testing packages are still on my system. This little shell snippit uses equery
+to check if a package listed in the `testpackages` portage file made earlier is
+still installed on the system, and if not, update the file with a `#` in front.
+
+ for i in $(awk '/=/ {print $1}' testpackages)
+ do
+ if ! equery l "$i" > /dev/null;
+ then
+ sudo sed -ie "s/\(${i/\//\\/}\)/#\1/" \
+ testpackages
+ fi
+ done
+
+After running this `grep -c '^#' testpackages` shows 368 packages no longer
+needed in here and conversely 118 are still required.
+
+Tags: gentoo, portage
diff --git a/dynamic-colorscheme-in-vim.html b/dynamic-colorscheme-in-vim.html
new file mode 100644
index 0000000..885b6e2
--- /dev/null
+++ b/dynamic-colorscheme-in-vim.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+Dynamic colorscheme in Vim
+
+
Most folk know about :colorscheme in Vim. In this post I will show how I setup
+my vimrc to change the colorscheme based on the time of day.
+
+
This method is quite simple. It checks the time when my vimrc is loaded and
+depending on the result set's the colorscheme accordingly. There may be smarter
+ways to achieve this, by setting a timer to check periodically. However I find
+this approach good enough for me.
+
This approach will work on Linux, macOS and Windows. In the example below, I use
+the colorscheme gruvbox and
+simply switch between light and dark background modes.
+
" Format the *nix output same as windows for simplicity
+ let s:time = has('win32') ? system('time /t') : system('date "+%I:%M %p"')
+
+ let s:hour = split(s:time, ':')[0]
+ let s:PM = split(s:time)[1]
+
+ if (s:PM ==? 'PM' &&
+ (s:hour > 7 && s:hour != 12)) ||
+ (s:PM ==? 'AM' &&
+ (s:hour < 8 || s:hour == 12))
+ set background=dark
+ else
+ set background=light
+ endif
+ colorscheme gruvbox
+
+
In this example, I have dark mode enabled from 8pm until 8am. Outside these
+hours, light background is set.
+
As you can see, in order to only have one method of parsing the systems
+date/time, I simply use the *nix flexible date formatting to make it appear
+similar to Windows, and then I only need 1 parsing function.
+
diff --git a/dynamic-colorscheme-in-vim.md b/dynamic-colorscheme-in-vim.md
new file mode 100644
index 0000000..c24d785
--- /dev/null
+++ b/dynamic-colorscheme-in-vim.md
@@ -0,0 +1,40 @@
+Dynamic colorscheme in Vim
+
+Most folk know about `:colorscheme` in Vim. In this post I will show how I setup
+my vimrc to change the colorscheme based on the time of day.
+
+---
+
+This method is quite simple. It checks the time when my vimrc is loaded and
+depending on the result set's the colorscheme accordingly. There may be smarter
+ways to achieve this, by setting a timer to check periodically. However I find
+this approach good enough for me.
+
+This approach will work on Linux, macOS and Windows. In the example below, I use
+the colorscheme [gruvbox](https://github.com/gruvbox-community/gruvbox) and
+simply switch between light and dark background modes.
+
+ " Format the *nix output same as windows for simplicity
+ let s:time = has('win32') ? system('time /t') : system('date "+%I:%M %p"')
+
+ let s:hour = split(s:time, ':')[0]
+ let s:PM = split(s:time)[1]
+
+ if (s:PM ==? 'PM' &&
+ (s:hour > 7 && s:hour != 12)) ||
+ (s:PM ==? 'AM' &&
+ (s:hour < 8 || s:hour == 12))
+ set background=dark
+ else
+ set background=light
+ endif
+ colorscheme gruvbox
+
+In this example, I have dark mode enabled from 8pm until 8am. Outside these
+hours, light background is set.
+
+As you can see, in order to only have one method of parsing the systems
+date/time, I simply use the `*nix` flexible date formatting to make it appear
+similar to Windows, and then I only need 1 parsing function.
+
+Tags: vim-tips, vim
diff --git a/elijah-and-amelia.md b/elijah-and-amelia.md
new file mode 100644
index 0000000..240a763
--- /dev/null
+++ b/elijah-and-amelia.md
@@ -0,0 +1,9 @@
+Elijah and Amelia
+
+> Plus sophie too!
+
+Such Cool Kids!!
+
+##They are rad.
+
+Tags: keep-this-tag-format, tags-are-optional, beware-with-underscores-in-markdown, example
diff --git a/feed.rss b/feed.rss
new file mode 100644
index 0000000..7b9bdc8
--- /dev/null
+++ b/feed.rss
@@ -0,0 +1,124 @@
+
+
+zigford.orghttp://zigford.org/index.html
+About | Links | Scripts Sharing linux/windows scripts and tipsen
+Sun, 19 Jul 2020 22:57:31 +1000
+Sun, 19 Jul 2020 22:57:31 +1000
+
+
+Transfer BTFS snapshots with netcat
+Netcat, the swiss army knife of TCP/IP can be used for many tasks.
+Today, I'll breifly demonstrate sending btrfs snapshots between computers
+with it's assistance.
+
+
+]]>http://zigford.org/transfer-btfs-snapshots-with-netcat.html
+http://zigford.org/./transfer-btfs-snapshots-with-netcat.html
+Jesse Harris
+Sun, 19 Jul 2020 22:57:11 +1000
+
+Screen sharing and capture in Wayland on Gentoo
+The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
+
+
+]]>http://zigford.org/screen-sharing-and-capture-in-wayland-on-gentoo.html
+http://zigford.org/./screen-sharing-and-capture-in-wayland-on-gentoo.html
+Jesse Harris
+Mon, 01 Jun 2020 21:05:46 +1000
+
+Scrubbing my data - BTRFS
+It's no secret I use BTRFS, so I have a fair amount of data stored on this
+filesystem. With most popular filesystems you have no way of knowing if your
+data is the same read as was originally written. A few modern filesystems
+support a function known as scrubbing.
+
+
+]]>http://zigford.org/scrubbing-my-data---btrfs.html
+http://zigford.org/./scrubbing-my-data---btrfs.html
+Jesse Harris
+Thu, 23 Apr 2020 21:49:01 +1000
+
+Defragging files in btrfs - Oneliner
+Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
+
+]]>http://zigford.org/defragging-files-in-btrfs---oneliner.html
+http://zigford.org/./defragging-files-in-btrfs---oneliner.html
+Jesse Harris
+Fri, 10 Apr 2020 13:01:14 +1000
+
+Lets encrypt kerfuffle
+Let's encrypt had a kerfuffle last week by accidentally not checking CAA DNS
+records of domains it had requests for.
+
+]]>http://zigford.org/lets-encrypt-kerfuffle.html
+http://zigford.org/./lets-encrypt-kerfuffle.html
+Jesse Harris
+Tue, 10 Mar 2020 20:35:26 +1000
+
+Firewalld kernel requirements
+I wanted to work out the minimum kernel requirements to run Firewalld with
+nftables backend running in Gentoo. Here I've documented my findings.
+
+]]>http://zigford.org/firewalld-kernel-requirements.html
+http://zigford.org/./firewalld-kernel-requirements.html
+Jesse Harris
+Fri, 06 Mar 2020 22:16:53 +1000
+
+Nagios Core on Gentoo/Raspberry Pi with Nginx
+I haven't posted in a while due to a change in my work. I'm currently working in
+the Server and Storage team at my workplace for a 6 month secondment. The role
+is much more aligned with my enjoyment of using GNU/Linux.
+
+]]>http://zigford.org/nagios-core-on-gentooraspberry-pi-with-nginx.html
+http://zigford.org/./nagios-core-on-gentooraspberry-pi-with-nginx.html
+Jesse Harris
+Sat, 29 Feb 2020 23:06:38 +1000
+
+Precision 5510 - Gentoo GNU/Linux
+This documents all configurations, apps and tweaks to get a nicely working Linux
+machine.
+
+]]>http://zigford.org/precision-5510---gentoo-gnulinux.html
+http://zigford.org/./precision-5510---gentoo-gnulinux.html
+Jesse Harris
+Sat, 12 Oct 2019 22:44:07 +1000
+
+Trying out a pull request
+You've received a pull request on your repo. Before merging you want to see what
+it looks like in your code base. Perhaps you will run some manual test or some
+diffs from the command line here and there.
+
+]]>http://zigford.org/trying-out-a-pull-request.html
+http://zigford.org/./trying-out-a-pull-request.html
+Jesse Harris
+Sun, 06 Oct 2019 12:10:45 +1000
+
+Video editing from the command line
+I previously posted about capturing video in
+Linux. While this isn't
+exactly part 2 of that post there is enough crossover to warrant a link. This
+post is about how I have strangely found video editing to be much easier from
+the command line than a gui app.
+
+]]>http://zigford.org/video-editing-from-the-command-line.html
+http://zigford.org/./video-editing-from-the-command-line.html
+Jesse Harris
+Sat, 05 Oct 2019 12:03:16 +1000
+
diff --git a/files/cx231xx.patch b/files/cx231xx.patch
new file mode 100644
index 0000000..a391b07
--- /dev/null
+++ b/files/cx231xx.patch
@@ -0,0 +1,73 @@
+diff --git a/cx231xx-cards.c b/cx231xx-cards.c
+index a431a99..66df4d5 100644
+--- a/cx231xx-cards.c
++++ b/cx231xx-cards.c
+@@ -1001,6 +1001,37 @@ struct cx231xx_board cx231xx_boards[] = {
+ .gpio = NULL,
+ } },
+ },
++ [CX231XX_BOARD_BAUHN_DVD_MAKER] = {
++ .name = "Bauhn DVD Maker",
++ .tuner_type = TUNER_ABSENT,
++ .decoder = CX231XX_AVDECODER,
++ .output_mode = OUT_MODE_VIP11,
++ .ctl_pin_status_mask = 0xFFFFFFC4,
++ .agc_analog_digital_select_gpio = 0x1c,
++ .gpio_pin_status_mask = 0x4001000,
++ .norm = V4L2_STD_PAL,
++ .no_alt_vanc = 1,
++ .external_av = 1,
++ /* Actually, it has a 417, but it isn't working correctly.
++ * So set to 0 for now until someone can manage to get this
++ * to work reliably. */
++ .has_417 = 0,
++
++ .input = {{
++ .type = CX231XX_VMUX_COMPOSITE1,
++ .vmux = CX231XX_VIN_2_1,
++ .amux = CX231XX_AMUX_LINE_IN,
++ .gpio = NULL,
++ }, {
++ .type = CX231XX_VMUX_SVIDEO,
++ .vmux = CX231XX_VIN_1_1 |
++ (CX231XX_VIN_1_2 << 8) |
++ CX25840_SVIDEO_ON,
++ .amux = CX231XX_AMUX_LINE_IN,
++ .gpio = NULL,
++ }
++ },
++ }
+ };
+ const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards);
+
+@@ -1081,6 +1112,8 @@ struct usb_device_id cx231xx_id_table[] = {
+ .driver_info = CX231XX_BOARD_ASTROMETA_T2HYBRID},
+ {USB_DEVICE(0x199e, 0x8002),
+ .driver_info = CX231XX_BOARD_THE_IMAGING_SOURCE_DFG_USB2_PRO},
++ {USB_DEVICE(0x1d19, 0x6108),
++ .driver_info = CX231XX_BOARD_BAUHN_DVD_MAKER},
+ {},
+ };
+
+@@ -1442,7 +1475,8 @@ static int cx231xx_init_dev(struct cx231xx *dev, struct usb_device *udev,
+ /*To workaround error number=-71 on EP0 for VideoGrabber,
+ need set alt here.*/
+ if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER ||
+- dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2) {
++ dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2 ||
++ dev->model == CX231XX_BOARD_BAUHN_DVD_MAKER) {
+ cx231xx_set_alt_setting(dev, INDEX_VIDEO, 3);
+ cx231xx_set_alt_setting(dev, INDEX_VANC, 1);
+ }
+diff --git a/cx231xx.h b/cx231xx.h
+index fa640bf..75a51ff 100644
+--- a/cx231xx.h
++++ b/cx231xx.h
+@@ -82,6 +82,7 @@
+ #define CX231XX_BOARD_THE_IMAGING_SOURCE_DFG_USB2_PRO 25
+ #define CX231XX_BOARD_HAUPPAUGE_935C 26
+ #define CX231XX_BOARD_HAUPPAUGE_975 27
++#define CX231XX_BOARD_BAUHN_DVD_MAKER 28
+
+ /* Limits minimum and default number of buffers */
+ #define CX231XX_MIN_BUF 4
diff --git a/firewalld-kernel-requirements.html b/firewalld-kernel-requirements.html
new file mode 100644
index 0000000..9f6507d
--- /dev/null
+++ b/firewalld-kernel-requirements.html
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+Firewalld kernel requirements
+
+
My laptop is running Gentoo with luks/dmcrypt encrypted root/home, btrfs hourly
+snapshots and backed up to an encrypted external drive, systemd and linux kernel
+5.4. The last step in becoming a fully secure enterprise desktop is the
+firewall.
+
For a time I ran my own iptables script, but that quickly became difficult to
+manage when libvirtd (managing my VMs for KVM) would add rules overtop and make
+an ugly mess in the iptables.
+
nftables is the modern replacement to iptables and I had tried to merge
+firewalld onto my system in the past with horrible results. The problem has
+always being identifying the correct kernel configuration. Firewalld ebuild
+itself identifies a few components, but even those are not
+correct
+
Sometimes the wrong configuration combination would lead to the system not
+booting or nftables hanging. After much trial and error I've found the right
+combo. If you don't want to read about which config options solve which problem,
+I'll provide a list of all required configurations at the end.
+
The base
+
The following options got me a bootable kernel and firewalld attempting to start
After booting up and starting firewalld, I checked the status of the service and
+was greeted with this:
+
ERROR: '/sbin/nft add chain inet firewalld raw_PREROUTING { type filter hook prerouting priority -290 ; }' \
+ failed: Error: Could not process rule: Operation not supported
+
+
Which was solved with CONFIG_NF_TABLES_INET=y
+
After a kernel recompile and reboot, I checked the status of the firewalld
+service and found that the nft command had hung. It was stuck on the following
+command line:
+
/sbin/nft --echo --handle add rule inet firewalld filter_INPUT reject with icmpx type admin-prohibited
+
+
This took a lot of trial and error but boiled down to the following
+configurations:
As the previous fix only required new modules, I was able to simple restart the
+service to see the next problem. Again, another hung nft command line:
+
diff --git a/firewalld-kernel-requirements.md b/firewalld-kernel-requirements.md
new file mode 100644
index 0000000..8379439
--- /dev/null
+++ b/firewalld-kernel-requirements.md
@@ -0,0 +1,218 @@
+Firewalld kernel requirements
+
+I wanted to work out the minimum kernel requirements to run Firewalld with
+nftables backend running in Gentoo. Here I've documented my findings.
+
+---
+
+Update
+------
+
+After running with this config a couple of days I finally got to starting a vm
+under libvirtd which failed miserably. Additional modules required:
+
+ CONFIG_NETFILTER_INGRESS=y
+ CONFIG_NF_CONNTRACK_TFTP=m
+ CONFIG_NF_NAT_TFTP=m
+ CONFIG_NETFILTER_XT_NAT=m
+ CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
+ CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+ CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+ CONFIG_NETFILTER_XT_MATCH_STATE=m
+ CONFIG_IP_NF_FILTER=m
+ CONFIG_IP_NF_TARGET_REJECT=m
+ CONFIG_IP_NF_NAT=m
+ CONFIG_IP_NF_TARGET_MASQUERADE=m
+ CONFIG_IP_NF_MANGLE=m
+ CONFIG_IP6_NF_FILTER=m
+ CONFIG_IP6_NF_TARGET_REJECT=m
+ CONFIG_IP6_NF_MANGLE=m
+ CONFIG_IP6_NF_NAT=m
+ CONFIG_IP6_NF_TARGET_MASQUERADE=m
+
+Original post
+-------------
+
+My laptop is running Gentoo with luks/dmcrypt encrypted root/home, btrfs hourly
+snapshots and backed up to an encrypted external drive, systemd and linux kernel
+5.4. The last step in becoming a fully secure enterprise desktop is the
+firewall.
+
+For a time I ran my own iptables script, but that quickly became difficult to
+manage when libvirtd (managing my VMs for KVM) would add rules overtop and make
+an ugly mess in the iptables.
+
+nftables is the modern replacement to iptables and I had tried to merge
+firewalld onto my system in the past with horrible results. The problem has
+always being identifying the correct kernel configuration. Firewalld ebuild
+itself identifies a few components, but even [those are not
+correct](https://bugs.gentoo.org/692944)
+
+Sometimes the wrong configuration combination would lead to the system not
+booting or nftables hanging. After much trial and error I've found the right
+combo. If you don't want to read about which config options solve which problem,
+I'll provide a list of all required configurations at the end.
+
+The base
+--------
+
+The following options got me a bootable kernel and firewalld attempting to start
+
+ CONFIG_NETFILTER_ADVANCED=y
+ CONFIG_NETFILTER_NETLINK=m
+ CONFIG_NF_CONNTRACK=m
+ CONFIG_NF_TABLES=m
+ CONFIG_NFT_CT=m
+ CONFIG_NF_DEFRAG_IPV4=m
+ CONFIG_NF_DEFRAG_IPV6=m
+ CONFIG_NF_CT_NETLINK=m
+ CONFIG_NF_NAT=m
+ CONFIG_NFT_NET=m
+ CONFIG_NETFILTER_XTABLES=m
+ CONFIG_IP_SET=m
+ CONFIG_IP_SET_MAX=256
+ CONFIG_NF_TABLES_IPV4=y
+ CONFIG_IP_NF_IPTABLES=m
+ CONFIG_IP_NF_RAW=m
+ CONFIG_IP_NF_SECURITY=m
+ CONFIG_NF_TABLES_IPV6=y
+ CONFIG_IP6_NF_IPTABLES=m
+ CONFIG_IP6_NF_RAW=m
+ CONFIG_IP6_NF_SECURITY=m
+
+The errors
+----------
+
+After booting up and starting firewalld, I checked the status of the service and
+was greeted with this:
+
+ ERROR: '/sbin/nft add chain inet firewalld raw_PREROUTING { type filter hook prerouting priority -290 ; }' \
+ failed: Error: Could not process rule: Operation not supported
+
+Which was solved with `CONFIG_NF_TABLES_INET=y`
+
+After a kernel recompile and reboot, I checked the status of the firewalld
+service and found that the nft command had hung. It was stuck on the following
+command line:
+
+ /sbin/nft --echo --handle add rule inet firewalld filter_INPUT reject with icmpx type admin-prohibited
+
+This took a lot of trial and error but boiled down to the following
+configurations:
+
+ CONFIG_NFT_REJECT=m
+ CONFIG_NFT_REJECT_INET=m
+ CONFIG_NFT_REJECT_IPV4=m
+ CONFIG_NF_REJECT_IPV4=m
+ CONFIG_NFT_REJECT_IPV6=m
+ CONFIG_NF_REJECT_IPV6=m
+
+As the previous fix only required new modules, I was able to simple restart the
+service to see the next problem. Again, another hung nft command line:
+
+ /sbin/nft --echo --handle insert rule inet firewalld raw_PREROUTING meta nfproto ipv6 fib saddr . \
+ iif oif missing drop
+
+And again, hours of trial and error
+
+ CONFIG_NFT_FIB=m
+ CONFIG_NFT_FIB_INET=m
+ CONFIG_NFT_FIB_IPV4=m
+ CONFIG_NFT_FIB_IPV6=m
+
+Again, restart the service to find another hung command line:
+
+ ERROR: '/sbin/nft insert rule inet firewalld raw_PREROUTING icmpv6 type \
+ { nd-router-advert, nd-neighbor-solicit } accept
+
+This time, a single module needed to be compiled: `CONFIG_NF_TABLES_SET=m`
+
+Finally the last hang was the following command line:
+
+ /sbin/nft --echo --handle add rule inet firewalld filter_IN_home_allow udp dport 137 ct helper set \
+ "helper-netbios-ns-udp"
+
+This one took the longest to solve and contains the most configurations of any
+fix:
+
+ CONFIG_NETFILTER_NETLINK_QUEUE=m
+ CONFIG_NETFILTER_NETLINK_OSF=m
+ CONFIG_NETFILTER_CONNCOUNT=m
+ CONFIG_NF_CT_NETLINK_HELPER=m
+ CONFIG_NETFILTER_NETLINK_GLUE_CT=y
+ CONFIG_NF_NAT_REDIRECT=y
+ CONFIG_NF_NAT_MASQUERADE=y
+ CONFIG_NETFILTER_SYNPROXY=m
+ CONFIG_NFT_COUNTER=m
+ CONFIG_NFT_CONNLIMIT=m
+ CONFIG_NFT_LOG=m
+ CONFIG_NFT_LIMIT=m
+ CONFIG_NFT_MASQ=m
+ CONFIG_NFT_REDIR=m
+ CONFIG_NFT_TUNNEL=m
+ CONFIG_NFT_OBJREF=m
+ CONFIG_NFT_QUEUE=m
+ CONFIG_NFT_QUOTA=m
+ CONFIG_NFT_COMPAT=m
+ CONFIG_NFT_HASH=m
+ CONFIG_NFT_XFRM=m
+ CONFIG_NFT_SOCKET=m
+ CONFIG_NFT_OSF=m
+ CONFIG_NFT_TPROXY=m
+ CONFIG_NFT_SYNPROXY=m
+ CONFIG_NETFILTER_XT_CONNMARK=m
+ CONFIG_NF_SOCKET_IPV4=m
+ CONFIG_NF_TPROXY_IPV4=m
+ CONFIG_NF_SOCKET_IPV6=m
+ CONFIG_NF_TPROXY_IPV6=m
+
+Some of those may not have been totally nessecary, but I was getting tired and
+just enabled the main nft modules.
+
+The final total config
+----------------------
+
+My complete kernel can be found
+[here](https://github.com/zigford/kernel-configs/blob/master/Precision%205510/Precision%205510)
+but here are the nftables bits in their entirity.
+
+ CONFIG_NETFILTER_ADVANCED=y
+ CONFIG_NETFILTER_NETLINK=m
+ CONFIG_NF_CONNTRACK=m
+ CONFIG_NF_TABLES=m
+ CONFIG_NFT_CT=m
+ CONFIG_NF_DEFRAG_IPV4=m
+ CONFIG_NF_DEFRAG_IPV6=m
+ CONFIG_NF_CT_NETLINK=m
+ CONFIG_NF_NAT=m
+ CONFIG_NFT_NET=m
+ CONFIG_NETFILTER_XTABLES=m
+ CONFIG_IP_SET=m
+ CONFIG_IP_SET_MAX=256
+ CONFIG_NF_TABLES_IPV4=y
+ CONFIG_IP_NF_IPTABLES=m
+ CONFIG_IP_NF_RAW=m
+ CONFIG_IP_NF_SECURITY=m
+ CONFIG_NF_TABLES_IPV6=y
+ CONFIG_IP6_NF_IPTABLES=m
+ CONFIG_IP6_NF_RAW=m
+ CONFIG_IP6_NF_SECURITY=m
+ CONFIG_NF_TABLES_INET=y
+ CONFIG_NFT_REJECT=m
+ CONFIG_NFT_REJECT_INET=m
+ CONFIG_NFT_REJECT_IPV4=m
+ CONFIG_NF_REJECT_IPV4=m
+ CONFIG_NFT_REJECT_IPV6=m
+ CONFIG_NF_REJECT_IPV6=m
+ CONFIG_NFT_FIB=m
+ CONFIG_NFT_FIB_INET=m
+ CONFIG_NFT_FIB_IPV4=m
+ CONFIG_NFT_FIB_IPV6=m
+ CONFIG_NF_TABLES_SET
+ CONFIG_NF_CONNTRACK_BROADCAST=m
+ CONFIG_NF_CONNTRACK_NETBIOS=m
+
+**Note** In my case I've configured many options as modules, but it should also
+be fine to include them in the kernel as `=y`
+
+Tags: gentoo, linux, firewalld
diff --git a/first-look-at-powershell-610.html b/first-look-at-powershell-610.html
new file mode 100644
index 0000000..debe51e
--- /dev/null
+++ b/first-look-at-powershell-610.html
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+First look at powershell 6.1.0
+
+
Firstly, yay for Test-Connection. I had to reimplement that one by parsing
+results from ping previously to make some of my windows modules work on PS
+core. Start-ThreadJob looks interesting and I can't wait to see what the
+Markdown cmdlets do.
+
+
I'll look more at these new commands later, but while I was running
+Get-Command, I thought I'd see if there were any generic performance
+improvements in 6.1.0 release.
A modest speed boost. Definitely appreciated on the old RPI 2 that hosts this
+site.
+
+
Kicking the tires on new command
+
+
Show-Markdown
+
+
I gave this a quick try and it colour highlighted and shows a preview of the
+markdown in the terminal window. It also had a -UseBrowser parameter which
+writes a tmp html and open's it in the browser. Pretty neat.
+
+
ConvertFrom-Markdown
+
+
What you'd expect, this converts a Markdown file to html to stdout or to a
+file if specified. Who knows, I might see if I can get this site to work using
+this implementation of Markdown. Currently I'm using the Markdown.pl from
+Gruber.
+
+
Get-ExperimentalFeature
+
+
Does nothing on the RPI and MacOS. Will have to spin this up on Windows and
+update this article
+
+
Test-Json
+
+
Just ran this over a json file I use in one of my projects:
+
+
Test-Json -Json (gc ./Template.json -raw)
+True
+
+
+
Start-ThreadJob
+
+
This might take a bit more time to find the true value of it, but I quickly
+tried my simultaneous ping test with this and it spawned a number of PSJobs
+with a PSJobTypeName of ThreadJob.
+
+
Closing thouhghts
+
+
Thats it for now. I've heard this release focused alot on bringing Windows
+cmdlets back for Windows, so not-so-much in this one for the *nixes. Still
+an improvement either way
+
diff --git a/first-look-at-powershell-610.md b/first-look-at-powershell-610.md
new file mode 100644
index 0000000..96c3d36
--- /dev/null
+++ b/first-look-at-powershell-610.md
@@ -0,0 +1,115 @@
+First look at powershell 6.1.0
+
+Powershell [6.1.0][1] dropped yesterday. Here is my quick look.
+
+## New Commands
+
+`Get-Command | Measure-Object` on each version:
+
+Version 6.0.4 had 316 commands, while 6.1.0 has 323 commands. Comparing a list
+of commands:
+
+On 6.0.4: `gcm | select -exp name > 6.0.4.txt` and the same on 6.1.0, then to
+compare:
+
+ compare-object (gc ./6.0.4.txt) (gc ./6.1.0.txt)
+
+ InputObject SideIndicator
+ ----------- -------------
+ ConvertFrom-Markdown =>
+ Get-ExperimentalFeature =>
+ Get-MarkdownOption =>
+ Set-MarkdownOption =>
+ Show-Markdown =>
+ Start-ThreadJob =>
+ Test-Connection =>
+ Test-Json =>
+ more <=
+
+---
+
+Firstly, yay for `Test-Connection`. I had to reimplement that one by parsing
+results from `ping` previously to make some of my windows modules work on PS
+core. Start-ThreadJob looks interesting and I can't wait to see what the
+Markdown cmdlets do.
+
+I'll look more at these new commands later, but while I was running
+Get-Command, I thought I'd see if there were any generic performance
+improvements in 6.1.0 release.
+
+On 6.0.4:
+
+ PS /home/harrisj> measure-command {gcm | select -exp name}
+ Days : 0
+ Hours : 0
+ Minutes : 0
+ Seconds : 0
+ Milliseconds : 718
+ Ticks : 7185832
+ TotalDays : 8.31693518518518E-06
+ TotalHours : 0.000199606444444444
+ TotalMinutes : 0.0119763866666667
+ TotalSeconds : 0.7185832
+ TotalMilliseconds : 718.5832
+
+On 6.1.0:
+
+ PS /home/harrisj> measure-command {get-command | select -exp name }
+
+ Days : 0
+ Hours : 0
+ Minutes : 0
+ Seconds : 0
+ Milliseconds : 455
+ Ticks : 4558407
+ TotalDays : 5.27593402777778E-06
+ TotalHours : 0.000126622416666667
+ TotalMinutes : 0.007597345
+ TotalSeconds : 0.4558407
+ TotalMilliseconds : 455.8407
+
+A modest speed boost. Definitely appreciated on the old RPI 2 that hosts this
+site.
+
+### Kicking the tires on new command
+
+## Show-Markdown
+
+I gave this a quick try and it colour highlighted and shows a preview of the
+markdown in the terminal window. It also had a -UseBrowser parameter which
+writes a tmp html and open's it in the browser. Pretty neat.
+
+## ConvertFrom-Markdown
+
+What you'd expect, this converts a Markdown file to html to stdout or to a
+file if specified. Who knows, I might see if I can get this site to work using
+this implementation of Markdown. Currently I'm using the Markdown.pl from
+Gruber.
+
+## Get-ExperimentalFeature
+
+Does nothing on the RPI and MacOS. Will have to spin this up on Windows and
+update this article
+
+## Test-Json
+
+Just ran this over a json file I use in one of my projects:
+
+ Test-Json -Json (gc ./Template.json -raw)
+ True
+
+## Start-ThreadJob
+
+This might take a bit more time to find the true value of it, but I quickly
+tried my simultaneous ping test with this and it spawned a number of PSJobs
+with a PSJobTypeName of ThreadJob.
+
+### Closing thouhghts
+
+Thats it for now. I've heard this release focused alot on bringing Windows
+cmdlets back for Windows, so not-so-much in this one for the \*nixes. Still
+an improvement either way
+
+Tags: powershell
+
+[1]: https://github.com/PowerShell/PowerShell/releases
diff --git a/gentoo-local-overlay.html b/gentoo-local-overlay.html
new file mode 100644
index 0000000..b5784f1
--- /dev/null
+++ b/gentoo-local-overlay.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+Gentoo local overlay
+
+
I find myself having to create a local overlay to test/develop a new ebuild
+without affecting my main system from time to time. I usually fire up a clean
+kvm Gentoo guest to start working on, but I've usually forgotten the proceedure
+
+
This is a quick instruction on a straight-forward local overlay
+
+
+
Create the local path tree where the overlay will reside:
+
diff --git a/gentoo-local-overlay.md b/gentoo-local-overlay.md
new file mode 100644
index 0000000..ad88c37
--- /dev/null
+++ b/gentoo-local-overlay.md
@@ -0,0 +1,41 @@
+Gentoo local overlay
+
+I find myself having to create a local overlay to test/develop a new ebuild
+without affecting my main system from time to time. I usually fire up a clean
+kvm Gentoo guest to start working on, but I've usually forgotten the proceedure
+
+This is a quick instruction on a straight-forward local overlay
+
+1. Create the local path tree where the overlay will reside:
+
+ mkdir -p /usr/local/portage/overlay/{metadata,profiles}
+
+2. Create the `layout.conf` file and `repo_name` file
+
+ cd /usr/local/portage/overlay
+ echo "masters = gentoo" > metadata/layout.conf
+ echo "$(hostname)" > profiles/repo_name
+
+3. Create a repos.conf file:
+
+ cat </etc/portage/repos.conf/$(hostname).conf
+ [$(hostname)]
+ location = /usr/local/portage/overlay
+ auto-sync = no
+ priority = 10
+ EOF
+
+## done.
+
+Now you can begin to populate the local repo with custom ebuilds. I usually do
+this and then upload my new ebuild to my [github][1] repository.
+
+See also:
+
+[repos.conf][2], [Custom Repository][3]
+
+Tags: gentoo, portage-overlay
+
+[1]: https://github.com/zigford/gentoo-zigford
+[2]: https://wiki.gentoo.org/wiki//etc/portage/repos.conf
+[3]: https://wiki.gentoo.org/wiki/Custom_repository
diff --git a/git---working-with-branches.html b/git---working-with-branches.html
new file mode 100644
index 0000000..95ad1ed
--- /dev/null
+++ b/git---working-with-branches.html
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+Git - Working with branches
+
+
clone to a new location (to simulate working on another machine)
+
merge the new branch to master
+
delete the local and remote branches
+
+
+
Reminder - This site is mainly for my memory and reference. You can find this
+information anywhere out on the web, but I find the best way to remember
+something is to write it down yourself.
+
Firstly, clone a repo and cd into it.
+
make a new local branch
+
git checkout -b updates/onedrive
+
+
Now, make some commits and we will push this to a new remote branch like this:
+
push to remote branch
+
git push -u origin updates/onedrive
+
+
+
note, the remote and local branch names need not match
+second note, -u stands for --set-upstream-to
+
Next, go to another computer where you will resume work. (or for the sake of
+practice, just clone again to another directory)
+On the new clone, we need to fetch all other branches
+
download all branches
+
git fetch origin
+
+
create a local branch, pull the remote branch to it
+
diff --git a/git---working-with-branches.md b/git---working-with-branches.md
new file mode 100644
index 0000000..5dd833a
--- /dev/null
+++ b/git---working-with-branches.md
@@ -0,0 +1,78 @@
+Git - Working with branches
+
+In this quick article, I will:
+
+* quickly create a branch on a git repository.
+* make some commits
+* push them to a remote branch
+* clone to a new location (to simulate working on another machine)
+* merge the new branch to master
+* delete the local and remote branches
+
+---
+
+Reminder - This site is mainly for my memory and reference. You can find this
+information anywhere out on the web, but I find the best way to remember
+something is to write it down yourself.
+
+Firstly, clone a repo and cd into it.
+
+__make a new local branch__
+
+ git checkout -b updates/onedrive
+
+Now, make some commits and we will push this to a new remote branch like this:
+
+__push to remote branch__
+
+ git push -u origin updates/onedrive
+
+_note, the remote and local branch names need not match_
+_second note, `-u` stands for --set-upstream-to_
+
+Next, go to another computer where you will resume work. (or for the sake of
+practice, just clone again to another directory)
+On the new clone, we need to fetch all other branches
+
+__download all branches__
+
+ git fetch origin
+
+__create a local branch, pull the remote branch to it__
+
+ git checkout -b updates/onedrive
+ git pull origin updates/onedrive
+
+Here we can examine the branch, continue to make changes and commits. If we want
+to push back to the remote branch, we need to set the upstream:
+
+ git push -u origin updates/onedrive
+
+When we are done, perhaps we want to merge the changes back to master. In that case:
+
+__merge changes to master__
+
+ git checkout master
+ git merge updates/onedrive
+
+Now would be a good time to push changes. Then you can delete the local and
+remote branches.
+
+__delete local branch__
+
+ git branch -d updates/onedrive
+
+__delete remote branch__
+
+ git push --delete origin updates/onedrive
+
+I hope this information helps me, let alone you!
+
+Helpful links
+
+[stackoverflow](https://stackoverflow.com/questions/2003505/how-do-i-delete-a-git-branch-locally-and-remotely)
+[stackify](https://stackify.com/git-checkout-remote-branch/)
+[git-scm.com](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging)
+[freecodecamp.org](https://www.freecodecamp.org/forum/t/push-a-new-local-branch-to-a-remote-git-repository-and-track-it-too/13222)
+
+Tags: git
diff --git a/gnu-linux.html b/gnu-linux.html
new file mode 100644
index 0000000..0f69c0f
--- /dev/null
+++ b/gnu-linux.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+GNU Linux
+
+
I've always used GNU/Linux distributions on my machines at home sing 1997.
+A brief list of the distributions I've used:
+
+
Slackware
+
RedHat
+
CentOS
+
Fedora Core
+
Ubuntu
+
Fedora
+
Raspbian
+
Gentoo
+
+
Currently, I'm using Gentoo on a few different machines and as an operating
+system nerd, it really ticks the boxes.
+
Many people who have used Gentoo in the past eventually say that maintaining a
+Gentoo system is fun at first, but that they have different priorities and want
+an 'OS' that just 'works'.
+
Knowing everything about a system is part of the joy of Gentoo. Think of it not
+as a distributioin, but more as a distribution kit. You get to make your own
+distro.
+
Aside from that, I used to run Raspbian on my Pi's but now run Gentoo on that
+too.
+
Here are the things I can do in Gentoo:
+
+
Connect to my work vpn
+
RDP to work machines
+
Use Citrix Receiever to connect to our Citrix environment
+
Use Snaps, to run the latest userland software (like teams for linux)
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
+
+
Featuring in this video is Dad (Ian) and Michael Hunt, giving the voiced guided tour.
+Also making brief appearances are Sam, Myself (Jesse), Alex, Phoebe and Mum
+(Ronnie)
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
diff --git a/harris/45-hinkler-avenue---circa-1994.md b/harris/45-hinkler-avenue---circa-1994.md
new file mode 100644
index 0000000..f71258a
--- /dev/null
+++ b/harris/45-hinkler-avenue---circa-1994.md
@@ -0,0 +1,26 @@
+45 Hinkler Avenue - Circa 1994
+
+Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
+
+---
+
+Featuring in this video is Dad (Ian) and Michael Hunt, giving the voiced guided tour.
+Also making brief appearances are Sam, Myself (Jesse), Alex, Phoebe and Mum
+(Ronnie)
+
+
+
+
+
+You can download the file by right clicking [here][1] and click "save-as"
+
+Tags: Ian, Sam, Ronnie, Jesse, Alex, Phoebe, Le-Anne
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/1994/12/45HinklerAve-crf23-faststart-web-deint-veryslow-sharpen.mp4
diff --git a/harris/all_posts.html b/harris/all_posts.html
new file mode 100644
index 0000000..0ef8cd6
--- /dev/null
+++ b/harris/all_posts.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+Harris Family Files — All posts
+
+
+
diff --git a/harris/christmas-2018.md b/harris/christmas-2018.md
new file mode 100644
index 0000000..6cbc9f0
--- /dev/null
+++ b/harris/christmas-2018.md
@@ -0,0 +1,28 @@
+Christmas 2018
+
+Mum, Dad and Phoebe's kids popped over for christmas in 2018. Here is the video:
+
+---
+
+Highlights:
+
+* Photo's of fun
+* Water bomb fight
+* Skating and scooting on the tennis court
+
+
+
+
+
+
+You can download the file by right clicking [here][1] and
+click 'save-as'
+
+
+Tags: christmas, Ronnie, Ian, Violet, Georgia, Oscar, Amelia, Sophie, Olivia, Sam, Jesse, Kim, Lucy, Charlie, Elijah, Clarissa, Doc, Leo, Zoe, Xavier
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/harrischristmas-coast.mp4
diff --git a/harris/dads-birthday---2007.html b/harris/dads-birthday---2007.html
new file mode 100644
index 0000000..1599310
--- /dev/null
+++ b/harris/dads-birthday---2007.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/harris/dads-birthday---2007.md b/harris/dads-birthday---2007.md
new file mode 100644
index 0000000..a44fa22
--- /dev/null
+++ b/harris/dads-birthday---2007.md
@@ -0,0 +1,24 @@
+Dad's Birthday - 2007
+
+I love coming across footage you didn't know was taken, let alone footage you
+took yourself. That's the case here in this 2007 video in which the Harris boys
+join Mum, Dad and their friends for a good ol'e family get-together late into
+the evening.
+
+---
+
+The video has a couple of good speeches, guitars are busted out and we even get
+a glimpse of Seb's bum crack! Classic!
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Tags: Ian, Ronnie, Grandad-Nev, Arnie, Alex, Seb, Sam, Georgia, Jesse
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/Harris/2007/12/2007_12_07_IansBirthday-Web-Deint.mp4
diff --git a/harris/dv-mix-tape.html b/harris/dv-mix-tape.html
new file mode 100644
index 0000000..f95574a
--- /dev/null
+++ b/harris/dv-mix-tape.html
@@ -0,0 +1,235 @@
+
+
+
+
+
+
+
+DV Mix Tape
+
+
Mum found an old DV tape under the stairs and I took it home to see what was on
+it. Turns out that it is babies birthdays and granddads.
+
+
Right off the bat is Nonnie interviewing Georgia while she is pulling faces
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Ian, Lila, Granddad Nev, Arnie and Georgia having a relaxing play while Nonnie
+films
+
Some timestamps:
+
+
+
+
Time stamp
+
Description
+
+
+
+
+
00:00:00
+
Ian and Grandad Nev sip tea and chat to Lilie Pie, while she looks at Arnie
+
+
+
00:02:00
+
Lila plays with toys(Sorta). While Nev finds Arnie's Ball
+
+
+
00:03:51
+
Georgie plays mum and feeds Lila
+
+
+
00:04:47
+
Georgie has a swim in a large pool
+
+
+
00:08:30
+
Georgia finds her missing baby kitty cat
+
+
+
00:10:08
+
Lila gives a happy smile
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Visiting at Jesse and Clarissa's is Mum, Dad, Alex (And I think Sam is here too)
+Features everyone playing with baby Elijah.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Playing at Nonnies again. Phoebe and Georgia are visiting Nonnie. Georgia gives a contemporary
+ice cream dance. Lila and Granddad Nev make an appearance. He puts his stockings
+on.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Granddad Nev and Ian catch up on the latest in football talk. Ian is making a
+soup of some kind while Nev is typing up a novel.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Elijah showing his strong leg muscles to push a table
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Sam's Birthday. Judging by the candles, he has reached a ripe old age of 1.
+In attendence is Seb, Sam (duh), Clarissa, Georgia, Alex, Granddad, Jesse, Lila,
+Phoebe, Ronnie, Me (Jesse). Possibly more.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Babies hanging out. Jesse changes Elijah's Nappie (joy). And Lila and Elijah
+hang out with Georgia
+
+
+
+
Time stamp
+
Description
+
+
+
+
+
00:00:00
+
Jesse changes Elijah's nappie
+
+
+
00:01:54
+
Georgia, Elijah and Lila have a sit together
+
+
+
00:02:55
+
Elijah wriggles around on bed
+
+
+
00:04:51
+
Elijah has a lie down with Granddad Nev
+
+
+
00:07:34
+
Young Ian puts some glasses on Lila
+
+
+
00:09:41
+
Ronnie has a hold of Elijah
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Phoebe's Birthday. There appears to be 24ish candles.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Granddad shows off his skills playing the harmonica. Bravo!
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
The tape concludes with Lila having a roll around on the floor.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
diff --git a/harris/dv-mix-tape.md b/harris/dv-mix-tape.md
new file mode 100644
index 0000000..235c1c4
--- /dev/null
+++ b/harris/dv-mix-tape.md
@@ -0,0 +1,268 @@
+DV Mix Tape
+
+Mum found an old DV tape under the stairs and I took it home to see what was on
+it. Turns out that it is babies birthdays and granddads.
+
+---
+
+Right off the bat is Nonnie interviewing Georgia while she is pulling faces
+
+
+
+
+
+
+You can download the file by right clicking [here][1] and click "save-as"
+
+---
+
+Ian, Lila, Granddad Nev, Arnie and Georgia having a relaxing play while Nonnie
+films
+
+Some timestamps:
+
+
+
+
+
Time stamp
+
Description
+
+
+
+
+
00:00:00
+
Ian and Grandad Nev sip tea and chat to Lilie Pie, while she looks at Arnie
+
+
+
00:02:00
+
Lila plays with toys(Sorta). While Nev finds Arnie's Ball
+
+
+
00:03:51
+
Georgie plays mum and feeds Lila
+
+
+
00:04:47
+
Georgie has a swim in a large pool
+
+
+
00:08:30
+
Georgia finds her missing baby kitty cat
+
+
+
00:10:08
+
Lila gives a happy smile
+
+
+
+
+
+
+
+You can download the file by right clicking [here][2] and click "save-as"
+
+---
+
+Visiting at Jesse and Clarissa's is Mum, Dad, Alex (And I think Sam is here too)
+Features everyone playing with baby Elijah.
+
+
+
+
+
+
+You can download the file by right clicking [here][3] and click "save-as"
+
+---
+
+Playing at Nonnies again. Phoebe and Georgia are visiting Nonnie. Georgia gives a contemporary
+ice cream dance. Lila and Granddad Nev make an appearance. He puts his stockings
+on.
+
+
+
+
+
+
+You can download the file by right clicking [here][4] and click "save-as"
+
+---
+
+Granddad Nev and Ian catch up on the latest in football talk. Ian is making a
+soup of some kind while Nev is typing up a novel.
+
+
+
+
+
+
+You can download the file by right clicking [here][5] and click "save-as"
+
+---
+
+Elijah showing his strong leg muscles to push a table
+
+
+
+
+
+
+You can download the file by right clicking [here][6] and click "save-as"
+
+---
+
+Sam's Birthday. Judging by the candles, he has reached a ripe old age of 1.
+In attendence is Seb, Sam (duh), Clarissa, Georgia, Alex, Granddad, Jesse, Lila,
+Phoebe, Ronnie, Me (Jesse). Possibly more.
+
+
+
+
+
+You can download the file by right clicking [here][7] and click "save-as"
+
+---
+
+Babies hanging out. Jesse changes Elijah's Nappie (joy). And Lila and Elijah
+hang out with Georgia
+
+
+
+
Time stamp
+
Description
+
+
+
+
+
00:00:00
+
Jesse changes Elijah's nappie
+
+
+
00:01:54
+
Georgia, Elijah and Lila have a sit together
+
+
+
00:02:55
+
Elijah wriggles around on bed
+
+
+
00:04:51
+
Elijah has a lie down with Granddad Nev
+
+
+
00:07:34
+
Young Ian puts some glasses on Lila
+
+
+
00:09:41
+
Ronnie has a hold of Elijah
+
+
+
+
+
+
+
+You can download the file by right clicking [here][8] and click "save-as"
+
+---
+
+Phoebe's Birthday. There appears to be 24ish candles.
+
+
+
+
+
+You can download the file by right clicking [here][9] and click "save-as"
+
+---
+
+Granddad shows off his skills playing the harmonica. Bravo!
+
+
+
+
+
+You can download the file by right clicking [here][10] and click "save-as"
+
+---
+
+The tape concludes with Lila having a roll around on the floor.
+
+
+
+
+
+You can download the file by right clicking [here][11] and click "save-as"
+
+
+Tags: Ronnie, Alex, Ian, Clarissa, Jesse, Sam, Granddad, Georgia, Lila, Elijah, Phoebe, Arnie
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/Harris/GeorgiePullingFaces-Web.mp4
+[2]: https://f002.backblazeb2.com/file/BlogVideos/Harris/PlayingAtNonnies-Web.mp4
+[3]: https://f002.backblazeb2.com/file/BlogVideos/Harris/AtJesseAndClarissa-Web.mp4
+[4]: https://f002.backblazeb2.com/file/BlogVideos/Harris/PlayingAtNonniesAgain-Web.mp4
+[5]: https://f002.backblazeb2.com/file/BlogVideos/Harris/GrandadTyping-Web.mp4
+[6]: https://f002.backblazeb2.com/file/BlogVideos/Harris/Elijah-Web.mp4
+[7]: https://f002.backblazeb2.com/file/BlogVideos/Harris/SamsBirthday-Web.mp4
+[8]: https://f002.backblazeb2.com/file/BlogVideos/Harris/BabiesHangingOut-Web.mp4
+[9]: https://f002.backblazeb2.com/file/BlogVideos/Harris/PhoebesBirthday-Web.mp4
+[10]: https://f002.backblazeb2.com/file/BlogVideos/Harris/GrandadMusic-Web.mp4
+[11]: https://f002.backblazeb2.com/file/BlogVideos/Harris/LilaRolling-Web.mp4
diff --git a/harris/feed.rss b/harris/feed.rss
new file mode 100644
index 0000000..461e289
--- /dev/null
+++ b/harris/feed.rss
@@ -0,0 +1,54 @@
+
+
+Harris Family Fileshttps://zigford.org/harris/index.html
+A place for family stuffen
+Mon, 22 Jun 2020 08:44:46 +1000
+Mon, 22 Jun 2020 08:44:46 +1000
+
+
+Harris Family - 1988
+I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
+
+
Enjoy
+
+
+]]>https://zigford.org/harris/harris-family---1988.html
+https://zigford.org/harris/./harris-family---1988.html
+Jesse Harris
+Mon, 22 Jun 2020 08:44:23 +1000
+
+
+
+]]>https://zigford.org/harris/dads-birthday---2007.html
+https://zigford.org/harris/./dads-birthday---2007.html
+
+Wed, 22 Apr 2020 06:35:32 +1000
+
+45 Hinkler Avenue - Circa 1994
+Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
+
+]]>https://zigford.org/harris/45-hinkler-avenue---circa-1994.html
+https://zigford.org/harris/./45-hinkler-avenue---circa-1994.html
+Jesse Harris
+Sat, 04 Jan 2020 17:58:03 +1000
+
+DV Mix Tape
+Mum found an old DV tape under the stairs and I took it home to see what was on
+it. Turns out that it is babies birthdays and granddads.
+
+]]>https://zigford.org/harris/dv-mix-tape.html
+https://zigford.org/harris/./dv-mix-tape.html
+Jesse Harris
+Fri, 04 Oct 2019 09:10:06 +1000
+
diff --git a/harris/harris-family---1988.html b/harris/harris-family---1988.html
new file mode 100644
index 0000000..bab045a
--- /dev/null
+++ b/harris/harris-family---1988.html
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+Harris Family - 1988
+
+
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
+
+
Enjoy
+
+
+
+
Some video sync errors occurred while importing this video which caused the
+audio to go out of sync in certain places. To compensate, I've split the video
+into segments so that I could give them their own audio delay in ms. Each
+segment is listed in the order it appeared on the original VHS cassette.
+
+
Camera test with the Alex and Jesse.
+
+
This is my main memory of this tape, me and Mum showing our bellies. Alex's
+'Cut' line and Dad banging his head on the bed. I reckon he staged that head
+bang.
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Mum and Dad get sappy.
+
+
Mum and Dad get romantic with each other. This segment was probably meant for
+them only but it's nice to see your parents love each other.
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Early morning walk around Hinkler Ave.
+
+
A peek around Hinkler Ave. in the wee hours of the morning. Who is already
+awake?
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Visit Nanma and Grandfather Les.
+
+
We visit Grandad Nev's parents. (I know them as Nanma and Grandfather Les).
+Which part of Bundaberg did they live? Nanma still looks quite active and
+strong.
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Around Nana Powell's yard
+
+
Now we visit Nana Powell and Grandfather Jack. Is that how you spell her last
+name? What was he first name? I'd like to find out and put more info here.
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Nana Powell and Grandfather Jack.
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Nana Powell and Grandfather Jack cont.
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Kids doing things and the littles visit.
+
+
I don't think Mum and Dad left Bundaberg on good terms with the Little's. I
+certainly was not a fan of Chris after he rammed charcoal in my mouth.
+Nevertheless I enjoy looking on My parents interacting with their friends and
+seeing the kids playing around. Green slime, and how Dad deals with Alex putting
+slime on Phoebe. Classic!
+
+
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
diff --git a/harris/harris-family---1988.md b/harris/harris-family---1988.md
new file mode 100644
index 0000000..4c52df8
--- /dev/null
+++ b/harris/harris-family---1988.md
@@ -0,0 +1,153 @@
+Harris Family - 1988
+
+I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
+
+Enjoy
+
+---
+
+Some video sync errors occurred while importing this video which caused the
+audio to go out of sync in certain places. To compensate, I've split the video
+into segments so that I could give them their own audio delay in ms. Each
+segment is listed in the order it appeared on the original VHS cassette.
+
+### Camera test with the Alex and Jesse.
+
+This is my main memory of this tape, me and Mum showing our bellies. Alex's
+'Cut' line and Dad banging his head on the bed. I reckon he staged that head
+bang.
+
+
+
+
+
+You can download the file by right clicking [here][1] and click "save-as"
+
+### Mum and Dad get sappy.
+
+Mum and Dad get romantic with each other. This segment was probably meant for
+them only but it's nice to see your parents love each other.
+
+
+
+
+
+You can download the file by right clicking [here][2] and click "save-as"
+
+### Early morning walk around Hinkler Ave.
+
+A peek around Hinkler Ave. in the wee hours of the morning. Who is already
+awake?
+
+
+
+
+
+You can download the file by right clicking [here][3] and click "save-as"
+
+### Visit Nanma and Grandfather Les.
+
+We visit Grandad Nev's parents. (I know them as Nanma and Grandfather Les).
+Which part of Bundaberg did they live? Nanma still looks quite active and
+strong.
+
+
+
+
+
+You can download the file by right clicking [here][4] and click "save-as"
+
+### Around Nana Powell's yard
+
+Now we visit Nana Powell and Grandfather Jack. Is that how you spell her last
+name? What was he first name? I'd like to find out and put more info here.
+
+
+
+
+
+You can download the file by right clicking [here][5] and click "save-as"
+
+### Nana Powell and Grandfather Jack.
+
+
+
+
+
+You can download the file by right clicking [here][6] and click "save-as"
+
+### Nana Powell and Grandfather Jack cont.
+
+
+
+
+
+You can download the file by right clicking [here][7] and click "save-as"
+
+### Kids doing things and the littles visit.
+
+I don't think Mum and Dad left Bundaberg on good terms with the Little's. I
+certainly was not a fan of Chris after he rammed charcoal in my mouth.
+Nevertheless I enjoy looking on My parents interacting with their friends and
+seeing the kids playing around. Green slime, and how Dad deals with Alex putting
+slime on Phoebe. Classic!
+
+
+
+
+
+You can download the file by right clicking [here][8] and click "save-as"
+
+Tags: Ian, Seb, Phoebe, Ronnie, Alex, Nanma, Grandfather-Les, Nanna-Powel, Grandfather-Jack, Stumpy, Kitty, Jesse
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Camera%20test%20with%20Alex%20and%20Jesse-Web.mp4
+[2]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Mum%20and%20Dad%20get%20sappy-Web.mp4
+[3]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Early%20morning%20around%20hinkler%20ave-Web.mp4
+[4]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Visit%20Nanma%20and%20Grandfather%20Les-Web.mp4
+[5]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Around%20Nana%20Powells%20yard-Web.mp4
+[6]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Inside%20Nana%20Powells%20house-Web.mp4
+[7]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Inside%20Nana%20Powells%20house%20continued-Web.mp4
+[8]: https://f002.backblazeb2.com/file/BlogVideos/Harris/1988/Littles%20Visit%20and%20Kids%20playing-Web.mp4
diff --git a/harris/index.html b/harris/index.html
new file mode 100644
index 0000000..db0e873
--- /dev/null
+++ b/harris/index.html
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+Harris Family Files
+
+
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
Finally came across a VHS tape I'd been searching for for a long time. This is a
+video from just prior to the Harris crew packing up from Bundaberg and moving to
+Crows Nest in 1994.
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
I thought I lost this tape when Clarissa and I moved from Brisbane to the
+Sunshine Coast. However it was safely in Mum's treasure chest all this time.
+The title on the tape says '87, however during the video Dad mentions 1988.
+Which is it?
Coding can be fun. I've enjoyed coding from a young age, starting with
+GW-Basic at maybe 6, 7, or 8.
+
+
I remember my brother Alex seemed like a real genius with the computer (an IBM
+clone made by Acer 8086 XT). Using Basic he could make the computer do anything
+and was writing his own games.
+
+
Back then, how we edited code would make us laugh today and I would say we take
+the humble text editor for granted. Even something like notepad.exe is amazing
+compared to tools of yesteryear. Here is a sample to illustrate:
+To see your code you would have to type LIST<ENTER>:
To edit a line of code you would re-write it by typing it in, line number and
+all.
+
+
20 PRINT "ENTER YOUR FULL NAME"
+
+
+
And to insert a line, start a line with a number between existing lines
+
+
31 $A=$I
+
+
+
When you ran out of in-between-lines there was a command you could run to
+reindex your lines which would space them all out 10 between each other.
+
+
Since then, the notepad, notepad++, programmers notepad, vim, nano, gedit,
+bbedit and countless other advanced (or not-so-advanced) text editors have
+evolved.
+
+
vi was born out of ed a streaming text editor which didn't really have a user
+interface so it was kind of more like how I edited my BASIC programs. One thing
+it did have were commands. Example of vim commands:
+
+
You've just run your script/app and get a syntax error on line 432.
+
+
+
PS> .\bigscript.ps1
+ At C:\bigscript.ps1:432 char:27
+ + if ($true) {echo "True" | {echo true}}
+ + ~~~~~~~~~~~
+ Expressions are only allowed as the first element of a pipeline.
+ + CategoryInfo : ParserError: (:) [], ParseException
+ + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
+
+
+
+
So you crack open bigscript in vim (btw, vim is amazing at handling big files)
+Enter, 432Gf|a?<ESC>:wq done.
+
+
To break that down, 432G will put the cursor at line 432, f| will move the
+cursor forward to the |, a? will append a ?, then \ will return
+vim back to normal mode and :wq puts vim in command mode and execute write
+quit.
+
+
Now that might seem a bit obtuse if your not a vim user, but to me that is
+muscle memory and if coding is your life, this is something you are going to
+want to learn.
+
+
If this interests you, and you start your vim journey, then read on. I will
+share my vim configuration and history of using vim.
+
+
My vim story
+
+
When my Dad was about the same age as I am now (35), he went back to
+University to study Computer Science. I remember him bringing home Slackware
+and RedHat on floppies, which we would install and he would give me lessons on
+using Vi possibly vim, but I didn't know at the time. (This is probably around
+1996).
+
+
Since finishing School and entering the workforce I have mostly worked in
+Windows environments. Even still, with the occasionaly need to touch GNU/Linux
+at work and often testing Distro's at home I would always feel more efficient
+when using Vi/m.
+
+
My feeling when using another editor is that moving around and changing text
+feels so lethargic when done one button at a time. This drove me in recent
+years to keep a copy of vim in my home profile.
+
+
Around 2011 I switched from VBScript and the occasional perl script to writing
+fulltime in Powershell, so it made sense to try a few different editors which
+are more native to the Windows platform. I tried Visual Studio Code, Powershell
+ISE, Notepad++ and still kept coming back to vim.
+
+
Visual Studio Code is a great alternative, and it's Powershell extensions are
+very good. If you do choose to use it, install the vim extension too. It brings
+the vim commands to vscode.
+Hoever being an electron app, it suffers from performance and memory
+consumption issues. I love squeezing every drop of battery out of my PC and
+when you see 7mb RAM on Vim vs 500Mb+ on VSCode, you might rethink your
+choices.
+
+
Therefore I've resorted to delving into the world of customizing vim and
+setting up plugins.
+
+
One of the main things I'm trying to acheive is a cross platform configuration.
+You see, at work I'm on Windows and MacOs and at home I'm on Gentoo Linux. So I
+have written my .vimrc file to work on any platform. I usually sync it with
+OneDrive for Business and symlink it into my linux/mac/Windows home directory
+with a seperate setup script. Without further ado, here it is with some
+comments
+
+
.vimrc
+
+
if has("win32") " Check if on windows \
+ " Also supports has(unix)
+ source $VIMRUNTIME/mswin.vim " Load a special vimscript \
+ " ctrl+c and ctrl+v support
+ behave mswin " Like above
+ set ff=dos " Set file format to dos
+ let os='win' " Set os var to win
+ set noeol " Don't add an extra line \
+ " at the end of each file
+ set nofixeol " Disable the fixeol : Not \
+ " not sure why this is needed
+ set backupdir=~/_vimtmp,. " Set backupdir rather \
+ " than leaving backup files \
+ " all over the fs
+ set directory=~/_vimtmp,. " Set dir for swp files \
+ " rather than leaving files \
+ " all over the fs
+ set undodir=$USERPROFILE/vimfiles/VIM_UNDO_FILES " Set persistent undo\
+ " files
+ " directory
+ let plug='$USERPROFILE/.vim' " Setup a var used later to \
+ " store plugins
+ set shell=powershell " Set shell to powershell \
+ " on windows
+ set shellcmdflag=-command " Arg for powrshell to run
+else
+ set backupdir=~/.vimtmp,.
+ set directory=~/.vimtmp,.
+ set undodir=$HOME/.vim/VIM_UNDO_FILES
+ let uname = system('uname') " Check variant of Unix \
+ " running. Linux|Macos
+ if uname =~ "Darwin" " If MacOS
+ let plug='~/.vim'
+ let os='mac' " Set os var to mac
+ else
+ if isdirectory('/mnt/c/Users/jpharris')
+ let plug='/mnt/c/Users/jpharris/.vim'
+ let os='wsl'
+ else
+ let plug='~/.vim'
+ let os='lin'
+ endif
+ endif
+endif
+
+execute "source " . plug . "/autoload/plug.vim"
+if exists('*plug#begin')
+ call plug#begin(plug . '/plugged') " Enable the following plugins
+ Plug 'tpope/vim-fugitive'
+ Plug 'junegunn/gv.vim'
+ Plug 'junegunn/vim-easy-align'
+ Plug 'jiangmiao/auto-pairs'
+ "Plug 'vim-airline/vim-airline' " Airline disabled for perf
+ Plug 'morhetz/gruvbox'
+ Plug 'ervandew/supertab'
+ Plug 'tomtom/tlib_vim'
+ Plug 'MarcWeber/vim-addon-mw-utils'
+ Plug 'PProvost/vim-ps1'
+ Plug 'garbas/vim-snipmate'
+ Plug 'honza/vim-snippets'
+ call plug#end()
+endif
+ " Remove menu bars
+if has("gui_running") " Options for gvim only
+ set guioptions -=m " Disable menubar
+ set guioptions -=T " Disable Status bar
+ set lines=50 " Set default of lines
+ set columns=80 " Set default of columns
+ if os =~ "lin"
+ set guifont=Fira\ Code\ 12
+ elseif os =~ "mac"
+ set guifont=FiraCode-Retina:h14
+ else
+ set guifont=Fira_Code_Retina:h12:cANSI:qDRAFT
+ set renderoptions=type:directx
+ set encoding=utf-8
+ endif
+ set background=dark
+ colorscheme gruvbox
+else
+ set mouse=a
+ if has('termguicolors')
+ set termguicolors " Enable termguicolors for \
+ " consoles which support 256.
+ set background=dark
+ colorscheme gruvbox
+ endif
+endif
+
+if has("persistent_undo")
+ set undofile " Enable persistent undo
+endif
+
+colorscheme evening " Set the default colorscheme
+ " Attempt to start vim-plug
+
+syntax on " Enable syntax highlighting
+filetype plugin indent on " Enable plugin based auto \
+ " indent
+set tabstop=4 " show existing tab with 4 \
+ " spaces width
+set shiftwidth=4 " when indenting with '>', \
+ " use 4 spaces width
+set expandtab " On pressing tab, insert 4 \
+ " spaces
+set number " Show line numbers
+
+" Map F5 to python.exe %=current file
+nnoremap <silent> <F5> :!clear;python %<CR>
+" Remap tab to auto complete
+imap <C-@> <C-Space>
+" Setup ga shortcut for easyaline in visual mode
+nmap ga <Plug>(EasyAlign)
+" Setup ga shortcut for easyaline in normal mode
+xmap ga <Plug>(EasyAlign)"
+
+
diff --git a/how-i-code.md b/how-i-code.md
new file mode 100755
index 0000000..8cae8ed
--- /dev/null
+++ b/how-i-code.md
@@ -0,0 +1,230 @@
+How I Code
+
+###Updated 17/08/2018
+
+Coding can be fun. I've enjoyed coding from a young age, starting with
+[GW-Basic](https://en.m.wikipedia.org/wiki/GW-BASIC) at maybe 6, 7, or 8.
+
+I remember my brother Alex seemed like a real genius with the computer (an IBM
+clone made by Acer 8086 XT). Using Basic he could make the computer do anything
+and was writing his own games.
+
+Back then, how we edited code would make us laugh today and I would say we take
+the humble text editor for granted. Even something like notepad.exe is amazing
+compared to tools of yesteryear. Here is a sample to illustrate:
+To see your code you would have to type `LIST`:
+
+ >LIST
+
+ 10 PRINT "WELCOME TO JESSES GAME"
+ 20 PRINT "ENTER YOUR NAME"
+ 30 $I = INPUT
+ 40 PRINT "WELCOME $I, STRAP YOURSELF IN"
+
+To edit a line of code you would re-write it by typing it in, line number and
+all.
+
+ 20 PRINT "ENTER YOUR FULL NAME"
+
+And to insert a line, start a line with a number between existing lines
+
+ 31 $A=$I
+
+When you ran out of in-between-lines there was a command you could run to
+reindex your lines which would space them all out 10 between each other.
+
+Since then, the notepad, notepad++, programmers notepad, vim, nano, gedit,
+bbedit and countless other advanced (or not-so-advanced) text editors have
+evolved.
+
+vi was born out of ed a streaming text editor which didn't really have a user
+interface so it was kind of more like how I edited my BASIC programs. One thing
+it did have were commands. Example of vim commands:
+
+You've just run your script/app and get a syntax error on line 432.
+
+> PS> .\bigscript.ps1
+> At C:\bigscript.ps1:432 char:27
+> + if ($true) {echo "True" | {echo true}}
+> + ~~~~~~~~~~~
+> Expressions are only allowed as the first element of a pipeline.
+> + CategoryInfo : ParserError: (:) [], ParseException
+> + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
+
+So you crack open bigscript in vim (btw, vim is amazing at handling big files)
+Enter, `432Gf|a?:wq` done.
+
+To break that down, `432G` will put the cursor at line 432, `f|` will move the
+cursor _forward_ to the `|`, `a?` will _append_ a `?`, then \ will return
+vim back to normal mode and `:wq` puts vim in command mode and execute _w_rite
+_q_uit.
+
+Now that might seem a bit obtuse if your not a vim user, but to me that is
+muscle memory and if coding is your life, this is something you are going to
+want to learn.
+
+If this interests you, and you start your vim journey, then read on. I will
+share my vim configuration and history of using vim.
+
+My vim story
+---
+
+When my Dad was about the same age as I am now (35), he went back to
+University to study Computer Science. I remember him bringing home Slackware
+and RedHat on floppies, which we would install and he would give me lessons on
+using Vi possibly vim, but I didn't know at the time. (This is probably around
+1996).
+
+Since finishing School and entering the workforce I have mostly worked in
+Windows environments. Even still, with the occasionaly need to touch GNU/Linux
+at work and often testing Distro's at home I would always feel more efficient
+when using Vi/m.
+
+My feeling when using another editor is that moving around and changing text
+feels so lethargic when done one button at a time. This drove me in recent
+years to keep a copy of vim in my home profile.
+
+Around 2011 I switched from VBScript and the occasional perl script to writing
+fulltime in Powershell, so it made sense to try a few different editors which
+are more native to the Windows platform. I tried Visual Studio Code, Powershell
+ISE, Notepad++ and still kept coming back to vim.
+
+Visual Studio Code is a great alternative, and it's Powershell extensions are
+very good. If you do choose to use it, install the vim extension too. It brings
+the vim commands to vscode.
+Hoever being an electron app, it suffers from performance and memory
+consumption issues. I love squeezing every drop of battery out of my PC and
+when you see 7mb RAM on Vim vs 500Mb+ on VSCode, you might rethink your
+choices.
+
+Therefore I've resorted to delving into the world of customizing vim and
+setting up plugins.
+
+One of the main things I'm trying to acheive is a cross platform configuration.
+You see, at work I'm on Windows and MacOs and at home I'm on Gentoo Linux. So I
+have written my .vimrc file to work on any platform. I usually sync it with
+OneDrive for Business and symlink it into my linux/mac/Windows home directory
+with a seperate setup script. Without further ado, here it is with some
+comments
+
+##.vimrc
+
+ if has("win32") " Check if on windows \
+ " Also supports has(unix)
+ source $VIMRUNTIME/mswin.vim " Load a special vimscript \
+ " ctrl+c and ctrl+v support
+ behave mswin " Like above
+ set ff=dos " Set file format to dos
+ let os='win' " Set os var to win
+ set noeol " Don't add an extra line \
+ " at the end of each file
+ set nofixeol " Disable the fixeol : Not \
+ " not sure why this is needed
+ set backupdir=~/_vimtmp,. " Set backupdir rather \
+ " than leaving backup files \
+ " all over the fs
+ set directory=~/_vimtmp,. " Set dir for swp files \
+ " rather than leaving files \
+ " all over the fs
+ set undodir=$USERPROFILE/vimfiles/VIM_UNDO_FILES " Set persistent undo\
+ " files
+ " directory
+ let plug='$USERPROFILE/.vim' " Setup a var used later to \
+ " store plugins
+ set shell=powershell " Set shell to powershell \
+ " on windows
+ set shellcmdflag=-command " Arg for powrshell to run
+ else
+ set backupdir=~/.vimtmp,.
+ set directory=~/.vimtmp,.
+ set undodir=$HOME/.vim/VIM_UNDO_FILES
+ let uname = system('uname') " Check variant of Unix \
+ " running. Linux|Macos
+ if uname =~ "Darwin" " If MacOS
+ let plug='~/.vim'
+ let os='mac' " Set os var to mac
+ else
+ if isdirectory('/mnt/c/Users/jpharris')
+ let plug='/mnt/c/Users/jpharris/.vim'
+ let os='wsl'
+ else
+ let plug='~/.vim'
+ let os='lin'
+ endif
+ endif
+ endif
+
+ execute "source " . plug . "/autoload/plug.vim"
+ if exists('*plug#begin')
+ call plug#begin(plug . '/plugged') " Enable the following plugins
+ Plug 'tpope/vim-fugitive'
+ Plug 'junegunn/gv.vim'
+ Plug 'junegunn/vim-easy-align'
+ Plug 'jiangmiao/auto-pairs'
+ "Plug 'vim-airline/vim-airline' " Airline disabled for perf
+ Plug 'morhetz/gruvbox'
+ Plug 'ervandew/supertab'
+ Plug 'tomtom/tlib_vim'
+ Plug 'MarcWeber/vim-addon-mw-utils'
+ Plug 'PProvost/vim-ps1'
+ Plug 'garbas/vim-snipmate'
+ Plug 'honza/vim-snippets'
+ call plug#end()
+ endif
+ " Remove menu bars
+ if has("gui_running") " Options for gvim only
+ set guioptions -=m " Disable menubar
+ set guioptions -=T " Disable Status bar
+ set lines=50 " Set default of lines
+ set columns=80 " Set default of columns
+ if os =~ "lin"
+ set guifont=Fira\ Code\ 12
+ elseif os =~ "mac"
+ set guifont=FiraCode-Retina:h14
+ else
+ set guifont=Fira_Code_Retina:h12:cANSI:qDRAFT
+ set renderoptions=type:directx
+ set encoding=utf-8
+ endif
+ set background=dark
+ colorscheme gruvbox
+ else
+ set mouse=a
+ if has('termguicolors')
+ set termguicolors " Enable termguicolors for \
+ " consoles which support 256.
+ set background=dark
+ colorscheme gruvbox
+ endif
+ endif
+
+ if has("persistent_undo")
+ set undofile " Enable persistent undo
+ endif
+
+ colorscheme evening " Set the default colorscheme
+ " Attempt to start vim-plug
+
+ syntax on " Enable syntax highlighting
+ filetype plugin indent on " Enable plugin based auto \
+ " indent
+ set tabstop=4 " show existing tab with 4 \
+ " spaces width
+ set shiftwidth=4 " when indenting with '>', \
+ " use 4 spaces width
+ set expandtab " On pressing tab, insert 4 \
+ " spaces
+ set number " Show line numbers
+
+ " Map F5 to python.exe %=current file
+ nnoremap :!clear;python %
+ " Remap tab to auto complete
+ imap
+ " Setup ga shortcut for easyaline in visual mode
+ nmap ga (EasyAlign)
+ " Setup ga shortcut for easyaline in normal mode
+ xmap ga (EasyAlign)"
+
+[Link to vimrc on github](https://github.com/zigford/vim)
+
+Tags: vim, coding, windows, linux, macos
diff --git a/images/bauhn.jpeg b/images/bauhn.jpeg
new file mode 100644
index 0000000..28e6060
Binary files /dev/null and b/images/bauhn.jpeg differ
diff --git a/images/btrfs1.png b/images/btrfs1.png
new file mode 100644
index 0000000..faa1ecd
Binary files /dev/null and b/images/btrfs1.png differ
diff --git a/images/btrfsscrub.png b/images/btrfsscrub.png
new file mode 100644
index 0000000..1b67999
Binary files /dev/null and b/images/btrfsscrub.png differ
diff --git a/images/cascadiacode.png b/images/cascadiacode.png
new file mode 100644
index 0000000..882c5c1
Binary files /dev/null and b/images/cascadiacode.png differ
diff --git a/images/connexent.jpeg b/images/connexent.jpeg
new file mode 100644
index 0000000..0144a6c
Binary files /dev/null and b/images/connexent.jpeg differ
diff --git a/images/gentoo64bit.jpg b/images/gentoo64bit.jpg
new file mode 100644
index 0000000..8ea0f7f
Binary files /dev/null and b/images/gentoo64bit.jpg differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..dd6e0a0
--- /dev/null
+++ b/index.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+zigford.org
+
+
Netcat, the swiss army knife of TCP/IP can be used for many tasks.
+Today, I'll breifly demonstrate sending btrfs snapshots between computers
+with it's assistance.
The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
It's no secret I use BTRFS, so I have a fair amount of data stored on this
+filesystem. With most popular filesystems you have no way of knowing if your
+data is the same read as was originally written. A few modern filesystems
+support a function known as scrubbing.
Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
Over the holidays I've kept myself busy by porting
+BashBlog to PowerShell. Although work is by no
+means complete, you can actually use it to edit an
+existing blogpost
+
+
The idea came to me when the PowerShell core team
+added Markdown cmdlets to PowerShell and I thought
+it would be nice to have the whole system written in
+one script without external dependencies.
+
Benefits of this, I'm hoping is speed. This site is
+hosted and created on a Rasperry Pi 2. Which means
+when the indexes are created after a new post it
+takes a longer while to create as more posts are
+added.
+
Head on over to github to check out the code,
+but I'll post progress reports here from time to
+time.
+
diff --git a/introducing-pwshblog.md b/introducing-pwshblog.md
new file mode 100644
index 0000000..df6bf48
--- /dev/null
+++ b/introducing-pwshblog.md
@@ -0,0 +1,28 @@
+Introducing PwshBlog
+
+Over the holidays I've kept myself busy by porting
+[BashBlog][1] to PowerShell. Although work is by no
+means complete, you can actually use it to edit an
+existing blogpost
+
+---
+
+The idea came to me when the PowerShell core team
+added Markdown cmdlets to PowerShell and I thought
+it would be nice to have the whole system written in
+one script without external dependencies.
+
+Benefits of this, I'm hoping is speed. This site is
+hosted and created on a Rasperry Pi 2. Which means
+when the indexes are created after a new post it
+takes a longer while to create as more posts are
+added.
+
+Head on over to [github][2] to check out the code,
+but I'll post progress reports here from time to
+time.
+
+Tags: bash-v-powershell, bash, powershell, shells, scripting
+
+[1]:https://github.com/cfenollosa/bashblog
+[2]:https://github.com/zigford/PwshBlog
diff --git a/ip-addresses-on-your-subnet-with-xargs.html b/ip-addresses-on-your-subnet-with-xargs.html
new file mode 100644
index 0000000..6a8cac3
--- /dev/null
+++ b/ip-addresses-on-your-subnet-with-xargs.html
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+Ip addresses on your subnet with xargs
+
+
xargs strikes again. This time I'm going to use it's parallel
+feature to ping 255 machines very quickly. xargs has a parem -Px where x is
+the number of parallel processes to spawn of the subsequent process.
+
+
Update - 11/04/2019 Added MacOS Xargs syntax
+
Together with the bash {1..255} expression that expands to output 1 to 255, we
+can do something like this
In this example, -P254 tells xargs to spawn 254 procceses, -d' ' says to
+split commands with a space instead of the normal newline, and -L1 says to
+finish building the command after 1 amount of input.
+
To achieve the same result in powershell is not quite as simple. Out of the box
+you could use a ForeEach-Object loop like so:
Before you run this, build out an array of ips, like so:
+
PS> $ips=[1..254] | %{"192.168.11.$_"}
+
+
This use of powershell seems a bit too obtuse for me, and not something likely
+to stick in my head.
+
I did find other ways to do it in powershell. A collegue of mine Darryl,
+dardie on github added this
+commit to a module I maintain which has pretty good results. Again however not
+something you could commit to memory as you need to write a function to use it.
+
Final thoughts
+
In this case it looks to me like bash wins, if not in performance, but by being
+simpler to implement and commit to memory, or recreate from memory. But if I
+ever need to do this in powershell again, I can just come back to my site for
+reference.
+
If you have any comments or feedback, please email me
+and let me know if you will allow your feedback to be posted here.
+
MacOS
+
For completeness and because I tried to run this and failed on MacOS today I'm
+adding it's syntax:
+
Xargs on MacOS is a BSD variant, seemlingly pulled from FreeBSD going by the
+man page. It still supports the -Px, however -d is not required as it
+splits on newline and spaces by default. The other difference is that instead
+of -L1 we use -n1 with essentially the same effect.
+
Also of note is the differences with ping. Rather than -w1 to reduce time
+waiting for a ping reply, -t1 is used.
It's been a while since posts, but I promise, I'm not done yet and there will be
+many more to come.
+
+
First up we have Brianna performing with a dance studio (I'm guessing on the
+sunshine coast). I think this is around the time that Brian and Del were living
+between warana and bongeen.
+
+
+
+
You can download the file by right clicking here and
+click 'save-as'
+
Secondly Del sits and chats with a baby Caitlin.
+
+
+
+
You can download the file by right clicking here and
+click 'save-as'
+
Lastly, Del and Stacey go for a drive to Mt Hotham in Victoria.
+Del wrote:
+
+
this was at mt Hotham Victoria. Where we went sking and had stacey 30
+birthday at the beginning of the tape. Then travelled over mt Hotham to a
+little place called Bright.
+
+
+
+
+
You can download the file by right clicking here and
+click 'save-as'
+
diff --git a/kronks/2004---brianna-caitlin-del-stacey.md b/kronks/2004---brianna-caitlin-del-stacey.md
new file mode 100644
index 0000000..e9312e0
--- /dev/null
+++ b/kronks/2004---brianna-caitlin-del-stacey.md
@@ -0,0 +1,59 @@
+2004 - Brianna, Caitlin, Del, Stacey
+
+It's been a while since posts, but I promise, I'm not done yet and there will be
+many more to come.
+
+---
+
+First up we have Brianna performing with a dance studio (I'm guessing on the
+sunshine coast). I think this is around the time that Brian and Del were living
+between warana and bongeen.
+
+
+
+
+
+You can download the file by right clicking [here][1] and
+click 'save-as'
+
+Secondly Del sits and chats with a baby Caitlin.
+
+
+
+
+
+You can download the file by right clicking [here][2] and
+click 'save-as'
+
+
+Lastly, Del and Stacey go for a drive to Mt Hotham in Victoria.
+Del wrote:
+
+> this was at mt Hotham Victoria. Where we went sking and had stacey 30
+> birthday at the beginning of the tape. Then travelled over mt Hotham to a
+> little place called Bright.
+
+
+
+
+
+You can download the file by right clicking [here][3] and
+click 'save-as'
+
+Tags: Performance, Brianna, Catilin, Del, Stacey
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/Kronks/2004/03/BreeDancing-Web.mp4
+[2]: https://f002.backblazeb2.com/file/BlogVideos/Kronks/2004/03/BabyCaitlin-Web.mp4
+[3]: https://f002.backblazeb2.com/file/BlogVideos/Kronks/2004/03/MtHotham-Web.mp4
diff --git a/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.html b/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.html
new file mode 100644
index 0000000..0bdc763
--- /dev/null
+++ b/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.html
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+A Birthday, an Engagement and some Bree Shenanigans
+
+
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
+
+
Some fun party games are had, turning around the broom and lift people up high
+in the air.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
Next recording was a nice surprise being some footage of Clarissa and I's
+engagement party.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
Next up is Bree and her friend goofing off. Hilarious how they try to record a
+spark with the camera at then end.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
A new scene of Bree and (maybe another friend?) And close ups of what looks like
+an infected belly button piercing. It's anything goes with these home videos so
+it has to go up here for all to see.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
The final video is another Bree classic. Thanks Bree for these laughs and I
+apologize and hope you forgive me for putting these online. We all do some funny
+things as kids, but not all of us are lucky (or unlucky) enough to have recorded
+them on video.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
diff --git a/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.md b/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.md
new file mode 100644
index 0000000..36c6762
--- /dev/null
+++ b/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.md
@@ -0,0 +1,93 @@
+A Birthday, an Engagement and some Bree Shenanigans
+
+Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
+
+---
+
+Some fun party games are had, turning around the broom and lift people up high
+in the air.
+
+
+
+
+
+You can download the file by right clicking [here][1] and click "save-as"
+
+Next recording was a nice surprise being some footage of Clarissa and I's
+engagement party.
+
+
+
+
+
+
+You can download the file by right clicking [here][2] and click "save-as"
+
+Next up is Bree and her friend goofing off. Hilarious how they try to record a
+spark with the camera at then end.
+
+
+
+
+
+
+You can download the file by right clicking [here][3] and click "save-as"
+
+A new scene of Bree and (maybe another friend?) And close ups of what looks like
+an infected belly button piercing. It's anything goes with these home videos so
+it has to go up here for all to see.
+
+
+
+
+
+
+You can download the file by right clicking [here][4] and click "save-as"
+
+
+The final video is another Bree classic. Thanks Bree for these laughs and I
+apologize and hope you forgive me for putting these online. We all do some funny
+things as kids, but not all of us are lucky (or unlucky) enough to have recorded
+them on video.
+
+
+
+
+
+
+You can download the file by right clicking [here][5] and click "save-as"
+
+Tags: Courtney, Adon, Laurie, Josh, Brian, Delia, Brianna, Clarissa, Jesse, Carrie, Stuart
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/2005/06/CourtneyBday-Web.mp4
+[2]: https://f002.backblazeb2.com/file/BlogVideos/2005/06/Our+engagement-Web.mp4
+[3]: https://f002.backblazeb2.com/file/BlogVideos/2005/06/Bree+and+her+friend-Web.mp4
+[4]: https://f002.backblazeb2.com/file/BlogVideos/2005/06/Belly+Friend-Web.mp4
+[5]: https://f002.backblazeb2.com/file/BlogVideos/2005/06/Sword+swallower-Web.mp4
diff --git a/kronks/a-message-to-mum-and-laurie.html b/kronks/a-message-to-mum-and-laurie.html
new file mode 100644
index 0000000..f110719
--- /dev/null
+++ b/kronks/a-message-to-mum-and-laurie.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+A message to Mum and Laurie
+
+
+
diff --git a/kronks/a-message-to-mum-and-laurie.md b/kronks/a-message-to-mum-and-laurie.md
new file mode 100644
index 0000000..06f9237
--- /dev/null
+++ b/kronks/a-message-to-mum-and-laurie.md
@@ -0,0 +1,22 @@
+A message to Mum and Laurie
+
+This video was sent to Del and Laurie when they were away for around a month
+or so in hospital.
+
+---
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+If you have and corrections or memories I can add to this post, please email
+me at jesse@zigford.org
+
+Tags: Mum, Delia, Brianna, Courtney, Tamara, Clarissa, Stacey, Brian
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/SillyVideo.mp4
diff --git a/kronks/adons-surprise-return-home.html b/kronks/adons-surprise-return-home.html
new file mode 100644
index 0000000..7244bdd
--- /dev/null
+++ b/kronks/adons-surprise-return-home.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+Adon's Surprise Return Home
+
+
+
diff --git a/kronks/adons-surprise-return-home.md b/kronks/adons-surprise-return-home.md
new file mode 100644
index 0000000..248625f
--- /dev/null
+++ b/kronks/adons-surprise-return-home.md
@@ -0,0 +1,20 @@
+Adon's Surprise Return Home
+
+After a long stint overseas, Adon set's up a nice surprise for Brian and Del.
+
+---
+
+The main suprise setup begins just after the 16 minute mark.
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Tags: Adon, Brian, Del, Brianna
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/adonreturnshome.mp4
diff --git a/kronks/all_posts.html b/kronks/all_posts.html
new file mode 100644
index 0000000..9cb75d7
--- /dev/null
+++ b/kronks/all_posts.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+ — All posts
+
+
+
diff --git a/kronks/baby-baby.md b/kronks/baby-baby.md
new file mode 100644
index 0000000..c8f51fe
--- /dev/null
+++ b/kronks/baby-baby.md
@@ -0,0 +1,27 @@
+Baby Baby
+
+A movie world video clip featuring Carrie and Laure
+
+---
+
+Remember the visit to [Movie
+World](movie-world-and-josh-sippels-third-birthday.html)?
+
+At the end of that video was a recording of Carrie and Lauries video clip
+captured off of a TV. Here is the official one from a movie world tape:
+
+
+
I attempted to post this video to youtube but their child protection policy
+blocked it. Therefore I have created this quick site to share the video and
+others.
+
+
I had a preview myself and it looks like Bree's birthdays from 1 to 6/7
+intermixed with a few appearences of Granny Muggleton, Nanna and of course
+all the kids.
+
Below the video is rough timestamps of events in the video
+
+
+
+
+
Depending on your web browser, you may be able to download the video by
+right click and click save. Otherwise, try this link
+
diff --git a/kronks/brees-birthdays.md b/kronks/brees-birthdays.md
new file mode 100644
index 0000000..0314f63
--- /dev/null
+++ b/kronks/brees-birthdays.md
@@ -0,0 +1,66 @@
+Bree's birthdays
+
+I attempted to post this video to youtube but their child protection policy
+blocked it. Therefore I have created this quick site to share the video and
+others.
+
+---
+
+I had a preview myself and it looks like Bree's birthdays from 1 to 6/7
+intermixed with a few appearences of Granny Muggleton, Nanna and of course
+all the kids.
+
+Below the video is rough timestamps of events in the video
+
+
+
+
+
+Depending on your web browser, you may be able to download the video by
+right click and click save. Otherwise, try [this link][1]
+
+* Granny Muggleton and Nanna 1: 9:23
+* Terror of the Toilet Roll: 12:20
+* Bree Walks: 14:09
+* Babies playing: 15:38
+* Carrie and Bree bike ride: 20:00
+* Bree ate something: 21:33
+* Bree keeps walking: 22:35
+* Laurie's hand: 25:01
+* Bath time: 25:18
+* Christmas Time!: 25:50
+* Bree is 1: 29:50
+* Pool time: 31:32
+* Candles: 33:28
+* Sandpit flood: 39:18
+* Bree brushes Tamara's hair 41:08
+* 1995 New years day: 45:05
+* Bus Microphone: 51:17
+* How smart is she?: 53:08
+* Butter mess: 54:07
+* Asleep at the bowl: 58:26
+* Bree and Kitty: 59:07
+* Flips: 1:04:23
+* Arobics: 1:05:42
+* October 1995: 1:08:04
+* Bree is 2: 1:08:50
+* 3 at Maccas: 1:20:40
+* Bree is 4: 1:27:29
+* First bike: 1:32:51
+* Pool Time: 1:35:38
+* Chistmas at the beach: 1:39:27
+* Very sleepy: 1:42:26
+* Water slide: 1:43:26
+* Granny Muggleton 2: 1:52:12
+* Riding around the court: 2:00:46
+* Bongeen School 1998: 2:04:48
+* Bree Birthday 2000: 2:20:42
+* Bree's haul: 2:49:30
+* School presentaion: 2:55:31
+
+Tags: brianna, granny-muggleton, nanna
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/BreeBirthdays.mp4
diff --git a/kronks/carrie-and-stuarts-wedding.html b/kronks/carrie-and-stuarts-wedding.html
new file mode 100644
index 0000000..209df4a
--- /dev/null
+++ b/kronks/carrie-and-stuarts-wedding.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+Carrie and Stuarts Wedding
+
+
23 February 2002 is the time stamp that appears when importing footage from this
+mini DV tape.
+
+
+
Which makes this recording (and Carrie and Stuart's marriage) over 17 years old.
+Congratulations Carrie and Stuart.
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
Del's Birthday! Time stamp here is 5 July 2003. How old were you then Del?
+It's in the Music room at Bongeen and we get to see everyone participate in a
+knowledge quiz about Del, unwrap some presents and dance a little (in the dark).
+Also a little of Tim and Dan showing off.
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
Finally, from 2 March 2002 is the last clip on the tape and it starts off at
+Phillip Island on the beach with Brianna, Courtney, Adon, Brian, and Tamara and
+finishes on what I presume is the flight home (Maybe visiting Stacey in
+Victoria)
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/carrie-and-stuarts-wedding.md b/kronks/carrie-and-stuarts-wedding.md
new file mode 100644
index 0000000..63c480c
--- /dev/null
+++ b/kronks/carrie-and-stuarts-wedding.md
@@ -0,0 +1,57 @@
+Carrie and Stuarts Wedding
+
+23 February 2002 is the time stamp that appears when importing footage from this
+mini DV tape.
+
+---
+
+
+
+Which makes this recording (and Carrie and Stuart's marriage) over 17 years old.
+Congratulations **Carrie and Stuart**.
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Del's Birthday! Time stamp here is 5 July 2003. How old were you then Del?
+It's in the Music room at Bongeen and we get to see everyone participate in a
+knowledge quiz about Del, unwrap some presents and dance a little (in the dark).
+Also a little of Tim and Dan showing off.
+
+
+
+
+
+You can download the file by right clicking [here][2] and click 'save-as'
+
+Finally, from 2 March 2002 is the last clip on the tape and it starts off at
+Phillip Island on the beach with Brianna, Courtney, Adon, Brian, and Tamara and
+finishes on what I presume is the flight home (Maybe visiting Stacey in
+Victoria)
+
+
+
+
+
+You can download the file by right clicking [here][3] and click 'save-as'
+
+Tags: Carrie, Stuart, Brian, Del, Jean, Dave, Courtney, Geoff, Laurie, Lorraine, Tanya, Josh, Darcy, Jacob, Brianna, Clarissa, Tim, Dan, Adon
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/2003-02-23_StuAndCarrie/CarrieStuWedding-Web.mp4
+[2]:https://f002.backblazeb2.com/file/BlogVideos/2003-02-23_StuAndCarrie/DelBirthdayAtBongeen-Web.mp4
+[3]:https://f002.backblazeb2.com/file/BlogVideos/2003-02-23_StuAndCarrie/PhillipIsland-Web.mp4
diff --git a/kronks/christmas-2009.html b/kronks/christmas-2009.html
new file mode 100644
index 0000000..d6f8dce
--- /dev/null
+++ b/kronks/christmas-2009.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+Christmas 2009
+
+
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
+
+
Christmas morning, unwrapping presents
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
Time for the classic Christmas dip. Nice to see Stacey knows how to ride a
+dolphin.
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
And finally, (I remember watching this, but it seems I may have been the camera
+person) Caitlin learns to ride a bike
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/christmas-2009.md b/kronks/christmas-2009.md
new file mode 100644
index 0000000..a390f99
--- /dev/null
+++ b/kronks/christmas-2009.md
@@ -0,0 +1,52 @@
+Christmas 2009
+
+One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
+
+---
+
+Christmas morning, unwrapping presents
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Time for the classic Christmas dip. Nice to see Stacey knows how to ride a
+dolphin.
+
+
+
+
+
+You can download the file by right clicking [here][2] and click 'save-as'
+
+And finally, (I remember watching this, but it seems I may have been the camera
+person) Caitlin learns to ride a bike
+
+
+
+
+
+You can download the file by right clicking [here][3] and click 'save-as'
+
+
+Tags: Caitlin, Laurie, Tom, Del, Elijah, Josh, Mel, Adon, Brianna, Brian, Chris, Stacey, Jesse, Clarissa
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/2009/12/ChristmasInQld-Web.mp4
+[2]:https://f002.backblazeb2.com/file/BlogVideos/2009/12/SwimTime-Web.mp4
+[3]:https://f002.backblazeb2.com/file/BlogVideos/2009/12/CaitlinRidesABike-Web.mp4
diff --git a/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.html b/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.html
new file mode 100644
index 0000000..6e4ff5d
--- /dev/null
+++ b/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+Clarissa, Nicole and Renae hanging out in the Bus
+
+
+
diff --git a/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.md b/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.md
new file mode 100644
index 0000000..bf41df2
--- /dev/null
+++ b/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.md
@@ -0,0 +1,26 @@
+Clarissa, Nicole and Renae hanging out in the Bus
+
+This tape is a short one from 1999 of a grade 11 Clarissa and her friends
+having a sleepover in the bus.
+
+---
+
+The camera must have been acting up initially during recording as there is no
+audio until about the 3:30 timeframe.
+
+However the girls talk about their love life under pseudo names (Clarissa
+chooses the name Jesse Tap)
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Tags: Clarissa
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/1999/12/06/Clarissa-Nicole-Renae.mp4
diff --git a/kronks/courtneys-debutante.html b/kronks/courtneys-debutante.html
new file mode 100644
index 0000000..d8b78c0
--- /dev/null
+++ b/kronks/courtneys-debutante.html
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+Courtney's Debutante
+
+
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
+
+
Josh
+
Brian & Del
+
Laurie
+
Courtney
+
Adon
+
Clarissa & Jesse
+
Brianna
+
Tamara
+
+
+
The timestamp displayed when importing this video is 7th of October 2004.
+
+
+
+
+
To download this video by right click here and choose save-as
+Some timestamps to skip to as there is quite a bit of bagpipes
+
+
+
+
Time stamp
+
Description
+
+
+
+
+
00:01:52
+
Brian and Del dancing
+
+
+
00:06:53
+
Clarissa and Jesse chatting
+
+
+
00:16:22
+
Courtney and partner arrive
+
+
+
00:30:44
+
Courtney dancing
+
+
+
00:35:18
+
Hi Tamara
+
+
+
00:35:26
+
Brian and Del dancing again
+
+
+
00:38:20
+
Bree's face
+
+
+
00:38:34
+
Jesse and Clarissa Dancing
+
+
+
00:40:23
+
Courtney and partner dancing
+
+
+
00:42:24
+
Poking tongues
+
+
+
00:43:33
+
Show us your curls Adon
+
+
+
00:46:16
+
Photos!
+
+
+
00:47:03
+
Crazy Scottish dancing
+
+
+
00:54:21
+
Laurie waves hi
+
+
+
00:56:26
+
Everyone dancing
+
+
+
+
Enjoy
+
A bit about capturing this recording:
+
I received the DV camcorder head cleaning tape a few day. Prior to using it
+tapes would play back sporadically in our camcorder and when they did work
+there was a lot of video corruption. Thankfully, after playing back the head
+cleaning tape for 10 seconds, the tapes now playback flawlessly.
+
diff --git a/kronks/courtneys-debutante.md b/kronks/courtneys-debutante.md
new file mode 100644
index 0000000..e0c7edd
--- /dev/null
+++ b/kronks/courtneys-debutante.md
@@ -0,0 +1,59 @@
+Courtney's Debutante
+
+Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
+
+* Josh
+* Brian & Del
+* Laurie
+* Courtney
+* Adon
+* Clarissa & Jesse
+* Brianna
+* Tamara
+
+---
+
+The timestamp displayed when importing this video is 7th of October 2004.
+
+
+
+
+
+To download this video by right click [here][1] and choose `save-as`
+Some timestamps to skip to as there is quite a bit of bagpipes
+
+|Time stamp | Description |
+| ---------- | ----------------------------- |
+|00:01:52| Brian and Del dancing|
+|00:06:53| Clarissa and Jesse chatting|
+|00:16:22| Courtney and partner arrive|
+|00:30:44| Courtney dancing|
+|00:35:18| Hi Tamara|
+|00:35:26| Brian and Del dancing again|
+|00:38:20| Bree's face|
+|00:38:34| Jesse and Clarissa Dancing|
+|00:40:23| Courtney and partner dancing|
+|00:42:24| Poking tongues|
+|00:43:33| Show us your curls Adon|
+|00:46:16| Photos! |
+|00:47:03| Crazy Scottish dancing|
+|00:54:21| Laurie waves hi|
+|00:56:26| Everyone dancing|
+
+Enjoy
+
+A bit about capturing this recording:
+
+I received the DV camcorder head cleaning tape a few day. Prior to using it
+tapes would play back sporadically in our camcorder and when they did work
+there was a lot of video corruption. Thankfully, after playing back the head
+cleaning tape for 10 seconds, the tapes now playback flawlessly.
+
+Tags: Debutante, Courtney, Laurie, Brian, Del, Brianna, Tamara, Adon, Josh, Clarissa, Jesse, Love-Is-In-The-Air
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/2ndDate-2004.mp4
diff --git a/kronks/dave-kronks-70th-birthday.html b/kronks/dave-kronks-70th-birthday.html
new file mode 100644
index 0000000..df44715
--- /dev/null
+++ b/kronks/dave-kronks-70th-birthday.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+Dave Kronks 70th Birthday
+
+
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
+
+
A short video with some music. Heading to a restaurant for an evening meal.
+
Update
+
Carrie writes in to say the resturant is Weises Resturant which is now closed.
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
So far this seems to be the oldest video recording on VHS. Tamara is just a small tot and
+Stacey is swinging kids around. Due to the age of the tape and the quality of the VHS player
+I'm using, the video loses vertical sync quite a bit. I'm hopeful in the future that I can
+get a better player and capture a better quality version. Even still, it's worth a watch
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/dave-kronks-70th-birthday.md b/kronks/dave-kronks-70th-birthday.md
new file mode 100644
index 0000000..12d7004
--- /dev/null
+++ b/kronks/dave-kronks-70th-birthday.md
@@ -0,0 +1,40 @@
+Dave Kronks 70th Birthday
+
+1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
+
+---
+
+A short video with some music. Heading to a restaurant for an evening meal.
+
+#### Update
+Carrie writes in to say the resturant is Weises Resturant which is now closed.
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+So far this seems to be the oldest video recording on VHS. Tamara is just a small tot and
+Stacey is swinging kids around. Due to the age of the tape and the quality of the VHS player
+I'm using, the video loses vertical sync quite a bit. I'm hopeful in the future that I can
+get a better player and capture a better quality version. Even still, it's worth a watch
+
+
+
+
+
+You can download the file by right clicking [here][2] and click 'save-as'
+
+
+Tags: Dave, Jean, Brian, Del, Stacey, Laurie, Carrie, Josh, Clarissa, Tamara
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/03-DaveKronk70th-Web.mp4
+[2]:https://f002.backblazeb2.com/file/BlogVideos/DavesBirthday-Web.mp4
diff --git a/kronks/drafts/archive.md b/kronks/drafts/archive.md
new file mode 100644
index 0000000..51b5e77
--- /dev/null
+++ b/kronks/drafts/archive.md
@@ -0,0 +1,21 @@
+Archive
+
+This page will serve as a simple place to reference videos not worthy or a
+feature page either due to being posted elsewhere, not newsworthy content, or
+content that is potentially sensitive.
+
+I come accross a number of videos like, weddings and engagements that probably
+don't want to be remembered. I don't want to raise memories that want to be
+forgotten, but I have a hard time throwing them out too. I want them to be
+available even if they are never watched. Perhaps you want to see what you
+looked like at a certain age/date. These types of recordings may be the only
+historical recrods, so they are preserved here.
+
+Also, videos here will have less editing and not be embedded in the page. They
+may also be encoded in a more modern encoding format for future proofing. Thus
+they may not play on older devices.
+
+
+
+
+Tags: Archives
diff --git a/kronks/dv-mix-tape---tamara-edition.html b/kronks/dv-mix-tape---tamara-edition.html
new file mode 100644
index 0000000..35d4f14
--- /dev/null
+++ b/kronks/dv-mix-tape---tamara-edition.html
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+DV Mix tape - Tamara Edition
+
+
This is a DV tape with recordings from probably around 2003-2004?
+
+
Starting of is Bree performing a couple of dances in a dance group
+
+
+
+
You can download the file by right clicking here and
+click 'save-as'
+
+
Next up is some interviews at chalk drive at night time. Guessing this is a
+school project of Tamara's
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Tamara's Birthday at a Sizzler? I count about 16 candles on the cake and I would
+like to point out that happy birthday was sung prior to the candles being blown
+out.
+
In attendence is Adon (stuffing himself), Josh,
+Daniel Von-Pein, Courtney, Del, Jean, Brian, Dave, Clarissa, Laurie, Brianna
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Here is a couple of scenes of some streets. I'm not sure where this is. Could be
+around welcamp?
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Forgot to add this one last night, this is some more test shots by Tamara of
+Adon and Courtney doing some tennis.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
diff --git a/kronks/dv-mix-tape---tamara-edition.md b/kronks/dv-mix-tape---tamara-edition.md
new file mode 100644
index 0000000..3dcdd1c
--- /dev/null
+++ b/kronks/dv-mix-tape---tamara-edition.md
@@ -0,0 +1,97 @@
+DV Mix tape - Tamara Edition
+
+This is a DV tape with recordings from probably around 2003-2004?
+
+---
+
+Starting of is Bree performing a couple of dances in a dance group
+
+
+
+
+
+You can download the file by right clicking [here][1] and
+click 'save-as'
+
+---
+
+Next up is some interviews at chalk drive at night time. Guessing this is a
+school project of Tamara's
+
+
+
+
+
+You can download the file by right clicking [here][2] and click "save-as"
+
+---
+
+Tamara's Birthday at a Sizzler? I count about 16 candles on the cake and I would
+like to point out that happy birthday was sung prior to the candles being blown
+out.
+
+In attendence is Adon (stuffing himself), Josh,
+Daniel Von-Pein, Courtney, Del, Jean, Brian, Dave, Clarissa, Laurie, Brianna
+
+
+
+
+
+
+You can download the file by right clicking [here][4] and click "save-as"
+
+---
+
+Here is a couple of scenes of some streets. I'm not sure where this is. Could be
+around welcamp?
+
+
+
+
+
+You can download the file by right clicking [here][3] and click "save-as"
+
+---
+
+Forgot to add this one last night, this is some more test shots by Tamara of
+Adon and Courtney doing some tennis.
+
+
+
+
+
+
+You can download the file by right clicking [here][5] and click "save-as"
+
+
+Tags: Brianna, Tamara, Brian, Delia, Clarissa, Daniel-Von-Pein, Jean, Dave, Adon, Courtney, Josh, Laurie
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/BreeDancePerformance-Web.mp4
+[2]: https://f002.backblazeb2.com/file/BlogVideos/ChalkDriveInterviews-Web.mp4
+[3]: https://f002.backblazeb2.com/file/BlogVideos/TamaraTestFootage-Web.mp4
+[4]: https://f002.backblazeb2.com/file/BlogVideos/TamarasBirthday-Web.mp4
+[5]: https://f002.backblazeb2.com/file/BlogVideos/TamaraTestShotsTennis-Web.mp4
diff --git a/kronks/dv-mix-tape-1.html b/kronks/dv-mix-tape-1.html
new file mode 100644
index 0000000..5019f76
--- /dev/null
+++ b/kronks/dv-mix-tape-1.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+DV Mix Tape 1
+
+
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
+
+
+
Adon goofs off in front of the camera in a David Attenborough style
+commentary about the humans he is observing (Bree, Courtney, and Josh).
+All the while Brian is carefully raising a new Tennis Court light.
+
You can catch a breif glimpse of Caitlin and Stacey at the start
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
Clarissa's 21st! Again another one we didn't realise was recorded. Almost
+everyone makes an appearance here, including my folks.
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
Baby Caitlin and then she goes to the beach with Del, Brianna and Stacey.
+Any guesses on the age?
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
I'm guessing this is a part of farming Brian misses the most. The Toys
+Looks like Brian got an upgrade.
+Question about this video. How did Adon break his arm?
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
Last clip for this tape. Adon (with broken arm) and Courtney having a hit.
+Followed by a young Hailey and Tilly?
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/dv-mix-tape-1.md b/kronks/dv-mix-tape-1.md
new file mode 100644
index 0000000..2452a3c
--- /dev/null
+++ b/kronks/dv-mix-tape-1.md
@@ -0,0 +1,82 @@
+DV Mix Tape 1
+
+Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
+
+---
+
+
+
+Adon goofs off in front of the camera in a [David Attenborough][2] style
+commentary about the *humans* he is observing (Bree, Courtney, and Josh).
+All the while Brian is carefully raising a new Tennis Court light.
+
+*You can catch a breif glimpse of Caitlin and Stacey at the start*
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Clarissa's 21st! Again another one we didn't realise was recorded. Almost
+everyone makes an appearance here, including my folks.
+
+
+
+
+
+You can download the file by right clicking [here][3] and click 'save-as'
+
+Baby Caitlin and then she goes to the beach with Del, Brianna and Stacey.
+Any guesses on the age?
+
+
+
+
+
+You can download the file by right clicking [here][4] and click 'save-as'
+
+I'm guessing this is a part of farming Brian misses the most. **The Toys**
+Looks like Brian got an upgrade.
+Question about this video. How did Adon break his arm?
+
+
+
+
+
+You can download the file by right clicking [here][5] and click 'save-as'
+
+Last clip for this tape. Adon (with broken arm) and Courtney having a hit.
+Followed by a young Hailey and Tilly?
+
+
+
+
+
+You can download the file by right clicking [here][6] and click 'save-as'
+
+Tags: Brian, Adon, Brianna, Courtney, Josh, Stacey, Caitlin, Clarissa, Del, Lorraine, Geoff, Tanya, Ian, Ronnie, Jesse, Josh-Sippel, Tim, Dan, Hailey
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/01-TennisLights-Web.mp4
+[2]:https://en.wikipedia.org/wiki/David_Attenborough
+[3]:https://f002.backblazeb2.com/file/BlogVideos/02-Clarissa21stBDay-Web.mp4
+[4]:https://f002.backblazeb2.com/file/BlogVideos/03-CaitlinBeach-Web.mp4
+[5]:https://f002.backblazeb2.com/file/BlogVideos/04-BriansToys-Web.mp4
+[6]:https://f002.backblazeb2.com/file/BlogVideos/05-FarmAnimals-Web.mp4
diff --git a/kronks/feed.rss b/kronks/feed.rss
new file mode 100644
index 0000000..d0b127b
--- /dev/null
+++ b/kronks/feed.rss
@@ -0,0 +1,109 @@
+
+
+Kronks Videoshttp://zigford.org/kronks/index.html
+Begin Sharing old VHS recordings and media for the familyen
+Tue, 14 Jan 2020 10:53:25 +1000
+Tue, 14 Jan 2020 10:53:25 +1000
+
+
+Baby Baby
+A movie world video clip featuring Carrie and Laure
+
+]]>http://zigford.org/kronks/baby-baby.html
+http://zigford.org/kronks/baby-baby.html
+Jesse Harris
+Tue, 14 Jan 2020 10:51:04 +1000
+
+A Birthday, an Engagement and some Bree Shenanigans
+Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
+
+]]>http://zigford.org/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.html
+http://zigford.org/kronks/a-birthday-an-engagement-and-some-bree-shenanigans.html
+Jesse Harris
+Sun, 15 Dec 2019 21:49:56 +1000
+
+Moving to Westend, Courtneys Birthday and a Snow Trip
+In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
+
+]]>http://zigford.org/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.html
+http://zigford.org/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.html
+Jesse Harris
+Sat, 05 Oct 2019 12:32:25 +1000
+
+DV Mix tape - Tamara Edition
+This is a DV tape with recordings from probably around 2003-2004?
+
+]]>http://zigford.org/kronks/dv-mix-tape---tamara-edition.html
+http://zigford.org/kronks/dv-mix-tape---tamara-edition.html
+Jesse Harris
+Thu, 03 Oct 2019 14:42:16 +1000
+
+2004 - Brianna, Caitlin, Del, Stacey
+It's been a while since posts, but I promise, I'm not done yet and there will be
+many more to come.
+
+]]>http://zigford.org/kronks/2004---brianna-caitlin-del-stacey.html
+http://zigford.org/kronks/2004---brianna-caitlin-del-stacey.html
+Jesse Harris
+Sat, 24 Aug 2019 16:27:17 +1000
+
+Introducing Bree Sebastian
+A few weeks ago I stumbled on some solid gold material. We know there are a few
+video performances from Bree in the vault, but these I hadn't seen.
+
+]]>http://zigford.org/kronks/introducing-bree-sebastian.html
+http://zigford.org/kronks/introducing-bree-sebastian.html
+Jesse Harris
+Sun, 09 Jun 2019 16:42:57 +1000
+
+Christmas 2009
+One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
+
+]]>http://zigford.org/kronks/christmas-2009.html
+http://zigford.org/kronks/christmas-2009.html
+Jesse Harris
+Sat, 01 Jun 2019 16:54:20 +1000
+
+Clarissa, Nicole and Renae hanging out in the Bus
+This tape is a short one from 1999 of a grade 11 Clarissa and her friends
+having a sleepover in the bus.
+
+]]>http://zigford.org/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.html
+http://zigford.org/kronks/clarissa-nicole-and-renae-hanging-out-in-the-bus.html
+Jesse Harris
+Sat, 01 Jun 2019 16:52:32 +1000
+
+Carrie and Stuarts Wedding
+23 February 2002 is the time stamp that appears when importing footage from this
+mini DV tape.
+
+]]>http://zigford.org/kronks/carrie-and-stuarts-wedding.html
+http://zigford.org/kronks/carrie-and-stuarts-wedding.html
+Jesse Harris
+Mon, 27 May 2019 00:27:46 +1000
+
+Movie World and Josh Sippels third birthday
+Cast yourself back to December 1991. You are attending Movie World and having a
+great time.
+
+]]>http://zigford.org/kronks/movie-world-and-josh-sippels-third-birthday.html
+http://zigford.org/kronks/movie-world-and-josh-sippels-third-birthday.html
+Jesse Harris
+Sat, 25 May 2019 08:36:19 +1000
+
diff --git a/kronks/index.html b/kronks/index.html
new file mode 100644
index 0000000..2c44fe8
--- /dev/null
+++ b/kronks/index.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+Kronks Videos
+
+
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
A few weeks ago I stumbled on some solid gold material. We know there are a few
+video performances from Bree in the vault, but these I hadn't seen.
+
+
Unfortunately, the audio quality wasn't super great coming from an old VHS,
+which didn't appear to be the original source. It was likely filmed on a VHS or
+DV camera, imported to a PC and then rerecorded onto a VHS.
+
So I wanted to go about muxing
+(yes, that's a word) the good audio from youtube over this video.
+
That proved difficult as there is a few milliseconds of audio drift throughout
+the video, which I was able to work around by slowing the audio down just a tag.
+Suffice to say I'm happy enough with the result.
+
This fist one is from a performance on Australian Idol. There were two
+performances of it during the season (I know, because I tried to mux the wrong
+one initially).
+
When I get you alone - Bree Sebastian
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+Coming up next is a beautiful performance of by Bree. Such an angelic voice!
+
Angels brought me here
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/introducing-bree-sebastian.md b/kronks/introducing-bree-sebastian.md
new file mode 100644
index 0000000..75eb77c
--- /dev/null
+++ b/kronks/introducing-bree-sebastian.md
@@ -0,0 +1,50 @@
+Introducing Bree Sebastian
+
+A few weeks ago I stumbled on some solid gold material. We know there are a few
+video performances from Bree in the vault, but these I hadn't seen.
+
+---
+
+Unfortunately, the audio quality wasn't super great coming from an old VHS,
+which didn't appear to be the original source. It was likely filmed on a VHS or
+DV camera, imported to a PC and then rerecorded onto a VHS.
+
+So I wanted to go about [muxing](https://en.wikipedia.org/wiki/Multiplexing)
+(yes, that's a word) the good audio from youtube over this video.
+
+That proved difficult as there is a few milliseconds of audio drift throughout
+the video, which I was able to work around by slowing the audio down just a tag.
+Suffice to say I'm happy enough with the result.
+
+This fist one is from a performance on Australian Idol. There were two
+performances of it during the season (I know, because I tried to mux the wrong
+one initially).
+
+### When I get you alone - Bree Sebastian
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+Coming up next is a beautiful performance of by Bree. Such an angelic voice!
+
+### Angels brought me here
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Tags: Brianna, Performance
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/BreeArtist/BreeSebastian_When-I-get-you-alone.mp4
+[2]: https://f002.backblazeb2.com/file/BlogVideos/BreeArtist/BreeSebastian_Angels-brought-me-here.mp4
diff --git a/kronks/kronk-files-circa-19909231.html b/kronks/kronk-files-circa-19909231.html
new file mode 100644
index 0000000..4e360f7
--- /dev/null
+++ b/kronks/kronk-files-circa-19909231.html
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+Kronk Files Circa 1990
+
+
Adon Sleeping
+Courtney (1990) Model
+Moving Tree
+Josh & Clarissa
+Music Camp
+
+
First up is Carrie filming the Firth girls, Clarissa, Tamara, Laurie, Courtney,
+Josh, and a cute little Adon being held by Del. Theo makes an appearance too.
+Stay until the end to see 4 year old Tamara tell us her favourite things, colour
+and what she will be when she grows up.
+
+
+
+
+
Rosvale sports day! I think Stacey might be filming. Josh puts in an amazing
+effort and comes 2nd in the 800 meter? And Clarissa gets 3rd in the 100 meter.
+Tamara seems to be in Bongeen clothes, so this may be 1991.
+
+
+
+
+
Next we have Clarissa's Baptism, Trevor Firth was the pastor.
+
+
+
+
+
Some GoKart racing. I'm guessing this is at the Sunshine Coast Big Kart Track
+
+
+
+
+
Now we have the famous Sleepy/Shutup Adon video
+
+
+
+
+
Courtney modelling some 80's clothes
+
+
+
+
+
Brian and Stacey rip out a massive tree with good ole farming ingenuity. Vanessa,
+Adon and Courtney make an appearance, while Del films.
+
+
+
+
+
The building of the Music room.
+
+
+
+
+
Clarissa and Josh went to a camp at the Jondaryan Woolshed. This video shows them
+performing in the choir there
+
+
+
+
+
Clarissa tells me she couldn't read the sheet music at the time so faked her way
+through playing recorder in this segment.
+
+
+
+
+
Now we can see Clarissa bush dancing in some bush dances in the Jondaryan Woolshed
+
+
+
+
+
The final video at the Jondaryan Woolshed is some awards given out at the end of
+the camp.
+
+
+
+
+
Last recording on this tape is at Nana (PJ) house. You can see Gloria and Bobby
+along with someone Clarissa doesn't know and their twin babies.
+
+
+
+
+
That's it for this tape. Please email me your memories
+and interesting tidbits to include on the site.
+
PS, my DV Cleaning tape arrived so I might be able to start processing the DV
+camcorder tapes soon.
+
diff --git a/kronks/kronk-files-circa-19909231.md b/kronks/kronk-files-circa-19909231.md
new file mode 100644
index 0000000..f545681
--- /dev/null
+++ b/kronks/kronk-files-circa-19909231.md
@@ -0,0 +1,159 @@
+Kronk Files Circa 1990
+
+Welcome back to another episode of the Kronk files.
+This episode is filled with a range of activities from around 1990
+
+---
+
+
+
+If you can't zoom in enough to see the handwritten label, it reads:
+
+> Kids mucking around.
+> Sports Day ...
+> Clarissa's Baptism
+> Racing Cars
+> At ...
+
+And..
+
+> Adon Sleeping
+> Courtney (1990) Model
+> Moving Tree
+> Josh & Clarissa
+> Music Camp
+
+First up is Carrie filming the Firth girls, Clarissa, Tamara, Laurie, Courtney,
+Josh, and a cute little Adon being held by Del. Theo makes an appearance too.
+Stay until the end to see 4 year old Tamara tell us her favourite things, colour
+and what she will be when she grows up.
+
+
+
+
+
+Rosvale sports day! I think Stacey might be filming. Josh puts in an amazing
+effort and comes 2nd in the 800 meter? And Clarissa gets 3rd in the 100 meter.
+Tamara seems to be in Bongeen clothes, so this may be 1991.
+
+
+
+
+
+Next we have Clarissa's Baptism, Trevor Firth was the pastor.
+
+
+
+
+
+Some GoKart racing. I'm guessing this is at the Sunshine Coast Big Kart Track
+
+
+
+
+
+Now we have the famous Sleepy/Shutup Adon video
+
+
+
+
+
+Courtney modelling some 80's clothes
+
+
+
+
+
+Brian and Stacey rip out a massive tree with good ole farming ingenuity. Vanessa,
+Adon and Courtney make an appearance, while Del films.
+
+
+
+
+
+The building of the Music room.
+
+
+
+
+
+Clarissa and Josh went to a camp at the Jondaryan Woolshed. This video shows them
+performing in the choir there
+
+
+
+
+
+Clarissa tells me she couldn't read the sheet music at the time so faked her way
+through playing recorder in this segment.
+
+
+
+
+
+Now we can see Clarissa bush dancing in some bush dances in the Jondaryan Woolshed
+
+
+
+
+
+The final video at the Jondaryan Woolshed is some awards given out at the end of
+the camp.
+
+
+
+
+
+Last recording on this tape is at Nana (PJ) house. You can see Gloria and Bobby
+along with someone Clarissa doesn't know and their twin babies.
+
+
+
+
+
+That's it for this tape. Please [email me](mailto:jesse@zigford.org) your memories
+and interesting tidbits to include on the site.
+
+PS, my DV Cleaning tape arrived so I might be able to start processing the DV
+camcorder tapes soon.
+
+Tags: Firths, Clarissa, Josh, Laurie, Courtney, Tamara, Brian, Stacey, Adon, Del, Theo, Vanessa,
diff --git a/kronks/lauries-performance-in-pirates-of-penzance.html b/kronks/lauries-performance-in-pirates-of-penzance.html
new file mode 100644
index 0000000..597440f
--- /dev/null
+++ b/kronks/lauries-performance-in-pirates-of-penzance.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+Laurie's performance in Pirates of Penzance
+
+
+
diff --git a/kronks/lauries-performance-in-pirates-of-penzance.md b/kronks/lauries-performance-in-pirates-of-penzance.md
new file mode 100644
index 0000000..f118659
--- /dev/null
+++ b/kronks/lauries-performance-in-pirates-of-penzance.md
@@ -0,0 +1,26 @@
+Laurie's performance in Pirates of Penzance
+
+Laurie performed in the grade 12? musical Pirates of Penzance.
+
+---
+
+Please write in to jesse@zigford.org and let me know what year this was
+and any other tidbits of information I can include here.
+
+
+
+
+
+On a PC/Mac you should be able to download the video from: [here][1]
+
+_This one is encoded with a newer format that may not play in some browsers.
+If that happens, try downloading the file and playing with [VLC][2]_
+
+
+Tags: Laurie, Performance
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/PiratesOfPenzance.mp4
+[2]:https://www.videolan.org/index.html
diff --git a/kronks/main.css b/kronks/main.css
new file mode 100644
index 0000000..8e431e2
--- /dev/null
+++ b/kronks/main.css
@@ -0,0 +1,92 @@
+body{
+ font-family:Georgia,"Times New Roman",Times,serif;
+ margin:0;
+ padding:0;
+ background-color:#282828;
+}
+#divbodyholder{
+ padding:5px;
+ background-color:#3c3836;
+ width:100%;
+ max-width:874px;
+ margin:24px auto;
+/* min-width:1200px; */
+}
+#video {
+ text-align: center;
+}
+#divbody{
+ border:solid 1px #665c54;
+ background-color:#3c3836;
+ padding:0px 48px 24px 48px;
+ top:0;
+}
+.headerholder{
+ color:white;
+ background-color:#3c3836;
+ border-top:solid 1px #665c54;
+ border-left:solid 1px #665c54;
+ border-right:solid 1px #665c54;
+}
+.header{
+ width:100%;
+ max-width:800px;
+ margin:0px auto;
+ padding-top:24px;
+ padding-bottom:8px;
+ color:#a89984
+}
+.content{
+ margin-bottom:5%;
+ color:#ebdbb2
+}
+.nomargin{
+ margin:0;
+}
+.description{
+ margin-top:10px;
+ border-top:solid 1px #666;
+ padding:10px 0;
+}
+h3{
+ font-size:20pt;
+ width:100%;
+ font-weight:bold;
+ margin-top:32px;
+ margin-bottom:0;
+}
+code{
+ color:#8ec07c
+}
+.clear{
+ clear:both;
+}
+#footer{
+ padding-top:10px;
+ border-top:solid 1px #666;
+ color:#d5c4a1;
+ text-align:center;
+ font-size:small;
+ font-family:"Courier New","Courier",monospace;
+}
+a{
+ text-decoration:none;
+ color:#d79921 !important;
+}
+a:visited{
+ text-decoration:none;
+ color:#b16286 !important;
+}
+blockquote{
+ background-color:#504945;
+ color:#bdae93;
+ border-left:solid 4px #928374;
+ margin-left:12px;
+ padding:12px 12px 12px 24px;
+}
+img{
+ margin:12px 0px;
+}
+iframe{
+ margin:12px 0px;
+}
diff --git a/kronks/movie-world-and-josh-sippels-third-birthday.html b/kronks/movie-world-and-josh-sippels-third-birthday.html
new file mode 100644
index 0000000..81dcba0
--- /dev/null
+++ b/kronks/movie-world-and-josh-sippels-third-birthday.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+Movie World and Josh Sippels third birthday
+
+
Cast yourself back to December 1991. You are attending Movie World and having a
+great time.
+
+
Highlights for those involved are:
+
00:01:00 - Geoff Sippel get's enlisted for the Police Academy play
+00:12:32 - A Saloon play
+00:33:54 - Lunch with the Looney Tunes
+00:47:17 - Movie sets and scenes
+00:49:22 - Stacey and Geoff selected for somethine
+00:53:50 - Stacey! The man of steel
+00:56:20 - Geoff doing the sound effects
+01:06:10 - Family photo
+01:07:04 - Tamara, Courtney, Josh and Josh Sippel go for a drive
+01:09:00 - Carrie and Laurie music video
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
Now is Josh Sippel's third birthday at the park which is 12 days later in early
+1992.
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/movie-world-and-josh-sippels-third-birthday.md b/kronks/movie-world-and-josh-sippels-third-birthday.md
new file mode 100644
index 0000000..e88fe13
--- /dev/null
+++ b/kronks/movie-world-and-josh-sippels-third-birthday.md
@@ -0,0 +1,47 @@
+Movie World and Josh Sippels third birthday
+
+Cast yourself back to December 1991. You are attending Movie World and having a
+great time.
+
+---
+
+Highlights for those involved are:
+
+00:01:00 - Geoff Sippel get's enlisted for the Police Academy play
+00:12:32 - A Saloon play
+00:33:54 - Lunch with the Looney Tunes
+00:47:17 - Movie sets and scenes
+00:49:22 - Stacey and Geoff selected for somethine
+00:53:50 - Stacey! The man of steel
+00:56:20 - Geoff doing the sound effects
+01:06:10 - Family photo
+01:07:04 - Tamara, Courtney, Josh and Josh Sippel go for a drive
+01:09:00 - Carrie and Laurie music video
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Now is Josh Sippel's third birthday at the park which is 12 days later in early
+1992.
+
+
+
+
+
+You can download the file by right clicking [here][2] and click 'save-as'
+
+Tags: Clarissa, Josh, Stacey, Geoff, Tanya, Del, Adon, Laurie, Tamara, Carrie, Courtney, Bob, Gloria
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/MovieWorld/01-MovieWorld-Web.mp4
+[2]:https://f002.backblazeb2.com/file/BlogVideos/MovieWorld/02-BirthdayInThePark-Web.mp4
diff --git a/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.html b/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.html
new file mode 100644
index 0000000..f2452a3
--- /dev/null
+++ b/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.html
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+Moving to Westend, Courtneys Birthday and a Snow Trip
+
+
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
+
+
First up is Laurie, Clarissa, and Jesse moving to Westend. Hosted by Brianna we
+start off packing up at wellcamp and finish off at 26 something street in westend.
+Josh, Adon, Brian, Delia are helping too. Thanks for helping. I hope I never
+move again!
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Next is Courtney's 16th Birthday. Do you find
+it creepy someone is recording you sleeping at then end?
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Followed by a snow visit. Laurie is our voice-challenged guide initially but we
+get to see a lot of snow (PS, I've never seen/been to the snow in my life)
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
A brief stop on the way home to see where some bushfire had been. I can't quite
+be sure of the location Delia mentions. Is it Omio?
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
Another stop (Apparently this was a regular ritual) to the park on the way home.
+Gee those slides are nice and long.
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
+
And lastly we interrupt this program to see Brianna talking to herself (we all
+do it) and to peppers little pups. I wonder if Hailey was in the litter?
+
+
+
+
You can download the file by right clicking here and click "save-as"
+
diff --git a/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.md b/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.md
new file mode 100644
index 0000000..c3b30a4
--- /dev/null
+++ b/kronks/moving-to-westend-courtneys-birthday-and-a-snow-trip.md
@@ -0,0 +1,113 @@
+Moving to Westend, Courtneys Birthday and a Snow Trip
+
+In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
+
+---
+
+First up is Laurie, Clarissa, and Jesse moving to Westend. Hosted by Brianna we
+start off packing up at wellcamp and finish off at 26 something street in westend.
+Josh, Adon, Brian, Delia are helping too. Thanks for helping. I hope I never
+move again!
+
+
+
+
+
+You can download the file by right clicking [here][1] and click "save-as"
+
+---
+
+Next is Courtney's 16th Birthday. Do you find
+it creepy someone is recording you sleeping at then end?
+
+
+
+
+
+You can download the file by right clicking [here][2] and click "save-as"
+
+---
+
+Followed by a snow visit. Laurie is our voice-challenged guide initially but we
+get to see a lot of snow (PS, I've never seen/been to the snow in my life)
+
+
+
+
+
+You can download the file by right clicking [here][3] and click "save-as"
+
+---
+
+A brief stop on the way home to see where some bushfire had been. I can't quite
+be sure of the location Delia mentions. Is it *Omio*?
+
+
+
+
+
+You can download the file by right clicking [here][4] and click "save-as"
+
+---
+
+Another stop (Apparently this was a regular ritual) to the park on the way home.
+Gee those slides are nice and long.
+
+
+
+
+
+You can download the file by right clicking [here][5] and click "save-as"
+
+---
+
+And lastly we interrupt this program to see Brianna talking to herself (we all
+do it) and to peppers little pups. I wonder if Hailey was in the litter?
+
+
+
+
+
+You can download the file by right clicking [here][6] and click "save-as"
+
+
+Tags: Jesse, Clarissa, Laurie, Josh, Adon, Tamara, Coutney, Brian, Delia, Brianna, Stacey, Pepper
+
+[1]: https://f002.backblazeb2.com/file/BlogVideos/2005/SnowTrip/MovingToWestEnd-Web.mp4
+[2]: https://f002.backblazeb2.com/file/BlogVideos/2005/SnowTrip/CourtneyBday-Web.mp4
+[3]: https://f002.backblazeb2.com/file/BlogVideos/2005/SnowTrip/SnowTrip-Web.mp4
+[4]: https://f002.backblazeb2.com/file/BlogVideos/2005/SnowTrip/BushFiresWentThrough-Web.mp4
+[5]: https://f002.backblazeb2.com/file/BlogVideos/2005/SnowTrip/AtTheParkOnthewaybackfromSnow-Web.mp4
+[6]: https://f002.backblazeb2.com/file/BlogVideos/2005/SnowTrip/BriannaAndPepper-Web.mp4
diff --git a/kronks/performances.html b/kronks/performances.html
new file mode 100644
index 0000000..5669f71
--- /dev/null
+++ b/kronks/performances.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+Performances!
+
+
The same VHS tape which had Laurie's Pirates performance also has
+a few other performances. Here they are in order found on the tape.
+
+
The tape:
+
+
First thing on the tape is a video filmed from what looks like Bongeen
+school could it be Tamara or Courtney? I'm not sure, write in to let me
+know.
+
+
+
+
+
Next up we have Clarissa, and I think Tamara and maybe Bree in a modern take
+of Cinderella.
+
+
+
+
+
Now we find Adon, Bree, Carrie, Tamara and Courtney playing in the cotton.
+
+
+
+
+
The quality seems pretty poor in this one, given the odd aspect ratio for
+a video recorded on a VHS, I suspect it may have been dubbed from another
+video or filmed off the back of a camcorder screen. Either way, it's great
+to see this performance of Vincent for the edikan.
+
+
+
+
+
From here on in the video, the quality drops dramatically, from missing
+audio or noise filled video. Luckily the clips are small and I thought I'd
+include them anyway.
+
diff --git a/kronks/performances.md b/kronks/performances.md
new file mode 100644
index 0000000..81d7ded
--- /dev/null
+++ b/kronks/performances.md
@@ -0,0 +1,85 @@
+Performances!
+
+The same VHS tape which had Laurie's Pirates performance also has
+a few other performances. Here they are in order found on the tape.
+
+---
+
+The tape:
+
+
+
+First thing on the tape is a video filmed from what looks like Bongeen
+school could it be Tamara or Courtney? I'm not sure, write in to let me
+know.
+
+
+
+
+
+Next up we have Clarissa, and I think Tamara and maybe Bree in a modern take
+of Cinderella.
+
+
+
+
+
+Now we find Adon, Bree, Carrie, Tamara and Courtney playing in the cotton.
+
+
+
+
+
+The quality seems pretty poor in this one, given the odd aspect ratio for
+a video recorded on a VHS, I suspect it may have been dubbed from another
+video or filmed off the back of a camcorder screen. Either way, it's great
+to see this performance of Vincent for the edikan.
+
+
+
+
+
+From here on in the video, the quality drops dramatically, from missing
+audio or noise filled video. Luckily the clips are small and I thought I'd
+include them anyway.
+
+One of Laurie's Birthdays
+
+
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Short clip today. A couple of times I've found a full 3 hour Video Cassette
+with only 30 minutes of recording and the rest totally blank. In this case the tape has 3 minutes 10 seconds of video.
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Short clip today. A couple of times I've found a full 3 hour Video Cassette
+with only 30 minutes of recording and the rest totally blank. In this case the tape has 3 minutes 10 seconds of video.
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Short clip today. A couple of times I've found a full 3 hour Video Cassette
+with only 30 minutes of recording and the rest totally blank. In this case the tape has 3 minutes 10 seconds of video.
Welcome back to another exciting Tape review. Today's archive begins with
+Courtney's birthday. 16th maybe? I'm thinking this is mid 2005, so Courtney how
+old would you have been?
In today's episode of the Kronk files we have a grab bag of events. Nothing too
+thrilling but exactly the kind life you want to capture to remember well into
+the future. Work, relaxation, celebration and randomly talking to puppies.
1987 Dave Kronk turns 70. Just this year was Brian's 70th which makes it feel like time is
+truly racing by. Love that the Kronks were diligent enough to capture these memories.
Clarissa and I had a good laugh over this video. We can be seen chatting and
+dancing on what I think was our second date (sorta!). Others featured in the
+video are:
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
Heading up this tape is the raising of a Tennis Court light at Bongeen,
+Clarissa's 21st Birthday, Caitlin's (maybe first) trip to the beach, and,
+some miscellaneous animals
One of the newer recordings on DV tape this time is from December 2009. While
+newer, age hasn't been kind to this recording and there are audio glitches
+throughout.
I attempted to post this video to youtube but their child protection policy
+blocked it. Therefore I have created this quick site to share the video and
+others.
I attempted to post this video to youtube but their child protection policy
+blocked it. Therefore I have created this quick site to share the video and
+others.
I attempted to post this video to youtube but their child protection policy
+blocked it. Therefore I have created this quick site to share the video and
+others.
Another Debutante, this time featuring Tamara, but Clarissa seems to have some
+official role in the proceedings too.
+
+
I've skimmed through and put some time stamps of the highlights below
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
+
+
+
Time stamp
+
Description
+
+
+
+
+
00:03:30
+
Clarissa enters
+
+
+
00:07:00
+
Tamara enters
+
+
+
00:14:20
+
Tamara's speech
+
+
+
00:17:50
+
First dance
+
+
+
00:20:50
+
Brian and Del join the dance
+
+
+
00:23:30
+
The pipes
+
+
+
00:25:30
+
Courtney, Liz, Daniel Von-Pine, Adon
+
+
+
00:26:40
+
Everyone dancing
+
+
+
00:29:30
+
Brian and Tamara dancing
+
+
+
+
Next up we have a Joshua's 19th? Birthday get-together at the Sippels (I think?)
+We get to see Josh blow out his candles, Dan being cute and nearly everyone join
+in the soccer match.
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
+
+
+
Time stamp
+
Description
+
+
+
+
+
00:02:18
+
Cake time
+
+
+
00:05:39
+
Dan wants to see
+
+
+
00:06:45
+
The wild soccer match
+
+
+
+
Lastly we have Courtney in a Tennis match
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/tamaras-debutante-with-some-other-bits.md b/kronks/tamaras-debutante-with-some-other-bits.md
new file mode 100644
index 0000000..3d9cf7a
--- /dev/null
+++ b/kronks/tamaras-debutante-with-some-other-bits.md
@@ -0,0 +1,65 @@
+Tamara's Debutante (with some other bits)
+
+Another Debutante, this time featuring Tamara, but Clarissa seems to have some
+official role in the proceedings too.
+
+---
+
+I've skimmed through and put some time stamps of the highlights below
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+|Time stamp | Description |
+| ---------- | ----------------------------- |
+|00:03:30|Clarissa enters|
+|00:07:00|Tamara enters|
+|00:14:20|Tamara's speech|
+|00:17:50|First dance|
+|00:20:50|Brian and Del join the dance|
+|00:23:30|The pipes|
+|00:25:30|Courtney, Liz, Daniel Von-Pine, Adon|
+|00:26:40| Everyone dancing|
+|00:29:30|Brian and Tamara dancing|
+
+Next up we have a Joshua's 19th? Birthday get-together at the Sippels (I think?)
+We get to see Josh blow out his candles, Dan being cute and nearly everyone join
+in the soccer match.
+
+
+
+
+
+You can download the file by right clicking [here][2] and click 'save-as'
+
+|Time stamp | Description |
+| ---------- | ----------------------------- |
+|00:02:18|Cake time|
+|00:05:39|Dan wants to see|
+|00:06:45|The wild soccer match|
+
+Lastly we have Courtney in a Tennis match
+
+
+
+
+
+You can download the file by right clicking [here][3] and click 'save-as'
+
+Tags: Tamara, Courtney, Clarissa, Brianna, Brian, Del, Adon, Stacey, Tim, Dan, Bob, Gloria, Laurie, Josh, Tanya, Lorraine, Darcy, Jacob, Josh-Sippel
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/01-TamarasDeb-Web.mp4
+[2]:https://f002.backblazeb2.com/file/BlogVideos/03-AtTheSippels-Web.mp4
+[3]:https://f002.backblazeb2.com/file/BlogVideos/04-CourtneyTennis-Web.mp4
diff --git a/kronks/working-on-the-cinema.html b/kronks/working-on-the-cinema.html
new file mode 100644
index 0000000..5fb84e9
--- /dev/null
+++ b/kronks/working-on-the-cinema.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+Working on the Cinema
+
+
Short clip today. A couple of times I've found a full 3 hour Video Cassette
+with only 30 minutes of recording and the rest totally blank. In this case the tape has 3 minutes 10 seconds of video.
+
+
+
Timestamp in the recording is 28th of September 2000.
+Also note, there is about .6 seconds of audio delay but it doesn't matter
+enough to correct as there is not much talking to sync.
+
Questions about this vidoe:
+
+
Who is seen observing from the ground at 12 seconds? Clarissa maybe?
+
We see a few other glimpses of people helping. Who are they?
+
+
+
+
+
+
You can download the file by right clicking here and click 'save-as'
+
diff --git a/kronks/working-on-the-cinema.md b/kronks/working-on-the-cinema.md
new file mode 100644
index 0000000..de586c5
--- /dev/null
+++ b/kronks/working-on-the-cinema.md
@@ -0,0 +1,30 @@
+Working on the Cinema
+
+Short clip today. A couple of times I've found a full 3 hour Video Cassette
+with only 30 minutes of recording and the rest totally blank. In this case the tape has 3 minutes 10 seconds of video.
+
+---
+
+
+
+Timestamp in the recording is 28th of September 2000.
+Also note, there is about .6 seconds of audio delay but it doesn't matter
+enough to correct as there is not much talking to sync.
+
+Questions about this vidoe:
+
+1. Who is seen observing from the ground at 12 seconds? Clarissa maybe?
+2. We see a few other glimpses of people helping. Who are they?
+
+
+
+
+
+You can download the file by right clicking [here][1] and click 'save-as'
+
+Tags: Brian, Stacey, Del
+
+[1]:https://f002.backblazeb2.com/file/BlogVideos/MakingTheCinema-Web.mp4
diff --git a/lets-encrypt-kerfuffle.html b/lets-encrypt-kerfuffle.html
new file mode 100644
index 0000000..9511073
--- /dev/null
+++ b/lets-encrypt-kerfuffle.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+Lets encrypt kerfuffle
+
+
Let's encrypt had a kerfuffle last week by accidentally not checking CAA DNS
+records of domains it had requests for.
+
+
CAA records are a way of recording who your domain will accept certificates to
+be generated by. As an example, use dig to lookup the CAA of usc.edu.au:
In this case, a CA other than quovadisglobal will refuse to generate a
+certificate for usc.edu.au.
+
The bug with Let's Encrypt was that they were not checking the CAA record every
+time, and therefore some of those certificates might not have been correct to
+generate.
+
My site zigford.org uses a Let's Encrypt certificate, but
+since using cloudflares free DNS offerring, you'll
+likely see their certificate when you visit my site. Nonethelsee my site could
+have been affected and I was interested to see if it were so.
+
Since Let's Encrypt certs expire very quickly (90 days I think?), it's the type
+of thing that begs to be automated. Let's encrypt decided to revoke all
+certificates issued during the presence of the bug and thankfully according to
+this wired article
+Certbot users should be pretty much unaffected as the tool will check if a
+revocation has happened.
+
So I checked through my logs and sadly, no, I was not affected. Here is what it
+looks like when certbot detects your certificate is going to expire shortly
+anyway (date stamps removed for brevity):
+
journalctl -u certbot-renew
+
+ Cert is due for renewal, auto-renewing...
+ Non-interactive renewal: random delay of 61.05961969260669 seconds
+ NGINX configured with OpenSSL alternatives is not officiallysupported by Certbot.
+ Plugins selected: Authenticator nginx, Installer nginx
+ Renewing an existing certificate
+ Performing the following challenges:
+ http-01 challenge for www.zigford.org
+ http-01 challenge for zigford.org
+ Waiting for verification...
+ Cleaning up challenges
+
+
diff --git a/lets-encrypt-kerfuffle.md b/lets-encrypt-kerfuffle.md
new file mode 100644
index 0000000..e369ff5
--- /dev/null
+++ b/lets-encrypt-kerfuffle.md
@@ -0,0 +1,55 @@
+Lets encrypt kerfuffle
+
+Let's encrypt had a kerfuffle last week by accidentally not checking CAA DNS
+records of domains it had requests for.
+
+---
+
+CAA records are a way of recording who your domain will accept certificates to
+be generated by. As an example, use `dig` to lookup the CAA of `usc.edu.au`:
+
+ # dig CAA usc.edu.au +short
+ 0 iodef "mailto:ssladmin@usc.edu.au"
+ 0 issue "quovadisglobal.com"
+ 0 issuewild "quovadisglobal.com"
+
+In this case, a CA other than quovadisglobal will refuse to generate a
+certificate for usc.edu.au.
+
+The bug with Let's Encrypt was that they were not checking the CAA record every
+time, and therefore some of those certificates might not have been correct to
+generate.
+
+My site [zigford.org](https://zigford.org) uses a Let's Encrypt certificate, but
+since using [cloudflares](https://cloudflare.com) free DNS offerring, you'll
+likely see their certificate when you visit my site. Nonethelsee my site could
+have been affected and I was interested to see if it were so.
+
+Since Let's Encrypt certs expire very quickly (90 days I think?), it's the type
+of thing that begs to be automated. Let's encrypt decided to revoke all
+certificates issued during the presence of the bug and thankfully according to
+[this wired article](https://www.wired.com/story/lets-encrypt-internet-calamity-that-wasnt/)
+Certbot users should be pretty much unaffected as the tool will check if a
+revocation has happened.
+
+So I checked through my logs and sadly, no, I was not affected. Here is what it
+looks like when certbot detects your certificate is going to expire shortly
+anyway (date stamps removed for brevity):
+
+ journalctl -u certbot-renew
+
+ Cert is due for renewal, auto-renewing...
+ Non-interactive renewal: random delay of 61.05961969260669 seconds
+ NGINX configured with OpenSSL alternatives is not officiallysupported by Certbot.
+ Plugins selected: Authenticator nginx, Installer nginx
+ Renewing an existing certificate
+ Performing the following challenges:
+ http-01 challenge for www.zigford.org
+ http-01 challenge for zigford.org
+ Waiting for verification...
+ Cleaning up challenges
+
+
+Moral of the story? Use automation maybe?
+
+Tags: certs, lets-encrypt
diff --git a/links.html b/links.html
new file mode 100644
index 0000000..42f085e
--- /dev/null
+++ b/links.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+Links
+
+
+
diff --git a/links.md b/links.md
new file mode 100644
index 0000000..a7d1a1a
--- /dev/null
+++ b/links.md
@@ -0,0 +1,10 @@
+Links
+
+Here are some links about things I do or about me
+
+* Zigford on [Twitter](https://twitter.com/zigford_org)
+* Doc5avage on [Twitter](https://twitter.com/doc5avage)
+* My [Github](https://github.com/zigford) account
+* [Todo](todo.html) list of potential future articles
+* [scripts](scripts.html) index of downloadable scripts
+* [Visitors](visitors.html) stats page
diff --git a/live-on-64-bit-raspberry-pi-4-with-gentoo.html b/live-on-64-bit-raspberry-pi-4-with-gentoo.html
new file mode 100644
index 0000000..9b5af60
--- /dev/null
+++ b/live-on-64-bit-raspberry-pi-4-with-gentoo.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+Live on 64-bit Raspberry Pi 4 with Gentoo
+
+
I recently wrote that the site is now hosted from the
+raspberry pi 4.
+
+
That was running Raspbian OS, a 32-bit debian derivative. For a long time I've
+preferred Gentoo as a Linux distribution, but until now, all versions of the Pi
+were limited in RAM, with the upper limit being 1 Gb.
+
While 1 Gb of RAM is entirely sufficient for running a headless home server, you
+can quickly run out of RAM when you compile software with 4 cores
+(MAKEOPTS=-j4 in Gentoo's make.conf)
+
Now that a 4 Gb model of the Pi exists, I felt I could switch to Gentoo as my
+primary Pi OS without compromise. Initially I planned to buy the 1 Gb model and
+then a little later grab the 4 Gb model.
+
Ironically, I couldn't wait for the 4 Gb model to try 64-bit Gentoo and while
+the -j4 option does induce significant swapping and causes the OS to become
+unresponsive, I have found that -j1 is probably a better option anyway so that
+the site can continue to be served during upgrades.
+
A final note and side-effect of switching to Gentoo on arm64, my
+overlay is slowly being updated to
+support arm64 and as such, PowerShell is the first to be updated
+
diff --git a/live-on-64-bit-raspberry-pi-4-with-gentoo.md b/live-on-64-bit-raspberry-pi-4-with-gentoo.md
new file mode 100644
index 0000000..ea28184
--- /dev/null
+++ b/live-on-64-bit-raspberry-pi-4-with-gentoo.md
@@ -0,0 +1,31 @@
+Live on 64-bit Raspberry Pi 4 with Gentoo
+
+I recently [wrote](raspberry-pi-4.html) that the site is now hosted from the
+raspberry pi 4.
+
+---
+
+That was running Raspbian OS, a 32-bit debian derivative. For a long time I've
+preferred Gentoo as a Linux distribution, but until now, all versions of the Pi
+were limited in RAM, with the upper limit being 1 Gb.
+
+While 1 Gb of RAM is entirely sufficient for running a headless home server, you
+can quickly run out of RAM when you compile software with 4 cores
+(`MAKEOPTS=-j4` in Gentoo's make.conf)
+
+Now that a 4 Gb model of the Pi exists, I felt I could switch to Gentoo as my
+primary Pi OS without compromise. Initially I planned to buy the 1 Gb model and
+then a little later grab the 4 Gb model.
+
+Ironically, I couldn't wait for the 4 Gb model to try 64-bit Gentoo and while
+the `-j4` option does induce significant swapping and causes the OS to become
+unresponsive, I have found that `-j1` is probably a better option anyway so that
+the site can continue to be served during upgrades.
+
+A final note and side-effect of switching to Gentoo on arm64, my
+[overlay](https://github.com/zigford/gentoo-zigford) is slowly being updated to
+support arm64 and as such, PowerShell is the first to be updated
+
+
+
+Tags: gentoo, raspberry-pi, linux
diff --git a/macos.html b/macos.html
new file mode 100644
index 0000000..460127f
--- /dev/null
+++ b/macos.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+macOS
+
+
in 2006 I bought my first Mac. A white Macbook, the second generation of Intel
+with a core 2 duo processor. Even though it had a spinning disk when you clicked
+on safari it would launch instantly. It was amazingly fast.
+
+
Back then the OS was 10.4 Tiger. Tiger was the pinnicle of Apple operating
+systems. It was the first time an OS X operating system had all the features
+one would need, and before they started adding cruft to slow the system down.
+
+
+
Extremely fast boot
+
Spotlight search (Still better than Windows search to this day)
+
Better trackpad feel
+
Unix and X11 support
+
Automator
+
Slick responsive and cohesive ui
+
+
+
I also have parallels desktop on my macbook, and I recall collegues being
+amazed to see me running Mac OS, Ubuntu and Windows concurrently without
+any apparent performance hit. I feel like I've not had a computer as good as
+that macbook since.
+
+
Sadly over time the macbook developed a problem with the backlight and with the
+battery failing it became unusable. Work had started providing me with their
+laptops, so it didn't seem to make sense to buy a macbook again.
+
+
On the upside, tomrrow (07/09/2018), I will be getting a work supplied macbook.
+ :)
+
+
I'll update this article with my experiences.
+
+
+
+
+
+
+
diff --git a/macos.md b/macos.md
new file mode 100644
index 0000000..f0beec9
--- /dev/null
+++ b/macos.md
@@ -0,0 +1,30 @@
+macOS
+
+in 2006 I bought my first Mac. A white Macbook, the second generation of Intel
+with a core 2 duo processor. Even though it had a spinning disk when you clicked
+on safari it would launch instantly. It was amazingly fast.
+
+Back then the OS was 10.4 Tiger. Tiger was the pinnicle of Apple operating
+systems. It was the first time an OS X operating system had all the features
+one would need, and before they started adding cruft to slow the system down.
+
+* Extremely fast boot
+* Spotlight search (Still better than Windows search to this day)
+* Better trackpad feel
+* Unix and X11 support
+* Automator
+* Slick responsive and cohesive ui
+
+I also have parallels desktop on my macbook, and I recall collegues being
+amazed to see me running Mac OS, Ubuntu and Windows concurrently without
+any apparent performance hit. I feel like I've not had a computer as good as
+that macbook since.
+
+Sadly over time the macbook developed a problem with the backlight and with the
+battery failing it became unusable. Work had started providing me with their
+laptops, so it didn't seem to make sense to buy a macbook again.
+
+On the upside, tomrrow (07/09/2018), I will be getting a work supplied macbook.
+ :)
+
+I'll update this article with my experiences.
diff --git a/main.css b/main.css
new file mode 100644
index 0000000..d371ca3
--- /dev/null
+++ b/main.css
@@ -0,0 +1,89 @@
+body{
+ font-family:Georgia,"Times New Roman",Times,serif;
+ margin:0;
+ padding:0;
+ background-color:#282828;
+}
+#divbodyholder{
+ padding:5px;
+ background-color:#3c3836;
+ width:100%;
+ max-width:874px;
+ margin:24px auto;
+/* min-width:1200px; */
+}
+#divbody{
+ border:solid 1px #665c54;
+ background-color:#3c3836;
+ padding:0px 48px 24px 48px;
+ top:0;
+}
+.headerholder{
+ color:white;
+ background-color:#3c3836;
+ border-top:solid 1px #665c54;
+ border-left:solid 1px #665c54;
+ border-right:solid 1px #665c54;
+}
+.header{
+ width:100%;
+ max-width:800px;
+ margin:0px auto;
+ padding-top:24px;
+ padding-bottom:8px;
+ color:#a89984
+}
+.content{
+ margin-bottom:5%;
+ color:#ebdbb2
+}
+.nomargin{
+ margin:0;
+}
+.description{
+ margin-top:10px;
+ border-top:solid 1px #666;
+ padding:10px 0;
+}
+h3{
+ font-size:20pt;
+ width:100%;
+ font-weight:bold;
+ margin-top:32px;
+ margin-bottom:0;
+}
+code{
+ color:#8ec07c
+}
+.clear{
+ clear:both;
+}
+#footer{
+ padding-top:10px;
+ border-top:solid 1px #666;
+ color:#d5c4a1;
+ text-align:center;
+ font-size:small;
+ font-family:"Courier New","Courier",monospace;
+}
+a{
+ text-decoration:none;
+ color:#d79921 !important;
+}
+a:visited{
+ text-decoration:none;
+ color:#b16286 !important;
+}
+blockquote{
+ background-color:#504945;
+ color:#bdae93;
+ border-left:solid 4px #928374;
+ margin-left:12px;
+ padding:12px 12px 12px 24px;
+}
+img{
+ margin:12px 0px;
+}
+iframe{
+ margin:12px 0px;
+}
diff --git a/making-a-release-on-github.html b/making-a-release-on-github.html
new file mode 100644
index 0000000..1775be5
--- /dev/null
+++ b/making-a-release-on-github.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+Making a release on GitHub
+
+
Today's journey is using git and github to releasePwshBlog
+The following are my notes on the matter.
+
+
Making an archive
+
Normally when you make a release, you want to make an archive of the release
+available for people to download. You could use git's built-in tags feature
+alone, but that will include other bits of your repository that you probably
+don't want to include.
+
diff --git a/making-a-release-on-github.md b/making-a-release-on-github.md
new file mode 100644
index 0000000..7b2fd6a
--- /dev/null
+++ b/making-a-release-on-github.md
@@ -0,0 +1,37 @@
+Making a release on GitHub
+
+Today's journey is using `git` and `github` to *release* **PwshBlog**
+The following are my notes on the matter.
+
+---
+
+Making an archive
+-----------------
+
+Normally when you make a release, you want to make an archive of the release
+available for people to download. You could use git's built-in tags feature
+alone, but that will include other bits of your repository that you probably
+don't want to include.
+
+Enter `git archive`
+
+The following are steps to creating the archive
+
+1. Create a `.gitattributes` file
+2. Add lines like the following
+
+ .gitignore export-ignore
+ appveyor.yml export-ignore
+
+3. Add and commit the `.gitattributes` file for it to work
+4. Create a tag
+
+ git tag -a v0.9.0
+
+5. Now create the archive
+
+ git archive --format=zip --prefix=PwshBlog/ v0.9.0 -o v0.9.0.zip
+
+6. Go create your release on github and drag in the created archive!
+
+Tags: git, pwshblog, github
diff --git a/manage-a-hosts-file.html b/manage-a-hosts-file.html
new file mode 100644
index 0000000..3bad93f
--- /dev/null
+++ b/manage-a-hosts-file.html
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+Manage a hosts file
+
+
Most people have long forgotten the lowly hosts file, but from time to
+time there is still a need to use it.
+
+
So I wrote some powershell functions to automate it in a simpler way.
+
+
+
+
Maybe your on a home network with a router that doesn't have dynamic dns.
+Today I had to resort to editing a hosts file to work around a side effect
+of enabling on-prem single sign-on with ADFS.
+
+
I won't go into too much detail, but to say that if your on a local network
+with ADFS, but your using a non domain-joined device, your device will be
+redirected to a type of authentication which is incompatible with Windows
+Hello or longform@upn type usernames.
+
+
The reason this is, is because it uses split DNS to redirect you to the
+appropriate web login on internal vs external.
+
+
Anywhoo, a quick workaround is to set a static hosts file record, so that
+when your device tries to resolve the hostname, instead of getting one from
+DNS, you can specify and force the external Forms based auth at all times.
+
+
Normally, I would just edit my Hosts file and be done with it. But I've been
+experimenting with Intune and got a bunch of my collegues onto the same non
+domain-joined setup. With Intune, you can't do a great deal, but you can
+deploy a powershell script.
+
+
Thus I wrote a couple of functions, Get-HostsRecord, Set-HostsRecord
+and Remove-HostsRecord
+
+
You can download a zipped copy here if your interested.
+
+
As a side, I wrote it on my Macbook, so it's PSCore/Unix compatible
+
diff --git a/manage-a-hosts-file.md b/manage-a-hosts-file.md
new file mode 100644
index 0000000..6bfad48
--- /dev/null
+++ b/manage-a-hosts-file.md
@@ -0,0 +1,43 @@
+Manage a hosts file
+
+Most people have long forgotten the lowly [hosts][1] file, but from time to
+time there is still a need to use it.
+
+So I wrote some powershell functions to automate it in a simpler way.
+
+---
+
+Maybe your on a home network with a router that doesn't have dynamic dns.
+Today I had to resort to editing a hosts file to work around a side effect
+of enabling on-prem single sign-on with ADFS.
+
+I won't go into too much detail, but to say that if your on a local network
+with ADFS, but your using a non domain-joined device, your device will be
+redirected to a type of authentication which is incompatible with Windows
+Hello or longform@upn type usernames.
+
+The reason this is, is because it uses split DNS to redirect you to the
+appropriate web login on internal vs external.
+
+Anywhoo, a quick workaround is to set a static hosts file record, so that
+when your device tries to resolve the hostname, instead of getting one from
+DNS, you can specify and force the external Forms based auth at all times.
+
+Normally, I would just edit my Hosts file and be done with it. But I've been
+experimenting with Intune and got a bunch of my collegues onto the same non
+domain-joined setup. With Intune, you can't do a great deal, but you can
+deploy a powershell script.
+
+Thus I wrote a couple of functions, `Get-HostsRecord`, `Set-HostsRecord`
+and `Remove-HostsRecord`
+
+You can [download][2] a zipped copy here if your interested.
+
+_As a side, I wrote it on my Macbook, so it's PSCore/Unix compatible_
+
+Enjoy.
+
+Tags: powershell, intune, hostsfile
+
+[1]: https://en.wikipedia.org/wiki/Hosts_(file)
+[2]: scripts/Hostsfile.ps1.zip
diff --git a/my-setup.html b/my-setup.html
new file mode 100644
index 0000000..77c8d8e
--- /dev/null
+++ b/my-setup.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+My setup
+
+
My home office is 1 of the bays of our bestsheds
+American barn style shed. The office bay has a sliding stacker door entrance,
+long window and is seperated from the other bays by a mixture of bookshelves,
+office partitions and curtains.
+
Desk
+
My computer desk is part of a frame used to carry car tyres on a pickup truck
+with a large mdf sheet on top. Thus it's quite tall, so I have a platform to
+stand on made out of some sawn off pailings nailed to some 4x4's.
+
Chair
+
The current chair is absolute garbage, so I spend most of my time standing with
+the occaisional sit down to rest the feet. I do intend to upgrade my chair when
+I can find the funding and the right chair with the required height.
+
Technology
+
PC
+
My main PC is a workstation I built in 2013, so it has a haswell i5-4670, a
+256Gb SSD, a 2TB mirrored data disk and an AMD Radeon HD6950.
+The screen is an LG 27" 1080p display. Keyboard an IBM Model M and a stock
+standard logitech mouse.
+
Laptops
+
Although I don't own any laptops, my work requires I'm using different laptops
+in various states on configuration. I regularly use the following
+
+
Dell Precision 5510 (32G ram, 500G SSD, 750G HDD)
+
Late 2014 15" Macbook Pro (500G SSD, 16G ram)
+
Surface Pro 3
+
13" 2017 Macbook Pro (256G SSD, 8G ram)
+
+
Other machines
+
As I have 6 kids I also have a machine for each of them for when we have game
+night.
+
+
Dell Precision M4800
+
Lenovo ThinkCenter x2
+
Dell OptiPlex GX620
+
Home built AMD FX-4300 based PC
+
Raspberry PI as a desktop in the house for homework
+
HP xw8400 Workstation
+
+
+
+
+
+
+
diff --git a/my-setup.md b/my-setup.md
new file mode 100644
index 0000000..497f6f1
--- /dev/null
+++ b/my-setup.md
@@ -0,0 +1,55 @@
+My setup
+
+Physical
+--------
+
+**Office**
+
+My home office is 1 of the bays of our [bestsheds](www.bestsheds.com.au)
+American barn style shed. The office bay has a sliding stacker door entrance,
+long window and is seperated from the other bays by a mixture of bookshelves,
+office partitions and curtains.
+
+**Desk**
+
+My computer desk is part of a frame used to carry car tyres on a pickup truck
+with a large mdf sheet on top. Thus it's quite tall, so I have a platform to
+stand on made out of some sawn off pailings nailed to some 4x4's.
+
+**Chair**
+
+The current chair is absolute garbage, so I spend most of my time standing with
+the occaisional sit down to rest the feet. I do intend to upgrade my chair when
+I can find the funding and the right chair with the required height.
+
+Technology
+----------
+
+**PC**
+
+My main PC is a workstation I built in 2013, so it has a haswell i5-4670, a
+256Gb SSD, a 2TB mirrored data disk and an AMD Radeon HD6950.
+The screen is an LG 27" 1080p display. Keyboard an IBM Model M and a stock
+standard logitech mouse.
+
+**Laptops**
+
+Although I don't own any laptops, my work requires I'm using different laptops
+in various states on configuration. I regularly use the following
+
+* Dell Precision 5510 (32G ram, 500G SSD, 750G HDD)
+* ~~Late 2014 15" Macbook Pro (500G SSD, 16G ram)~~
+* Surface Pro 3
+* 13" 2017 Macbook Pro (256G SSD, 8G ram)
+
+**Other machines**
+
+As I have 6 kids I also have a machine for each of them for when we have game
+night.
+
+* Dell Precision M4800
+* Lenovo ThinkCenter x2
+* Dell OptiPlex GX620
+* Home built AMD FX-4300 based PC
+* Raspberry PI as a desktop in the house for homework
+* HP xw8400 Workstation
diff --git a/nagios-core-on-gentooraspberry-pi-with-nginx.html b/nagios-core-on-gentooraspberry-pi-with-nginx.html
new file mode 100644
index 0000000..9770673
--- /dev/null
+++ b/nagios-core-on-gentooraspberry-pi-with-nginx.html
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+Nagios Core on Gentoo/Raspberry Pi with Nginx
+
+
I haven't posted in a while due to a change in my work. I'm currently working in
+the Server and Storage team at my workplace for a 6 month secondment. The role
+is much more aligned with my enjoyment of using GNU/Linux.
+
+
Note These notes are incomplete, but I'm posting them anyway.
+
One of the responsibilities I've picked up is maintaining our Nagios monitoring
+system. While I won't go into too much detail about that here, I thought I'd
+install it at home to monitor things and get a bit more experience on it.
+
Thankfully ebuilds exist
+in Gentoo which means I don't have to compile it myself. Unfortunately,
+the integrations with web servers doesn't cover nginx.
+
Nagios-Core will be installed on a Raspberry Pi running NGinx. If your already
+running Apache, or lighttp, then your in luck, as the ebuilds for Nagios-Core
+support those out of the box. The setup for the rest of that won't be covered
+here.
+
Assumptions This guide will assume you are already serving content from
+nginx and it won't cover initial setup and install.
+
Nginx
+
The default USE flags and modules built for nginx should cover what is required
+for nagios, but just to be sure, these will be needed:
+
fastcgi scgi
+
+
PHP
+
Modern versions of Nagios, use a bit of PHP, so we are going to need php
+compiled with the following USE flags
+
fpm
+
+
FPM is a method of invoking php through a unix socket so as not to have to spawn
+new child processes every time someone hits a .php file.
+
Glue packages
+
We need a spawner and fastcgi wrapper to launch cgi scripts for the nagios site.
+
emerge www-misc/fcgiwrap www-servers/spawn-fcgi
+
+
Both these applications were hard masked on arm64, but they are running fine for
+me.
+
Nagios Core
+
I didn't use any special use flags for nagis core.
When php was compiled with the fpm USE flag we should have an php fpm service
+file and configuration files. We could make fpm listen on a service or to a unix
+socket. On my system, everything will be hosted together so using a unix socket
+will be the most ideal.
+
Edit the config at /etc/php/fpm-php7.3/fpm.d and set the listen value like
+so:
+
listen = /var/run/php7-fpm.socket
+
+
This is the socket file that we will configure nginx to connect to later so that
+it can run php stuff.
+
Next skip through the file a bit to find the listen.owner and listen.group
+settings. Set them both to nginx
+
Save and close that config file and go edit /etc/php/fpm-php7.3/php.ini
+Find and uncomment out ;cgi.fix_pathinfo=1 and change it to equal 0.
+
I'm using systemd, so I ran systemctl enable php-fpm@7.3 --now to start and
+enable the service at boot. Take a peek in /var/run/
+
ls -l /var/run/php7-fpm.socket
+ srw-rw---- 1 nginx nginx 0 Jan 27 10:08 /var/run/php7-fpm.socket
+
+
Notice it is owned by nginx.
+
Fastcgi
+
Fastcgi will be responible for serving cgi bin files for nagios. These are
+nagios programs written in C. To do so, Nginx talks to a spawner which spawns
+fcgiwrap which in turn runs the programs.
+
spawn-fcgi doesn't really have a configuration file from what I can tell. When
+merged onto my system, it's configuration is handled by the init.d service
+script reading variables from /etc/conf.d/spawn-fcgi and setting command line
+options.
+
To simplify things, I just created a simple systemd service unit and hard coded
+the options I needed into it. Here is the service file I came up with:
-U 999 set socket user permissions to UID 999 which is Nginx
+
-G 235 set socket group permissions to GID 235 which is Nginx
+
-s /var/run/fcgiwrap.socket create a unix socket at this path
+
/usr/sbin/fcgiwrap spawn this fcgi binary
+
+
Start and enable this service with systemctl enable spawn-fcgi --now should
+produce a socket file similar to the php7 one created earlier. This will be used
+in our nginx config later.
+
Nginx Config
+
My nginx config is all in one file, so adjust my changes as per your needs.
+The first change we need to make is inside the http declaration. We need to
+specify the two upstream servers (in this case servers on the local system via
+sockets). One for php and one for cgi-bin.
+
Each one will reference the sockets we created earlier.
+
upstream php {
+ server unix:/var/run/php7-fpm.socket;
+ }
+
+ upstream fcgiwrap {
+ server unix:/var/run/fcgiwrap.socket;
+ }
+
+
The default nginx config will have a server declaration for your site. Nested
+in here you will need the following location declarations. The location
+declaration /nagios and will result in being able to access nagios by
+navigating to the website url like so: randomsite.com/nagios
location ~ /nagios/ causes the uri to match /nagios/ as a case sensitive
+regular expression. Without the ~, an article like this with it's name
+starting with nagios might also fall into that location
+
location ^~ is a non regular expression match of the uri
+
fastcgi_param directives are passing parameters from the browser to the cgi
+script.
+
fastcgi_pass passes the request to the socket setup as an upstream server.
+
diff --git a/nagios-core-on-gentooraspberry-pi-with-nginx.md b/nagios-core-on-gentooraspberry-pi-with-nginx.md
new file mode 100644
index 0000000..f2eebc1
--- /dev/null
+++ b/nagios-core-on-gentooraspberry-pi-with-nginx.md
@@ -0,0 +1,216 @@
+Nagios Core on Gentoo/Raspberry Pi with Nginx
+
+I haven't posted in a while due to a change in my work. I'm currently working in
+the Server and Storage team at my workplace for a 6 month secondment. The role
+is much more aligned with my enjoyment of using GNU/Linux.
+
+---
+
+**Note** These notes are incomplete, but I'm posting them anyway.
+
+One of the responsibilities I've picked up is maintaining our Nagios monitoring
+system. While I won't go into too much detail about that here, I thought I'd
+install it at home to monitor things and get a bit more experience on it.
+
+Thankfully [ebuilds exist](https://packages.gentoo.org/net-analyzer/nagios-core)
+in Gentoo which means I don't have to compile it myself. Unfortunately,
+the integrations with web servers doesn't cover nginx.
+
+Nagios-Core will be installed on a Raspberry Pi running NGinx. If your already
+running Apache, or lighttp, then your in luck, as the ebuilds for Nagios-Core
+support those out of the box. The setup for the rest of that won't be covered
+here.
+
+**Assumptions** This guide will assume you are already serving content from
+nginx and it won't cover initial setup and install.
+
+Nginx
+-----
+
+The default USE flags and modules built for nginx should cover what is required
+for nagios, but just to be sure, these will be needed:
+
+ fastcgi scgi
+
+PHP
+---
+
+Modern versions of Nagios, use a bit of PHP, so we are going to need php
+compiled with the following USE flags
+
+ fpm
+
+FPM is a method of invoking php through a unix socket so as not to have to spawn
+new child processes every time someone hits a .php file.
+
+Glue packages
+-------------
+
+We need a spawner and fastcgi wrapper to launch cgi scripts for the nagios site.
+
+ emerge www-misc/fcgiwrap www-servers/spawn-fcgi
+
+Both these applications were hard masked on arm64, but they are running fine for
+me.
+
+Nagios Core
+-----------
+
+I didn't use any special use flags for nagis core.
+
+Setting it all up
+-----------------
+
+Getting info
+============
+
+To get this working you need a few bits of info
+
+Where is nagios cgi scripts installed to?
+
+ equery files net-analyzer/nagios-core | grep cgi | head -1
+ /usr/lib64/nagios/cgi-bin/
+
+Where are the html files?
+
+ equery files net-analuyer/nagios-core | grep htdocs | head -1
+ /usr/share/nagios/htdocs
+
+fpm config
+==========
+
+When php was compiled with the `fpm` USE flag we should have an php fpm service
+file and configuration files. We could make fpm listen on a service or to a unix
+socket. On my system, everything will be hosted together so using a unix socket
+will be the most ideal.
+
+Edit the config at `/etc/php/fpm-php7.3/fpm.d` and set the `listen` value like
+so:
+
+ listen = /var/run/php7-fpm.socket
+
+This is the socket file that we will configure nginx to connect to later so that
+it can run php stuff.
+
+Next skip through the file a bit to find the `listen.owner` and `listen.group`
+settings. Set them both to **nginx**
+
+Save and close that config file and go edit `/etc/php/fpm-php7.3/php.ini`
+Find and uncomment out `;cgi.fix_pathinfo=1` and change it to equal **0**.
+
+I'm using systemd, so I ran `systemctl enable php-fpm@7.3 --now` to start and
+enable the service at boot. Take a peek in /var/run/
+
+ ls -l /var/run/php7-fpm.socket
+ srw-rw---- 1 nginx nginx 0 Jan 27 10:08 /var/run/php7-fpm.socket
+
+Notice it is owned by nginx.
+
+Fastcgi
+=======
+
+Fastcgi will be responible for serving cgi bin files for nagios. These are
+nagios programs written in C. To do so, Nginx talks to a spawner which spawns
+fcgiwrap which in turn runs the programs.
+
+spawn-fcgi doesn't really have a configuration file from what I can tell. When
+merged onto my system, it's configuration is handled by the init.d service
+script reading variables from /etc/conf.d/spawn-fcgi and setting command line
+options.
+
+To simplify things, I just created a simple systemd service unit and hard coded
+the options I needed into it. Here is the service file I came up with:
+
+ [Unit]
+ Description=Simple spawn-fcgi service
+
+ [Service]
+ Type=simple
+ ExecStart=/usr/bin/spawn-fcgi -n -U 999 -G 235 -s /var/run/fcgiwrap.socket /usr/sbin/fcgiwrap
+
+ [Install]
+ WantedBy=multi-user.target
+
+Explanation of parameters:
+
+* `-n` don't fork
+* `-U 999` set socket user permissions to UID 999 which is Nginx
+* `-G 235` set socket group permissions to GID 235 which is Nginx
+* `-s /var/run/fcgiwrap.socket` create a unix socket at this path
+* `/usr/sbin/fcgiwrap` spawn this fcgi binary
+
+Start and enable this service with `systemctl enable spawn-fcgi --now` should
+produce a socket file similar to the php7 one created earlier. This will be used
+in our nginx config later.
+
+Nginx Config
+============
+
+My nginx config is all in one file, so adjust my changes as per your needs.
+The first change we need to make is inside the `http` declaration. We need to
+specify the two upstream servers (in this case servers on the local system via
+sockets). One for php and one for cgi-bin.
+
+Each one will reference the sockets we created earlier.
+
+ upstream php {
+ server unix:/var/run/php7-fpm.socket;
+ }
+
+ upstream fcgiwrap {
+ server unix:/var/run/fcgiwrap.socket;
+ }
+
+The default nginx config will have a server declaration for your site. Nested
+in here you will need the following location declarations. The location
+declaration `/nagios` and will result in being able to access nagios by
+navigating to the website url like so: randomsite.com/nagios
+
+ location ~ /nagios/ {
+ alias /usr/share/nagios/htdocs;
+ auth_basic "Nagios Restricted Access";
+ auth_basic_user_file /etc/nagios/htpasswd.users;
+
+_note here the path to htdocs was discovered earlier_
+
+ index index.php index.html;
+ location ^~ /nagios/cgi-bin {
+ alias /usr/lib64/nagios/cgi-bin;
+ include /etc/nginx/fastcgi_params;
+ fastcgi_param AUTH_USER $remote_user;
+ fastcgi_param REMOTE_USER $remote_user;
+ fastcgi_param SCRIPT_FILENAME $request_filename;
+ fastcgi_pass unix:/var/run/fcgiwrap.socket;
+ fastcgi_param PATH_INFO $fastcgi_script_name;
+ }
+ location ~ .php$ {
+ proxy_set_header REMOTE_USER $remote_user;
+ include fastcgi_params;
+ fastcgi_param AUTH_USER $remote_user;
+ fastcgi_param REMOTE_USER $remote_user;
+ fastcgi_param SCRIPT_FILENAME $request_filename;
+ fastcgi_param SCRIPT_NAME $fastcgi_script_name;
+ fastcgi_pass unix:/var/run/php7-fpm.socket;
+ fastcgi_param PATH_INFO $fastcgi_script_name;
+ }
+ }
+
+ location /nagios/stylesheets {
+ alias /usr/share/nagios/htdocs/stylesheets;
+ }
+
+What's happening here:
+
+* location ~ /nagios/ causes the uri to match `/nagios/` as a case sensitive
+ regular expression. Without the `~`, an article like this with it's name
+ starting with nagios might also fall into that location
+* location ^~ is a non regular expression match of the uri
+* fastcgi_param directives are passing parameters from the browser to the cgi
+ script.
+* fastcgi_pass passes the request to the socket setup as an upstream server.
+
+Read more about locations on [digitalocean][1]
+
+Tags: gentoo, linux, nagios
+
+[1]: https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms
diff --git a/nginx-as-a-file-server.html b/nginx-as-a-file-server.html
new file mode 100644
index 0000000..eef51d1
--- /dev/null
+++ b/nginx-as-a-file-server.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+Nginx as a file server
+
+
There are many ways to serve files. Here is a quick note of how I edited the
+default raspbian nginx conf files to enable a simple directory with browsing to
+be served from a raspberry pi
+
+
+
+
Install nginx-light
+
sudo apt-get install nginx-light -y
+
+
+
+
Make sure group other has x permissions all the way up the tree to where
+ content will be served from. Security warning I recommend only doing this
+ on an internally facing pi.
+
diff --git a/nginx-as-a-file-server.md b/nginx-as-a-file-server.md
new file mode 100644
index 0000000..d520763
--- /dev/null
+++ b/nginx-as-a-file-server.md
@@ -0,0 +1,38 @@
+Nginx as a file server
+
+FTP, SMB, SSH, HTTP... The list goes on.
+
+There are many ways to serve files. Here is a quick note of how I edited the
+default raspbian nginx conf files to enable a simple directory with browsing to
+be served from a raspberry pi
+
+---
+
+1. Install nginx-light
+
+ sudo apt-get install nginx-light -y
+
+2. Make sure group `other` has x permissions all the way up the tree to where
+ content will be served from. *Security warning* I recommend only doing this
+ on an internally facing pi.
+
+ sudo chmod o+x /media /media/JesseHD /media/JesseHD/Movies
+
+3. Edit `/etc/nginx/sites-available/default, uncomment the last server section
+
+ server {
+ listen 80;
+ listen [::]:80;
+
+ server_name 192.168.178.88;
+
+ root /media/JesseHD/Movies;
+ autoindex on;
+
+ }
+
+4. Restart nginx
+
+ sudo systemctl restart nginx
+
+Tags: raspberry-pi, nginx
diff --git a/powershell-links.html b/powershell-links.html
new file mode 100644
index 0000000..54f5da7
--- /dev/null
+++ b/powershell-links.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+Powershell Links
+
+
A bunch of links for powershell things I like and want to remember
+
+
+
Seb's IT Blog - Fix PowerShell snap package TLS issues
+On fresh PowerShell installs using the snap package, you can't use the
+gallery, Invoke-Webrequest or Invoke-RestMethod to any ssl sites unless
+you set this variable before running pwsh:
+
diff --git a/powershell-links.md b/powershell-links.md
new file mode 100644
index 0000000..43fc258
--- /dev/null
+++ b/powershell-links.md
@@ -0,0 +1,26 @@
+Powershell Links
+
+_A bunch of links for powershell things I like and want to remember_
+
+---
+
+* Seb's IT Blog - [Fix PowerShell snap package TLS issues][1]
+ On fresh PowerShell installs using the snap package, you can't use the
+ gallery, `Invoke-Webrequest` or `Invoke-RestMethod` to any ssl sites unless
+ you set this variable before running `pwsh`:
+
+ export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0
+
+* Kevin Marquette writes a series delving into specific topics on PowerShell.
+ Like in this weeks entry [PowerShell: Everything you wanted to know about
+ PSCustomObject](https://powershellexplained.com/2016-10-28-powershell-everything-you-wanted-to-know-about-pscustomobject/?utm_source=twitter&utm_medium=blog&utm_content=bottomlink)
+ has some great extended functionality of custom objects that I did not know
+ about.
+
+* Another amazing bost by Kevin Marquette. This time on arrays. Ashamed to say I
+ did not know adding to arrays was so expensive! [check it
+ out](https://powershellexplained.com/2018-10-15-PowerShell-arrays-Everything-you-wanted-to-know/?utm_source=twitter&utm_medium=blog&utm_content=bottomlink)
+
+Tags: powershell-links, link-lists
+
+[1]:https://megamorf.gitlab.io/2018/10/17/ps-core-snap-tls-issue.html
diff --git a/powershell-syntax-now-supported-by-ale-vim-plugin.html b/powershell-syntax-now-supported-by-ale-vim-plugin.html
new file mode 100644
index 0000000..bca5507
--- /dev/null
+++ b/powershell-syntax-now-supported-by-ale-vim-plugin.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+Powershell syntax now supported by ALE (Vim) plugin
+
+
ALE project has approved my PR to show powershell syntax errors by parsing
+the powershell by powershell itself. If the current buffer has a filetype of
+Powershell, the buffer is run through the following powershell script to check
+for syntax errors. Errors are then displayed in Vim by ALE:
+
diff --git a/powershell-syntax-now-supported-by-ale-vim-plugin.md b/powershell-syntax-now-supported-by-ale-vim-plugin.md
new file mode 100644
index 0000000..643abf4
--- /dev/null
+++ b/powershell-syntax-now-supported-by-ale-vim-plugin.md
@@ -0,0 +1,19 @@
+Powershell syntax now supported by ALE (Vim) plugin
+
+[ALE][1] project has approved my PR to show powershell syntax errors by parsing
+the powershell by powershell itself. If the current buffer has a filetype of
+Powershell, the buffer is run through the following powershell script to check
+for syntax errors. Errors are then displayed in Vim by ALE:
+
+---
+
+ Param($Script)
+ trap {$_; continue } & {
+ $Contents = Get-Content -Path $Script;
+ $Contents = [string]::Join([Environment]::NewLine, $Contents);
+ [void]$ExecutionContext.InvokeCommand.NewScriptBlock($Contents);
+ };
+
+Tags: ale, vim, powershell
+
+[1]:https://github.com/w0rp/ale
diff --git a/precision-5510---gentoo-gnulinux.html b/precision-5510---gentoo-gnulinux.html
new file mode 100644
index 0000000..5f01e8c
--- /dev/null
+++ b/precision-5510---gentoo-gnulinux.html
@@ -0,0 +1,376 @@
+
+
+
+
+
+
+
+Precision 5510 - Gentoo GNU/Linux
+
+
This documents all configurations, apps and tweaks to get a nicely working Linux
+machine.
+
+
Installation
+
Partition
+
The system was built with an existing Windows EFI partition table but this
+weekend I converted it over to a luks/dmcrypt partition scheme. Thus the
+table was created is as follows:
+
+
200Mb ESP volume
+
477.8G Linux filesystem
+
+
The Linux filesystem is an aes-xts-plain64 with a 512 key size.
After the encrypted volume is created, and opened, lvm was used to create a
+444Gb partition for root and the remaining 32Gb for swap/resume. The root volume
+then formatted with btrfs.
+
mkfs.btrfs /dev/mapper/lvm-root
+
+
Mounting the btrfs root subvolume in the Gentoo Live install:
+
mkdir /mnt/btrfs
+ mount /dev/mapper/lvm-root /mnt/btrfs
+
The original stage3 tarball was stage3-amd64-systemd-20190823.tar.bz2
+systemd was chosen so that I'm using the same init system that I need to support
+for my day job.
+
After stage 3 is extracted, mount the home subvolume and boot volume:
+
mount /dev/mapper/lvm-root /mnt/gentoo/home -o subvol=@home
+ mount /dev/nvme0n1p1 /mnt/gentoo/boot
+
+
Chroot in as per the Gentoo handbook
+
Portage
+
Initial portage make.conf setup to get going should include the following:
More settings to be discussed in Make.conf section later. This is all that
+is relevant for the initial install.
+
Kernel
+
Kernel config can be found on my kernel-configs github
+repo
+Make it with -j8 for all cores and after installed, edit /etc/default/grub:
+
GRUB_CMDLINE_LINUX="dobtrfs rootfstype=btrfs"
+
+
Use genkernel-next to build an initramfs and install grub
+
genkernel initramfs
+ grub-install /dev/nvme0n1
+
+
Applications
+
First app in vim, as it is not in Gentoo base, other handy apps for getting the
+system up and running:
+
+
app-editors/vim
+
app-admin/sudo
+
app-portage/eix
+
app-portage/gentoolkit
+
dev-vcs/git
+
sys-apps/usbutils
+
sys-fs/btrfsprogs
+
sys-boot/os-prober
+
sys-kernel/genkernel
+
+
Note Genkernel pulls in sys-kernel/linux-firmware which has the binary blobs
+required to get the wifi chip working on the Precision 5510.
+
World build
+
As per the Handbook, build the world, install the kernel, grub and reboot.
+But! Don't forget to set the root password
+
First setup
+
After first boot systemd has everything you need to get connected to the network
+to get everything going. Create a file in /etc/systemd/network to setup dhcp on
+eth0. Enable systemd-networkd to get going until networkmanager later.
+
Administration
+
Setup sudo for quicker elevation:
+
vim /etc/sudoers
+
+ %wheel ALL=(ALL) NOPASSWD: ALL
+
+
Useful groups
+
wheel : Allows to su to root, or use sudo
+plugdev : Allows to connect to wifi as regular user and other hardware stuff
+portage : Can write into portage distfiles for testing and making ebuilds
+
Sleep and hibernate
+
Swap file is big enough to hold most of the RAM. Grub config is updated to
+specify the swap partition UUID as the resume parameter
For virtualization, I primarily want to interface with VM's using gnome-boxes,
+however as it lacks the sophistication for complex VM's, I also install
+virt-manager.
Allow Gnome-Boxes to use libvirt's networking. Also requires user to be a member
+of qemu group
+
cat /etc/qemu/bridge.conf
+
+ allow virbr0
+
+
Backups
+
Thanks to the power of btrfs, backups are facilitated easily by snapshots.
+Currently I have a systemd timer set to fire every hour. It fires a script which
+does the following:
+
+
Mount the root btrfs volume to /mnt/btrfs (this houses 2 subvols)
+
+
Snapshot each subvol into /mnt/btrfs/snapshots/subvolname-yyyy-MM-dd-hh:mm:ss
+
+
Prune any snapshots that are not any of the following:
+
+
in the last 24 hours
+
daily in the last month
+
monthly until the backup drive fills to 10% free
+
+
+
If a designated backup drive is attached, transfer all snapshots
+
+
Delete all bar the last 2 transfered per subvolume
+
+
+
Finally, if the drive is not attached, when it does become available the script
+is invoked with a parameter to just catch up on the snapshots.
+
The script can be found on
+github
+and the systemd timer and service look like this:
In my shed the wifi is weak. I'm on wired here, so don't need the wifi.
+Thankfully NetworkManager offers ability to run scripts when connections change.
At home, I'm using a Targus USB 3.0 dock to connect to two monitors. It's pretty
+convinient but it does use a few extra joules of battery (as shown by powertop).
+
Instead of manually stopping and starting the dlm service. I can use systemd and
+udev rules to run the service only when the device is attached.
This rule will start dlm when the usb device is detected. The following
+alteration to the systemd unit for dlm ensures that when the device is removed,
+the service is stopped.
+
diff --git a/precision-5510---gentoo-gnulinux.md b/precision-5510---gentoo-gnulinux.md
new file mode 100644
index 0000000..7dc6dcd
--- /dev/null
+++ b/precision-5510---gentoo-gnulinux.md
@@ -0,0 +1,421 @@
+Precision 5510 - Gentoo GNU/Linux
+
+This documents all configurations, apps and tweaks to get a nicely working Linux
+machine.
+
+---
+
+Installation
+============
+
+Partition
+---------
+
+The system was built with an existing Windows EFI partition table but this
+weekend I converted it over to a luks/dmcrypt partition scheme. Thus the
+table was created is as follows:
+
+1. 200Mb ESP volume
+2. 477.8G Linux filesystem
+
+The Linux filesystem is an aes-xts-plain64 with a 512 key size.
+
+ cryptsetup luksFormat /dev/nvme0n1p6 -c aes-xts-plain64 -s 512
+
+After the encrypted volume is created, and opened, lvm was used to create a
+444Gb partition for root and the remaining 32Gb for swap/resume. The root volume
+then formatted with btrfs.
+
+ mkfs.btrfs /dev/mapper/lvm-root
+
+Mounting the btrfs root subvolume in the Gentoo Live install:
+
+ mkdir /mnt/btrfs
+ mount /dev/mapper/lvm-root /mnt/btrfs
+
+Create 2 subvolumes in the / root and mount @root
+
+ btrfs subvolume create /mnt/btrfs/\@root
+ btrfs subvolume create /mnt/btrfs/\@home
+
+ mount /dev/mapper/lvm-root /mnt/gentoo -o subvol=@root
+
+Stage3
+------
+
+The original stage3 tarball was `stage3-amd64-systemd-20190823.tar.bz2`
+systemd was chosen so that I'm using the same init system that I need to support
+for my day job.
+
+After stage 3 is extracted, mount the home subvolume and boot volume:
+
+ mount /dev/mapper/lvm-root /mnt/gentoo/home -o subvol=@home
+ mount /dev/nvme0n1p1 /mnt/gentoo/boot
+
+Chroot in as per the Gentoo handbook
+
+Portage
+-------
+
+Initial portage `make.conf` setup to get going should include the following:
+
+ COMMON_FLAGS="-march=skylake -O2 -pipe"
+ VIDEO_CARDS="intel i965"
+ MAKEOPTS="-j9 -l8"
+ GENTOO_MIRRORS="http://ftp.swin.edu.au/gentoo"
+ EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=8"
+ FEATURES="${FEATURES} parallel-fetch"
+
+More settings to be discussed in __Make.conf__ section later. This is all that
+is relevant for the initial install.
+
+Kernel
+------
+
+Kernel config can be found on my [kernel-configs github
+repo](https://github.com/zigford/kernel-configs/tree/master/Precision%205510)
+Make it with `-j8` for all cores and after installed, edit /etc/default/grub:
+
+ GRUB_CMDLINE_LINUX="dobtrfs rootfstype=btrfs"
+
+Use genkernel-next to build an initramfs and install grub
+
+ genkernel initramfs
+ grub-install /dev/nvme0n1
+
+Applications
+------------
+
+First app in vim, as it is not in Gentoo base, other handy apps for getting the
+system up and running:
+
+* app-editors/vim
+* app-admin/sudo
+* app-portage/eix
+* app-portage/gentoolkit
+* dev-vcs/git
+* sys-apps/usbutils
+* sys-fs/btrfsprogs
+* sys-boot/os-prober
+* sys-kernel/genkernel
+
+__Note__ Genkernel pulls in sys-kernel/linux-firmware which has the binary blobs
+required to get the wifi chip working on the Precision 5510.
+
+World build
+-----------
+
+As per the Handbook, build the world, install the kernel, grub and reboot.
+But! Don't forget to set the root password
+
+First setup
+===========
+
+After first boot systemd has everything you need to get connected to the network
+to get everything going. Create a file in /etc/systemd/network to setup dhcp on
+eth0. Enable systemd-networkd to get going until networkmanager later.
+
+Administration
+--------------
+
+Setup `sudo` for quicker elevation:
+
+ vim /etc/sudoers
+
+ %wheel ALL=(ALL) NOPASSWD: ALL
+
+Useful groups
+-------------
+
+wheel : Allows to su to root, or use sudo
+plugdev : Allows to connect to wifi as regular user and other hardware stuff
+portage : Can write into portage distfiles for testing and making ebuilds
+
+Sleep and hibernate
+-------------------
+
+Swap file is big enough to hold most of the RAM. Grub config is updated to
+specify the swap partition UUID as the resume parameter
+
+ GRUB_CMDLINE_LINUX="dobtrfs rootfstype=btrfs resume=UUID=9a900eaa-0312-4796-93f8-da3245add9d4"
+
+Suspend then hibernate delay is set to 4 hours:
+
+ vim /etc/systemd/sleep.conf
+
+ [Sleep]
+ HibernateDelaySec=240min
+
+Lidswitch is set to suspend then hibernate
+
+ vim /etc/systemd/logind.conf
+
+ [Login]
+ HandleLidSwitch=suspend-then-hibernate
+ HandleLidSwitchDocked=ignore
+
+Xorg and Gnome
+==============
+
+use flags for gnome added to `make.conf`
+
+ USE="gtk bluetooth gnome -qt gdm samba acl vim readline fuse"
+ L10N="en" # for dictionary in evolution
+
+Explanation:
+
+`fuse` is required for `gnome-gvfs` (which is a dep of gnome-base/gnome-vfs).
+This makes paths mounted from gnome, visible at /run/user/UID/gvfs
+
+emerge gnome-base/gnome and the following apps
+
+* gnome-base/gnome-vfs # For smb connections in nautilus
+* gnome-extra/evolution-ews # Connect evolution to exchange online
+* x11-terms/kitty # terminal with ligature font support
+* www-client/firefox-bin
+
+Packages for work
+=================
+
+* net-vpn/networkmanager-openconnect # vpn in networkmanager for work
+* net-misc/freerdp # Rdp to servers for work
+* net-misc/icaclient # Citrix client for work
+
+Extending Gentoo
+================
+
+Apart from emerge, I'm making use of other package managers on Gentoo to
+complete the environment.
+
+Install layman
+
+ emerge -a layman
+ layman -L
+ layman -a snapd
+ layman -a flatpak
+ layman -o http://jesseharrisit.com/overlay.xml -f -a gentoo-zigford
+ emerge -a app-emulation/snapd
+ emerge -a app-emulation/flatpak
+
+
+snapd packages
+--------------
+
+ snap install chromium
+ snap install teams-for-linux
+ snap install p3xonenote
+ snap install caprine
+
+KVM - Qemu
+==========
+
+For virtualization, I primarily want to interface with VM's using _gnome-boxes_,
+however as it lacks the sophistication for complex VM's, I also install
+_virt-manager_.
+
+Use flags for virtualization:
+
+ app-emulation/libvirt apparmor virt-network
+ app-emulation/qemu doc usbredir smartcard spice
+ app-emulation/spice smartcard
+ net-dns/dnsmasq script
+ net-misc/spice-gtk smartcard usbredir vala
+
+Kernel settings to enable networking in the kernel mentioned earlier.
+qemu settings required for efi virtual machine
+
+ vim /etc/libvirt/qemu.conf
+ security = "none"
+ nvram = [
+ "/usr/share/edk2-ovmf/OVMF_CODE.fd:/usr/share/edk2-ovmf/OVMF_VARS.fd"
+ ]
+
+For a vm in boxes to run efi:
+
+ cp /etc/libvirt/qemu.conf ~/.config/libvirt
+
+
+Group memberships:
+
+ usermod -G kvm,libvirt,qemu -a username
+
+Tweaks to apparmor
+
+ sed -ie 's/#include
+
+
+
+
+
+
+Raspberry Pi 4
+
+
As soon as I heard the news about the Pi 4 release, I jumped on it. As a
+frequent Pi user for day to day tasks, I'm always keen for a speed boost.
+
+
One major thing interests me about the Pi 4. The 4Gb of RAM model means that it
+could be viable for running Gentoo. While Gentoo does run fine on previous
+models of the Pi, it hit's issues when updating.
+
Updating on Gentoo requires compiling from source and many software these days
+need quite a bit of RAM to compile quickly (using all 4 cores).
+
I didn't have the money to buy the 4Gb version right away, so I opted for the
+1Gb model.
+
This morning I completed the upgrade to Buster and aside from an issue with
+noobs the upgrade
+was smooth.
+
This blog post is the first composed and hosted on My Pi 4!
+
diff --git a/raspberry-pi-4.md b/raspberry-pi-4.md
new file mode 100644
index 0000000..a1cb890
--- /dev/null
+++ b/raspberry-pi-4.md
@@ -0,0 +1,24 @@
+Raspberry Pi 4
+
+As soon as I heard the news about the Pi 4 release, I jumped on it. As a
+frequent Pi user for day to day tasks, I'm always keen for a speed boost.
+
+---
+
+One major thing interests me about the Pi 4. The 4Gb of RAM model means that it
+could be viable for running Gentoo. While Gentoo does _run_ fine on previous
+models of the Pi, it hit's issues when updating.
+
+Updating on Gentoo requires compiling from source and many software these days
+need quite a bit of RAM to compile quickly (using all 4 cores).
+
+I didn't have the money to buy the 4Gb version right away, so I opted for the
+1Gb model.
+
+This morning I completed the upgrade to Buster and aside from an issue with
+[noobs](https://www.raspberrypi.org/forums/viewtopic.php?t=212452) the upgrade
+was smooth.
+
+This blog post is the first composed and hosted on My Pi 4!
+
+Tags: raspberry-pi
diff --git a/replacing-bash-scripting-with-powershell.html b/replacing-bash-scripting-with-powershell.html
new file mode 100644
index 0000000..36227d7
--- /dev/null
+++ b/replacing-bash-scripting-with-powershell.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+Replacing bash scripting with powershell
+
+
This article on replacing bash scripting with python was being shared
+around on twitter today.
+
+
+
The problem is if you want to do basically anything else, e.g. write logic,
+use control structures, handle complex data... You're going to have big
+problems. When Bash is coordinating external programs, it's fantastic. When
+it's doing any work whatsoever itself, it disintegrates into a pile of
+garbage.
+
+
+
To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+
As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+
I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the raspberry pi and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+
If you have any comments or feedback, please email
+me and let me know if you will allow your feedback to be posted here.
+
diff --git a/replacing-bash-scripting-with-powershell.md b/replacing-bash-scripting-with-powershell.md
new file mode 100644
index 0000000..09c18d7
--- /dev/null
+++ b/replacing-bash-scripting-with-powershell.md
@@ -0,0 +1,30 @@
+Replacing bash scripting with powershell
+
+[This][1] article on replacing bash scripting with python was being shared
+around on twitter today.
+
+> The problem is if you want to do basically anything else, e.g. write logic,
+> use control structures, handle complex data... You're going to have big
+> problems. When Bash is coordinating external programs, it's fantastic. When
+> it's doing any work whatsoever itself, it disintegrates into a pile of
+> garbage.
+
+To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the [raspberry pi](raspberry-pi.html) and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+If you have any comments or feedback, please [email](mailto:jesse@zigford.org)
+me and let me know if you will allow your feedback to be posted here.
+
+Tags: shells, bash, python, scripting, powershell
+
+[1]: https://github.com/ninjaaron/replacing-bash-scripting-with-python
diff --git a/replacing-bash-scripting-with-python.md b/replacing-bash-scripting-with-python.md
new file mode 100644
index 0000000..09c18d7
--- /dev/null
+++ b/replacing-bash-scripting-with-python.md
@@ -0,0 +1,30 @@
+Replacing bash scripting with powershell
+
+[This][1] article on replacing bash scripting with python was being shared
+around on twitter today.
+
+> The problem is if you want to do basically anything else, e.g. write logic,
+> use control structures, handle complex data... You're going to have big
+> problems. When Bash is coordinating external programs, it's fantastic. When
+> it's doing any work whatsoever itself, it disintegrates into a pile of
+> garbage.
+
+To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the [raspberry pi](raspberry-pi.html) and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+If you have any comments or feedback, please [email](mailto:jesse@zigford.org)
+me and let me know if you will allow your feedback to be posted here.
+
+Tags: shells, bash, python, scripting, powershell
+
+[1]: https://github.com/ninjaaron/replacing-bash-scripting-with-python
diff --git a/ripping-an-album-from-youtube---cli-style.html b/ripping-an-album-from-youtube---cli-style.html
new file mode 100644
index 0000000..283edd6
--- /dev/null
+++ b/ripping-an-album-from-youtube---cli-style.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+Ripping an album from youtube - CLI Style
+
+
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
+
+
This post is a quick tip on ripping an album from youtube using a web browser and
+a few cli apps. Remember, most tasks don't need a bloated gui to be done
+efficiently.
At this point you have all the tools you need to get the job done. Have a browse
+around on youtube to find the album you want an offline copy of and copy the url of the page. Then from a
+command prompt:
While the audio file is downloading, your going to want to create a simple txt
+file which lists the tracks, titles and start and end timings. I simply fast
+forwarded through each track toward the end of the song and made note of the
+mintes and seconds. I created a file with each line representing a track in the album with the following details:
+
diff --git a/ripping-an-album-from-youtube---cli-style.md b/ripping-an-album-from-youtube---cli-style.md
new file mode 100755
index 0000000..7a7b6e5
--- /dev/null
+++ b/ripping-an-album-from-youtube---cli-style.md
@@ -0,0 +1,115 @@
+Ripping an album from youtube - CLI Style
+
+With the advent of [Spotify](https://www.spotify.com/),
+[Apple Music](https://www.apple.com/music), [Youtube](https://youtube.com),
+[Pandora](https://www.pandora.com) and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+[3ds's](https://en.wikipedia.org/wiki/Nintendo_3DS) to play local mp3 files.
+
+---
+
+This post is a quick tip on ripping an album from youtube using a web browser and
+ a few cli apps. Remember, most tasks don't need a bloated gui to be done
+efficiently.
+
+### Requirement
+1. A Web browser that can play youtube videos
+2. [Youtube-dl](http://rg3.github.io/youtube-dl/)
+3. ffmpeg
+4. Bash
+
+### Prep work
+
+#### Install ffmpeg
+
+Ubuntu
+
+ sudo apt-get install ffmpeg -y
+
+Fedora
+
+ sudo yum install ffmpeg
+
+Gentoo
+
+ sudo emerge ffmpeg
+
+#### Install Youtube-DL
+
+If your on a Debian or Ubuntu flavor of linux
+
+ sudo apt-get install youtube-dl -y
+
+Fedora
+
+ sudo yum install youtub-dl
+
+On my favourite, Gentoo
+
+ emerge --ask youtube-dl
+
+### Download the album
+
+At this point you have all the tools you need to get the job done. Have a browse
+around on youtube to find the album you want an offline copy of and copy the url of the page. Then from a
+command prompt:
+
+ mkdir ~/tmp
+ cd ~/tmp
+ youtube-dl -x --audio-format mp3 https://youtube.com/fullurltovideo
+
+### Create a list file
+
+While the audio file is downloading, your going to want to create a simple txt
+file which lists the tracks, titles and start and end timings. I simply fast
+forwarded through each track toward the end of the song and made note of the
+mintes and seconds. I created a file with each line representing a track in the album with the following details:
+
+_Track Number_-_Track title_-_Start duration_-_End duration_
+
+The durations are in the form of HH:MM:SS. Here is what my file looks like:
+
+ cat ~/tmp/list.txt
+ 01-The Greatest Show-00:0:00-5:08
+ 02-A Million Dreams-00:5:08-9:38
+ 03-A Million Dreams Reprise-00:9:39-10:38
+ 04-Come Alive-00:10:38-14:25
+ 05-The Other Side-00:14:25-17:58
+ 06-Never Enough-00:17:58-21:28
+ 07-This Is Me-00:21:38-25:23
+ 08-Rewrite the Stars-00:25:23-28:59
+ 09-Tightrope-00:28:59-32:50
+ 10-Never Enough (Reprise)-00:32:50-34:14
+ 11-From Now On-00:34:14-40:12
+
+### Split the audio to seperate mp3's
+
+Now that my file has finished downloading, I can convert the file into separate
+song files
+
+Here is the little bash script I wrote to split the file based on the contents
+of the list.txt file
+
+*Note the `-nostdin` parameter below is required to prevent ffmpeg from
+consuming bytes from input which makes it go screwy*
+
+ cat splitsong.sh
+ #!/bin/bash
+
+ while IFS=- read tr ti s e; do
+ FILENAME="${tr} - The Greatest Showman - ${ti}.mp3"
+ ffmpeg -nostdin \
+ -i "$2" -acodec copy \
+ -ss "$s" -to "$e" \
+ "${FILENAME}" < /dev/null
+ done <"$1"
+
+I then execute the file like this:
+
+ chmod +x splitsong.sh
+ ./splitsong.sh list.txt 'Some Sound Track List-qDZLSHY1ims.mp3'
+
+And the whole thing is over in a matter of seconds.
+
+Tags: bash-tips, mp3, ffmpeg, cli, scripting, youtube, music, linux
diff --git a/screen-sharing-and-capture-in-wayland-on-gentoo.html b/screen-sharing-and-capture-in-wayland-on-gentoo.html
new file mode 100644
index 0000000..6d46a1a
--- /dev/null
+++ b/screen-sharing-and-capture-in-wayland-on-gentoo.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+Screen sharing and capture in Wayland on Gentoo
+
+
The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
+
+
+
+
Update
+
+
While I thought this was working, when I came to a meeting to share
+my screen, my collegues could not see anything bar a single application.
+
+
I did some troubleshooting on my own using Zooms record feature and
+was unable to resolve it using the Zoom flatpak package.
+
+
I installed Zoom directly as an ebuild and was able to see the entire screen
+using that.
+
+
Zoom
+
+
Firstly, I'm using zoom via Flatpak. Flatpak is an official overlay
+on Gentoo.
+
+
Once flatpak and zoom is installed via:
+
+
flatpak install us.zoom.Zoom
+
+
+
You can enable screen sharing via the following tweaks.
+
+
Tweak 1: Allow flatpak to talk to gnome stuff I don't really understand
Tweak 2: Set this in your ~/.var/app/us.zoom.Zoom/config/zoomus.conf
+
+
[General]
+ enableWaylandShare=true
+
+
+
OBS-Studio
+
+
This guy Georges Stavracas wrote an OBS plugin to interface with
+xdg-desktop-portal. It works quite well and I've written an ebuild
+for it to work in Gentoo.
+
+
You can add my overlay here
+or pilfer my ebuild directly under media-plugins/obs-xdg-portal.
+
+
Hot Tip
+
+
At first I could not get it to work, and that is because I lacked the
+understanding about how pipewire and xdg-desktop-portal works.
+One thing I found sorely lacking is the documentation. Eventually I
+stumbled upon someone saying you need to enable (or start) pipewire:
+
+
systemctl --user enable --now pipewire
+
+
+
Now the plugin allows you to pick your desktop. Strangely, the screenshots
+show the ability to choose an app, whereas I can only choose my screen.
+
diff --git a/screen-sharing-and-capture-in-wayland-on-gentoo.md b/screen-sharing-and-capture-in-wayland-on-gentoo.md
new file mode 100644
index 0000000..9e15c85
--- /dev/null
+++ b/screen-sharing-and-capture-in-wayland-on-gentoo.md
@@ -0,0 +1,72 @@
+Screen sharing and capture in Wayland on Gentoo
+
+The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
+
+---
+
+## Update
+While I thought this was working, when I came to a meeting to share
+my screen, my collegues could not see anything bar a single application.
+
+I did some troubleshooting on my own using Zooms record feature and
+was unable to resolve it using the Zoom flatpak package.
+
+I installed Zoom directly as an ebuild and was able to see the entire screen
+using that.
+
+Zoom
+----
+
+Firstly, I'm using zoom via Flatpak. Flatpak is an official overlay
+on Gentoo.
+
+Once flatpak and zoom is installed via:
+
+ flatpak install us.zoom.Zoom
+
+You can enable screen sharing via the following tweaks.
+
+Tweak 1: Allow flatpak to talk to gnome stuff I don't really understand
+
+ sudo flatpak override --talk-name=org.gnome.Shell \
+ --talk-name=org.gnome.Shell.Screenshot \
+ --talk-name=org.gnome.SessionManager \
+ --talk-name=org.freedesktop.PowerManagement.Inhibit \
+ --talk-name=org.freedesktop.ScreenSaver us.zoom.Zoom
+
+Ref: https://github.com/flathub/us.zoom.Zoom/pull/182
+
+Tweak 2: Set this in your ~/.var/app/us.zoom.Zoom/config/zoomus.conf
+
+ [General]
+ enableWaylandShare=true
+
+OBS-Studio
+----------
+
+This guy Georges Stavracas wrote an OBS plugin to interface with
+xdg-desktop-portal. It works quite well and I've written an ebuild
+for it to work in Gentoo.
+
+You can add my overlay [here](https://github.com/zigford/gentoo-zigford)
+or pilfer my ebuild directly under media-plugins/obs-xdg-portal.
+
+### Hot Tip
+
+At first I could not get it to work, and that is because I lacked the
+understanding about how pipewire and xdg-desktop-portal works.
+One thing I found sorely lacking is the documentation. Eventually I
+stumbled upon someone saying you need to enable (or start) pipewire:
+
+ systemctl --user enable --now pipewire
+
+Now the plugin allows you to pick your desktop. Strangely, the screenshots
+show the ability to choose an app, whereas I can only choose my screen.
+
+Oh well, let me know if you know why.
+
+Cheers
+
+Tags: gentoo, gnome, wayland, zoom, obs
diff --git a/scripts.html b/scripts.html
new file mode 100644
index 0000000..17b34ed
--- /dev/null
+++ b/scripts.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+Scripts
+
+
It's no secret I use BTRFS, so I have a fair amount of data stored on this
+filesystem. With most popular filesystems you have no way of knowing if your
+data is the same read as was originally written. A few modern filesystems
+support a function known as scrubbing.
+
+
+
+
Scrubbing is:
+
+
+
btrfs scrub is used to scrub a btrfs filesystem, which will read all
+ data and metadata blocks from all devices and verify checksums.
+ Automatically repair corrupted blocks if there’s a correct copy
+ available.
+
+
+
On the most common filesystems1 data is written and read but
+never validated. Between writing and reading data, sometimes the data can get
+changed. This could occur due to a media fault or firmware bug or user error.
+(dd the wrong volume anyone?)
+
+
Before this technology was available, it was always a worry that my most
+precious stored family photos and videos could at any time become silently
+corrupted without my knowing!
+
+
Now thanks to BTRFS (or ZFS if your more into the BSDs) you never have to
+suffer not knowing about data corruption, and as a bonus you can prevent it too.
+(if you have mirrored volumes)
+
+
My BTRFS Volumes
+
+
I currently have the following volumes in BTRFS:
+
+
+
root sd card of the Raspberry Pi 4 hosting this site 32 gigs
+
7Tb external spinning disk attached to the RPI4
+
256Gb ssd boot volume on my main desktop PC
+
2Tb ssd home volume on my main desktop PC
+
3Tb + 2Tb external spinning disks connected via USB3 to my main desktop PC
+
500Gb nvme luks encrypted volume on precision 5510
+
1Tb external luks encrypted backup 2.5" USB2 sometimes attached to Precision
+5510
+
+
+
Backing them up
+
+
All of these systems have their root/home volumes backed up at least once via
+BTRFS send and in the case of the desktop PC, it also performs daily snapshots
+with restic to a cloud storage system.
+
+
RPI:
+
+
Daily snapshots sent to it's locally attached 7Tb volume
+Occasionally I btrfs send the 7Tb volume to the 3+2 spanned external disks on
+the PC. I'm not too fussed if I loose the 7Tb volume. It is mainly backup and
+some unimportant media.
+
+
PC:
+
+
I wrote a little bash
+script
+to btrfs snapshot and send incrementally backups every hour for the last 24
+hours, day for the last month and monthly until it gets to a % full. These go to
+the 2+3 Tb external disks. Restic performs cloud backups
+
+
Precision:
+
+
Thee same bash script on a systemd timer, sends backups to my external disk when
+it's connected
+
+
Scrubbing it all
+
+
Not long ago I was running my home volumes on mirrored spinning disks. In the
+modern era these were beginning to feel slow and one drive started failing.
+BTRFS scrub would fix errors for me then:
+
+
+
+
You can see that a few errors were corrected because another copy of the block
+was available. The whole 800+Gb of data took an hour 44 to scrub. Compare that
+to today:
+
+
+
+
In this screenshot the bottom left terminal is a scrub of my new 2Tb ssd.
+Bottom right is 256Gb boot volume.
+Top left is a snapshot of a backup of the 7Tb volume on the 2+3Tb spanning
+disks.
+And top right is the 7Tb volume itself connected to the RPI4.
+
diff --git a/scrubbing-my-data---btrfs.md b/scrubbing-my-data---btrfs.md
new file mode 100644
index 0000000..e638a1c
--- /dev/null
+++ b/scrubbing-my-data---btrfs.md
@@ -0,0 +1,96 @@
+Scrubbing my data - BTRFS
+
+It's no secret I use BTRFS, so I have a fair amount of data stored on this
+filesystem. With most popular filesystems you have no way of knowing if your
+data is the same read as was originally written. A few modern filesystems
+support a function known as scrubbing.
+
+---
+
+Scrubbing is:
+
+> btrfs scrub is used to scrub a btrfs filesystem, which will read all
+> data and metadata blocks from all devices and verify checksums.
+> Automatically repair corrupted blocks if there’s a correct copy
+> available.
+
+On the most common filesystems[^regfilesystems] data is written and read but
+never validated. Between writing and reading data, sometimes the data can get
+changed. This could occur due to a media fault or firmware bug or user error.
+(dd the wrong volume anyone?)
+
+Before this technology was available, it was always a worry that my most
+precious stored family photos and videos could at any time become silently
+corrupted without my knowing!
+
+Now thanks to BTRFS (or ZFS if your more into the BSDs) you never have to
+suffer not knowing about data corruption, and as a bonus you can prevent it too.
+(if you have mirrored volumes)
+
+My BTRFS Volumes
+----------------
+
+I currently have the following volumes in BTRFS:
+
+* root sd card of the Raspberry Pi 4 hosting this site 32 gigs
+* 7Tb external spinning disk attached to the RPI4
+* 256Gb ssd boot volume on my main desktop PC
+* 2Tb ssd home volume on my main desktop PC
+* 3Tb + 2Tb external spinning disks connected via USB3 to my main desktop PC
+* 500Gb nvme luks encrypted volume on precision 5510
+* 1Tb external luks encrypted backup 2.5" USB2 sometimes attached to Precision
+ 5510
+
+Backing them up
+---------------
+
+All of these systems have their root/home volumes backed up at least once via
+BTRFS send and in the case of the desktop PC, it also performs daily snapshots
+with restic to a cloud storage system.
+
+RPI:
+
+Daily snapshots sent to it's locally attached 7Tb volume
+Occasionally I `btrfs send` the 7Tb volume to the 3+2 spanned external disks on
+the PC. I'm not too fussed if I loose the 7Tb volume. It is mainly backup and
+some unimportant media.
+
+PC:
+
+I wrote a [little bash
+script](https://github.com/zigford/linux-worktools/blob/master/linux/snapshot)
+to btrfs snapshot and send incrementally backups every hour for the last 24
+hours, day for the last month and monthly until it gets to a % full. These go to
+the 2+3 Tb external disks. Restic performs cloud backups
+
+Precision:
+
+Thee same bash script on a systemd timer, sends backups to my external disk when
+it's connected
+
+Scrubbing it all
+----------------
+
+Not long ago I was running my home volumes on mirrored spinning disks. In the
+modern era these were beginning to feel slow and one drive started failing.
+BTRFS scrub would fix errors for me then:
+
+![screenshot][1]
+
+You can see that a few errors were corrected because another copy of the block
+was available. The whole 800+Gb of data took an hour 44 to scrub. Compare that
+to today:
+
+![screenshot][2]
+
+In this screenshot the bottom left terminal is a scrub of my new 2Tb ssd.
+Bottom right is 256Gb boot volume.
+Top left is a snapshot of a backup of the 7Tb volume on the 2+3Tb spanning
+disks.
+And top right is the 7Tb volume itself connected to the RPI4.
+
+Tags: btrfs, backup
+
+[^regfilesystems]: Ext2, Ext3, Ext4, XFS, NTFS, APFS, HFS+
+[1]: images/btrfs1.png
+[2]: images/btrfsscrub.png
diff --git a/setting-powershell-as-default-on-macos.html b/setting-powershell-as-default-on-macos.html
new file mode 100644
index 0000000..22cfa58
--- /dev/null
+++ b/setting-powershell-as-default-on-macos.html
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+Setting Powershell as default on MacOS
+
+
When you click on 'Terminal.app' on a stock MacOS system, your connected to
+the systems pseudo TTY which in turn launches your users default shell.
+
Terminal.app can be told to launch a process other than your users default
+shell (eg, powershell), but there are a few cases where if you might want
+to replace your shell system-wide. (eg, sudo can use powershell then)
+
+
Step 1
+
To do this, you first need to add powershell as an available system shell.
+This is done by adding the path to the powershell binary into /etc/shells.
The end result is that your /etc/shells file should look something like this:
+
$ cat /etc/shells
+ # List of acceptable shells for chpass(1).
+ # Ftpd will not allow users to connect who are not using
+ # one of these shells.
+
+ /bin/bash
+ /bin/csh
+ /bin/ksh
+ /bin/sh
+ /bin/tcsh
+ /bin/zsh
+ /usr/local/microsoft/powershell/6/pwsh
+
+
Step 2
+
The next step is to set your accounts shell. Do this interactivly by running
+chsh or chpass (they are both the same binary). You can set the Shell:
+parameter to the path to pwsh. You could also do this non-interactivly in
+bash:
+
$ chsh -s `which pwsh`
+
+
Or via powershell
+
PS> chsh -s "$((Get-Command pwsh).Source)"
+
+
Step 3
+
Powershell is now the default shell, but we are not finished yet. When bash
+is launched on macOS, the first thing executed is /etc/profile. In the
+profile /usr/libexec/path_helper is executed which sets up the PATH
+environment variable. Powershell doesn't do this so we need to setup a quick
+function in our powershell profile to do a similar process.
Although I've been running with this configuration for a few months, I'm not
+ sure doing this is excatly advisable. Some apps may be written to
+assume that bash is the default on MacOS. VSCode for example may give some
+greif.
+
diff --git a/setting-powershell-as-default-on-macos.md b/setting-powershell-as-default-on-macos.md
new file mode 100644
index 0000000..9073be4
--- /dev/null
+++ b/setting-powershell-as-default-on-macos.md
@@ -0,0 +1,110 @@
+Setting Powershell as default on MacOS
+
+When you click on 'Terminal.app' on a stock MacOS system, your connected to
+the systems pseudo TTY which in turn launches your users default shell.
+
+Terminal.app can be told to launch a process other than your users default
+shell (eg, powershell), but there are a few cases where if you might want
+to replace your shell system-wide. (eg, sudo can use powershell then)
+
+---
+
+### Step 1
+
+To do this, you first need to add powershell as an available system shell.
+This is done by adding the path to the powershell binary into `/etc/shells`.
+
+From bash you can do this:
+
+ $ which pwsh | sudo tee -a /etc/shells
+
+Or from an elevated pwsh:
+
+ PS> (Get-Command pwsh).Source | Add-Content /etc/shell
+
+The end result is that your /etc/shells file should look something like this:
+
+ $ cat /etc/shells
+ # List of acceptable shells for chpass(1).
+ # Ftpd will not allow users to connect who are not using
+ # one of these shells.
+
+ /bin/bash
+ /bin/csh
+ /bin/ksh
+ /bin/sh
+ /bin/tcsh
+ /bin/zsh
+ /usr/local/microsoft/powershell/6/pwsh
+
+### Step 2
+
+The next step is to set your accounts shell. Do this interactivly by running
+`chsh` or `chpass` (they are both the same binary). You can set the `Shell:`
+parameter to the path to pwsh. You could also do this non-interactivly in
+bash:
+
+ $ chsh -s `which pwsh`
+
+Or via powershell
+
+ PS> chsh -s "$((Get-Command pwsh).Source)"
+
+### Step 3
+
+Powershell is now the default shell, but we are not finished yet. When bash
+is launched on macOS, the first thing executed is /etc/profile. In the
+profile `/usr/libexec/path_helper` is executed which sets up the PATH
+environment variable. Powershell doesn't do this so we need to setup a quick
+function in our powershell profile to do a similar process.
+
+#### Create a powershell profile
+
+ PS> New-Item -ItemType Directory -Path (Split-Path -Path $profile -Parent) -force
+ PS> New-Item -ItemType File -Path $profile
+
+#### Contents of profile
+
+ function Get-Path {
+ [CmdLetBinding()]
+ Param()
+ $PathFiles = @()
+ $PathFiles += '/etc/paths'
+ $PathFiles = Get-ChildItem -Path /private/etc/paths.d | Select-Object -Expand FullName
+ $PathFiles | ForEach-Object {
+ Get-Content -Path $PSItem | ForEach-Object {
+ $_
+ }
+ }
+ $Paths
+ }
+
+ function Add-Path {
+ Param($Path)
+ $env:PATH = "${env:PATH}:$Path"
+ }
+
+ function Update-Environment{
+ [CmdLetBinding()]
+ Param()
+ $Paths = $env:PATH -split ':'
+ Get-Path | ForEach-Object {
+ If ($PSItem -notin $Paths) {
+ Write-Verbose "Adding $PSItem to Path"
+ Add-Path -Path $PSItem
+ }
+ }
+ }
+
+ Update-Environment
+
+## Warning
+
+Although I've been running with this configuration for a few months, I'm not
+ sure doing this is excatly advisable. Some apps may be written to
+assume that bash is the default on MacOS. VSCode for example may give some
+greif.
+
+Your mileage may vary.
+
+Tags: powershell, macos
diff --git a/snapd-repository-for-gentoo.html b/snapd-repository-for-gentoo.html
new file mode 100644
index 0000000..dd0c03e
--- /dev/null
+++ b/snapd-repository-for-gentoo.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+Snapd Repository for Gentoo
+
+
I've been maintaining my personal Gentoo overlay for sometime with my own ebuild
+of snapd. I've received a number of comments and questions about it, both via
+email, twitter and on github.
+
+
I also want to have it added to the layman respositories so that others can use
+it and maybe eventually contribute directly (or indirectly) to have it included
+in the main Gentoo portage tree.
+
At any rate, I've spun the latest snapd ebuild off into a seperate github
+repo
+I've also learnt about using branches in an overlay so you can add the stable
+branch and I can work on a testing snapd ebuild and have it sync to all my
+machines for testing.
+
Adding the stable one:
+
layman -o https://raw.githubusercontent.com/zigford/snapd/master/overlay.xml -f -a snapd
+
+
or adding the dev one:
+
layman -o https://raw.githubusercontent.com/zigford/snapd/master/overlay.xml -f -a snapd-dev
+
+
diff --git a/snapd-repository-for-gentoo.md b/snapd-repository-for-gentoo.md
new file mode 100644
index 0000000..5f0b314
--- /dev/null
+++ b/snapd-repository-for-gentoo.md
@@ -0,0 +1,30 @@
+Snapd Repository for Gentoo
+
+I've been maintaining my personal Gentoo overlay for sometime with my own ebuild
+of snapd. I've received a number of comments and questions about it, both via
+email, twitter and on github.
+
+---
+
+I also want to have it added to the layman respositories so that others can use
+it and maybe eventually contribute directly (or indirectly) to have it included
+in the main Gentoo portage tree.
+
+At any rate, I've spun the latest snapd ebuild off into a seperate [github
+repo](https://github.com/zigford/snapd)
+I've also learnt about using branches in an overlay so you can add the stable
+branch and I can work on a testing snapd ebuild and have it sync to all my
+machines for testing.
+
+Adding the stable one:
+
+ layman -o https://raw.githubusercontent.com/zigford/snapd/master/overlay.xml -f -a snapd
+
+or adding the dev one:
+
+ layman -o https://raw.githubusercontent.com/zigford/snapd/master/overlay.xml -f -a snapd-dev
+
+You would need to install [layman](https://wiki.gentoo.org/wiki/Layman) to do
+this.
+
+Tags: gentoo, portage, snapd
diff --git a/snaps-on-gentoo---the-saga-continues.html b/snaps-on-gentoo---the-saga-continues.html
new file mode 100644
index 0000000..ea020e6
--- /dev/null
+++ b/snaps-on-gentoo---the-saga-continues.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+Snaps on Gentoo - The saga continues
+
+
A while ago I posted about Snaps on Gentoo, about
+why and how to get it working. Sometime after that post, snaps stopped
+working and I didn't have the time to investigate.
+
Until last week that is.
+
+
Update 07/09/2019
+
My snapd ebuild is now in an overlay on it's own for your convenience.
+See here
+
TL;DR
+
If you just want to install my snapd ebuild, run this bit:
Last week I decided to have a crack at getting Gentoo running on my work
+owned "Precision 5510". It's a couple of years old now, but is quite
+servicable. I will want to use it booted into Gentoo for work now and again
+and this will involve Chromium (Firefox doesn't like launching Citrix
+sessions through the ICA client).
+
Chromium takes forever to build and that is just not fun, especially with
+the frequency that releases occur. So I set about getting snaps to work.
+
I installed JamesB192's personal overlay and found that snaps didn't work
+on this clean build.
+
JamesB192's ebuild seems to be written quite well, and it was easy to bump
+the version to the latest. What I found was that at some point snapd must
+have switched to require apparmor. I reviewed my previous kernel configs
+from when snapd was working and apparmor was not in my configuration.
+
Adding Apparmor support
+
AppArmor is a process confinement feature to restrict a process to specific
+abilities. You can enable it with the following kernel configuration:
+
CONFIG_SECURITY_APPARMOR=y
+
+
And the following boot commandline
+
apparmor=1 security=apparmor
+
+
Now to add apparmor support to the ebuild we need install an apparmor
+profile. The ./configure command in the source, generates one if the
+--enable-apparmor parameter is specified. I've added that to the ebuild.
+Then the Makefile translates paths in the profile depending on configure
+options. So I added the following to the ebuild
+
diff --git a/snaps-on-gentoo---the-saga-continues.md b/snaps-on-gentoo---the-saga-continues.md
new file mode 100644
index 0000000..77512a2
--- /dev/null
+++ b/snaps-on-gentoo---the-saga-continues.md
@@ -0,0 +1,77 @@
+Snaps on Gentoo - The saga continues
+
+A while ago I posted about [Snaps on Gentoo](snaps-on-gentoo.html), about
+why and how to get it working. Sometime after that post, snaps stopped
+working and I didn't have the time to investigate.
+
+Until last week that is.
+
+---
+
+## Update 07/09/2019
+
+My snapd ebuild is now in an overlay on it's own for your convenience.
+See [here](snapd-repository-for-gentoo.html)
+
+## TL;DR
+
+If you just want to install my snapd ebuild, run this bit:
+
+ echo app-portage/layman git >> /etc/portage/package.use/layman
+ emerge app-portage/layman
+ layman -o http://jesseharrisit.com/overlay.xml -f -a zigford
+ emerge app-emulation/snapd
+
+Read on for more details
+
+---
+
+Last week I decided to have a crack at getting Gentoo running on my work
+owned "[Precision 5510][1]". It's a couple of years old now, but is quite
+servicable. I will want to use it booted into Gentoo for work now and again
+and this will involve Chromium (Firefox doesn't like launching Citrix
+sessions through the ICA client).
+
+Chromium takes forever to build and that is just not fun, especially with
+the frequency that releases occur. So I set about getting snaps to work.
+
+I installed JamesB192's personal overlay and found that snaps didn't work
+on this clean build.
+
+JamesB192's ebuild seems to be written quite well, and it was easy to bump
+the version to the latest. What I found was that at some point snapd must
+have switched to require apparmor. I reviewed my previous kernel configs
+from when snapd was working and apparmor was not in my configuration.
+
+### Adding Apparmor support
+
+AppArmor is a process confinement feature to restrict a process to specific
+abilities. You can enable it with the following kernel configuration:
+
+ CONFIG_SECURITY_APPARMOR=y
+
+And the following boot commandline
+
+ apparmor=1 security=apparmor
+
+Now to add apparmor support to the ebuild we need install an apparmor
+profile. The `./configure` command in the source, generates one if the
+`--enable-apparmor` parameter is specified. I've added that to the ebuild.
+Then the Makefile translates paths in the profile depending on configure
+options. So I added the following to the ebuild
+
+ # Generate apparmor profile
+ sed -e ',[@]LIBEXECDIR[@],/usr/lib64/snapd,g' \
+ -e 's,[@]SNAP_MOUNT_DIR[@],/snapdsnap,' \
+ "${C}/snap-confine/snap-confine.apparmor.in" \
+ > "${C}/snapsp-confine/usr.lib.snapd.snap-confine.real"
+
+Then during the install phase:
+
+ insinto "/etc/apparmor.d"
+ doins "${C}/snap-confine/usr.lib.snapd.snapd-confine.real"
+
+
+Tags: snapd, gentoo
+
+[1]:https://github.com/zigford/kernel-configs/blob/master/Precision%205510/Precision%205510
diff --git a/snaps-on-gentoo.html b/snaps-on-gentoo.html
new file mode 100644
index 0000000..f2ba909
--- /dev/null
+++ b/snaps-on-gentoo.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+Snaps on Gentoo
+
+
Many will think it is heresy to put binary packages on a Gentoo system
+let alone a package system which encourages binary packages to come with
+their own set of shared libraries.
+
While I tend to agree, the practicality of sticking to this arrangement
+can be difficult for a couple of cases. Here are a few I can think of:
+
+
Source not available
+
No binary package or source ebuild for Gentoo
+
ebuild takes too long to compile
+
+
In the case of ebuilds taking too long (eg. chromium), I have a limited
+budget and can't really afford to leave my power hungry desktop on 24/7
+to keep chromium builds up-to-date.
+
Here are a quick list of software that I use which fall into one of these
+categories:
+
+
Citrix Reciever
+
Powershell (Available as source, but no ebuild and I haven't had the
+time to try write one myself)
+
Minecraft (Gaming with the kids)
+
Discord (Chatting with games)
+
Chromium (Primarily a firefox user, but have some trouble with getting it
+to see and work with Citrix)
+
+
With my excuses for putting snap's on Gentoo out of the way, here is how
+I've got it working for my systems.
+
Overlay
+
There are a few overlay's for Gentoo out there. Even an official one
+maintained (or as the case may be, unmaintained) by
+zyga from Canonical. I tried that one, and many
+of the forks with no such luck.
+
After googling around I stumbled on a thread on
+snapcraft.io
+and a post from user jamesb192 about the progress on their snapd overlay.
+
JamesB192 overlay works,
+but it doesn't have an overlay.xml file for adding with layman.
+To overcome this, I've hosted one on my site
+here. You can add this to your
+system using overlay like this:
Now that you have the overlay installed should be able to emerge snapd
+like so:
+
emerge app-emulation/snapd
+
+
Note - You may need to adjust your kernel config and the ebuild is
+pretty good at highlighting which options need to be set.
+
Issues
+
During my testing of snaps on Gentoo, I've come across a couple of issues
+that either have been solved or could be solved in the ebuild
+
+
snap packages only install and run as root (This was solved by setting
+suid on /usr/lib64/snapd/snap-confine, and solved in ebuild 2.34)
+
/var/lib/snapd not created (manually mkdir the directory)
+
+
Final thoughts.
+
Snap packages feel like a great augmentation for Gentoo. It allows me to
+keep using Gentoo as a daily driver and augment some of it's missing
+packages with packages from more popular distros.
+
diff --git a/snaps-on-gentoo.md b/snaps-on-gentoo.md
new file mode 100644
index 0000000..918ff6d
--- /dev/null
+++ b/snaps-on-gentoo.md
@@ -0,0 +1,88 @@
+Snaps on Gentoo
+
+## Update 07/09/2019
+
+Snapd is now in a overlay on it's on for your convenience. See
+[here](snapd-repository-for-gentoo.html)
+
+## Update
+
+The instructions to get snaps working on gentoo here are outdated. See my
+current post [Snaps on Gentoo - The saga continues](snaps-on-gentoo---the-saga-continues.html)
+
+## Why?
+
+Many will think it is heresy to put binary packages on a Gentoo system
+let alone a package system which encourages binary packages to come with
+their own set of shared libraries.
+
+While I tend to agree, the practicality of sticking to this arrangement
+can be difficult for a couple of cases. Here are a few I can think of:
+
+* Source not available
+* No binary package or source ebuild for Gentoo
+* ebuild takes too long to compile
+
+In the case of ebuilds taking too long (eg. chromium), I have a limited
+budget and can't really afford to leave my power hungry desktop on 24/7
+to keep chromium builds up-to-date.
+
+Here are a quick list of software that I use which fall into one of these
+categories:
+
+* Citrix Reciever
+* Powershell (Available as source, but no ebuild and I haven't had the
+ time to try write one myself)
+* Minecraft (Gaming with the kids)
+* Discord (Chatting with games)
+* Chromium (Primarily a firefox user, but have some trouble with getting it
+ to see and work with Citrix)
+
+With my excuses for putting snap's on Gentoo out of the way, here is how
+I've got it working for my systems.
+
+## Overlay
+
+There are a few overlay's for Gentoo out there. Even an official one
+maintained (or as the case may be, unmaintained) by
+[zyga](https://github.com/zyga) from Canonical. I tried that one, and many
+of the forks with no such luck.
+
+After googling around I stumbled on a thread on
+[snapcraft.io](https://forum.snapcraft.io/t/gentoo-update-needed/3029/15)
+and a post from user jamesb192 about the progress on their snapd overlay.
+
+[JamesB192 overlay](https://github.com/JamesB192/JamesB192-overlay) works,
+but it doesn't have an overlay.xml file for adding with layman.
+To overcome this, I've hosted one on my site
+[here](http://jesseharrisit.com/overlay.xml). You can add this to your
+system using overlay like this:
+
+ echo app-portage/layman git >> /etc/portage/package.use/layman
+ emerge app-portage/layman
+ layman -o http://jesseharrisit.com/overlay.xml -f -a gentoo-zigford
+
+Now that you have the overlay installed should be able to emerge snapd
+like so:
+
+ emerge app-emulation/snapd
+
+*Note - You may need to adjust your kernel config and the ebuild is
+pretty good at highlighting which options need to be set.*
+
+## Issues
+
+During my testing of snaps on Gentoo, I've come across a couple of issues
+that either have been solved or could be solved in the ebuild
+
+1. snap packages only install and run as root (This was solved by setting
+ suid on /usr/lib64/snapd/snap-confine, and solved in ebuild 2.34)
+2. /var/lib/snapd not created (manually mkdir the directory)
+
+## Final thoughts.
+
+Snap packages feel like a great augmentation for Gentoo. It allows me to
+keep using Gentoo as a daily driver and augment some of it's missing
+packages with packages from more popular distros.
+
+Tags: gentoo, snapd, overlay
diff --git a/speed-up-your-shell-game.html b/speed-up-your-shell-game.html
new file mode 100644
index 0000000..ae62699
--- /dev/null
+++ b/speed-up-your-shell-game.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+Speed up your shell game
+
+
Part of good use of the shell is doing repetitive things fast. A GUI can often
+be faster than using the command line because you can almost select things with
+your eyes ( eg, shift click files in a list to copy selectively. ) You can't
+always use a gui, however.
+
+
Perhaps your forced to move files around through the terminal. Today I was faced
+with such a task and to make matters worse, the files were quite large. So
+copying them individually would take a long time, and running them in parallel
+by using the & trick would have lead to huge io issues.
+
By defining a few quick and dirty functions, I was able to make my job a lot
+easier:
+
+
add - This functions will take a single argument to add a file to a list of
+files to process later
+
function add() { echo "${1}" >> ~/list.txt; }
+
+
+
l - This one is a quick shortcut to list files starting with a particular
+letter. I used this to make shorter lists to scan through as I had quite a
+few files to look at.
+
function l() { ls | grep -i "^$1.*"; }
+
+
+
upload - This one will read the list and upload files that haven't been
+copied yet and are available in the current relative directory.
+
function upload() {
+ cat ~/list.txt | while read p
+ do
+ [[ -f "${p}" ]] &&
+ [[ ! -f /media/extHDD/"${p}" ]] &&
+ echo "Copying : ${p}" &&
+ cp "${p}" /media/extHDD/
+ done
+ }
+
+
+
+
Using these functions together, I would use l a to list all the files
+starting with a, then add a_file_.mkv to add it to the list to be processed.
+
Finally, use upload to have files pushed to the destination.
+
As you can see, none of these function are special or tricky, just simple little
+hacks to reduce keystrokes and make a job easier.
+I would say the main learning is, whatever you are doing use the tools to make
+your life easier.
+
diff --git a/speed-up-your-shell-game.md b/speed-up-your-shell-game.md
new file mode 100644
index 0000000..5b726f8
--- /dev/null
+++ b/speed-up-your-shell-game.md
@@ -0,0 +1,52 @@
+Speed up your shell game
+
+Part of good use of the shell is doing repetitive things fast. A GUI can often
+be faster than using the command line because you can almost select things with
+your eyes ( eg, shift click files in a list to copy selectively. ) You can't
+always use a gui, however.
+
+---
+
+Perhaps your forced to move files around through the terminal. Today I was faced
+with such a task and to make matters worse, the files were quite large. So
+copying them individually would take a long time, and running them in parallel
+by using the `&` trick would have lead to huge io issues.
+
+By defining a few quick and dirty functions, I was able to make my job a lot
+easier:
+
+1. add - This functions will take a single argument to add a file to a list of
+ files to process later
+
+ function add() { echo "${1}" >> ~/list.txt; }
+
+2. l - This one is a quick shortcut to list files starting with a particular
+ letter. I used this to make shorter lists to scan through as I had quite a
+ few files to look at.
+
+ function l() { ls | grep -i "^$1.*"; }
+
+3. upload - This one will read the list and upload files that haven't been
+ copied yet and are available in the current relative directory.
+
+ function upload() {
+ cat ~/list.txt | while read p
+ do
+ [[ -f "${p}" ]] &&
+ [[ ! -f /media/extHDD/"${p}" ]] &&
+ echo "Copying : ${p}" &&
+ cp "${p}" /media/extHDD/
+ done
+ }
+
+Using these functions together, I would use `l a` to list all the files
+starting with a, then `add a_file_.mkv` to add it to the list to be processed.
+
+Finally, use `upload` to have files pushed to the destination.
+
+As you can see, none of these function are special or tricky, just simple little
+hacks to reduce keystrokes and make a job easier.
+I would say the main learning is, whatever you are doing use the tools to make
+your life easier.
+
+Tags: bash, shells
diff --git a/tag_Office365.html b/tag_Office365.html
new file mode 100644
index 0000000..29f7e69
--- /dev/null
+++ b/tag_Office365.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+zigford.org — Posts tagged "Office365"
+
+
If your ever stuck with this issue it can be infuriating. I had the issue on
+a linux install on my Precision 5510 but not on my home Gentoo
+installation.
If your ever stuck with this issue it can be infuriating. I had the issue on
+a linux install on my Precision 5510 but not on my home Gentoo
+installation.
ALE project has approved my PR to show powershell syntax errors by parsing
+the powershell by powershell itself. If the current buffer has a filetype of
+Powershell, the buffer is run through the following powershell script to check
+for syntax errors. Errors are then displayed in Vim by ALE:
Back in the days when Powershell was just a young pup there were a few
+Vim users contributing to Vim via plugins to make writing powershell
+a nicer experience. Syntax highlighting, auto filetype detection, snippets
+and other quality of life things.
Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
xargs strikes again. This time I'm going to use it's parallel
+feature to ping 255 machines very quickly. xargs has a parem -Px where x is
+the number of parallel processes to spawn of the subsequent process.
It's no secret I use BTRFS, so I have a fair amount of data stored on this
+filesystem. With most popular filesystems you have no way of knowing if your
+data is the same read as was originally written. A few modern filesystems
+support a function known as scrubbing.
Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
Over the holidays I've kept myself busy by porting
+BashBlog to PowerShell. Although work is by no
+means complete, you can actually use it to edit an
+existing blogpost
xargs strikes again. This time I'm going to use it's parallel
+feature to ping 255 machines very quickly. xargs has a parem -Px where x is
+the number of parallel processes to spawn of the subsequent process.
After 12 years being a Windows admin, I've now used powershell more than other
+languages so I'm pretty fluent in it's syntax. So it makes me happy when I
+stumble upon bash/linux scripting paradigms which have been brought over to
+powershell.
Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
Part of good use of the shell is doing repetitive things fast. A GUI can often
+be faster than using the command line because you can almost select things with
+your eyes ( eg, shift click files in a list to copy selectively. ) You can't
+always use a gui, however.
Over the holidays I've kept myself busy by porting
+BashBlog to PowerShell. Although work is by no
+means complete, you can actually use it to edit an
+existing blogpost
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
This article on replacing bash scripting with python was being shared
+around on twitter today.
+
+
+
The problem is if you want to do basically anything else, e.g. write logic,
+use control structures, handle complex data... You're going to have big
+problems. When Bash is coordinating external programs, it's fantastic. When
+it's doing any work whatsoever itself, it disintegrates into a pile of
+garbage.
+
+
+
To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+
As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+
I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the raspberry pi and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+
If you have any comments or feedback, please email
+me and let me know if you will allow your feedback to be posted here.
xargs strikes again. This time I'm going to use it's parallel
+feature to ping 255 machines very quickly. xargs has a parem -Px where x is
+the number of parallel processes to spawn of the subsequent process.
After 12 years being a Windows admin, I've now used powershell more than other
+languages so I'm pretty fluent in it's syntax. So it makes me happy when I
+stumble upon bash/linux scripting paradigms which have been brought over to
+powershell.
Netcat, the swiss army knife of TCP/IP can be used for many tasks.
+Today, I'll breifly demonstrate sending btrfs snapshots between computers
+with it's assistance.
It's no secret I use BTRFS, so I have a fair amount of data stored on this
+filesystem. With most popular filesystems you have no way of knowing if your
+data is the same read as was originally written. A few modern filesystems
+support a function known as scrubbing.
Sometimes, small databasey files get a bit fragmented over time on a COW
+filesystem. This touch of shell is a goodone to clean them up every now and
+then.
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
I previously posted about capturing video in
+Linux. While this isn't
+exactly part 2 of that post there is enough crossover to warrant a link. This
+post is about how I have strangely found video editing to be much easier from
+the command line than a gui app.
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
When I first learned about [CmdLetBinding()] to add automatic support for
+Write-Verbose I didn't understand why -WhatIf and -Confirm were not passed
+to Cmdlets used in my functions.
Coding can be fun. I've enjoyed coding from a young age, starting with
+GW-Basic at maybe 6, 7, or 8.
+
+
I remember my brother Alex seemed like a real genius with the computer (an IBM
+clone made by Acer 8086 XT). Using Basic he could make the computer do anything
+and was writing his own games.
+
+
Back then, how we edited code would make us laugh today and I would say we take
+the humble text editor for granted. Even something like notepad.exe is amazing
+compared to tools of yesteryear. Here is a sample to illustrate:
+To see your code you would have to type LIST<ENTER>:
To edit a line of code you would re-write it by typing it in, line number and
+all.
+
+
20 PRINT "ENTER YOUR FULL NAME"
+
+
+
And to insert a line, start a line with a number between existing lines
+
+
31 $A=$I
+
+
+
When you ran out of in-between-lines there was a command you could run to
+reindex your lines which would space them all out 10 between each other.
+
+
Since then, the notepad, notepad++, programmers notepad, vim, nano, gedit,
+bbedit and countless other advanced (or not-so-advanced) text editors have
+evolved.
+
+
vi was born out of ed a streaming text editor which didn't really have a user
+interface so it was kind of more like how I edited my BASIC programs. One thing
+it did have were commands. Example of vim commands:
+
+
You've just run your script/app and get a syntax error on line 432.
+
+
+
PS> .\bigscript.ps1
+ At C:\bigscript.ps1:432 char:27
+ + if ($true) {echo "True" | {echo true}}
+ + ~~~~~~~~~~~
+ Expressions are only allowed as the first element of a pipeline.
+ + CategoryInfo : ParserError: (:) [], ParseException
+ + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
+
+
+
+
So you crack open bigscript in vim (btw, vim is amazing at handling big files)
+Enter, 432Gf|a?<ESC>:wq done.
+
+
To break that down, 432G will put the cursor at line 432, f| will move the
+cursor forward to the |, a? will append a ?, then \ will return
+vim back to normal mode and :wq puts vim in command mode and execute write
+quit.
+
+
Now that might seem a bit obtuse if your not a vim user, but to me that is
+muscle memory and if coding is your life, this is something you are going to
+want to learn.
+
+
If this interests you, and you start your vim journey, then read on. I will
+share my vim configuration and history of using vim.
+
+
My vim story
+
+
When my Dad was about the same age as I am now (35), he went back to
+University to study Computer Science. I remember him bringing home Slackware
+and RedHat on floppies, which we would install and he would give me lessons on
+using Vi possibly vim, but I didn't know at the time. (This is probably around
+1996).
+
+
Since finishing School and entering the workforce I have mostly worked in
+Windows environments. Even still, with the occasionaly need to touch GNU/Linux
+at work and often testing Distro's at home I would always feel more efficient
+when using Vi/m.
+
+
My feeling when using another editor is that moving around and changing text
+feels so lethargic when done one button at a time. This drove me in recent
+years to keep a copy of vim in my home profile.
+
+
Around 2011 I switched from VBScript and the occasional perl script to writing
+fulltime in Powershell, so it made sense to try a few different editors which
+are more native to the Windows platform. I tried Visual Studio Code, Powershell
+ISE, Notepad++ and still kept coming back to vim.
+
+
Visual Studio Code is a great alternative, and it's Powershell extensions are
+very good. If you do choose to use it, install the vim extension too. It brings
+the vim commands to vscode.
+Hoever being an electron app, it suffers from performance and memory
+consumption issues. I love squeezing every drop of battery out of my PC and
+when you see 7mb RAM on Vim vs 500Mb+ on VSCode, you might rethink your
+choices.
+
+
Therefore I've resorted to delving into the world of customizing vim and
+setting up plugins.
+
+
One of the main things I'm trying to acheive is a cross platform configuration.
+You see, at work I'm on Windows and MacOs and at home I'm on Gentoo Linux. So I
+have written my .vimrc file to work on any platform. I usually sync it with
+OneDrive for Business and symlink it into my linux/mac/Windows home directory
+with a seperate setup script. Without further ado, here it is with some
+comments
+
+
.vimrc
+
+
if has("win32") " Check if on windows \
+ " Also supports has(unix)
+ source $VIMRUNTIME/mswin.vim " Load a special vimscript \
+ " ctrl+c and ctrl+v support
+ behave mswin " Like above
+ set ff=dos " Set file format to dos
+ let os='win' " Set os var to win
+ set noeol " Don't add an extra line \
+ " at the end of each file
+ set nofixeol " Disable the fixeol : Not \
+ " not sure why this is needed
+ set backupdir=~/_vimtmp,. " Set backupdir rather \
+ " than leaving backup files \
+ " all over the fs
+ set directory=~/_vimtmp,. " Set dir for swp files \
+ " rather than leaving files \
+ " all over the fs
+ set undodir=$USERPROFILE/vimfiles/VIM_UNDO_FILES " Set persistent undo\
+ " files
+ " directory
+ let plug='$USERPROFILE/.vim' " Setup a var used later to \
+ " store plugins
+ set shell=powershell " Set shell to powershell \
+ " on windows
+ set shellcmdflag=-command " Arg for powrshell to run
+else
+ set backupdir=~/.vimtmp,.
+ set directory=~/.vimtmp,.
+ set undodir=$HOME/.vim/VIM_UNDO_FILES
+ let uname = system('uname') " Check variant of Unix \
+ " running. Linux|Macos
+ if uname =~ "Darwin" " If MacOS
+ let plug='~/.vim'
+ let os='mac' " Set os var to mac
+ else
+ if isdirectory('/mnt/c/Users/jpharris')
+ let plug='/mnt/c/Users/jpharris/.vim'
+ let os='wsl'
+ else
+ let plug='~/.vim'
+ let os='lin'
+ endif
+ endif
+endif
+
+execute "source " . plug . "/autoload/plug.vim"
+if exists('*plug#begin')
+ call plug#begin(plug . '/plugged') " Enable the following plugins
+ Plug 'tpope/vim-fugitive'
+ Plug 'junegunn/gv.vim'
+ Plug 'junegunn/vim-easy-align'
+ Plug 'jiangmiao/auto-pairs'
+ "Plug 'vim-airline/vim-airline' " Airline disabled for perf
+ Plug 'morhetz/gruvbox'
+ Plug 'ervandew/supertab'
+ Plug 'tomtom/tlib_vim'
+ Plug 'MarcWeber/vim-addon-mw-utils'
+ Plug 'PProvost/vim-ps1'
+ Plug 'garbas/vim-snipmate'
+ Plug 'honza/vim-snippets'
+ call plug#end()
+endif
+ " Remove menu bars
+if has("gui_running") " Options for gvim only
+ set guioptions -=m " Disable menubar
+ set guioptions -=T " Disable Status bar
+ set lines=50 " Set default of lines
+ set columns=80 " Set default of columns
+ if os =~ "lin"
+ set guifont=Fira\ Code\ 12
+ elseif os =~ "mac"
+ set guifont=FiraCode-Retina:h14
+ else
+ set guifont=Fira_Code_Retina:h12:cANSI:qDRAFT
+ set renderoptions=type:directx
+ set encoding=utf-8
+ endif
+ set background=dark
+ colorscheme gruvbox
+else
+ set mouse=a
+ if has('termguicolors')
+ set termguicolors " Enable termguicolors for \
+ " consoles which support 256.
+ set background=dark
+ colorscheme gruvbox
+ endif
+endif
+
+if has("persistent_undo")
+ set undofile " Enable persistent undo
+endif
+
+colorscheme evening " Set the default colorscheme
+ " Attempt to start vim-plug
+
+syntax on " Enable syntax highlighting
+filetype plugin indent on " Enable plugin based auto \
+ " indent
+set tabstop=4 " show existing tab with 4 \
+ " spaces width
+set shiftwidth=4 " when indenting with '>', \
+ " use 4 spaces width
+set expandtab " On pressing tab, insert 4 \
+ " spaces
+set number " Show line numbers
+
+" Map F5 to python.exe %=current file
+nnoremap <silent> <F5> :!clear;python %<CR>
+" Remap tab to auto complete
+imap <C-@> <C-Space>
+" Setup ga shortcut for easyaline in visual mode
+nmap ga <Plug>(EasyAlign)
+" Setup ga shortcut for easyaline in normal mode
+xmap ga <Plug>(EasyAlign)"
+
I previously posted about capturing video in
+Linux. While this isn't
+exactly part 2 of that post there is enough crossover to warrant a link. This
+post is about how I have strangely found video editing to be much easier from
+the command line than a gui app.
Most people (including myself until recently), think of Gentoo as a bleeding
+edge source distribution. This is pretty far from accurate as most packages
+marked stable are quite out of date. And even if you decide to accept all
+unstable packages by adding:
+
+
ACCEPT_KEYWORKS="~amd64"
+
+
+
to your make.conf file, you will likely be a bit disappointed when you can't
+get the latest gnome bits.
+
+
As my last post indicated, I'm a bit of a vim user and I want to have the
+latest vim on all my machines (Windows at work, WSL/Ubuntu 18.04 on the
+Windows box, and Gentoo at home).
+To that end, here is the simple thing you need to do to get the latest Vim on
+Gentoo:
+
+
Overview
+
+
+
Add a special keyword to vim's ACCEPT_KEYWORDS var
+
Unmerge existing vim
+
emerge the new vim
+
+
+
Keywords
+
+
Newer versions of portage allow /etc/portage/package.keywords to be a
+directory with simple files so that you can seperate files for seperate
+packages. Now, lets check if it is a file or dir and convert it if it is
+a directory.
+
+
cd /etc/portage
+ if test -f package.keywords; then
+ mv package.keywords keywords
+ mkdir package.keywords
+ mv keywords package.keywords/
+ fi
+
+
+
And now, lets use the special keyword for the vim package which will
+allow ebuilds from github
This is the way I did it, but thinking about it now, it may be unnessecary
+to unmerge vim. You could probably get away with running emerge --update vim gvim
I previously posted about capturing video in
+Linux. While this isn't
+exactly part 2 of that post there is enough crossover to warrant a link. This
+post is about how I have strangely found video editing to be much easier from
+the command line than a gui app.
Over the past 10 years I've been meaning to convert my family's VHS tapes to a
+modern format. Originally that would have been DVD, but as it seems that DVD
+and Blu-Ray would have a limited lifespan, I've opted to go directly to modern
+encoding formats.
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
Microsoft released a new open source font yesterday to go along with their
+Windows Terminal project. I wipped up a quick ebuild to use it on my Gentoo
+systems.
The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
I haven't posted in a while due to a change in my work. I'm currently working in
+the Server and Storage team at my workplace for a 6 month secondment. The role
+is much more aligned with my enjoyment of using GNU/Linux.
Microsoft released a new open source font yesterday to go along with their
+Windows Terminal project. I wipped up a quick ebuild to use it on my Gentoo
+systems.
I've been maintaining my personal Gentoo overlay for sometime with my own ebuild
+of snapd. I've received a number of comments and questions about it, both via
+email, twitter and on github.
Over the past 10 years I've been meaning to convert my family's VHS tapes to a
+modern format. Originally that would have been DVD, but as it seems that DVD
+and Blu-Ray would have a limited lifespan, I've opted to go directly to modern
+encoding formats.
A while ago I posted about Snaps on Gentoo, about
+why and how to get it working. Sometime after that post, snaps stopped
+working and I didn't have the time to investigate.
I find myself having to create a local overlay to test/develop a new ebuild
+without affecting my main system from time to time. I usually fire up a clean
+kvm Gentoo guest to start working on, but I've usually forgotten the proceedure
+
+
This is a quick instruction on a straight-forward local overlay
+
+
+
Create the local path tree where the overlay will reside:
Many will think it is heresy to put binary packages on a Gentoo system
+let alone a package system which encourages binary packages to come with
+their own set of shared libraries.
+
While I tend to agree, the practicality of sticking to this arrangement
+can be difficult for a couple of cases. Here are a few I can think of:
+
+
Source not available
+
No binary package or source ebuild for Gentoo
+
ebuild takes too long to compile
+
+
In the case of ebuilds taking too long (eg. chromium), I have a limited
+budget and can't really afford to leave my power hungry desktop on 24/7
+to keep chromium builds up-to-date.
+
Here are a quick list of software that I use which fall into one of these
+categories:
+
+
Citrix Reciever
+
Powershell (Available as source, but no ebuild and I haven't had the
+time to try write one myself)
+
Minecraft (Gaming with the kids)
+
Discord (Chatting with games)
+
Chromium (Primarily a firefox user, but have some trouble with getting it
+to see and work with Citrix)
+
+
With my excuses for putting snap's on Gentoo out of the way, here is how
+I've got it working for my systems.
+
Overlay
+
There are a few overlay's for Gentoo out there. Even an official one
+maintained (or as the case may be, unmaintained) by
+zyga from Canonical. I tried that one, and many
+of the forks with no such luck.
+
After googling around I stumbled on a thread on
+snapcraft.io
+and a post from user jamesb192 about the progress on their snapd overlay.
+
JamesB192 overlay works,
+but it doesn't have an overlay.xml file for adding with layman.
+To overcome this, I've hosted one on my site
+here. You can add this to your
+system using overlay like this:
Now that you have the overlay installed should be able to emerge snapd
+like so:
+
emerge app-emulation/snapd
+
+
Note - You may need to adjust your kernel config and the ebuild is
+pretty good at highlighting which options need to be set.
+
Issues
+
During my testing of snaps on Gentoo, I've come across a couple of issues
+that either have been solved or could be solved in the ebuild
+
+
snap packages only install and run as root (This was solved by setting
+suid on /usr/lib64/snapd/snap-confine, and solved in ebuild 2.34)
+
/var/lib/snapd not created (manually mkdir the directory)
+
+
Final thoughts.
+
Snap packages feel like a great augmentation for Gentoo. It allows me to
+keep using Gentoo as a daily driver and augment some of it's missing
+packages with packages from more popular distros.
At some point in my main Gentoo boxes life I added the ~amd64 keyword into
+my make.conf. I don't remeber why I did this, but I can't think of a reason
+I need my entire install to be bleeding edge.
Most people (including myself until recently), think of Gentoo as a bleeding
+edge source distribution. This is pretty far from accurate as most packages
+marked stable are quite out of date. And even if you decide to accept all
+unstable packages by adding:
+
+
ACCEPT_KEYWORKS="~amd64"
+
+
+
to your make.conf file, you will likely be a bit disappointed when you can't
+get the latest gnome bits.
+
+
As my last post indicated, I'm a bit of a vim user and I want to have the
+latest vim on all my machines (Windows at work, WSL/Ubuntu 18.04 on the
+Windows box, and Gentoo at home).
+To that end, here is the simple thing you need to do to get the latest Vim on
+Gentoo:
+
+
Overview
+
+
+
Add a special keyword to vim's ACCEPT_KEYWORDS var
+
Unmerge existing vim
+
emerge the new vim
+
+
+
Keywords
+
+
Newer versions of portage allow /etc/portage/package.keywords to be a
+directory with simple files so that you can seperate files for seperate
+packages. Now, lets check if it is a file or dir and convert it if it is
+a directory.
+
+
cd /etc/portage
+ if test -f package.keywords; then
+ mv package.keywords keywords
+ mkdir package.keywords
+ mv keywords package.keywords/
+ fi
+
+
+
And now, lets use the special keyword for the vim package which will
+allow ebuilds from github
This is the way I did it, but thinking about it now, it may be unnessecary
+to unmerge vim. You could probably get away with running emerge --update vim gvim
You've received a pull request on your repo. Before merging you want to see what
+it looks like in your code base. Perhaps you will run some manual test or some
+diffs from the command line here and there.
Most people (including myself until recently), think of Gentoo as a bleeding
+edge source distribution. This is pretty far from accurate as most packages
+marked stable are quite out of date. And even if you decide to accept all
+unstable packages by adding:
+
+
ACCEPT_KEYWORKS="~amd64"
+
+
+
to your make.conf file, you will likely be a bit disappointed when you can't
+get the latest gnome bits.
+
+
As my last post indicated, I'm a bit of a vim user and I want to have the
+latest vim on all my machines (Windows at work, WSL/Ubuntu 18.04 on the
+Windows box, and Gentoo at home).
+To that end, here is the simple thing you need to do to get the latest Vim on
+Gentoo:
+
+
Overview
+
+
+
Add a special keyword to vim's ACCEPT_KEYWORDS var
+
Unmerge existing vim
+
emerge the new vim
+
+
+
Keywords
+
+
Newer versions of portage allow /etc/portage/package.keywords to be a
+directory with simple files so that you can seperate files for seperate
+packages. Now, lets check if it is a file or dir and convert it if it is
+a directory.
+
+
cd /etc/portage
+ if test -f package.keywords; then
+ mv package.keywords keywords
+ mkdir package.keywords
+ mv keywords package.keywords/
+ fi
+
+
+
And now, lets use the special keyword for the vim package which will
+allow ebuilds from github
This is the way I did it, but thinking about it now, it may be unnessecary
+to unmerge vim. You could probably get away with running emerge --update vim gvim
You've received a pull request on your repo. Before merging you want to see what
+it looks like in your code base. Perhaps you will run some manual test or some
+diffs from the command line here and there.
The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
Over the past 10 years I've been meaning to convert my family's VHS tapes to a
+modern format. Originally that would have been DVD, but as it seems that DVD
+and Blu-Ray would have a limited lifespan, I've opted to go directly to modern
+encoding formats.
Netcat, the swiss army knife of TCP/IP can be used for many tasks.
+Today, I'll breifly demonstrate sending btrfs snapshots between computers
+with it's assistance.
I haven't posted in a while due to a change in my work. I'm currently working in
+the Server and Storage team at my workplace for a 6 month secondment. The role
+is much more aligned with my enjoyment of using GNU/Linux.
Over the past 10 years I've been meaning to convert my family's VHS tapes to a
+modern format. Originally that would have been DVD, but as it seems that DVD
+and Blu-Ray would have a limited lifespan, I've opted to go directly to modern
+encoding formats.
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
Coding can be fun. I've enjoyed coding from a young age, starting with
+GW-Basic at maybe 6, 7, or 8.
+
+
I remember my brother Alex seemed like a real genius with the computer (an IBM
+clone made by Acer 8086 XT). Using Basic he could make the computer do anything
+and was writing his own games.
+
+
Back then, how we edited code would make us laugh today and I would say we take
+the humble text editor for granted. Even something like notepad.exe is amazing
+compared to tools of yesteryear. Here is a sample to illustrate:
+To see your code you would have to type LIST<ENTER>:
To edit a line of code you would re-write it by typing it in, line number and
+all.
+
+
20 PRINT "ENTER YOUR FULL NAME"
+
+
+
And to insert a line, start a line with a number between existing lines
+
+
31 $A=$I
+
+
+
When you ran out of in-between-lines there was a command you could run to
+reindex your lines which would space them all out 10 between each other.
+
+
Since then, the notepad, notepad++, programmers notepad, vim, nano, gedit,
+bbedit and countless other advanced (or not-so-advanced) text editors have
+evolved.
+
+
vi was born out of ed a streaming text editor which didn't really have a user
+interface so it was kind of more like how I edited my BASIC programs. One thing
+it did have were commands. Example of vim commands:
+
+
You've just run your script/app and get a syntax error on line 432.
+
+
+
PS> .\bigscript.ps1
+ At C:\bigscript.ps1:432 char:27
+ + if ($true) {echo "True" | {echo true}}
+ + ~~~~~~~~~~~
+ Expressions are only allowed as the first element of a pipeline.
+ + CategoryInfo : ParserError: (:) [], ParseException
+ + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
+
+
+
+
So you crack open bigscript in vim (btw, vim is amazing at handling big files)
+Enter, 432Gf|a?<ESC>:wq done.
+
+
To break that down, 432G will put the cursor at line 432, f| will move the
+cursor forward to the |, a? will append a ?, then \ will return
+vim back to normal mode and :wq puts vim in command mode and execute write
+quit.
+
+
Now that might seem a bit obtuse if your not a vim user, but to me that is
+muscle memory and if coding is your life, this is something you are going to
+want to learn.
+
+
If this interests you, and you start your vim journey, then read on. I will
+share my vim configuration and history of using vim.
+
+
My vim story
+
+
When my Dad was about the same age as I am now (35), he went back to
+University to study Computer Science. I remember him bringing home Slackware
+and RedHat on floppies, which we would install and he would give me lessons on
+using Vi possibly vim, but I didn't know at the time. (This is probably around
+1996).
+
+
Since finishing School and entering the workforce I have mostly worked in
+Windows environments. Even still, with the occasionaly need to touch GNU/Linux
+at work and often testing Distro's at home I would always feel more efficient
+when using Vi/m.
+
+
My feeling when using another editor is that moving around and changing text
+feels so lethargic when done one button at a time. This drove me in recent
+years to keep a copy of vim in my home profile.
+
+
Around 2011 I switched from VBScript and the occasional perl script to writing
+fulltime in Powershell, so it made sense to try a few different editors which
+are more native to the Windows platform. I tried Visual Studio Code, Powershell
+ISE, Notepad++ and still kept coming back to vim.
+
+
Visual Studio Code is a great alternative, and it's Powershell extensions are
+very good. If you do choose to use it, install the vim extension too. It brings
+the vim commands to vscode.
+Hoever being an electron app, it suffers from performance and memory
+consumption issues. I love squeezing every drop of battery out of my PC and
+when you see 7mb RAM on Vim vs 500Mb+ on VSCode, you might rethink your
+choices.
+
+
Therefore I've resorted to delving into the world of customizing vim and
+setting up plugins.
+
+
One of the main things I'm trying to acheive is a cross platform configuration.
+You see, at work I'm on Windows and MacOs and at home I'm on Gentoo Linux. So I
+have written my .vimrc file to work on any platform. I usually sync it with
+OneDrive for Business and symlink it into my linux/mac/Windows home directory
+with a seperate setup script. Without further ado, here it is with some
+comments
+
+
.vimrc
+
+
if has("win32") " Check if on windows \
+ " Also supports has(unix)
+ source $VIMRUNTIME/mswin.vim " Load a special vimscript \
+ " ctrl+c and ctrl+v support
+ behave mswin " Like above
+ set ff=dos " Set file format to dos
+ let os='win' " Set os var to win
+ set noeol " Don't add an extra line \
+ " at the end of each file
+ set nofixeol " Disable the fixeol : Not \
+ " not sure why this is needed
+ set backupdir=~/_vimtmp,. " Set backupdir rather \
+ " than leaving backup files \
+ " all over the fs
+ set directory=~/_vimtmp,. " Set dir for swp files \
+ " rather than leaving files \
+ " all over the fs
+ set undodir=$USERPROFILE/vimfiles/VIM_UNDO_FILES " Set persistent undo\
+ " files
+ " directory
+ let plug='$USERPROFILE/.vim' " Setup a var used later to \
+ " store plugins
+ set shell=powershell " Set shell to powershell \
+ " on windows
+ set shellcmdflag=-command " Arg for powrshell to run
+else
+ set backupdir=~/.vimtmp,.
+ set directory=~/.vimtmp,.
+ set undodir=$HOME/.vim/VIM_UNDO_FILES
+ let uname = system('uname') " Check variant of Unix \
+ " running. Linux|Macos
+ if uname =~ "Darwin" " If MacOS
+ let plug='~/.vim'
+ let os='mac' " Set os var to mac
+ else
+ if isdirectory('/mnt/c/Users/jpharris')
+ let plug='/mnt/c/Users/jpharris/.vim'
+ let os='wsl'
+ else
+ let plug='~/.vim'
+ let os='lin'
+ endif
+ endif
+endif
+
+execute "source " . plug . "/autoload/plug.vim"
+if exists('*plug#begin')
+ call plug#begin(plug . '/plugged') " Enable the following plugins
+ Plug 'tpope/vim-fugitive'
+ Plug 'junegunn/gv.vim'
+ Plug 'junegunn/vim-easy-align'
+ Plug 'jiangmiao/auto-pairs'
+ "Plug 'vim-airline/vim-airline' " Airline disabled for perf
+ Plug 'morhetz/gruvbox'
+ Plug 'ervandew/supertab'
+ Plug 'tomtom/tlib_vim'
+ Plug 'MarcWeber/vim-addon-mw-utils'
+ Plug 'PProvost/vim-ps1'
+ Plug 'garbas/vim-snipmate'
+ Plug 'honza/vim-snippets'
+ call plug#end()
+endif
+ " Remove menu bars
+if has("gui_running") " Options for gvim only
+ set guioptions -=m " Disable menubar
+ set guioptions -=T " Disable Status bar
+ set lines=50 " Set default of lines
+ set columns=80 " Set default of columns
+ if os =~ "lin"
+ set guifont=Fira\ Code\ 12
+ elseif os =~ "mac"
+ set guifont=FiraCode-Retina:h14
+ else
+ set guifont=Fira_Code_Retina:h12:cANSI:qDRAFT
+ set renderoptions=type:directx
+ set encoding=utf-8
+ endif
+ set background=dark
+ colorscheme gruvbox
+else
+ set mouse=a
+ if has('termguicolors')
+ set termguicolors " Enable termguicolors for \
+ " consoles which support 256.
+ set background=dark
+ colorscheme gruvbox
+ endif
+endif
+
+if has("persistent_undo")
+ set undofile " Enable persistent undo
+endif
+
+colorscheme evening " Set the default colorscheme
+ " Attempt to start vim-plug
+
+syntax on " Enable syntax highlighting
+filetype plugin indent on " Enable plugin based auto \
+ " indent
+set tabstop=4 " show existing tab with 4 \
+ " spaces width
+set shiftwidth=4 " when indenting with '>', \
+ " use 4 spaces width
+set expandtab " On pressing tab, insert 4 \
+ " spaces
+set number " Show line numbers
+
+" Map F5 to python.exe %=current file
+nnoremap <silent> <F5> :!clear;python %<CR>
+" Remap tab to auto complete
+imap <C-@> <C-Space>
+" Setup ga shortcut for easyaline in visual mode
+nmap ga <Plug>(EasyAlign)
+" Setup ga shortcut for easyaline in normal mode
+xmap ga <Plug>(EasyAlign)"
+
When you click on 'Terminal.app' on a stock MacOS system, your connected to
+the systems pseudo TTY which in turn launches your users default shell.
+
Terminal.app can be told to launch a process other than your users default
+shell (eg, powershell), but there are a few cases where if you might want
+to replace your shell system-wide. (eg, sudo can use powershell then)
I've made a copy of this script which downloads the dependencies (including
+PSCore. Also of note, on a machine I ran it on, I had to set the allowed .Net
+TLS modes before it would let me download from github.
Coding can be fun. I've enjoyed coding from a young age, starting with
+GW-Basic at maybe 6, 7, or 8.
+
+
I remember my brother Alex seemed like a real genius with the computer (an IBM
+clone made by Acer 8086 XT). Using Basic he could make the computer do anything
+and was writing his own games.
+
+
Back then, how we edited code would make us laugh today and I would say we take
+the humble text editor for granted. Even something like notepad.exe is amazing
+compared to tools of yesteryear. Here is a sample to illustrate:
+To see your code you would have to type LIST<ENTER>:
To edit a line of code you would re-write it by typing it in, line number and
+all.
+
+
20 PRINT "ENTER YOUR FULL NAME"
+
+
+
And to insert a line, start a line with a number between existing lines
+
+
31 $A=$I
+
+
+
When you ran out of in-between-lines there was a command you could run to
+reindex your lines which would space them all out 10 between each other.
+
+
Since then, the notepad, notepad++, programmers notepad, vim, nano, gedit,
+bbedit and countless other advanced (or not-so-advanced) text editors have
+evolved.
+
+
vi was born out of ed a streaming text editor which didn't really have a user
+interface so it was kind of more like how I edited my BASIC programs. One thing
+it did have were commands. Example of vim commands:
+
+
You've just run your script/app and get a syntax error on line 432.
+
+
+
PS> .\bigscript.ps1
+ At C:\bigscript.ps1:432 char:27
+ + if ($true) {echo "True" | {echo true}}
+ + ~~~~~~~~~~~
+ Expressions are only allowed as the first element of a pipeline.
+ + CategoryInfo : ParserError: (:) [], ParseException
+ + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
+
+
+
+
So you crack open bigscript in vim (btw, vim is amazing at handling big files)
+Enter, 432Gf|a?<ESC>:wq done.
+
+
To break that down, 432G will put the cursor at line 432, f| will move the
+cursor forward to the |, a? will append a ?, then \ will return
+vim back to normal mode and :wq puts vim in command mode and execute write
+quit.
+
+
Now that might seem a bit obtuse if your not a vim user, but to me that is
+muscle memory and if coding is your life, this is something you are going to
+want to learn.
+
+
If this interests you, and you start your vim journey, then read on. I will
+share my vim configuration and history of using vim.
+
+
My vim story
+
+
When my Dad was about the same age as I am now (35), he went back to
+University to study Computer Science. I remember him bringing home Slackware
+and RedHat on floppies, which we would install and he would give me lessons on
+using Vi possibly vim, but I didn't know at the time. (This is probably around
+1996).
+
+
Since finishing School and entering the workforce I have mostly worked in
+Windows environments. Even still, with the occasionaly need to touch GNU/Linux
+at work and often testing Distro's at home I would always feel more efficient
+when using Vi/m.
+
+
My feeling when using another editor is that moving around and changing text
+feels so lethargic when done one button at a time. This drove me in recent
+years to keep a copy of vim in my home profile.
+
+
Around 2011 I switched from VBScript and the occasional perl script to writing
+fulltime in Powershell, so it made sense to try a few different editors which
+are more native to the Windows platform. I tried Visual Studio Code, Powershell
+ISE, Notepad++ and still kept coming back to vim.
+
+
Visual Studio Code is a great alternative, and it's Powershell extensions are
+very good. If you do choose to use it, install the vim extension too. It brings
+the vim commands to vscode.
+Hoever being an electron app, it suffers from performance and memory
+consumption issues. I love squeezing every drop of battery out of my PC and
+when you see 7mb RAM on Vim vs 500Mb+ on VSCode, you might rethink your
+choices.
+
+
Therefore I've resorted to delving into the world of customizing vim and
+setting up plugins.
+
+
One of the main things I'm trying to acheive is a cross platform configuration.
+You see, at work I'm on Windows and MacOs and at home I'm on Gentoo Linux. So I
+have written my .vimrc file to work on any platform. I usually sync it with
+OneDrive for Business and symlink it into my linux/mac/Windows home directory
+with a seperate setup script. Without further ado, here it is with some
+comments
+
+
.vimrc
+
+
if has("win32") " Check if on windows \
+ " Also supports has(unix)
+ source $VIMRUNTIME/mswin.vim " Load a special vimscript \
+ " ctrl+c and ctrl+v support
+ behave mswin " Like above
+ set ff=dos " Set file format to dos
+ let os='win' " Set os var to win
+ set noeol " Don't add an extra line \
+ " at the end of each file
+ set nofixeol " Disable the fixeol : Not \
+ " not sure why this is needed
+ set backupdir=~/_vimtmp,. " Set backupdir rather \
+ " than leaving backup files \
+ " all over the fs
+ set directory=~/_vimtmp,. " Set dir for swp files \
+ " rather than leaving files \
+ " all over the fs
+ set undodir=$USERPROFILE/vimfiles/VIM_UNDO_FILES " Set persistent undo\
+ " files
+ " directory
+ let plug='$USERPROFILE/.vim' " Setup a var used later to \
+ " store plugins
+ set shell=powershell " Set shell to powershell \
+ " on windows
+ set shellcmdflag=-command " Arg for powrshell to run
+else
+ set backupdir=~/.vimtmp,.
+ set directory=~/.vimtmp,.
+ set undodir=$HOME/.vim/VIM_UNDO_FILES
+ let uname = system('uname') " Check variant of Unix \
+ " running. Linux|Macos
+ if uname =~ "Darwin" " If MacOS
+ let plug='~/.vim'
+ let os='mac' " Set os var to mac
+ else
+ if isdirectory('/mnt/c/Users/jpharris')
+ let plug='/mnt/c/Users/jpharris/.vim'
+ let os='wsl'
+ else
+ let plug='~/.vim'
+ let os='lin'
+ endif
+ endif
+endif
+
+execute "source " . plug . "/autoload/plug.vim"
+if exists('*plug#begin')
+ call plug#begin(plug . '/plugged') " Enable the following plugins
+ Plug 'tpope/vim-fugitive'
+ Plug 'junegunn/gv.vim'
+ Plug 'junegunn/vim-easy-align'
+ Plug 'jiangmiao/auto-pairs'
+ "Plug 'vim-airline/vim-airline' " Airline disabled for perf
+ Plug 'morhetz/gruvbox'
+ Plug 'ervandew/supertab'
+ Plug 'tomtom/tlib_vim'
+ Plug 'MarcWeber/vim-addon-mw-utils'
+ Plug 'PProvost/vim-ps1'
+ Plug 'garbas/vim-snipmate'
+ Plug 'honza/vim-snippets'
+ call plug#end()
+endif
+ " Remove menu bars
+if has("gui_running") " Options for gvim only
+ set guioptions -=m " Disable menubar
+ set guioptions -=T " Disable Status bar
+ set lines=50 " Set default of lines
+ set columns=80 " Set default of columns
+ if os =~ "lin"
+ set guifont=Fira\ Code\ 12
+ elseif os =~ "mac"
+ set guifont=FiraCode-Retina:h14
+ else
+ set guifont=Fira_Code_Retina:h12:cANSI:qDRAFT
+ set renderoptions=type:directx
+ set encoding=utf-8
+ endif
+ set background=dark
+ colorscheme gruvbox
+else
+ set mouse=a
+ if has('termguicolors')
+ set termguicolors " Enable termguicolors for \
+ " consoles which support 256.
+ set background=dark
+ colorscheme gruvbox
+ endif
+endif
+
+if has("persistent_undo")
+ set undofile " Enable persistent undo
+endif
+
+colorscheme evening " Set the default colorscheme
+ " Attempt to start vim-plug
+
+syntax on " Enable syntax highlighting
+filetype plugin indent on " Enable plugin based auto \
+ " indent
+set tabstop=4 " show existing tab with 4 \
+ " spaces width
+set shiftwidth=4 " when indenting with '>', \
+ " use 4 spaces width
+set expandtab " On pressing tab, insert 4 \
+ " spaces
+set number " Show line numbers
+
+" Map F5 to python.exe %=current file
+nnoremap <silent> <F5> :!clear;python %<CR>
+" Remap tab to auto complete
+imap <C-@> <C-Space>
+" Setup ga shortcut for easyaline in visual mode
+nmap ga <Plug>(EasyAlign)
+" Setup ga shortcut for easyaline in normal mode
+xmap ga <Plug>(EasyAlign)"
+
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
I haven't posted in a while due to a change in my work. I'm currently working in
+the Server and Storage team at my workplace for a 6 month secondment. The role
+is much more aligned with my enjoyment of using GNU/Linux.
Netcat, the swiss army knife of TCP/IP can be used for many tasks.
+Today, I'll breifly demonstrate sending btrfs snapshots between computers
+with it's assistance.
There are many ways to serve files. Here is a quick note of how I edited the
+default raspbian nginx conf files to enable a simple directory with browsing to
+be served from a raspberry pi
The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
I've made a copy of this script which downloads the dependencies (including
+PSCore. Also of note, on a machine I ran it on, I had to set the allowed .Net
+TLS modes before it would let me download from github.
Many will think it is heresy to put binary packages on a Gentoo system
+let alone a package system which encourages binary packages to come with
+their own set of shared libraries.
+
While I tend to agree, the practicality of sticking to this arrangement
+can be difficult for a couple of cases. Here are a few I can think of:
+
+
Source not available
+
No binary package or source ebuild for Gentoo
+
ebuild takes too long to compile
+
+
In the case of ebuilds taking too long (eg. chromium), I have a limited
+budget and can't really afford to leave my power hungry desktop on 24/7
+to keep chromium builds up-to-date.
+
Here are a quick list of software that I use which fall into one of these
+categories:
+
+
Citrix Reciever
+
Powershell (Available as source, but no ebuild and I haven't had the
+time to try write one myself)
+
Minecraft (Gaming with the kids)
+
Discord (Chatting with games)
+
Chromium (Primarily a firefox user, but have some trouble with getting it
+to see and work with Citrix)
+
+
With my excuses for putting snap's on Gentoo out of the way, here is how
+I've got it working for my systems.
+
Overlay
+
There are a few overlay's for Gentoo out there. Even an official one
+maintained (or as the case may be, unmaintained) by
+zyga from Canonical. I tried that one, and many
+of the forks with no such luck.
+
After googling around I stumbled on a thread on
+snapcraft.io
+and a post from user jamesb192 about the progress on their snapd overlay.
+
JamesB192 overlay works,
+but it doesn't have an overlay.xml file for adding with layman.
+To overcome this, I've hosted one on my site
+here. You can add this to your
+system using overlay like this:
Now that you have the overlay installed should be able to emerge snapd
+like so:
+
emerge app-emulation/snapd
+
+
Note - You may need to adjust your kernel config and the ebuild is
+pretty good at highlighting which options need to be set.
+
Issues
+
During my testing of snaps on Gentoo, I've come across a couple of issues
+that either have been solved or could be solved in the ebuild
+
+
snap packages only install and run as root (This was solved by setting
+suid on /usr/lib64/snapd/snap-confine, and solved in ebuild 2.34)
+
/var/lib/snapd not created (manually mkdir the directory)
+
+
Final thoughts.
+
Snap packages feel like a great augmentation for Gentoo. It allows me to
+keep using Gentoo as a daily driver and augment some of it's missing
+packages with packages from more popular distros.
xargs strikes again. This time I'm going to use it's parallel
+feature to ping 255 machines very quickly. xargs has a parem -Px where x is
+the number of parallel processes to spawn of the subsequent process.
I find myself having to create a local overlay to test/develop a new ebuild
+without affecting my main system from time to time. I usually fire up a clean
+kvm Gentoo guest to start working on, but I've usually forgotten the proceedure
+
+
This is a quick instruction on a straight-forward local overlay
+
+
+
Create the local path tree where the overlay will reside:
I've been maintaining my personal Gentoo overlay for sometime with my own ebuild
+of snapd. I've received a number of comments and questions about it, both via
+email, twitter and on github.
At some point in my main Gentoo boxes life I added the ~amd64 keyword into
+my make.conf. I don't remeber why I did this, but I can't think of a reason
+I need my entire install to be bleeding edge.
Pretty much any language can be made to work well with Vim without having to
+resort to Plugins. That's the beauty of it. Vim is a tool, PowerShell is a tool.
+It's worth getting to know your tools intermitly to become an expert.
ALE project has approved my PR to show powershell syntax errors by parsing
+the powershell by powershell itself. If the current buffer has a filetype of
+Powershell, the buffer is run through the following powershell script to check
+for syntax errors. Errors are then displayed in Vim by ALE:
Back in the days when Powershell was just a young pup there were a few
+Vim users contributing to Vim via plugins to make writing powershell
+a nicer experience. Syntax highlighting, auto filetype detection, snippets
+and other quality of life things.
When I first learned about [CmdLetBinding()] to add automatic support for
+Write-Verbose I didn't understand why -WhatIf and -Confirm were not passed
+to Cmdlets used in my functions.
Over the holidays I've kept myself busy by porting
+BashBlog to PowerShell. Although work is by no
+means complete, you can actually use it to edit an
+existing blogpost
When you click on 'Terminal.app' on a stock MacOS system, your connected to
+the systems pseudo TTY which in turn launches your users default shell.
+
Terminal.app can be told to launch a process other than your users default
+shell (eg, powershell), but there are a few cases where if you might want
+to replace your shell system-wide. (eg, sudo can use powershell then)
Sometime ago I was searching the interwebs for inspiration to spruce up my
+powershell prompt. I came across someone's prompt they shared on
+stackoverflow or superuser and unfortunatly I could not find the link
+again to give proper credit.
The dilemma was how to fix the harmful aspects of Write-Host (can't suppress,
+capture, or redirect), but keep it from polluting the output stream. And of
+course, the solution must be backward compatible.
+
+
This most elegant solution is provided by the information stream and the
+Write-Information cmdlet. The information stream is a new output stream that
+works much like the error and warning streams.
+
+
+
The information stream is a feature of powershell versions 5.x that I missed
+when it came out. Thus I have been avoiding using Write-Host in favour of
+Write-Verbose since reading about Write-Host Considered Harmful.
+
+
If you care about writing reusable automation friendly code, go have a read.
This article on replacing bash scripting with python was being shared
+around on twitter today.
+
+
+
The problem is if you want to do basically anything else, e.g. write logic,
+use control structures, handle complex data... You're going to have big
+problems. When Bash is coordinating external programs, it's fantastic. When
+it's doing any work whatsoever itself, it disintegrates into a pile of
+garbage.
+
+
+
To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+
As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+
I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the raspberry pi and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+
If you have any comments or feedback, please email
+me and let me know if you will allow your feedback to be posted here.
xargs strikes again. This time I'm going to use it's parallel
+feature to ping 255 machines very quickly. xargs has a parem -Px where x is
+the number of parallel processes to spawn of the subsequent process.
After 12 years being a Windows admin, I've now used powershell more than other
+languages so I'm pretty fluent in it's syntax. So it makes me happy when I
+stumble upon bash/linux scripting paradigms which have been brought over to
+powershell.
I've made a copy of this script which downloads the dependencies (including
+PSCore. Also of note, on a machine I ran it on, I had to set the allowed .Net
+TLS modes before it would let me download from github.
Sometime ago I was searching the interwebs for inspiration to spruce up my
+powershell prompt. I came across someone's prompt they shared on
+stackoverflow or superuser and unfortunatly I could not find the link
+again to give proper credit.
I've made a copy of this script which downloads the dependencies (including
+PSCore. Also of note, on a machine I ran it on, I had to set the allowed .Net
+TLS modes before it would let me download from github.
This article on replacing bash scripting with python was being shared
+around on twitter today.
+
+
+
The problem is if you want to do basically anything else, e.g. write logic,
+use control structures, handle complex data... You're going to have big
+problems. When Bash is coordinating external programs, it's fantastic. When
+it's doing any work whatsoever itself, it disintegrates into a pile of
+garbage.
+
+
+
To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+
As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+
I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the raspberry pi and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+
If you have any comments or feedback, please email
+me and let me know if you will allow your feedback to be posted here.
There are many ways to serve files. Here is a quick note of how I edited the
+default raspbian nginx conf files to enable a simple directory with browsing to
+be served from a raspberry pi
Over the holidays I've kept myself busy by porting
+BashBlog to PowerShell. Although work is by no
+means complete, you can actually use it to edit an
+existing blogpost
This article on replacing bash scripting with python was being shared
+around on twitter today.
+
+
+
The problem is if you want to do basically anything else, e.g. write logic,
+use control structures, handle complex data... You're going to have big
+problems. When Bash is coordinating external programs, it's fantastic. When
+it's doing any work whatsoever itself, it disintegrates into a pile of
+garbage.
+
+
+
To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+
As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+
I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the raspberry pi and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+
If you have any comments or feedback, please email
+me and let me know if you will allow your feedback to be posted here.
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
Part of good use of the shell is doing repetitive things fast. A GUI can often
+be faster than using the command line because you can almost select things with
+your eyes ( eg, shift click files in a list to copy selectively. ) You can't
+always use a gui, however.
Over the holidays I've kept myself busy by porting
+BashBlog to PowerShell. Although work is by no
+means complete, you can actually use it to edit an
+existing blogpost
This article on replacing bash scripting with python was being shared
+around on twitter today.
+
+
+
The problem is if you want to do basically anything else, e.g. write logic,
+use control structures, handle complex data... You're going to have big
+problems. When Bash is coordinating external programs, it's fantastic. When
+it's doing any work whatsoever itself, it disintegrates into a pile of
+garbage.
+
+
+
To me, this is what is awesome about PowerShell. I feel like it gets the shell
+part right, and also supports sane logic, data structures and so on. Sticking
+to the same language for quick system admin tasks and for longer form script
+writing really helps learn the ins-and-outs of a language.
+
+
As for python, I have started writing some of my regular tools for use on
+linux in python and so far it just doesn't seem as natural as powershell,
+although that could just be because powershell is like muscle memory for me.
+
+
I'd love to give powershell a better chance on linux, but, it is a bit slow
+to spin up on the raspberry pi and not available
+everywhere. For instance to use it on Gentoo, I've got it installed as a snap.
+
+
If you have any comments or feedback, please email
+me and let me know if you will allow your feedback to be posted here.
I've been maintaining my personal Gentoo overlay for sometime with my own ebuild
+of snapd. I've received a number of comments and questions about it, both via
+email, twitter and on github.
A while ago I posted about Snaps on Gentoo, about
+why and how to get it working. Sometime after that post, snaps stopped
+working and I didn't have the time to investigate.
Many will think it is heresy to put binary packages on a Gentoo system
+let alone a package system which encourages binary packages to come with
+their own set of shared libraries.
+
While I tend to agree, the practicality of sticking to this arrangement
+can be difficult for a couple of cases. Here are a few I can think of:
+
+
Source not available
+
No binary package or source ebuild for Gentoo
+
ebuild takes too long to compile
+
+
In the case of ebuilds taking too long (eg. chromium), I have a limited
+budget and can't really afford to leave my power hungry desktop on 24/7
+to keep chromium builds up-to-date.
+
Here are a quick list of software that I use which fall into one of these
+categories:
+
+
Citrix Reciever
+
Powershell (Available as source, but no ebuild and I haven't had the
+time to try write one myself)
+
Minecraft (Gaming with the kids)
+
Discord (Chatting with games)
+
Chromium (Primarily a firefox user, but have some trouble with getting it
+to see and work with Citrix)
+
+
With my excuses for putting snap's on Gentoo out of the way, here is how
+I've got it working for my systems.
+
Overlay
+
There are a few overlay's for Gentoo out there. Even an official one
+maintained (or as the case may be, unmaintained) by
+zyga from Canonical. I tried that one, and many
+of the forks with no such luck.
+
After googling around I stumbled on a thread on
+snapcraft.io
+and a post from user jamesb192 about the progress on their snapd overlay.
+
JamesB192 overlay works,
+but it doesn't have an overlay.xml file for adding with layman.
+To overcome this, I've hosted one on my site
+here. You can add this to your
+system using overlay like this:
Now that you have the overlay installed should be able to emerge snapd
+like so:
+
emerge app-emulation/snapd
+
+
Note - You may need to adjust your kernel config and the ebuild is
+pretty good at highlighting which options need to be set.
+
Issues
+
During my testing of snaps on Gentoo, I've come across a couple of issues
+that either have been solved or could be solved in the ebuild
+
+
snap packages only install and run as root (This was solved by setting
+suid on /usr/lib64/snapd/snap-confine, and solved in ebuild 2.34)
+
/var/lib/snapd not created (manually mkdir the directory)
+
+
Final thoughts.
+
Snap packages feel like a great augmentation for Gentoo. It allows me to
+keep using Gentoo as a daily driver and augment some of it's missing
+packages with packages from more popular distros.
The dilemma was how to fix the harmful aspects of Write-Host (can't suppress,
+capture, or redirect), but keep it from polluting the output stream. And of
+course, the solution must be backward compatible.
+
+
This most elegant solution is provided by the information stream and the
+Write-Information cmdlet. The information stream is a new output stream that
+works much like the error and warning streams.
+
+
+
The information stream is a feature of powershell versions 5.x that I missed
+when it came out. Thus I have been avoiding using Write-Host in favour of
+Write-Verbose since reading about Write-Host Considered Harmful.
+
+
If you care about writing reusable automation friendly code, go have a read.
Today Clarissa did the shopping and as she was in a rush didn't have the time
+to total the items in the trolley. She had updated the cost of each item in a
+shared iCloud note and texted me to see if I could quickly add them up on my
+computer.
Today Clarissa did the shopping and as she was in a rush didn't have the time
+to total the items in the trolley. She had updated the cost of each item in a
+shared iCloud note and texted me to see if I could quickly add them up on my
+computer.
Pretty much any language can be made to work well with Vim without having to
+resort to Plugins. That's the beauty of it. Vim is a tool, PowerShell is a tool.
+It's worth getting to know your tools intermitly to become an expert.
ALE project has approved my PR to show powershell syntax errors by parsing
+the powershell by powershell itself. If the current buffer has a filetype of
+Powershell, the buffer is run through the following powershell script to check
+for syntax errors. Errors are then displayed in Vim by ALE:
Back in the days when Powershell was just a young pup there were a few
+Vim users contributing to Vim via plugins to make writing powershell
+a nicer experience. Syntax highlighting, auto filetype detection, snippets
+and other quality of life things.
Coding can be fun. I've enjoyed coding from a young age, starting with
+GW-Basic at maybe 6, 7, or 8.
+
+
I remember my brother Alex seemed like a real genius with the computer (an IBM
+clone made by Acer 8086 XT). Using Basic he could make the computer do anything
+and was writing his own games.
+
+
Back then, how we edited code would make us laugh today and I would say we take
+the humble text editor for granted. Even something like notepad.exe is amazing
+compared to tools of yesteryear. Here is a sample to illustrate:
+To see your code you would have to type LIST<ENTER>:
To edit a line of code you would re-write it by typing it in, line number and
+all.
+
+
20 PRINT "ENTER YOUR FULL NAME"
+
+
+
And to insert a line, start a line with a number between existing lines
+
+
31 $A=$I
+
+
+
When you ran out of in-between-lines there was a command you could run to
+reindex your lines which would space them all out 10 between each other.
+
+
Since then, the notepad, notepad++, programmers notepad, vim, nano, gedit,
+bbedit and countless other advanced (or not-so-advanced) text editors have
+evolved.
+
+
vi was born out of ed a streaming text editor which didn't really have a user
+interface so it was kind of more like how I edited my BASIC programs. One thing
+it did have were commands. Example of vim commands:
+
+
You've just run your script/app and get a syntax error on line 432.
+
+
+
PS> .\bigscript.ps1
+ At C:\bigscript.ps1:432 char:27
+ + if ($true) {echo "True" | {echo true}}
+ + ~~~~~~~~~~~
+ Expressions are only allowed as the first element of a pipeline.
+ + CategoryInfo : ParserError: (:) [], ParseException
+ + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
+
+
+
+
So you crack open bigscript in vim (btw, vim is amazing at handling big files)
+Enter, 432Gf|a?<ESC>:wq done.
+
+
To break that down, 432G will put the cursor at line 432, f| will move the
+cursor forward to the |, a? will append a ?, then \ will return
+vim back to normal mode and :wq puts vim in command mode and execute write
+quit.
+
+
Now that might seem a bit obtuse if your not a vim user, but to me that is
+muscle memory and if coding is your life, this is something you are going to
+want to learn.
+
+
If this interests you, and you start your vim journey, then read on. I will
+share my vim configuration and history of using vim.
+
+
My vim story
+
+
When my Dad was about the same age as I am now (35), he went back to
+University to study Computer Science. I remember him bringing home Slackware
+and RedHat on floppies, which we would install and he would give me lessons on
+using Vi possibly vim, but I didn't know at the time. (This is probably around
+1996).
+
+
Since finishing School and entering the workforce I have mostly worked in
+Windows environments. Even still, with the occasionaly need to touch GNU/Linux
+at work and often testing Distro's at home I would always feel more efficient
+when using Vi/m.
+
+
My feeling when using another editor is that moving around and changing text
+feels so lethargic when done one button at a time. This drove me in recent
+years to keep a copy of vim in my home profile.
+
+
Around 2011 I switched from VBScript and the occasional perl script to writing
+fulltime in Powershell, so it made sense to try a few different editors which
+are more native to the Windows platform. I tried Visual Studio Code, Powershell
+ISE, Notepad++ and still kept coming back to vim.
+
+
Visual Studio Code is a great alternative, and it's Powershell extensions are
+very good. If you do choose to use it, install the vim extension too. It brings
+the vim commands to vscode.
+Hoever being an electron app, it suffers from performance and memory
+consumption issues. I love squeezing every drop of battery out of my PC and
+when you see 7mb RAM on Vim vs 500Mb+ on VSCode, you might rethink your
+choices.
+
+
Therefore I've resorted to delving into the world of customizing vim and
+setting up plugins.
+
+
One of the main things I'm trying to acheive is a cross platform configuration.
+You see, at work I'm on Windows and MacOs and at home I'm on Gentoo Linux. So I
+have written my .vimrc file to work on any platform. I usually sync it with
+OneDrive for Business and symlink it into my linux/mac/Windows home directory
+with a seperate setup script. Without further ado, here it is with some
+comments
+
+
.vimrc
+
+
if has("win32") " Check if on windows \
+ " Also supports has(unix)
+ source $VIMRUNTIME/mswin.vim " Load a special vimscript \
+ " ctrl+c and ctrl+v support
+ behave mswin " Like above
+ set ff=dos " Set file format to dos
+ let os='win' " Set os var to win
+ set noeol " Don't add an extra line \
+ " at the end of each file
+ set nofixeol " Disable the fixeol : Not \
+ " not sure why this is needed
+ set backupdir=~/_vimtmp,. " Set backupdir rather \
+ " than leaving backup files \
+ " all over the fs
+ set directory=~/_vimtmp,. " Set dir for swp files \
+ " rather than leaving files \
+ " all over the fs
+ set undodir=$USERPROFILE/vimfiles/VIM_UNDO_FILES " Set persistent undo\
+ " files
+ " directory
+ let plug='$USERPROFILE/.vim' " Setup a var used later to \
+ " store plugins
+ set shell=powershell " Set shell to powershell \
+ " on windows
+ set shellcmdflag=-command " Arg for powrshell to run
+else
+ set backupdir=~/.vimtmp,.
+ set directory=~/.vimtmp,.
+ set undodir=$HOME/.vim/VIM_UNDO_FILES
+ let uname = system('uname') " Check variant of Unix \
+ " running. Linux|Macos
+ if uname =~ "Darwin" " If MacOS
+ let plug='~/.vim'
+ let os='mac' " Set os var to mac
+ else
+ if isdirectory('/mnt/c/Users/jpharris')
+ let plug='/mnt/c/Users/jpharris/.vim'
+ let os='wsl'
+ else
+ let plug='~/.vim'
+ let os='lin'
+ endif
+ endif
+endif
+
+execute "source " . plug . "/autoload/plug.vim"
+if exists('*plug#begin')
+ call plug#begin(plug . '/plugged') " Enable the following plugins
+ Plug 'tpope/vim-fugitive'
+ Plug 'junegunn/gv.vim'
+ Plug 'junegunn/vim-easy-align'
+ Plug 'jiangmiao/auto-pairs'
+ "Plug 'vim-airline/vim-airline' " Airline disabled for perf
+ Plug 'morhetz/gruvbox'
+ Plug 'ervandew/supertab'
+ Plug 'tomtom/tlib_vim'
+ Plug 'MarcWeber/vim-addon-mw-utils'
+ Plug 'PProvost/vim-ps1'
+ Plug 'garbas/vim-snipmate'
+ Plug 'honza/vim-snippets'
+ call plug#end()
+endif
+ " Remove menu bars
+if has("gui_running") " Options for gvim only
+ set guioptions -=m " Disable menubar
+ set guioptions -=T " Disable Status bar
+ set lines=50 " Set default of lines
+ set columns=80 " Set default of columns
+ if os =~ "lin"
+ set guifont=Fira\ Code\ 12
+ elseif os =~ "mac"
+ set guifont=FiraCode-Retina:h14
+ else
+ set guifont=Fira_Code_Retina:h12:cANSI:qDRAFT
+ set renderoptions=type:directx
+ set encoding=utf-8
+ endif
+ set background=dark
+ colorscheme gruvbox
+else
+ set mouse=a
+ if has('termguicolors')
+ set termguicolors " Enable termguicolors for \
+ " consoles which support 256.
+ set background=dark
+ colorscheme gruvbox
+ endif
+endif
+
+if has("persistent_undo")
+ set undofile " Enable persistent undo
+endif
+
+colorscheme evening " Set the default colorscheme
+ " Attempt to start vim-plug
+
+syntax on " Enable syntax highlighting
+filetype plugin indent on " Enable plugin based auto \
+ " indent
+set tabstop=4 " show existing tab with 4 \
+ " spaces width
+set shiftwidth=4 " when indenting with '>', \
+ " use 4 spaces width
+set expandtab " On pressing tab, insert 4 \
+ " spaces
+set number " Show line numbers
+
+" Map F5 to python.exe %=current file
+nnoremap <silent> <F5> :!clear;python %<CR>
+" Remap tab to auto complete
+imap <C-@> <C-Space>
+" Setup ga shortcut for easyaline in visual mode
+nmap ga <Plug>(EasyAlign)
+" Setup ga shortcut for easyaline in normal mode
+xmap ga <Plug>(EasyAlign)"
+
Most people (including myself until recently), think of Gentoo as a bleeding
+edge source distribution. This is pretty far from accurate as most packages
+marked stable are quite out of date. And even if you decide to accept all
+unstable packages by adding:
+
+
ACCEPT_KEYWORKS="~amd64"
+
+
+
to your make.conf file, you will likely be a bit disappointed when you can't
+get the latest gnome bits.
+
+
As my last post indicated, I'm a bit of a vim user and I want to have the
+latest vim on all my machines (Windows at work, WSL/Ubuntu 18.04 on the
+Windows box, and Gentoo at home).
+To that end, here is the simple thing you need to do to get the latest Vim on
+Gentoo:
+
+
Overview
+
+
+
Add a special keyword to vim's ACCEPT_KEYWORDS var
+
Unmerge existing vim
+
emerge the new vim
+
+
+
Keywords
+
+
Newer versions of portage allow /etc/portage/package.keywords to be a
+directory with simple files so that you can seperate files for seperate
+packages. Now, lets check if it is a file or dir and convert it if it is
+a directory.
+
+
cd /etc/portage
+ if test -f package.keywords; then
+ mv package.keywords keywords
+ mkdir package.keywords
+ mv keywords package.keywords/
+ fi
+
+
+
And now, lets use the special keyword for the vim package which will
+allow ebuilds from github
This is the way I did it, but thinking about it now, it may be unnessecary
+to unmerge vim. You could probably get away with running emerge --update vim gvim
Sometime ago I was searching the interwebs for inspiration to spruce up my
+powershell prompt. I came across someone's prompt they shared on
+stackoverflow or superuser and unfortunatly I could not find the link
+again to give proper credit.
The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
I've made a copy of this script which downloads the dependencies (including
+PSCore. Also of note, on a machine I ran it on, I had to set the allowed .Net
+TLS modes before it would let me download from github.
Coding can be fun. I've enjoyed coding from a young age, starting with
+GW-Basic at maybe 6, 7, or 8.
+
+
I remember my brother Alex seemed like a real genius with the computer (an IBM
+clone made by Acer 8086 XT). Using Basic he could make the computer do anything
+and was writing his own games.
+
+
Back then, how we edited code would make us laugh today and I would say we take
+the humble text editor for granted. Even something like notepad.exe is amazing
+compared to tools of yesteryear. Here is a sample to illustrate:
+To see your code you would have to type LIST<ENTER>:
To edit a line of code you would re-write it by typing it in, line number and
+all.
+
+
20 PRINT "ENTER YOUR FULL NAME"
+
+
+
And to insert a line, start a line with a number between existing lines
+
+
31 $A=$I
+
+
+
When you ran out of in-between-lines there was a command you could run to
+reindex your lines which would space them all out 10 between each other.
+
+
Since then, the notepad, notepad++, programmers notepad, vim, nano, gedit,
+bbedit and countless other advanced (or not-so-advanced) text editors have
+evolved.
+
+
vi was born out of ed a streaming text editor which didn't really have a user
+interface so it was kind of more like how I edited my BASIC programs. One thing
+it did have were commands. Example of vim commands:
+
+
You've just run your script/app and get a syntax error on line 432.
+
+
+
PS> .\bigscript.ps1
+ At C:\bigscript.ps1:432 char:27
+ + if ($true) {echo "True" | {echo true}}
+ + ~~~~~~~~~~~
+ Expressions are only allowed as the first element of a pipeline.
+ + CategoryInfo : ParserError: (:) [], ParseException
+ + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
+
+
+
+
So you crack open bigscript in vim (btw, vim is amazing at handling big files)
+Enter, 432Gf|a?<ESC>:wq done.
+
+
To break that down, 432G will put the cursor at line 432, f| will move the
+cursor forward to the |, a? will append a ?, then \ will return
+vim back to normal mode and :wq puts vim in command mode and execute write
+quit.
+
+
Now that might seem a bit obtuse if your not a vim user, but to me that is
+muscle memory and if coding is your life, this is something you are going to
+want to learn.
+
+
If this interests you, and you start your vim journey, then read on. I will
+share my vim configuration and history of using vim.
+
+
My vim story
+
+
When my Dad was about the same age as I am now (35), he went back to
+University to study Computer Science. I remember him bringing home Slackware
+and RedHat on floppies, which we would install and he would give me lessons on
+using Vi possibly vim, but I didn't know at the time. (This is probably around
+1996).
+
+
Since finishing School and entering the workforce I have mostly worked in
+Windows environments. Even still, with the occasionaly need to touch GNU/Linux
+at work and often testing Distro's at home I would always feel more efficient
+when using Vi/m.
+
+
My feeling when using another editor is that moving around and changing text
+feels so lethargic when done one button at a time. This drove me in recent
+years to keep a copy of vim in my home profile.
+
+
Around 2011 I switched from VBScript and the occasional perl script to writing
+fulltime in Powershell, so it made sense to try a few different editors which
+are more native to the Windows platform. I tried Visual Studio Code, Powershell
+ISE, Notepad++ and still kept coming back to vim.
+
+
Visual Studio Code is a great alternative, and it's Powershell extensions are
+very good. If you do choose to use it, install the vim extension too. It brings
+the vim commands to vscode.
+Hoever being an electron app, it suffers from performance and memory
+consumption issues. I love squeezing every drop of battery out of my PC and
+when you see 7mb RAM on Vim vs 500Mb+ on VSCode, you might rethink your
+choices.
+
+
Therefore I've resorted to delving into the world of customizing vim and
+setting up plugins.
+
+
One of the main things I'm trying to acheive is a cross platform configuration.
+You see, at work I'm on Windows and MacOs and at home I'm on Gentoo Linux. So I
+have written my .vimrc file to work on any platform. I usually sync it with
+OneDrive for Business and symlink it into my linux/mac/Windows home directory
+with a seperate setup script. Without further ado, here it is with some
+comments
+
+
.vimrc
+
+
if has("win32") " Check if on windows \
+ " Also supports has(unix)
+ source $VIMRUNTIME/mswin.vim " Load a special vimscript \
+ " ctrl+c and ctrl+v support
+ behave mswin " Like above
+ set ff=dos " Set file format to dos
+ let os='win' " Set os var to win
+ set noeol " Don't add an extra line \
+ " at the end of each file
+ set nofixeol " Disable the fixeol : Not \
+ " not sure why this is needed
+ set backupdir=~/_vimtmp,. " Set backupdir rather \
+ " than leaving backup files \
+ " all over the fs
+ set directory=~/_vimtmp,. " Set dir for swp files \
+ " rather than leaving files \
+ " all over the fs
+ set undodir=$USERPROFILE/vimfiles/VIM_UNDO_FILES " Set persistent undo\
+ " files
+ " directory
+ let plug='$USERPROFILE/.vim' " Setup a var used later to \
+ " store plugins
+ set shell=powershell " Set shell to powershell \
+ " on windows
+ set shellcmdflag=-command " Arg for powrshell to run
+else
+ set backupdir=~/.vimtmp,.
+ set directory=~/.vimtmp,.
+ set undodir=$HOME/.vim/VIM_UNDO_FILES
+ let uname = system('uname') " Check variant of Unix \
+ " running. Linux|Macos
+ if uname =~ "Darwin" " If MacOS
+ let plug='~/.vim'
+ let os='mac' " Set os var to mac
+ else
+ if isdirectory('/mnt/c/Users/jpharris')
+ let plug='/mnt/c/Users/jpharris/.vim'
+ let os='wsl'
+ else
+ let plug='~/.vim'
+ let os='lin'
+ endif
+ endif
+endif
+
+execute "source " . plug . "/autoload/plug.vim"
+if exists('*plug#begin')
+ call plug#begin(plug . '/plugged') " Enable the following plugins
+ Plug 'tpope/vim-fugitive'
+ Plug 'junegunn/gv.vim'
+ Plug 'junegunn/vim-easy-align'
+ Plug 'jiangmiao/auto-pairs'
+ "Plug 'vim-airline/vim-airline' " Airline disabled for perf
+ Plug 'morhetz/gruvbox'
+ Plug 'ervandew/supertab'
+ Plug 'tomtom/tlib_vim'
+ Plug 'MarcWeber/vim-addon-mw-utils'
+ Plug 'PProvost/vim-ps1'
+ Plug 'garbas/vim-snipmate'
+ Plug 'honza/vim-snippets'
+ call plug#end()
+endif
+ " Remove menu bars
+if has("gui_running") " Options for gvim only
+ set guioptions -=m " Disable menubar
+ set guioptions -=T " Disable Status bar
+ set lines=50 " Set default of lines
+ set columns=80 " Set default of columns
+ if os =~ "lin"
+ set guifont=Fira\ Code\ 12
+ elseif os =~ "mac"
+ set guifont=FiraCode-Retina:h14
+ else
+ set guifont=Fira_Code_Retina:h12:cANSI:qDRAFT
+ set renderoptions=type:directx
+ set encoding=utf-8
+ endif
+ set background=dark
+ colorscheme gruvbox
+else
+ set mouse=a
+ if has('termguicolors')
+ set termguicolors " Enable termguicolors for \
+ " consoles which support 256.
+ set background=dark
+ colorscheme gruvbox
+ endif
+endif
+
+if has("persistent_undo")
+ set undofile " Enable persistent undo
+endif
+
+colorscheme evening " Set the default colorscheme
+ " Attempt to start vim-plug
+
+syntax on " Enable syntax highlighting
+filetype plugin indent on " Enable plugin based auto \
+ " indent
+set tabstop=4 " show existing tab with 4 \
+ " spaces width
+set shiftwidth=4 " when indenting with '>', \
+ " use 4 spaces width
+set expandtab " On pressing tab, insert 4 \
+ " spaces
+set number " Show line numbers
+
+" Map F5 to python.exe %=current file
+nnoremap <silent> <F5> :!clear;python %<CR>
+" Remap tab to auto complete
+imap <C-@> <C-Space>
+" Setup ga shortcut for easyaline in visual mode
+nmap ga <Plug>(EasyAlign)
+" Setup ga shortcut for easyaline in normal mode
+xmap ga <Plug>(EasyAlign)"
+
xargs strikes again. This time I'm going to use it's parallel
+feature to ping 255 machines very quickly. xargs has a parem -Px where x is
+the number of parallel processes to spawn of the subsequent process.
After 12 years being a Windows admin, I've now used powershell more than other
+languages so I'm pretty fluent in it's syntax. So it makes me happy when I
+stumble upon bash/linux scripting paradigms which have been brought over to
+powershell.
I've written about ripping an album cli style, and sometimes it still
+makes sense to have older tech around. Like for example if you have 6 kids,
+you can't exactly afford to buy them all iPods. Or, maybe you can't afford
+the latest cars, and your car still has cd audio.
+
Thanksfully with Linux we don't have to resort to some clunky UI. We can do
+anything on the good ole' command line
With the advent of Spotify,
+Apple Music, Youtube,
+Pandora and many other streaming music services, the
+need to have local mp3 files doesn't crop up very often. However, my kids either
+have cheap mp3 players or use their
+3ds's to play local mp3 files.
The article shows the tweaks I had to make to my system in order to
+be able to share my screen in Zoom, and capture my screen in
+OBS under Gnome on Wayland on Gentoo.
When I first learned about [CmdLetBinding()] to add automatic support for
+Write-Verbose I didn't understand why -WhatIf and -Confirm were not passed
+to Cmdlets used in my functions.
While this kinda works, it doesn't allow any control over where Whatif's and
+confirms are used. After reading
+Implementing ShouldProccess for your functions post by Joel Francsis,
+I'm now able to do things like this:
+
function Set-GoodIdead {
+ [CmdLetBinding(SupportsShouldProcess)]
+ Param([string]$File)
+
+ If ($PSCmdlet.ShouldProcess("$File", "Get rid of junk")) {
+ Remove-Item $File
+ }
+
+ }
+
+
As I hope you can see, you could implement the $PSCmdlet.ShouldProcess
+on any code, not just other functions that support -WhatIf or -Confirm or
+-Force
+
Doing this will lead to more consistent behavior of functions and allow
+behaviour to be more intuitive.
+
For a much more in depth explaination, go and check Joel's post
+
diff --git a/the-correct-way-to-implement--whatif-and--confirm-in-a-powershell-cmdlet.md b/the-correct-way-to-implement--whatif-and--confirm-in-a-powershell-cmdlet.md
new file mode 100644
index 0000000..c0e67f6
--- /dev/null
+++ b/the-correct-way-to-implement--whatif-and--confirm-in-a-powershell-cmdlet.md
@@ -0,0 +1,49 @@
+The correct way to implement -Whatif and -Confirm in a Powershell Cmdlet
+
+When I first learned about `[CmdLetBinding()]` to add automatic support for
+`Write-Verbose` I didn't understand why -WhatIf and -Confirm were not passed
+to Cmdlets used in my functions.
+
+---
+
+I wrote functions like this to fake it:
+
+ function Set-BadIdea {
+ [CmdLetBinding()]
+ Param(
+ [string]$File,
+ [switch]$Whatif,
+ [switch]$Confirm
+ )
+
+ Remove-Item $File -WhatIf:$WhatIf -Confirm:$Confirm
+
+ }
+
+While this kinda works, it doesn't allow any control over where Whatif's and
+confirms are used. After reading
+[Implementing ShouldProccess for your functions][1] post by Joel Francsis,
+I'm now able to do things like this:
+
+ function Set-GoodIdead {
+ [CmdLetBinding(SupportsShouldProcess)]
+ Param([string]$File)
+
+ If ($PSCmdlet.ShouldProcess("$File", "Get rid of junk")) {
+ Remove-Item $File
+ }
+
+ }
+
+As I hope you can see, you could implement the `$PSCmdlet.ShouldProcess`
+on any code, not just other functions that support -WhatIf or -Confirm or
+-Force
+
+Doing this will lead to more consistent behavior of functions and allow
+behaviour to be more intuitive.
+
+For a much more in depth explaination, go and check [Joel's post][1]
+
+Tags: powershell, coding
+
+[1]:https://vexx32.github.io/2018/11/22/Implementing-ShouldProcess/
diff --git a/todo.html b/todo.html
new file mode 100644
index 0000000..474e179
--- /dev/null
+++ b/todo.html
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+Todo
+
+
+
diff --git a/todo.md b/todo.md
new file mode 100644
index 0000000..dcb964f
--- /dev/null
+++ b/todo.md
@@ -0,0 +1,16 @@
+Todo
+
+This page is a list of potential future articles.
+Please [email](mailto:jesse@zigford.org) if you have any ideads.
+
+* Practical uses of powershell on \*nix
+* Index of my github repos
+* Vimrc
+* Visitors page to show analysis of access.log
+* More to come...
+
+Also things I want to do that might be outside the realm of this blog
+
+* ~urlwatch~
+
+Tags: Todo
diff --git a/transfer-btfs-snapshots-with-netcat.html b/transfer-btfs-snapshots-with-netcat.html
new file mode 100644
index 0000000..a7fabde
--- /dev/null
+++ b/transfer-btfs-snapshots-with-netcat.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+Transfer BTFS snapshots with netcat
+
+
Netcat, the swiss army knife of TCP/IP can be used for many tasks.
+Today, I'll breifly demonstrate sending btrfs snapshots between computers
+with it's assistance.
+
+
+
+
The setup
+
+
I use a raspberry pi computer as a small NAS. It doesn't have a high
+performance requirment and just has an 8Tb spinning rust drive connected
+over usb 3. Ocasionally, I want to back it up to another set of drives
+across my local LAN.
+
+
Both the raspberry pi, and my receiving desktop computer run Gentoo and thus
+installing netcat can be achieved by the following command:
+
+
emerge net-analyzer/netcat
+
+
+
Gentoo also offers the OpenBSD variant:
+
+
emerge net-analyzer/openbsd-netcat
+
+
+
These two versions will happily work together, but have slightly different
+syntax and behaviors
+
+
Version differences
+
+
The main difference I have noticed between the two versions is that the
+openbsd variant will automatically quit when it receives and EOF signal,
+while the original version requires the -q parameter.
+
+
On the receiving end
+
+
I tend to setup my recieving end of the netcat tunnel first. I beleive the
+sending end could be setup first but this seems more natural to my mind.
+In this case I want my btrfs snapshot stored in another btrfs filesystem.
+This allows easy restoration of single file.
The -l 10004 parameter specifies that netcat should listen on port 10004.
+You could as easily pick any other port not in use.
+
+
Next, a pipe to btrfs receive and . says to store the snapshot here.
+
+
After you press enter on this command, netcat will be listening, but as no data
+has passed through the pipe yet, the btrfs command will not have recieved
+anything and will just be waiting indefinitly for data.
+
+
On the sending end
+
+
From the source machine, if this is the first snapshot ever send:
The -p can tell btrfs that the following subvolume is a parent of the
+snapshot we are sending and therefore only send the difference.
+The -q 1 tells that non-openbsd varient of netcat to quit 1 second after
+receiving and EOF message from the upstream program.
+
+
After pressing enter on this command, btrfs send will begin passing data
+through the pipe to netcat which will connect to the destination computer on the
+port specified. You should begin to see informational output from btrfs at this
+stage.
+
+
If you hadn't thought to specify -q parameter, not to worry. You can monitor
+that data is coming through the pipe using a tool like nettop or iotop.
+After data transfer has ceased, simply hit Ctrl+C to close the pipe on both ends
+at once.
+
+
Summing up
+
+
And that is about all there is to sending btrfs snapshots with netcat.
+You can transfer your snapshots as fast as your disks and LAN will allow.
+Depending on your CPU you may also get better performance if you pipe through
+gzip and gunzip.
+
diff --git a/transfer-btfs-snapshots-with-netcat.md b/transfer-btfs-snapshots-with-netcat.md
new file mode 100644
index 0000000..86f3d95
--- /dev/null
+++ b/transfer-btfs-snapshots-with-netcat.md
@@ -0,0 +1,86 @@
+Transfer BTFS snapshots with netcat
+
+Netcat, the swiss army knife of TCP/IP can be used for many tasks.
+Today, I'll breifly demonstrate sending btrfs snapshots between computers
+with it's assistance.
+
+---
+
+#####The setup
+
+I use a raspberry pi computer as a small NAS. It doesn't have a high
+performance requirment and just has an 8Tb spinning rust drive connected
+over usb 3. Ocasionally, I want to back it up to another set of drives
+across my local LAN.
+
+Both the raspberry pi, and my receiving desktop computer run Gentoo and thus
+installing netcat can be achieved by the following command:
+
+ emerge net-analyzer/netcat
+
+Gentoo also offers the OpenBSD variant:
+
+ emerge net-analyzer/openbsd-netcat
+
+These two versions will happily work together, but have slightly different
+syntax and behaviors
+
+#####Version differences
+
+The main difference I have noticed between the two versions is that the
+openbsd variant will automatically quit when it receives and EOF signal,
+while the original version requires the -q parameter.
+
+#####On the receiving end
+I tend to setup my recieving end of the netcat tunnel first. I beleive the
+sending end could be setup first but this seems more natural to my mind.
+In this case I want my btrfs snapshot stored in another btrfs filesystem.
+This allows easy restoration of single file.
+
+ cd /mnt/btrfs/backups
+ nc -l 10004 | btrfs receive .
+
+The `-l 10004` parameter specifies that netcat should listen on port 10004.
+You could as easily pick any other port not in use.
+
+Next, a pipe to `btrfs receive` and `.` says to store the snapshot here.
+
+After you press enter on this command, netcat will be listening, but as no data
+has passed through the pipe yet, the btrfs command will not have recieved
+anything and will just be waiting indefinitly for data.
+
+#####On the sending end
+From the source machine, if this is the first snapshot ever send:
+
+ cd /mnt/btrfs/snapshots/
+ btrfs send root-2020-07-19-01:00:01 | nc -q 1 192.168.11.203 10004
+
+If it is not the first:
+
+ cd /mnt/btrfs/snapshots/
+ btrfs send -p root-2020-07-19-01:00:01 \
+ root-2020-07-20-01:00:01 | nc -q 1 192.168.11.203 10004
+
+The `-p` can tell btrfs that the following subvolume is a parent of the
+snapshot we are sending and therefore only send the difference.
+The `-q 1` tells that non-openbsd varient of netcat to quit 1 second after
+receiving and EOF message from the upstream program.
+
+After pressing enter on this command, btrfs send will begin passing data
+through the pipe to netcat which will connect to the destination computer on the
+port specified. You should begin to see informational output from btrfs at this
+stage.
+
+If you hadn't thought to specify `-q` parameter, not to worry. You can monitor
+that data is coming through the pipe using a tool like `nettop` or `iotop`.
+After data transfer has ceased, simply hit Ctrl+C to close the pipe on both ends
+at once.
+
+###Summing up
+
+And that is about all there is to sending btrfs snapshots with netcat.
+You can transfer your snapshots as fast as your disks and LAN will allow.
+Depending on your CPU you may also get better performance if you pipe through
+gzip and gunzip.
+
+Tags: btrfs, netcat, linux
diff --git a/troubleshooting-office-365-login-loop.html b/troubleshooting-office-365-login-loop.html
new file mode 100644
index 0000000..70af5bd
--- /dev/null
+++ b/troubleshooting-office-365-login-loop.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+Troubleshooting: Office 365 login loop
+
+
If your ever stuck with this issue it can be infuriating. I had the issue on
+a linux install on my Precision 5510 but not on my home Gentoo
+installation.
+
+
I tried isolating DNS, network, browsers, all to no avail. Until I stumbled
+on this gem. I quickly noticed my timezone was not set correctly:
+
harrisj@19wbpf2 /etc $ timedatectl
+ Local time: Fri 2019-03-29 13:26:58 UTC
+ Universal time: Fri 2019-03-29 13:26:58 UTC
+ RTC time: Fri 2019-03-29 13:26:58
+ Time zone: n/a (UTC, +0000)
+ System clock synchronized: no
+ NTP service: inactive
+ RTC in local TZ: no
+
+
After setting the timezone:
+
timedatectl set-timezone Australia/Brisbane
+
+
The datetime was now wrong, which was quickly corrected:
+
timedatectl set-time "2019-03-29 13:31:45"
+
+
Restarted my browser and teams and now I'm a happy chappy!
+
diff --git a/troubleshooting-office-365-login-loop.md b/troubleshooting-office-365-login-loop.md
new file mode 100644
index 0000000..fb8e491
--- /dev/null
+++ b/troubleshooting-office-365-login-loop.md
@@ -0,0 +1,33 @@
+Troubleshooting: Office 365 login loop
+
+If your ever stuck with this issue it can be infuriating. I had the issue on
+a linux install on my [Precision 5510](my-setup.html) but not on my home Gentoo
+installation.
+
+---
+
+I tried isolating DNS, network, browsers, all to no avail. Until I stumbled
+on this [gem][1]. I quickly noticed my timezone was not set correctly:
+
+ harrisj@19wbpf2 /etc $ timedatectl
+ Local time: Fri 2019-03-29 13:26:58 UTC
+ Universal time: Fri 2019-03-29 13:26:58 UTC
+ RTC time: Fri 2019-03-29 13:26:58
+ Time zone: n/a (UTC, +0000)
+ System clock synchronized: no
+ NTP service: inactive
+ RTC in local TZ: no
+
+After setting the timezone:
+
+ timedatectl set-timezone Australia/Brisbane
+
+The datetime was now wrong, which was quickly corrected:
+
+ timedatectl set-time "2019-03-29 13:31:45"
+
+Restarted my browser and teams and now I'm a happy chappy!
+
+Tags: Office365, Troubleshooting
+
+[1]:https://techcommunity.microsoft.com/t5/Microsoft-Teams/Edge-Checking-your-credentials/m-p/377480/highlight/true#M28333
diff --git a/trying-out-a-pull-request.html b/trying-out-a-pull-request.html
new file mode 100644
index 0000000..a575ffe
--- /dev/null
+++ b/trying-out-a-pull-request.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+Trying out a pull request
+
+
You've received a pull request on your repo. Before merging you want to see what
+it looks like in your code base. Perhaps you will run some manual test or some
+diffs from the command line here and there.
+
+
You can find this information anywhere out there on the web. As always the
+purpose of this blog is more of a notetaking for me, but the other angle I want
+to cover is not the exact commands to type (That will be here too), but why you
+are typing them.
+
Get setup
+
You want to start off with a clean local repository. That might mean running a
+git pull, a git clone or switching to the master branch using git checkout.
You will need to know the GitHub authors account name and the branch that they
+are making changes from.
+
The commands
+
From here it's easy. Conceptually, we are checking out a local branch to
+pull the changes into
+
# localbranchname is a new branch where we will pull
+ # the PR. It can be named whatever
+ # master is the branch we want the new branch to be
+ # based off
+
+ git checkout -b <localbranchname> master
+ git pull <githubAddressToUsersFork>.git <branchTheyCommitedTo>
+
+
Merge to master
+
Perhaps your happy with the change. Your very close to being able to merge the
+PR to your master repo. Here is how you would do that.
+
diff --git a/trying-out-a-pull-request.md b/trying-out-a-pull-request.md
new file mode 100644
index 0000000..4a1da99
--- /dev/null
+++ b/trying-out-a-pull-request.md
@@ -0,0 +1,59 @@
+Trying out a pull request
+
+You've received a pull request on your repo. Before merging you want to see what
+it looks like in your code base. Perhaps you will run some manual test or some
+diffs from the command line here and there.
+
+---
+
+You can find this information anywhere out there on the web. As always the
+purpose of this blog is more of a notetaking for me, but the other angle I want
+to cover is not the exact commands to type (That will be here too), but why you
+are typing them.
+
+Get setup
+---------
+
+You want to start off with a clean local repository. That might mean running a
+`git pull`, a `git clone` or switching to the master branch using `git
+checkout`.
+
+I'm checking out a PR for my [snapd ebuild
+repo](https://github.com/zigford/snapd)
+
+What information will you need?
+-------------------------------
+
+You will need to know the GitHub authors account name and the branch that they
+are making changes from.
+
+The commands
+------------
+
+From here it's easy. Conceptually, we are _checking out_ a local branch to
+_pull_ the changes into
+
+
+ # localbranchname is a new branch where we will pull
+ # the PR. It can be named whatever
+ # master is the branch we want the new branch to be
+ # based off
+
+ git checkout -b master
+ git pull .git
+
+Merge to master
+---------------
+
+Perhaps your happy with the change. Your very close to being able to merge the
+PR to your master repo. Here is how you would do that.
+
+1. _checkout_ your master branch
+2. _merge_ the local branch you created earlier
+3. _push_ changes back up to the remote _origin_
+
+ git checkout master
+ git merge
+ git push origin master
+
+Tags: git, github
diff --git a/using-the-latest-vim-on-gentoo.html b/using-the-latest-vim-on-gentoo.html
new file mode 100644
index 0000000..12e0243
--- /dev/null
+++ b/using-the-latest-vim-on-gentoo.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+Using the latest vim on Gentoo
+
+
Most people (including myself until recently), think of Gentoo as a bleeding
+edge source distribution. This is pretty far from accurate as most packages
+marked stable are quite out of date. And even if you decide to accept all
+unstable packages by adding:
+
+
ACCEPT_KEYWORKS="~amd64"
+
+
+
to your make.conf file, you will likely be a bit disappointed when you can't
+get the latest gnome bits.
+
+
As my last post indicated, I'm a bit of a vim user and I want to have the
+latest vim on all my machines (Windows at work, WSL/Ubuntu 18.04 on the
+Windows box, and Gentoo at home).
+To that end, here is the simple thing you need to do to get the latest Vim on
+Gentoo:
+
+
Overview
+
+
+
Add a special keyword to vim's ACCEPT_KEYWORDS var
+
Unmerge existing vim
+
emerge the new vim
+
+
+
Keywords
+
+
Newer versions of portage allow /etc/portage/package.keywords to be a
+directory with simple files so that you can seperate files for seperate
+packages. Now, lets check if it is a file or dir and convert it if it is
+a directory.
+
+
cd /etc/portage
+ if test -f package.keywords; then
+ mv package.keywords keywords
+ mkdir package.keywords
+ mv keywords package.keywords/
+ fi
+
+
+
And now, lets use the special keyword for the vim package which will
+allow ebuilds from github
This is the way I did it, but thinking about it now, it may be unnessecary
+to unmerge vim. You could probably get away with running emerge --update vim gvim
+
diff --git a/using-the-latest-vim-on-gentoo.md b/using-the-latest-vim-on-gentoo.md
new file mode 100755
index 0000000..5c09c09
--- /dev/null
+++ b/using-the-latest-vim-on-gentoo.md
@@ -0,0 +1,56 @@
+Using the latest vim on Gentoo
+
+Most people (including myself until recently), think of Gentoo as a bleeding
+edge source distribution. This is pretty far from accurate as most packages
+marked stable are quite out of date. And even if you decide to accept all
+unstable packages by adding:
+
+ ACCEPT_KEYWORKS="~amd64"
+
+to your make.conf file, you will likely be a bit disappointed when you can't
+get the latest gnome bits.
+
+As my last post indicated, I'm a bit of a vim user and I want to have the
+latest vim on all my machines (Windows at work, WSL/Ubuntu 18.04 on the
+Windows box, and Gentoo at home).
+To that end, here is the simple thing you need to do to get the latest Vim on
+Gentoo:
+
+# Overview
+1. Add a special keyword to vim's ACCEPT_KEYWORDS var
+2. Unmerge existing vim
+3. emerge the new vim
+
+## Keywords
+Newer versions of portage allow _/etc/portage/package.keywords_ to be a
+directory with simple files so that you can seperate files for seperate
+packages. Now, lets check if it is a file or dir and convert it if it is
+a directory.
+
+ cd /etc/portage
+ if test -f package.keywords; then
+ mv package.keywords keywords
+ mkdir package.keywords
+ mv keywords package.keywords/
+ fi
+
+And now, lets use the special keyword for the vim package which will
+allow ebuilds from github
+
+ echo app-editors/vim "**" > package.keywords/vim
+ echo app-editors/gvim "**" >> package.keywords/vim
+ echo app-editors/vim-core "**" >> package.keywords/vim
+
+## Unmerge existing vim
+
+ emerge --unmerge app-editors/vim app-editors/gvim
+
+## Merge the new vim
+
+ emerge app-editors/vim app-editors/gvim
+
+## Final thoughts.
+This is the way I did it, but thinking about it now, it may be unnessecary
+to unmerge vim. You could probably get away with running _emerge --update vim gvim_
+
+Tags: gentoo, vim, git, ebuild
diff --git a/video-editing-from-the-command-line.html b/video-editing-from-the-command-line.html
new file mode 100644
index 0000000..bf8a887
--- /dev/null
+++ b/video-editing-from-the-command-line.html
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+Video editing from the command line
+
+
I previously posted about capturing video in
+Linux. While this isn't
+exactly part 2 of that post there is enough crossover to warrant a link. This
+post is about how I have strangely found video editing to be much easier from
+the command line than a gui app.
+
+
Firstly, there isn't a shortage of gui apps for editing video on Linux for very
+basic editing. My requirements are very simple. I need to be able to cut and
+join various video files, and product 2 output files. A file for hosting on the
+web and a file for archival purposes.
+
Problem 1 - Audio Sync
+
I started out myself with pitivi and tried a few others.
+My trouble with each editor was speed and accuracy (also my brain). On some
+videos I had to adjust the audio sync and was driven mad by moving audio tracks
+around. I had alot of trouble knowing if the audio was starting too early or too
+late and which way to move the audio to correct it.
+
With a gui editor, this involves click and dragging an audio track one way or
+another (for accuracy, you have to zoom in very far). Once zoomed in and you
+move the track, you then need to zoom out, place the play head, click play and
+then make a judgement if you made it better or worse.
+
For some reason, my brain could never tell exactly which way to move the audio
+until it was way too far in the wrong direction. This was a source of
+frustration that I initially solved using ffmpeg on the command line.
+
Using ffmpeg I wrote a very simple sh script to output a small time slice of
+the video many times with different audio offsets. Then it was simply a matter
+of watching each video and picking the right one. The resulting audio offset
+that was used for that video can then be used on the entire clip.
+
Firstly, start by creating a small snippet of video where you will clearly be
+able to see if the video is synced up.
The script will take parameter 1 is the clip, and parameter 2 is the audio
+offset. We can use seq to generate a list of offsets to try and xargs to run
+them.
The result is 41 clips with .1 second offset difference. Play them all and find
+the best offset. Then when you could use ./fixaudiodelay.sh BigClip.mp4 -1.7
+(or whatever was the best offset) to correct the entire file.
+
Problem 2 - Perfect splitting
+
The second problem I had with gui editors, is that many home videos are
+completely different scenes butted up against each other on the tape. When
+transferring these to a new modern format, we want our audience to be able to
+skip the scenes.
+
With the gui editors, again we have the problem of accuracy along with the
+inability to at once, save all the clips from the single file. Say you have 4
+distinct clips in a file. How can you mark each clip as a separate file then
+press encode and walk away? You can't you would have to create 3 separate
+projects and encode each one separately.
+
Solving it with ffmpeg is easier than you might think. When I showed cutting a
+clip earlier, you can use the -ss parameter to declare where to start from in
+the clip, and the -to parameter to declare the end. How I've solved it is like
+this.
+
+
Create a track file which lists all the clips start, end and titles. I chose
+to separate each clip by a line, and each parameter by a - dash. Eg
I came up with the start and end positions, simply by marking down the times
+while watching the clip using mpv or vlc. However, the proof is in the
+pudding, so I use ffmpeg with some parameters to produce test video files.
+These won't be good enough quality to upload to the web, but are sufficient
+for verifying the time stamps and are very quick to encode and see the
+results.
+
NoteYou can't use the copy codec when cutting clips. As the keyframes
+are not recreated
+
while IFS=- read START END TITLE
+ do
+ OUTFILE="${TITLE}-Test.mp4"
+ ffmpeg -nostdin -i BigClip.mp4 -c:v libx264 \
+ -c:a aac -ss $START -to $END -preset ultrafast \
+ $OUTFILE
+ done < tracks.txt
+
+
+
After viewing the resulting files, I can make minute adjustments to the track
+file so the clips are perfect. Then I adjust for a better file for the web by
+changing the preset to veryslow and adding the following parameters
+
-crf 23 -movflags faststart
+
+
+
Additionally in some cases, I add some video filters. I've found the
+following work well:
+
+
+
+
Desired affect
+
Parameter
+
+
+
+
+
Increase volume
+
-filter:a "volume=2.0"
+
+
+
Deinterlace
+
-vf "yadif"
+
+
+
Archival Quality
+
Replace libx264 with libx265
+
+
+
+
+
+
Problem 3 - Joining videos
+
The last problem I will discuss may only be a problem on Linux. While many of my
+video files are converted from VHS using a composite to usb converter, some are
+coming from DV tape. DV Tape stores it's data digitally in Mpeg-2 on a magnetic
+tape. On Linux, I've been able to transfer these files using FireWire and a
+command line tool dvgrab. The resultant content is many 1gb .dv files.
+
While these files can individually be processed by ffmpeg, it is more ideal to
+join them into a single clip for processing so that you can grab clips that span
+multiple files and use a single set of timestamps for processing. To adjust
+ffmpeg for this use, we use another file which tells ffmpeg all the files to
+concatenate.
+
Use the following sh to generate a file that ffmpeg can understand:
+
for i in *.dv; do echo "file '$i'" >> files.txt; done
+
+
TIPDid you know bash has a shorthand non-posix for loop?
+
for i in *.dv; { echo "file '$i' >> files.txt; }
+
+
NOTEThe space after the { is needed
+
Now use the resultant files.txt to create a single test clip of the whole lot:
You can now use this file to create timestamps relative to the whole
+concatenated lot.
+
Problem 4 - LP vs SP
+
DV Camera's in the early 2000s started featuring a LP (Long Play) feature which
+allowed them to drop the sample rate on the audio (and maybe video?) significantly
+in order to fit more on the tape. This introduces a problem for ffmpeg.
+
If multiple clips on a single tape switch between LP and SP (Short Play or
+standard play) then ffmpeg would only see what it encountered when it
+first probed the file. The result could be video/audio playing either very fast
+(chipmunk voice) or very slow. The trick here is to slice the .dv file far
+enough in that ffmpeg's probe matches the clip of audio you begin to transcode.
+It is not enough to simple specify the start position using -ss.
+As ffmpeg will probe the start of the file, not the start specified by
+-ss.
+
So we come now to the next tool in the unix tool belt dd. We can use dd to copy
+a file but tell it to skip x bytes. Eg
+
dd if=dvgrab-001.dv of=testdv.dv bs=1M skip=100
+
+
Using bs=1M and skip=100 will create a new file that will skip roughly 100
+megabytes of video at the start. Depending on where you clip begins/ends, you
+will have to fiddle with the skip option and if you need more granular
+control, you could reduce the bs (byte size) down into the kilobyte range.
+
If the resulting output file starts at the clip you are wanting to produce, you
+could now replace the original dvgrab file from your tracks list file with the
+newly generated file.
+
diff --git a/video-editing-from-the-command-line.md b/video-editing-from-the-command-line.md
new file mode 100644
index 0000000..ab4137e
--- /dev/null
+++ b/video-editing-from-the-command-line.md
@@ -0,0 +1,206 @@
+Video editing from the command line
+
+I previously posted about [capturing video in
+Linux](converting-vhs-and-dv-to-modern-formats---part-1.html). While this isn't
+exactly part 2 of that post there is enough crossover to warrant a link. This
+post is about how I have strangely found video editing to be much easier from
+the command line than a gui app.
+
+---
+
+Firstly, there isn't a shortage of gui apps for editing video on Linux for very
+basic editing. My requirements are very simple. I need to be able to cut and
+join various video files, and product 2 output files. A file for hosting on the
+web and a file for archival purposes.
+
+Problem 1 - Audio Sync
+----------------------
+
+I started out myself with [pitivi](http://www.pitivi.org/) and tried a few others.
+My trouble with each editor was speed and accuracy (also my brain). On some
+videos I had to adjust the audio sync and was driven mad by moving audio tracks
+around. I had alot of trouble knowing if the audio was starting too early or too
+late and which way to move the audio to correct it.
+
+With a gui editor, this involves click and dragging an audio track one way or
+another (for accuracy, you have to zoom in very far). Once zoomed in and you
+move the track, you then need to zoom out, place the play head, click play and
+then make a judgement if you made it better or worse.
+
+For some reason, my brain could never tell exactly which way to move the audio
+until it was way too far in the wrong direction. This was a source of
+frustration that I initially solved using ffmpeg on the command line.
+
+Using ffmpeg I wrote a very simple sh script to output a small time slice of
+the video many times with different audio offsets. Then it was simply a matter
+of watching each video and picking the right one. The resulting audio offset
+that was used for that video can then be used on the entire clip.
+
+Firstly, start by creating a small snippet of video where you will clearly be
+able to see if the video is synced up.
+
+ ffmpeg -i bigclip.mp4 -c copy -ss 00:01:55 -to 00:02:00 Small.mp4
+
+Now we will use the following script
+
+ #!/bin/sh
+
+ # fixaudiodelay.sh
+
+ Offset="${2}"
+ inputFile="${1}"
+ outputFile="${inputFile%%.*}-delayed${Offset}.mp4"
+ out="${3:-$outputFile}"
+ ffmpeg -i "${inputFile}" -itsoffset "${Offset}" \
+ -i "${inputFile}" -map 0:v -map 1:a -c copy "${out}"
+
+The script will take parameter 1 is the clip, and parameter 2 is the audio
+offset. We can use `seq` to generate a list of offsets to try and `xargs` to run
+them.
+
+ seq -2.0 .1 2.0 | xargs -n1 ./fixaudiodelay.sh Small.mp4
+
+The result is 41 clips with .1 second offset difference. Play them all and find
+the best offset. Then when you could use `./fixaudiodelay.sh BigClip.mp4 -1.7`
+(or whatever was the best offset) to correct the entire file.
+
+Problem 2 - Perfect splitting
+-----------------------------
+
+The second problem I had with gui editors, is that many home videos are
+completely different scenes butted up against each other on the tape. When
+transferring these to a new modern format, we want our audience to be able to
+skip the scenes.
+
+With the gui editors, again we have the problem of accuracy along with the
+inability to at once, save all the clips from the single file. Say you have 4
+distinct clips in a file. How can you mark each clip as a separate file then
+press encode and walk away? You can't you would have to create 3 separate
+projects and encode each one separately.
+
+Solving it with ffmpeg is easier than you might think. When I showed cutting a
+clip earlier, you can use the `-ss` parameter to declare where to start from in
+the clip, and the `-to` parameter to declare the end. How I've solved it is like
+this.
+
+1. Create a track file which lists all the clips start, end and titles. I chose
+ to separate each clip by a line, and each parameter by a `-` dash. Eg
+
+ 00:00:00-00:10:05-SnowTrip
+ 00:10:05.6-00:13:02-PlayingAtThePark
+
+2. I came up with the start and end positions, simply by marking down the times
+ while watching the clip using mpv or vlc. However, the proof is in the
+ pudding, so I use ffmpeg with some parameters to produce test video files.
+ These won't be good enough quality to upload to the web, but are sufficient
+ for verifying the time stamps and are very quick to encode and see the
+ results.
+
+ **Note** _You can't use the `copy` codec when cutting clips. As the keyframes
+ are not recreated_
+
+ while IFS=- read START END TITLE
+ do
+ OUTFILE="${TITLE}-Test.mp4"
+ ffmpeg -nostdin -i BigClip.mp4 -c:v libx264 \
+ -c:a aac -ss $START -to $END -preset ultrafast \
+ $OUTFILE
+ done < tracks.txt
+
+3. After viewing the resulting files, I can make minute adjustments to the track
+ file so the clips are perfect. Then I adjust for a better file for the web by
+ changing the preset to `veryslow` and adding the following parameters
+
+ -crf 23 -movflags faststart
+
+4. Additionally in some cases, I add some video filters. I've found the
+ following work well:
+
+
+
+
+
Desired affect
+
Parameter
+
+
+
+
+
Increase volume
+
-filter:a "volume=2.0"
+
+
+
Deinterlace
+
-vf "yadif"
+
+
+
Archival Quality
+
Replace libx264 with libx265
+
+
+
+
+Problem 3 - Joining videos
+--------------------------
+
+The last problem I will discuss may only be a problem on Linux. While many of my
+video files are converted from VHS using a composite to usb converter, some are
+coming from DV tape. DV Tape stores it's data digitally in Mpeg-2 on a magnetic
+tape. On Linux, I've been able to transfer these files using FireWire and a
+command line tool `dvgrab`. The resultant content is many 1gb .dv files.
+
+While these files can individually be processed by ffmpeg, it is more ideal to
+join them into a single clip for processing so that you can grab clips that span
+multiple files and use a single set of timestamps for processing. To adjust
+ffmpeg for this use, we use another file which tells ffmpeg all the files to
+concatenate.
+
+Use the following sh to generate a file that ffmpeg can understand:
+
+ for i in *.dv; do echo "file '$i'" >> files.txt; done
+
+**TIP** _Did you know bash has a shorthand non-posix for loop?_
+
+ for i in *.dv; { echo "file '$i' >> files.txt; }
+
+**NOTE** _The space after the `{` is needed_
+
+Now use the resultant files.txt to create a single test clip of the whole lot:
+
+ ffmpeg -f concat -safe 0 -i files.txt \
+ -c:v libx264 -c:a aac -crf 35 \
+ -preset ultrafast testconcat.mp4
+
+You can now use this file to create timestamps relative to the whole
+concatenated lot.
+
+Problem 4 - LP vs SP
+--------------------
+
+DV Camera's in the early 2000s started featuring a LP (Long Play) feature which
+allowed them to drop the sample rate on the audio (and maybe video?) significantly
+in order to fit more on the tape. This introduces a problem for ffmpeg.
+
+If multiple clips on a single tape switch between LP and SP (Short Play or
+standard play) then ffmpeg would only **see** what it encountered when it
+first probed the file. The result could be video/audio playing either very fast
+(chipmunk voice) or very slow. The trick here is to slice the .dv file far
+enough in that ffmpeg's probe matches the clip of audio you begin to transcode.
+It is not enough to simple specify the start position using `-ss`.
+As ffmpeg will probe the start of the file, not the start specified by
+`-ss`.
+
+So we come now to the next tool in the unix tool belt `dd`. We can use `dd` to copy
+a file but tell it to **skip** x bytes. Eg
+
+ dd if=dvgrab-001.dv of=testdv.dv bs=1M skip=100
+
+Using `bs=1M` and `skip=100` will create a new file that will skip roughly 100
+megabytes of video at the start. Depending on where you clip begins/ends, you
+will have to fiddle with the `skip` option and if you need more granular
+control, you could reduce the `bs` (byte size) down into the kilobyte range.
+
+If the resulting output file starts at the clip you are wanting to produce, you
+could now replace the original dvgrab file from your tracks list file with the
+newly generated file.
+
+Tags: ffmpeg, dd, cli
diff --git a/vim-and-powershell.html b/vim-and-powershell.html
new file mode 100644
index 0000000..8de8e8a
--- /dev/null
+++ b/vim-and-powershell.html
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+Vim and Powershell
+
+
Back in the days when Powershell was just a young pup there were a few
+Vim users contributing to Vim via plugins to make writing powershell
+a nicer experience. Syntax highlighting, auto filetype detection, snippets
+and other quality of life things.
+
+
Since then, the release and rise of VSCode with it's strong Powershell
+integrations have drawn most developer types away from Vim and new QOL features
+have been few and far between.
+
I haven't given up on using Vim for powershell however for a few reasons:
+
+
Battery life.
+
+
I spend most of my time running off laptops, and VSCode and other electron
+ based apps are designed for development speed first, execution speed second.
+ Running a terminal based app all day vs running an electron app can make
+ a serious difference to your battery life.
+
+
Updates too often.
+
+
Every update to a tool like VSCode broadens it's audience and makes it a
+ great tool for more people. This is great to make an app with thousands of
+ features that each user will use a tiny sliver of those features.
+ I, on the other hand don't need or want 99% of those features.
+
+
Focusing your skills
+
+
I'm pretty much a generalist in skills in IT, but there are a few tools
+ were I keep my focus to be as effective as possible. Using Vim well is one
+ of them
+
So with all this, I have been searching for a while for a plugin to make some
+QOL improvements to Vim. A couple of months ago I stumbled upon ale a
+general plugin that can be adapted to any language. It started out for
+linting as the name implies, but it had grown to support fixing and
+completion too.
+
At the time, there was an issue
+raised to add PSScriptAnalyzer as a linter, and so I decided to see if
+I could understand how to add a linter to ale.
+
I didn't know the VimScript language and trawling through the ale codebase
+didn't make much sense to me. The project has some developer documentation,
+however it assumes pre-knowledge of VimScript. That's when I did something
+out of character. I read a book. Learn VimScript The Hard Way by Steve
+Losh. It was a fun and enjoyable read, especially following along with the
+exercises. I highly recommend reading it, even if you only have an interest
+in using Vim.
+
Toward about half-way through reading the book, I felt confident enough to
+have another crack at the PSScriptAnalyzer linter. This time the codebase
+made much more sense to me and I was able to get a nicely working prototype
+done in a morning.
+
Since then, I've written some tests, documentation and created a pull request
+which was merged today on the ale project.
+
To use it, you just need to install the ale plugin. It defaults to using
+PowerShell core, so if you want to use powershell.exe you will need to read
+the help: :help ale-powershell to see the variable to override this setting.
+Of course you will also need to have the PSScriptAnalyzer module installed.
+
Finally, there is one issue you can encounter particularly on windows
+(btw, I've used it fine on Linux and MacOS), if you launch Vim using
+powershell.exe but ale is using pwsh.exe, Vim will pass it's inherited
+environment variables to it's child processes. This can lead to an issue where
+the variable $Env:PSModulePath contains paths for powershell.exe and not
+pwsh.exe, therefore if you don't have the PSScriptAnalyzer module installed
+in both shells, ale won't be able to do any linting for you.
+
diff --git a/vim-and-powershell.md b/vim-and-powershell.md
new file mode 100644
index 0000000..5706d66
--- /dev/null
+++ b/vim-and-powershell.md
@@ -0,0 +1,82 @@
+Vim and Powershell
+
+Back in the days when Powershell was just a young pup there were a few
+Vim users contributing to Vim via [plugins][1] to make writing powershell
+a nicer experience. Syntax highlighting, auto filetype detection, snippets
+and other quality of life things.
+
+---
+
+Since then, the release and rise of VSCode with it's strong Powershell
+integrations have drawn most developer types away from Vim and new QOL features
+have been few and far between.
+
+I haven't given up on using Vim for powershell however for a few reasons:
+
+* Battery life.
+
+ I spend most of my time running off laptops, and VSCode and other electron
+ based apps are designed for development speed first, execution speed second.
+ Running a terminal based app all day vs running an electron app can make
+ a serious difference to your battery life.
+
+* Updates too often.
+
+ Every update to a tool like VSCode broadens it's audience and makes it a
+ great tool for more people. This is great to make an app with thousands of
+ features that each user will use a tiny sliver of those features.
+ I, on the other hand don't need or want 99% of those features.
+
+* Focusing your skills
+
+ I'm pretty much a generalist in skills in IT, but there are a few tools
+ were I keep my focus to be as effective as possible. Using Vim well is one
+ of them
+
+So with all this, I have been searching for a while for a plugin to make some
+QOL improvements to Vim. A couple of months ago I stumbled upon [ale][2] a
+general plugin that can be adapted to any language. It started out for
+[linting][3] as the name implies, but it had grown to support fixing and
+completion too.
+
+At the time, there was an [issue](https://github.com/w0rp/ale/issues/1264)
+raised to add [PSScriptAnalyzer][4] as a linter, and so I decided to see if
+I could understand how to add a linter to ale.
+
+I didn't know the [VimScript][5] language and trawling through the ale codebase
+didn't make much sense to me. The project has some developer documentation,
+however it assumes pre-knowledge of VimScript. That's when I did something
+out of character. I read a book. [Learn VimScript The Hard Way][6] by Steve
+Losh. It was a fun and enjoyable read, especially following along with the
+exercises. I highly recommend reading it, even if you only have an interest
+in using Vim.
+
+Toward about half-way through reading the book, I felt confident enough to
+have another crack at the PSScriptAnalyzer linter. This time the codebase
+made much more sense to me and I was able to get a nicely working prototype
+done in a morning.
+
+Since then, I've written some tests, documentation and created a pull request
+which was merged today on the ale project.
+
+To use it, you just need to install the ale plugin. It defaults to using
+PowerShell core, so if you want to use `powershell.exe` you will need to read
+the help: `:help ale-powershell` to see the variable to override this setting.
+Of course you will also need to have the PSScriptAnalyzer module installed.
+
+Finally, there is one issue you can encounter particularly on windows
+(btw, I've used it fine on Linux and MacOS), if you launch Vim using
+`powershell.exe` but ale is using `pwsh.exe`, Vim will pass it's inherited
+environment variables to it's child processes. This can lead to an issue where
+the variable `$Env:PSModulePath` contains paths for `powershell.exe` and not
+`pwsh.exe`, therefore if you don't have the PSScriptAnalyzer module installed
+in both shells, ale won't be able to do any linting for you.
+
+Tags: powershell, vim, ale
+
+[1]:https://github.com/PProvost/Vim-ps1
+[2]:https://github.com/w0rp/ale
+[3]:https://en.wikipedia.org/wiki/Lint_%28software%29
+[4]:https://github.com/PowerShell/PSScriptAnalyzer
+[5]:https://en.wikipedia.org/wiki/Vim_(text_editor)#Vim_script
+[6]:http://learnvimscriptthehardway.stevelosh.com/
diff --git a/vim-links.html b/vim-links.html
new file mode 100644
index 0000000..22603e6
--- /dev/null
+++ b/vim-links.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+Vim Links
+
+
Today Clarissa did the shopping and as she was in a rush didn't have the time
+to total the items in the trolley. She had updated the cost of each item in a
+shared iCloud note and texted me to see if I could quickly add them up on my
+computer.
+
+
This is the point where most people would pull out calc.exe and manually sum
+them. Not I!.
+
I fired up the iCloud site on my machine and copy and pasted the iCloud note to
+a fresh vim buffer:
+
Shopping 2019
+ 1st Isle:
+ Vedge
+ Potatoes 4 + 6 6 3 3 5 16.99 2 2 3 3 4.99 5.99 5.99 5.99 12.15 7.99 7.99 8.99
+ Other vedge for a meat + vedge dinner
+ Meats
+ Chicken dinner with a sauce (Indian or Apricot or some other chicken + rice meal)
+ Lunch Chicken
+ Sausages
+ Kids Junk Food
+ Tiny Teddies (Olivia’s request) 2.49 2.49
+ Flavoured Rice Cakes 6
+ Crackers 2.49 2.49
+ Dairy 2.69
+ Big tub of greek yogurt
+ Vanilla Bean Yogurt 3.99 3.99 3.99
+ Butter - 4.99 4.99 4.99
+ Milk Powder - 5.69 5.69 5.69
+ Second Isle
+ Corn Chips for Nachos
+ Nacho Salsa
+ Popcorn 2.49 2.49 9.98
+ A Cordial or somesuch 2.49
+ Third Isle
+ Frozen
+ Pies 3.55 3
+ Lasagne? 12
+ French Fires 1.89 1.89
+ Chicken Nuggets 2.99 2.99
+ Cleaning
+ Garbage Bags 1.79
+ Mozzie Coils
+ Last Isle
+ Food
+ Spaghetti Pasta .65 .65 1.59 1.59
+ Tinned Beetroot 1.15
+ Tinned Spagetti * .85 .85 .85
+ Indian or rice meal sauce 2.49 .99
+ Personal
+ Soap 1.99 3.49
+ Food
+ Brown Sugar 2.69
+ Bread 1.25 1.25
+ Wraps 1.95 1.95
+ 2.99
+ 8.49
+ 1.99 1.99 1.99
+
+
My thought was this:
+
+
Do a search and replace on everything bar the numbers
:%s/\v\s/+/g " replace spaces with +
+ :%s/\v\n/+/g " replace newlines with +
+ :%s/\v\+$//g " remove any trailing +'s
+
+
Tally with BC
+
You can do this from within Vim using the ! command or drop the shell and
+do it
+
:!cat % | bc
+
+
Now all that may seem a little over the top for tallying a shopping list,
+however it's little exercises like this that can help you learn more vim,
+regex, shell and other useful things
+
Extra credit
+
You could of course you another tool to add the numbers up. Here is how to do
+it using awk having each number on a seperate line:
+
:!awk '{n+=$1}; END{print n}' %
+
+
Using powershell each number on seperate line
+
:!pwsh -com "&{gc %|\%{[double]\$n+=\$_};\$n}"
+
+
Credit for awk and bc goes to this askubuntu answer.
+
diff --git a/vim-odd-jobs-1.md b/vim-odd-jobs-1.md
new file mode 100644
index 0000000..0a41b28
--- /dev/null
+++ b/vim-odd-jobs-1.md
@@ -0,0 +1,130 @@
+Vim Odd Jobs 1
+
+Today Clarissa did the shopping and as she was in a rush didn't have the time
+to total the items in the trolley. She had updated the cost of each item in a
+shared iCloud note and texted me to see if I could quickly add them up on my
+computer.
+
+---
+
+This is the point where most people would pull out `calc.exe` and manually sum
+them. Not I!.
+
+I fired up the iCloud site on my machine and copy and pasted the iCloud note to
+a fresh vim buffer:
+
+ Shopping 2019
+ 1st Isle:
+ Vedge
+ Potatoes 4 + 6 6 3 3 5 16.99 2 2 3 3 4.99 5.99 5.99 5.99 12.15 7.99 7.99 8.99
+ Other vedge for a meat + vedge dinner
+ Meats
+ Chicken dinner with a sauce (Indian or Apricot or some other chicken + rice meal)
+ Lunch Chicken
+ Sausages
+ Kids Junk Food
+ Tiny Teddies (Olivia’s request) 2.49 2.49
+ Flavoured Rice Cakes 6
+ Crackers 2.49 2.49
+ Dairy 2.69
+ Big tub of greek yogurt
+ Vanilla Bean Yogurt 3.99 3.99 3.99
+ Butter - 4.99 4.99 4.99
+ Milk Powder - 5.69 5.69 5.69
+ Second Isle
+ Corn Chips for Nachos
+ Nacho Salsa
+ Popcorn 2.49 2.49 9.98
+ A Cordial or somesuch 2.49
+ Third Isle
+ Frozen
+ Pies 3.55 3
+ Lasagne? 12
+ French Fires 1.89 1.89
+ Chicken Nuggets 2.99 2.99
+ Cleaning
+ Garbage Bags 1.79
+ Mozzie Coils
+ Last Isle
+ Food
+ Spaghetti Pasta .65 .65 1.59 1.59
+ Tinned Beetroot 1.15
+ Tinned Spagetti * .85 .85 .85
+ Indian or rice meal sauce 2.49 .99
+ Personal
+ Soap 1.99 3.49
+ Food
+ Brown Sugar 2.69
+ Bread 1.25 1.25
+ Wraps 1.95 1.95
+ 2.99
+ 8.49
+ 1.99 1.99 1.99
+
+My thought was this:
+
+* Do a search and replace on everything bar the numbers
+* Quickly tally the numbers using [`bc`][1]
+
+### Step 1. Find the search
+
+Best way to figure out a regular expression in vim is to enable these two
+settings:
+
+ :set hlsearch incsearch
+
+With these set, you can begin a search by typing `/` then as you type results
+are instantly highlighted.
+
+After a few tries with negative lookbehinds and whatnot, I settled on this:
+
+ /\v[a-zA-Z()+*?\- :]
+
+The `\v` causes Vim to use a more modern regex pattern requiring far less
+escape characters.
+
+### Run the search
+
+I then ran the search of the whole file:
+
+ :%s/\v[a-zA-Z()+*?\- :]/ /g
+
+Then all I had to do was clean up double spaces and the blank lines
+
+ :%s/\v^\s+//g " removing leading spaces
+ :g/\v^$/d " delete blank lines
+
+### Convert it to a format that bc would like
+
+ :%s/\v\s/+/g " replace spaces with +
+ :%s/\v\n/+/g " replace newlines with +
+ :%s/\v\+$//g " remove any trailing +'s
+
+### Tally with BC
+
+You can do this from within Vim using the `!` command or drop the shell and
+do it
+
+ :!cat % | bc
+
+Now all that may seem a little over the top for tallying a shopping list,
+however it's little exercises like this that can help you learn more vim,
+regex, shell and other useful things
+
+#### Extra credit
+
+You could of course you another tool to add the numbers up. Here is how to do
+it using `awk` having each number on a seperate line:
+
+ :!awk '{n+=$1}; END{print n}' %
+
+Using powershell _each number on seperate line_
+
+ :!pwsh -com "&{gc %|\%{[double]\$n+=\$_};\$n}"
+
+Credit for awk and bc goes to this [askubuntu][2] answer.
+
+Tags: vim-tips, vim-odd-jobs
+
+[1]:https://www.gnu.org/software/bc/manual/html_mono/bc.html
+[2]:https://askubuntu.com/questions/785038/how-can-i-sum-numbers-on-lines-in-a-file
diff --git a/vim-quickfix-and-powershell-revisited.html b/vim-quickfix-and-powershell-revisited.html
new file mode 100644
index 0000000..ccabf1d
--- /dev/null
+++ b/vim-quickfix-and-powershell-revisited.html
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+Vim Quickfix and PowerShell revisited
+
+
Pretty much any language can be made to work well with Vim without having to
+resort to Plugins. That's the beauty of it. Vim is a tool, PowerShell is a tool.
+It's worth getting to know your tools intermitly to become an expert.
+
+
I won't say I'm an expert, but I have been enjoying using some more advanced
+features of Vim and PowerShell lately. That's why when Enno wrote in
+originally, I was eager to find a solution.
Currently, one cannot jump to the error shown in the quickfix list,
+because the file name is not contained in the output of &makeprg. Sadly,
+:help errorfmt says
+
If the error format does not contain a file name Vim cannot switch to the
+correct file. You will have to do this by hand.
+
But perhaps the parameters passed to pwsh can be tweaked so that the
+file name shows up at some point?
+
Best wishes
+
Enno
+
+
That was about a month ago. Apologies for the delayed response Enno, I've been
+busy playing with Gentoo on my new Raspberry Pi 4.
+
Anyway, tonight I decided to investigate how to solve the problem.
+
The problem can be summed up in 2 parts.
+
+
How to make PowerShell emit the filename
+
How to read the filename with errorformat
+
+
Emit the FileName!
+
This one didn't take me too long to figure out. When I first borrowed code
+from keith hill, I looked and understood what was happening conceptually
+but did not think to use the interactive nature of PowerShell and see what else
+it could do.
+
Anyway, tonight, the good ole Get-Member makes a solution bleeding obvious:
Using Keith Hills, code I quick adapt to using InvokeScript which probably (and
+doesn't) need to be joining strings arrays together anymore.
+
Here, I demonstrate:
+
trap {$_.tostring();continue}&{
+ >> [void]$ExecutionContext.InvokeCommand.InvokeScript('./bad.ps1')
+ >> }
+ At /Users/jpharris/bad.ps1:1 char:16
+ + function silly {
+ + ~
+ Missing closing '}' in statement block or type definition.
+
+
So finally we have the filename where 'line' used to be before. All that's left
+to do now is update the errorformat.
+
Errorformat
+
I say to myself "this shouldn't be too hard", and this is what I think should
+work:
+
set errorformat=%EAt\ %f:%l\ char:%c,%-C+%.%#,%Z%m,%-G\\s%#
+
+
But it doesn't! And I sit there for a few hours trying to debug it. Why won't it
+work? The silly thing is, it does work and the errorformat is correct, but today
+is one of those days I get to learn something new about Vim (just like every
+other day).
+
I haven't been setting the errorformat in my vim window (I'm not a monster).
+I've been setting it by editing the compiler PowerShell.vim file in my plugin.
+
I decide to check if the errorformat is being set correctly with:
+
verbose set errorformat?
+ errorformat=%EAt line:%l char:%c,%-+%.%#,%Z%m,%-G\s%#
+ Last set from ~/.vimother/views/~=+bad.ps1= line 29
+
+
Ahuh! I did not know it, but errorformat can be saved into a view, therefore I
+was never testing any of my changes!
+
Anyway, I best upload my change to github and head off to sleep.
Enno wrote in with a question on how Ale set's
+Vim's makeprg and errorformat options when working with PowerShell.
+
+
Under the hood, I'm not sure if Ale uses those Vim features for processing
+command output. Thus I'm not able to capture what those settings would look
+like for PowerShell.
+
However the question did pique my curiosity and I'm interested in what the
+options would look like if you wanted to parse PowerShell without Ale.
+
makeprg
+
Disclaimer
+
My understanding of many Vim features is limited, so take what you learn here
+with a grain of salt.
+
makeprg defaults to the command make. That way you can enter :make and
+have your current project compiled without leaving Vim. Alongside that, the
+output is parsed using a string option errorformat.
+
In order for PowerShell to produce some syntax checking output, you can run a
+small script over the code and parse it's output. Therefore I embedded the
+script into the makeprg option like so:
Now that makeprg is good to go, time to sort out the errorformat.
+
errorformat
+
Errorformat uses scanf type parsing (which I had to google) that is a parsing
+format used by c and other languages.
+
I spent a couple of hours today working this out by trial-and-error. While Vim's
+:help errorformat documentation is great, particularly by including so many
+examples, I didn't take the time to read it thoroughly initially.
+
Here is the winning formula:
+
set errorformat=%EAt\ line:%l\ char:%c,%-C+%.%#,%Z%m,%-G\\s%#
+
+
Explanation:
+
+
%E tells Vim to begin capturing a multi-line message
+
At\ line:%l records the line number where %l is
+
\ char:%c records the column number where %c is
+
%-C+%.%# continues a multi-line message, but removes this line from the
+ message if it contains + followed by .* regex
+
%Z%m tells Vim that this is the last line of a multi-line message and uses
+ the whole line
+
%-G\\s%# tells vim to discard lines that are full whitespace
+
+
VimRC
+
While I'm not sure I'll use this, as I like Ale, I hope it is useful to someone
+out there, you could put it in your .vimrc like this:
+
diff --git a/vim-quickfix-and-powershell.md b/vim-quickfix-and-powershell.md
new file mode 100644
index 0000000..73cff7e
--- /dev/null
+++ b/vim-quickfix-and-powershell.md
@@ -0,0 +1,105 @@
+Vim Quickfix and PowerShell
+
+Enno wrote in with a question on how [Ale](https://github.com/w0rp/ale) set's
+Vim's `makeprg` and `errorformat` options when working with PowerShell.
+
+---
+
+Under the hood, I'm not sure if Ale uses those Vim features for processing
+command output. Thus I'm not able to capture what those settings would look
+like for PowerShell.
+
+However the question did pique my curiosity and I'm interested in what the
+options would look like if you wanted to parse PowerShell without Ale.
+
+### makeprg
+
+**Disclaimer**
+
+My understanding of many Vim features is limited, so take what you learn here
+with a grain of salt.
+
+`makeprg` defaults to the command `make`. That way you can enter `:make` and
+have your current project compiled without leaving Vim. Alongside that, the
+output is parsed using a string option `errorformat`.
+
+In order for PowerShell to produce some syntax checking output, you can run a
+small script over the code and parse it's output. Therefore I embedded the
+script into the `makeprg` option like so:
+
+ set makeprg=pwsh\ -command\ \"&{
+ \trap{$_.tostring();continue}&{
+ \$c=gc\ '%';$c=[string]::join([environment]::newline,$c);
+ \[void]$executioncontext.invokecommand.newscriptblock($c)
+ \}
+ \}\"
+
+This works on win32 and you can see the resulting output by opening the quickfix
+window with `:copen`
+
+Unfortunately, on Unix, the most likely default shell will eat the PowerShell
+`$Variables` so they must be escaped:
+
+ set makeprg=pwsh\ -command\ \"&{
+ \trap{\\$_.tostring\();continue}&{
+ \\\$c=gc\ '%';\\$c=[string]::join([environment]::newline,\\$c);
+ \[void]\\$executioncontext.invokecommand.newscriptblock(\\$c)
+ \}
+ \}\"
+
+Now that `makeprg` is good to go, time to sort out the errorformat.
+
+###errorformat
+
+Errorformat uses scanf type parsing (which I had to google) that is a parsing
+format used by c and other languages.
+
+I spent a couple of hours today working this out by trial-and-error. While Vim's
+`:help errorformat` documentation is great, particularly by including so many
+examples, I didn't take the time to read it thoroughly initially.
+
+Here is the winning formula:
+
+ set errorformat=%EAt\ line:%l\ char:%c,%-C+%.%#,%Z%m,%-G\\s%#
+
+Explanation:
+
+* `%E` tells Vim to begin capturing a multi-line message
+* `At\ line:%l` records the line number where %l is
+* `\ char:%c` records the column number where %c is
+* `%-C+%.%#` continues a multi-line message, but removes this line from the
+ message if it contains + followed by .\* regex
+* `%Z%m` tells Vim that this is the last line of a multi-line message and uses
+ the whole line
+* `%-G\\s%#` tells vim to discard lines that are full whitespace
+
+###VimRC
+
+While I'm not sure I'll use this, as I like Ale, I hope it is useful to someone
+out there, you could put it in your .vimrc like this:
+
+ augroup powershell
+ autocmd!
+ autocmd BufNewFile,BufRead *.ps1,*.psm1 setlocal FileType=powershell
+ autocmd FileType powershell setlocal errorformat=%EAt\ line:%l\ char:%c,
+ \%-C+%.%#,
+ \%Z%m,
+ \%-G\\s%#
+ if has('win32')
+ autocmd FileType powershell set makeprg=pwsh\ -command\ \"&{
+ \trap{$_.tostring();continue}&{
+ \$c=gc\ '%';$c=[string]::join([environment]::newline,$c);
+ \[void]$executioncontext.invokecommand.newscriptblock($c)
+ \}
+ \}\"
+ else
+ autocmd FileType powershell set makeprg=pwsh\ -command\ \"&{
+ \trap{\\$_.tostring\();continue}&{
+ \\\$c=gc\ '%';\\$c=[string]::join([environment]::newline,\\$c);
+ \[void]\\$executioncontext.invokecommand.newscriptblock(\\$c)
+ \}
+ \}\"
+ endif
+ augroup END
+
+Tags: powershell, vim
diff --git a/vim-tip-edit-macro.html b/vim-tip-edit-macro.html
new file mode 100644
index 0000000..2c07278
--- /dev/null
+++ b/vim-tip-edit-macro.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+Vim tips, macro's
+
+
+
diff --git a/vim-tip-edit-macro.md b/vim-tip-edit-macro.md
new file mode 100644
index 0000000..2a6feb4
--- /dev/null
+++ b/vim-tip-edit-macro.md
@@ -0,0 +1,31 @@
+Vim tips, macro's
+
+Google it and you will find a couple of methods to edit vim macros. Here is
+the method I like and will continue to use.
+
+---
+
+_The following will paste a register to a new line, you edit the line and then
+yank the content back to the register_
+
+1. Go to a new line
+2. In normal mode enter `"qp` where q is the register
+3. Edit the line (use Ctrl+V Ctrl+M to add a return)
+4. Type `"qyy` to yank the line into register q
+
+Here are some key combo's you would have to type in for insert mode operations
+
+* Enter: `Ctrl+v Ctrl+m`
+* Escape: `Ctrl+v Ctrl+[`
+
+You can also add a macro into your vimrc with the following vimscript
+
+ let @q='oAn inserted macro^['
+
+With this, the macro stored in the q register will use o to open a new line in insert
+mode, type 'An inserted macro' and then go back to normal mode.
+
+If you have any comments or feedback, please [email](mailto:jesse@zigford.org) me
+and let me know if you will allow your feedback to be posted here.
+
+Tags: vim-tips, vim, vim-macros
diff --git a/visitors.html b/visitors.html
new file mode 100644
index 0000000..dafcc44
--- /dev/null
+++ b/visitors.html
@@ -0,0 +1,2510 @@
+
+
+
+
+
I've made a copy of this script which downloads the dependencies (including
+PSCore. Also of note, on a machine I ran it on, I had to set the allowed .Net
+TLS modes before it would let me download from github.
I've recently been using Macos at work in order to share
+admin responsibilities across the team. Still suppporting Windows, however
+there are a couple of tools I use to make working Windows from a Mac
+simpler.
+
PowerShell
+
Microsoft Open-Sourced PowerShell in 2016 and today
+in 2018, you can get stable installations for Macos, Linux and Windows on
+github which is often referred
+to as PSCore.
+
As an aside, this new version of powershell is not nativly backward
+compatible with compiled binary modules of the previous "Windows Powershell",
+however recently in development is a new module:
+WindowsCompatibility
+(currently only available on Windows Insider builds) that allows your to
+import "Windows Powershell" modules into PSCore.
+
When alpha and beta builds first became available I started testing remote
+sessions from Linux and Macos to Windows (As I would prefer to work from a
+unix system at work), but quickly found that the native "Enter-PSSession"
+wasn't supported from PSCore.
+
OpenSSH
+
Around the same time, Microsoft began working with the OpenBSD's OpenSSH
+project to bring official OpenSSH builds to Windows and the PSCore team
+found a way to make "Enter-PSSession" work with this.
+
Packaging PSCore
+
Packaging PSCore is very straightforward and I won't go into detail here.
+Suffice it to say that PSCore is released as an
+MSI and these are very
+simple to deploy using tools like Configuration Manager.
+
OpenSSH Package
+
Essentially I created a Windows Powershell script which follows the
+installation directions on the Win32 OpenSSH github Installation page.
+
The Scripts
+
Deploying an application using scripts in Configuration Manager, usually
+requires 3 scripts, and this case is no exception. I have provided the all
+needed scripts below:
+
diff --git a/win32-openssh-package.md b/win32-openssh-package.md
new file mode 100644
index 0000000..3407e7e
--- /dev/null
+++ b/win32-openssh-package.md
@@ -0,0 +1,367 @@
+Win32 OpenSSH Package
+
+#### Update 20/09/2018
+
+Updated the script to UseBasicParsing so it works on Server core out of the box.
+Also, if you have to allow the port on Windows Firewall:
+
+`New-NetFirewallRule -DisplayName "Allow SSH" -Direction Inbound -LocalPort 22 -Protocol TCP -Action Allow`
+
+#### Update 11/09/2018
+
+I've made a copy of this [script][1] which downloads the dependencies (including
+PSCore. Also of note, on a machine I ran it on, I had to set the allowed .Net
+TLS modes before it would let me download from github.
+
+`[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"`
+
+---
+
+I've recently been using Macos at work in order to share
+admin responsibilities across the team. Still suppporting Windows, however
+there are a couple of tools I use to make working Windows from a Mac
+simpler.
+
+## PowerShell
+
+Microsoft Open-Sourced PowerShell in [2016](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/) and today
+in 2018, you can get stable installations for Macos, Linux and Windows on
+[github](https://github.com/Powershell/Powershell) which is often referred
+to as PSCore.
+
+As an aside, this new version of powershell is not nativly backward
+compatible with compiled binary modules of the previous "Windows Powershell",
+however recently in development is a new module:
+[WindowsCompatibility](https://github.com/PowerShell/WindowsCompatibility)
+(currently only available on Windows Insider builds) that allows your to
+import "Windows Powershell" modules into PSCore.
+
+When alpha and beta builds first became available I started testing remote
+sessions from Linux and Macos to Windows (As I would prefer to work from a
+unix system at work), but quickly found that the native "Enter-PSSession"
+wasn't supported from PSCore.
+
+## OpenSSH
+
+Around the same time, Microsoft began working with the OpenBSD's OpenSSH
+project to bring official OpenSSH builds to Windows and the PSCore team
+found a way to make "Enter-PSSession" work with this.
+
+## Packaging PSCore
+
+Packaging PSCore is very straightforward and I won't go into detail here.
+Suffice it to say that PSCore is released as an
+[MSI](https://en.wikipedia.org/wiki/Windows_Installer) and these are very
+simple to deploy using tools like [Configuration Manager](https://aka.ms/sccm).
+
+## OpenSSH Package
+
+Essentially I created a Windows Powershell script which follows the
+installation directions on the Win32 OpenSSH github [Installation](https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH) page.
+
+### The Scripts
+
+Deploying an application using scripts in Configuration Manager, usually
+requires 3 scripts, and this case is no exception. I have provided the all
+needed scripts below:
+
+#### Install.ps1
+
+ [CmdLetBinding()]
+ Param()
+
+ #region Helper functions
+ function Get-Path {
+ [CmdLetBinding()]
+ Param(
+ [ValidateSet(
+ "Machine",
+ "User"
+ )]$Context = "User",
+ [Switch]$Raw
+ )
+ If ($Context -eq "Machine") {
+ $Root = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager'
+ } else {
+ $Root = 'HKCU:'
+ }
+ If ($Raw){
+ Get-ItemPropertyValue -Path "$Root\Environment" -Name Path
+ } Else {
+ Try {
+
+ (Get-ItemPropertyValue -Path "$Root\Environment" `
+ -Name Path -EA SilentlyContinue) -split ';'
+ } Catch {
+ Write-Warning "No user environment variables found"
+ }
+ }
+ }
+
+ function Add-Path {
+ [CmdLetBinding()]
+ Param(
+ [Parameter(Mandatory=$True)]
+ [ValidateScript({
+ if (Test-Path -Path $_) {
+ $True
+ } else {
+ throw "Unable to validate path $_"
+ }
+ })]$Path,
+ [ValidateSet(
+ "Machine",
+ "User"
+ )]$Context
+ )
+
+ Write-Verbose "Adding $Path to environment"
+ if ($Context -eq 'Machine') {
+ If (! $Path -in (Get-Path -Context Machine)){
+ Write-Verbose "Adding $Path to machine context"
+ setx /m PATH "$(Get-Path -Context Machine -Raw);$Path"
+ }
+ } else {
+ Write-Verbose "Adding $Path to user context"
+ If (! $Path -in (Get-Path -Context User)){
+ Write-Verbose "Adding $Path to user context"
+ setx PATH "$(Get-Path -Context Use -Raw);$Path"
+ }
+ }
+ }
+
+ function New-SymbolicLink {
+ Param($Link,$Target)
+ If (-Not (Test-Path -Path $Link)){
+ If ((Get-Item $Target).PSIsContainer) {
+ cmd.exe /c mklink /D $Link $Target
+ } Else {
+ cmd.exe /c mklink $Link $Target
+ }
+ }
+ }
+ #endregion
+
+ # Extract OpenSSH
+ $Archive = Get-ChildItem -Filter *.zip
+ Expand-Archive -Path $Archive -DestinationPath $env:ProgramFiles
+ Rename-Item -Path $Env:ProgramFiles\OpenSSH-Win64 -NewName OpenSSH
+
+ #Add InstallDir to Path
+ Add-Path -Path $Env:ProgramFiles\OpenSSH -Context Machine -Verbose
+
+ # Configure OpenSSH
+ & $Env:ProgramFiles\OpenSSH\install-sshd.ps1
+
+ # Start sshd service
+
+ Start-Service -Name sshd
+
+ # Set service startup
+
+ Set-Service sshd -StartupType Automatic
+ Set-Service ssh-agent -StartupType Automatic
+
+ # Setup pwsh link to work around
+ # https://github.com/PowerShell/Win32-OpenSSH/issues/784
+ # Find PSCore Install and Make symbolic link
+
+ $PSCoreDir = Get-ChildItem -Path $env:ProgramFiles\PowerShell `
+ -Directory | Select-Object -Last 1
+ New-SymbolicLink -Link $env:SystemDrive\pwsh -Target $PSCoreDir.FullName
+
+ # Enable Password Authentication and set pwsh as default shell
+ $NewConfig = Get-Content -Path $Env:ProgramData\ssh\sshd_config |
+ ForEach-Object {
+ Switch ($_) {
+ {$_ -match '^#PasswordAuthentication\syes'} {$_.replace('#','')}
+ {$_ -match '^#PubkeyAuthentication\syes'} {$_.replace('#','')}
+ {$_ -match '^Subsystem\s+sftp\s+'} {
+ 'Subsystem powershell c:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile'
+ }
+ Default {$_}
+ }
+ }
+ # Update sshd config
+ Set-Content -Path $Env:ProgramData\ssh\sshd_config -Value $NewConfig `
+ -Force
+
+ # Restart sshd
+ Restart-Service sshd
+
+#### Uninstall.ps1
+
+ [CmdLetBinding()]
+ Param()
+
+ #region Helper functions
+
+ function Remove-SymbolicLink {
+ Param($Link,$Target)
+ If (Test-Path -Path $Link){
+ If ((Get-Item $Target).PSIsContainer) {
+ cmd.exe /c rmdir $Link
+
+ } Else {
+ cmd.exe /c del $Link
+
+ }
+
+ }
+
+ }
+
+ function Get-Path {
+ [CmdLetBinding()]
+ Param(
+ [ValidateSet(
+ "Machine",
+ "User"
+
+ )]$Context = "User",
+ [Switch]$Raw
+
+ )
+ If ($Context -eq "Machine") {
+ $Root = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager'
+
+ } else {
+ $Root = 'HKCU:'
+
+ }
+ If ($Raw){
+ Get-ItemPropertyValue -Path "$Root\Environment" -Name Path
+
+ } Else {
+ Try {
+
+ (Get-ItemPropertyValue -Path "$Root\Environment" `
+ -Name Path -EA SilentlyContinue) -split ';'
+
+ } Catch {
+ Write-Warning "No user environment variables found"
+
+ }
+
+ }
+
+ }
+
+ function Remove-Path {
+ [CmdLetBinding()]
+ Param(
+ [Parameter(Mandatory=$True)]
+ $Path,
+ [ValidateSet(
+ "Machine",
+ "User"
+
+ )]$Context
+
+ )
+
+ Write-Verbose "Removing $Path from environment"
+ if ($Context -eq 'Machine') {
+ If ($Path -in (Get-Path -Context Machine)){
+ Write-Verbose "Removing $Path from machine context"
+ $NewPath = ""
+ Get-Path -Context Machine | Where-Object {
+ $psItem -ne $Path -and
+ $psItem -ne ""
+
+ } ForEach-Object {
+ $NewPath += "$psItem;"
+
+ }
+ setx /m PATH "$NewPath"
+
+ }
+
+ } else {
+ Write-Verbose "Removing $Path from user context"
+ If ($Path -in (Get-Path -Context User)){
+ Write-Verbose "Removing $Path from user context"
+ $NewPath = ""
+ Get-Path -Context User | Where-Object {
+ $psItem -ne $Path -and
+ $psItem -ne ""
+
+ } ForEach-Object {
+ $NewPath += "$psItem;"
+
+ }
+ setx PATH "$NewPath"
+
+ }
+
+ }
+
+ }
+
+ #endregion
+
+ & $Env:ProgramFiles\OpenSSH\uninstall-sshd.ps1
+
+ # Extract OpenSSH
+ Remove-Item -Path $env:ProgramFiles\OpenSSH -Recurse -Force
+ Remove-Path -Path $env:ProgramFiles\OpenSSH -Context Machine -Verbose
+
+ # Find PSCore Install and remove symbolic link
+
+ $PSCoreDir = Get-ChildItem -Path $env:ProgramFiles\PowerShell -Directory | Select-Object -Last 1
+ Remove-SymbolicLink -Link $env:SystemDrive\pwsh -Target $PSCoreDir.FullName
+
+ # Remove old config
+ Remove-Item -Path $env:ProgramData\ssh -Recurse -Force
+
+#### Detect.ps1
+
+ $AssumeInstalled = $True
+
+ If (-Not (Test-Path $Env:ProgramFiles\OpenSSH)) {
+ $AssumeInstalled = $False
+
+ }
+
+ If (-Not (Test-Path $Env:SystemDrive\pwsh)) {
+ $AssumeInstalled = $False
+
+ }
+
+ If (-Not (Get-Service sshd -ErrorAction SilentlyContinue)) {
+ $AssumeInstalled = $False
+
+ }
+
+ If ($AssumeInstalled) {
+ Write-Output "True"
+
+ }
+
+## Using OpenSSH with Powershell
+
+Now that I have used these scripts to deploy OpenSSH and PSCore, I can
+PSRemote to a PC using my Mac.
+
+The old way to use "Enter-PSSession" was by specifying the ComputerName
+parameter like so:
+
+ PS\> Enter-PSSession -ComputerName Blah
+
+However, when using OpenSSH with a PS Session you do the following:
+
+ PS\> Enter-PSSession -HostName Blah -UserName MrBlah
+
+You could also setup a session in a variable and resue it multiple times
+in a session:
+
+ PS\> $s = New-PSSesssion -HostName Blah -UserName MrBlah
+ PS\> Enter-PSSession -Session $s
+
+ [Blah] PS\>
+
+I hope you have found this usefull.
+
+Tags: powershell, pscore, openssh, windows, macos
+
+[1]: scripts.html
diff --git a/windows.html b/windows.html
new file mode 100644
index 0000000..0bc3988
--- /dev/null
+++ b/windows.html
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+Windows
+
+
Many in the free software community regard Windows as a pile of garbage. While
+it does have it's flaws, I think many of these conclusions fail to see the
+case for Windows.
+
+
I've read the book 'Show Stopper!: The Breakneck Race to Create Windows
+NT and the Next Generation at Microsoft', and there are a few other posts
+around the internet about the troubled history of Windows development.
+
+
Even with all of the beuracracy that has burdened it's development, it feels
+like MS have really turned a corner with Windows 10.
+
+
The good
+
+
Here are some of the less commonly appreciated aspects of Windows:
+
+
+
Runs on extrodinarily varied hardware
+
NTFS Volume Shadow Copies (Like free snapshots in btrfs and zfs)
+
Can take on any number of personalities (like WSL and 32bit windows on 64bit)
+
Can boot from a filesystem in a file (vhd)
+
Deeply scriptable (I've seen many say Windows is GUI only. Fallacy)
+
Out-of-band data deduplication. (Amazing feature that I haven't seen
+replicated as well on Linux)
+
Highly customizable for business use cases
+
Strong sleep / power saving support
+
Robust remote desktop solution (No other OS has this implemented as well)
Ability to refresh the PC with the click of a button
+
+
+
I'm also writing this article from a Windows command prompt on a Microsoft
+Surface Pro 3. By the way, did you know openssh comes built-in to Windows since
+the April 2018 release?
+
+
The bad
+
+
Some of these items are not the fault of Windows directly, but indirectly due
+to being the most popular desktop operating system. In these cases a diligent
+systems administrator can overcome these negative aspects of running Windows.
+
+
+
Horrible console (Improvements coming with ConPTY)
+
No developer culture - Many developers have created user hostile apps
+(ie, apps that consume too many resources, start on boot, are kinda like
+malware)
+
The need to run Anti-Virus software. (Seriously annoying as often the AV
+software consumes as many resources as the apps you are running, effectivly
+halving the performance of your PC)
+
Third-party application install experience. (This problem is slowly going away as
+more Win32 apps enter the store via Project Centenial)
+
+
+
Also of note is that now that Microsoft is starting to push S mode, some
+of these issues may go away. Running a PC lean on third-party apps really makes
+it a dream to use. Super long battery life, quiet, cool, bug-free. If you can
+live with the built-in apps, I highly recommend giving it a go.
+
+
+
+
My history with Windows
+
+
My usage of windows has it's origins in MS-DOS, as it would for many who used
+computers in the late 80's or earlie 90's.
+
+
Having used PC's since then, I've always had, either through work or home a PC
+running a version of Windows covering most of the major releases.
+
+
+
Windows 3.11 (at home on the parents PC)
+
Windows 95 (on my own PC, also began running Linux around this time)
+
Windows 98 (again on my own PC)
+
Windows 2000 Server (home PC)
+
Windows XP (Home and Work)
+
Windows 7 (Home and Work)
+
Windows 8.1 (Work, testing Surface hardware)
+
Windows 10 (Work)
+
+
+
A keen windows user may notice I skipped Milenium edition, Vista, and Windows
+8. I did use them, but never ran them for any significant amount of time. I also
+haven't listed any of the Server editions that I regularly used at work.
+This list is just those used as a desktop operating system.
+
+
Since Windows XP, I've also been responsible for developing an MOE, and
+repackaging software for use at work.
+
+
+
+
+
+
+
diff --git a/windows.md b/windows.md
new file mode 100644
index 0000000..f5d982c
--- /dev/null
+++ b/windows.md
@@ -0,0 +1,93 @@
+Windows
+
+#### My opinions of Windows
+
+Many in the free software community regard Windows as a pile of garbage. While
+it does have it's flaws, I think many of these conclusions fail to see the
+case for Windows.
+
+I've read the [book][1] 'Show Stopper!: The Breakneck Race to Create Windows
+NT and the Next Generation at Microsoft', and there are a few other [posts][2]
+around the internet about the [troubled][3] history of Windows development.
+
+Even with all of the beuracracy that has burdened it's development, it feels
+like MS have really turned a corner with Windows 10.
+
+#### The good
+
+Here are some of the less commonly appreciated aspects of Windows:
+
+* Runs on extrodinarily varied hardware
+* NTFS Volume Shadow Copies (Like free snapshots in btrfs and zfs)
+* Can take on any number of personalities (like [WSL][6] and 32bit windows on 64bit)
+* Can boot from a filesystem in a file (vhd)
+* Deeply scriptable (I've seen many say Windows is GUI only. Fallacy)
+* Out-of-band data deduplication. (Amazing feature that I haven't seen
+ replicated as well on Linux)
+* Highly customizable for business use cases
+* Strong sleep / power saving support
+* Robust remote desktop solution (No other OS has this implemented as well)
+* Great built-in virutalization
+* [Windows Subsystem for Linux][6]
+* Ability to refresh the PC with the click of a button
+
+I'm also writing this article from a Windows command prompt on a Microsoft
+Surface Pro 3. By the way, did you know openssh comes built-in to Windows since
+the April 2018 release?
+
+#### The bad
+
+Some of these items are not the fault of Windows directly, but indirectly due
+to being the most popular desktop operating system. In these cases a diligent
+systems administrator can overcome these negative aspects of running Windows.
+
+* Horrible console (Improvements coming with [ConPTY][4])
+* No developer culture - Many developers have created user hostile apps
+ (ie, apps that consume too many resources, start on boot, are kinda like
+ malware)
+* The need to run Anti-Virus software. (Seriously annoying as often the AV
+ software consumes as many resources as the apps you are running, effectivly
+ halving the performance of your PC)
+* Third-party application install experience. (This problem is slowly going away as
+ more Win32 apps enter the store via [Project Centenial][5])
+
+Also of note is that now that Microsoft is starting to push [S mode][7], some
+of these issues may go away. Running a PC lean on third-party apps really makes
+it a dream to use. Super long battery life, quiet, cool, bug-free. If you can
+live with the built-in apps, I highly recommend giving it a go.
+
+---
+
+#### My history with Windows
+
+My usage of windows has it's origins in MS-DOS, as it would for many who used
+computers in the late 80's or earlie 90's.
+
+Having used PC's since then, I've always had, either through work or home a PC
+running a version of Windows covering most of the major releases.
+
+* Windows 3.11 (at home on the parents PC)
+* Windows 95 (on my own PC, also began running Linux around this time)
+* Windows 98 (again on my own PC)
+* Windows 2000 Server (home PC)
+* Windows XP (Home and Work)
+* Windows 7 (Home and Work)
+* Windows 8.1 (Work, testing Surface hardware)
+* Windows 10 (Work)
+
+A keen windows user may notice I skipped Milenium edition, Vista, and Windows
+8. I did use them, but never ran them for any significant amount of time. I also
+haven't listed any of the Server editions that I regularly used at work.
+This list is just those used as a desktop operating system.
+
+Since Windows XP, I've also been responsible for developing an [MOE][8], and
+repackaging software for use at work.
+
+[1]: https://www.goodreads.com/book/show/1416925.Show_Stopper_
+[2]: https://medium.com/@benbob/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239
+[3]: https://hackernoon.com/what-really-happened-with-vista-4ca7ffb5a1a
+[4]: https://blogs.msdn.microsoft.com/commandline/2018/08/02/windows-command-line-introducing-the-windows-pseudo-console-conpty/
+[5]: https://www.onmsft.com/news/what-is-project-centennial
+[6]: https://docs.microsoft.com/en-us/windows/wsl/about
+[7]: https://support.microsoft.com/en-us/help/4020089/windows-10-in-s-mode-faq
+[8]: https://en.wikipedia.org/wiki/Standard_Operating_Environment
diff --git a/write-information--write-host.html b/write-information--write-host.html
new file mode 100644
index 0000000..44f9998
--- /dev/null
+++ b/write-information--write-host.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+Write-Information > Write-Host
+
+
The dilemma was how to fix the harmful aspects of Write-Host (can't suppress,
+capture, or redirect), but keep it from polluting the output stream. And of
+course, the solution must be backward compatible.
+
+
This most elegant solution is provided by the information stream and the
+Write-Information cmdlet. The information stream is a new output stream that
+works much like the error and warning streams.
+
+
+
The information stream is a feature of powershell versions 5.x that I missed
+when it came out. Thus I have been avoiding using Write-Host in favour of
+Write-Verbose since reading about Write-Host Considered Harmful.
+
+
If you care about writing reusable automation friendly code, go have a read.
+
diff --git a/write-information--write-host.md b/write-information--write-host.md
new file mode 100644
index 0000000..ec0f5dd
--- /dev/null
+++ b/write-information--write-host.md
@@ -0,0 +1,22 @@
+Write-Information > Write-Host
+
+June Blender writing for [Hey, Scripting Guy! Blog][2]:
+
+> The dilemma was how to fix the harmful aspects of Write-Host (can't suppress,
+> capture, or redirect), but keep it from polluting the output stream. And of
+> course, the solution must be backward compatible.
+>
+> This most elegant solution is provided by the information stream and the
+> Write-Information cmdlet. The information stream is a new output stream that
+> works much like the error and warning streams.
+
+The information stream is a feature of powershell versions 5.x that I missed
+when it came out. Thus I have been avoiding using Write-Host in favour of
+Write-Verbose since reading about [Write-Host Considered Harmful][1].
+
+If you care about writing reusable automation friendly code, go have a read.
+
+Tags: powershell, streams
+
+[1]: http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful/
+[2]: https://blogs.technet.microsoft.com/heyscriptingguy/2015/07/04/weekend-scripter-welcome-to-the-powershell-information-stream/
diff --git a/xargs-tips.html b/xargs-tips.html
new file mode 100644
index 0000000..3bcf876
--- /dev/null
+++ b/xargs-tips.html
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+Xargs tips
+
+
After 12 years being a Windows admin, I've now used powershell more than other
+languages so I'm pretty fluent in it's syntax. So it makes me happy when I
+stumble upon bash/linux scripting paradigms which have been brought over to
+powershell.
+
+
It's great to see the inspiration powershell has gained from
+Unix systems and also great that it makes it easier for me to remember.
+
One paradigm I that I wished bash/*nix had is the Foreach-Object command.
+It makes working on collections of objects a breeze. I often find myself
+scratching my head when trying similar tasks on *nix. Enter xargs
+
Take this simple situation: I have a directory and I want to delete everything
+bar a single .config file.
+
$ ls -a
+ . blog.css .entry-23032.md .footer.html main.css
+ .. .config .entry-23032.md.swp .header.html .title.html
+
On *nix, Xargs is a bit like adding pipeline input to rm
+
$ ls -a | grep -v '\.config' | xargs rm
+
+
xargs is going to automatically append the output of the previous command as
+an argument of the rm command. In this case the argument has to be the final
+argument, but that can be changed using the -I parameter which specifies a
+substitue variable
+
$ ls -a | grep -v '\.config' | xargs -I '{}' echo "Delete {} ?"
+
+
Of course the powershell line could be a bit shorter
+
$ gci | ? Name -ne '\.config' | rm
+
+
If you have any comments or feedback, please email me
+and let me know if you will allow your feedback to be posted here.
+
diff --git a/xargs-tips.md b/xargs-tips.md
new file mode 100644
index 0000000..d8e5c0c
--- /dev/null
+++ b/xargs-tips.md
@@ -0,0 +1,46 @@
+Xargs tips
+
+After 12 years being a Windows admin, I've now used powershell more than other
+languages so I'm pretty fluent in it's syntax. So it makes me happy when I
+stumble upon bash/linux scripting paradigms which have been brought over to
+powershell.
+
+---
+
+It's great to see the inspiration powershell has gained from
+Unix systems and also great that it makes it easier for me to remember.
+
+One paradigm I that I wished bash/\*nix had is the `Foreach-Object` command.
+It makes working on collections of objects a breeze. I often find myself
+scratching my head when trying similar tasks on \*nix. Enter `xargs`
+
+Take this simple situation: I have a directory and I want to delete everything
+bar a single .config file.
+
+ $ ls -a
+ . blog.css .entry-23032.md .footer.html main.css
+ .. .config .entry-23032.md.swp .header.html .title.html
+
+My powershell brain wants to:
+
+ $ gci | ? Name -ne '.config' | foreach-object { rm $_ }
+
+On \*nix, Xargs is a bit like adding pipeline input to rm
+
+ $ ls -a | grep -v '\.config' | xargs rm
+
+`xargs` is going to automatically append the output of the previous command as
+an argument of the rm command. In this case the argument has to be the final
+argument, but that can be changed using the `-I` parameter which specifies a
+substitue variable
+
+ $ ls -a | grep -v '\.config' | xargs -I '{}' echo "Delete {} ?"
+
+Of course the powershell line could be a bit shorter
+
+ $ gci | ? Name -ne '\.config' | rm
+
+If you have any comments or feedback, please [email](mailto:jesse@zigford.org) me
+and let me know if you will allow your feedback to be posted here.
+
+Tags: bash-v-powershell, xargs, bash, powershell