"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 0000000000000000000000000000000000000000..28e6060c17dd56f08ab3f1b02ba939cb8d3ed6a5
GIT binary patch
literal 1060139
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