RSServe - A simply static server

A simple static HTML server for Redis (and Ember)

RSServe is a simple static HTML server for use with Redis. It works well with pick your favourite single page app. I’m using it for an Ember site I’m building.


Building RedisStaticServer

% go build rsserve.go


rsserve -c “path/to/config.json/”

Example Configuration

    "redis_pass": "",
    "redis_address": "localhost",
    "redis_port": 6379,

    "key_prefix": "production",
    "key_suffix": ":index.html",

    "http_address": "",
    "http_port": 80

January follow up and goals for February

So how did I go for the first month of the year?

Goals for January, 2016

  1. Have lunch or coffee with at least one London based tech entrepreneur.
  2. Have a date night with Renee.
  3. Complete at least 15 headspace guided meditation sessions.
  4. Create my new blog at
  5. Complete study of four measured skills for the 70-410 MCSA Exam.
  6. Request a correct legal contract for the contracting Project Management work I’m doing.
  7. Complete at least 6 HIIT sessions.
  8. Release a public MVP of
  9. Write one blog post about the MCSA study process.

Not great ;)

Let’s get the bad news out of the way first, the study for the first 70-410 Microsoft exam took up far more time than I expected (see the 70-410 study notes blog post). Don’t take the MS certifications for granted, they really do require a fair bit of dedicated time for study. February will require a more dedicated study schedule.

Morning meditations have gone better than in the past, but I only managed around 4 sessions this month, nowhere near the goal of 15. For this to work, I need to really dedicate 15 minutes each morning to the practice, even if it means getting up earlier than usual. Starting tomorrow, the alarm will be set for 5:40am sharp. This will require hitting the sack at 9pm at the latest to allow my mind to rest before sleeping around 10pm. Regarless, I’ve been able to more successfully recognise days where I’m anxious and take a step back and acknowledge the anxiety without it taking too much of a hold on me - something I consider a huge success. I want to improve that again this month. I’ve found the anxiety manifests itself as a mild to heavy (depending on the stress) tightness around my stomache - almost indistinguishable from the feeling you might get when coming down with an illness.

It’s finding a way to tell the difference that lets me know when to take a step back or when to try and push through.

Requesting a correct legal contract with my current employer has been set aside until I get back from a trip back to Australian in March - not fair to ask when I’ll be leaving for a 3 week break.

My biggest dissapointment? I didn’t spend even 5 minutes on Never underestimate the amount of time required to put out even a basic web app. In this case, I’ve falled pray to putting too much effort in to the site before putting it in front of customers. I still want to release what I’ve built of the site, so the goal for the february will be to release a radically simplified MVP of the site for use by select customers.

Heck, if I can’t get it released, I may just open source the code (or some of the useful libraries).

Fitness has been fantastic. I’ve played at least 6 squash matches at the new club (brondesbury squash and fitness) and at least 4 HIIT sessions at the local gym. So I aim to continue that this month while also improving my diet (not going to get than six pack without cutting out the dodgy food!).

Goals for February 2016

  • Study Schedule for February for MS 70-410.
  • Complete practice exams with 100% results twice before taking exam.
  • Open source (Github?) the Golang Redis HTML server built for
  • Meditate 15 times.
  • Another Date with Renee.
  • Have lunch or coffee with a London based tech entrepreneur.
  • At least 12 HIIT session as my brothers wedding gets closer.
  • Goal weight: 86 (Currently 89kg).

Microsoft 70-410 General study notes

Exam 70-410: Installing and Configuring Server 2012 (R2)

Preamble and disclaimer

This post consists of a ton of material that I’ve collected during the study process for the Mircosoft 70-410 exam (which I’ll be taking in early March, 2016). If you can see any required additions/omissions/corrections, send me an email and I’ll do my best to include them.

I make not guarantees that the information thrown together here is accurate or up to date! I’ll know soon enough when I start taking the exams, so don’t take anything as gospel.


Official Microsoft 70-410 Website



Microsoft is continuously updating and utilising PowersShell for both desktop and server management. Solid PowerShell knowledge will likely be a big part of the MCSA exams and I have very little PowerShell experience.

PowerShell commands (cmd-lets) use a Verb-Noun naming convention. Example verbs that are available can be found at the Microsoft website.aspx).

Get-Command lists all available commands available to you. A nice shortcut is, if you want to see which commands are availabe for a particular noun, you can use the -Noun argument.

Get-Command -Noun vhd

PowerShell can be used to manage: - The registry - Services - Processes - Event logs - Windows Management Instrumentation (WMI)

Independent software vendors can build custom tools and utilities for PowerShell to administer their environemnts.

Overall, everything you see running in the background in PowerShell is an object of some type (class).

.NET Integration

.NET is a foundational aspect of the PowerShell environment.

PowerShell Backward Compatibility

  • PowerShell 2.0 is backward compatible with 1.0
  • PowerShell 3.0 and 4.0 are compatible with 2.0

You can change the version of PowerShell you’re working with using the command:

powershell -version x.0

When updating PowerShell check on any potential compatibility issues (4.0 should not be installed on an Exchange 2007 environment!)

PowerShell and security

PowerShell by default runs under normal user access privileges. You can open a PowerShell administrative console using the cmdlet Start-Process powershell -verb runas.

Installing PowerShell

PowerShell comes as part of the Microsoft Windows Management Framework downloads. 2.0 for PowerShell 2.0, 3.0 for PowerShell 3.0 etc… Additionally; - Windows 7 and Server 2008 R2 come with PowerShell 2.0 (and can be installed on XP SP2, 2003 SP2 and Vista SP1) - Windows 8 and Server 2012 come wtih PowerShell 3.0 (and can be installed on Windows 7 SP1, Server 2008 SP1 and Server 2008 R2 SP1) - Windows 8.1 and Server 2012 R2 comes with PowerShell 4.0 (Win 7 SP1, 2008 R2 and Server 2012) - PowerShell 5.0 can be installed on Windows 8.1 and Server 2012 R2.

PowerShell 3.0 and 4.0 are the most commonly used PowerShell versions

Post PowerShell installation tasks

  1. Update PowerShell help information. Update-Help in the PowerShell prompt. You may want to run this form time to time.
  2. By default, you can run commands within the PS console, but cannpt run PowerShell scripts. You’ll need to set the Get-Execution policy. Set-ExecutionPolicy RemoteSigned.
  3. PSRemoting may not be enabled on other machines you wish to run PS commands against. You can run the Enable-PSRemoting cmdlet to enable this feature. (Server 2012 machines have this enabled by default)

Customizing the PowerShell console

Click on the PowerShell icon in the top-right of the window and select ‘Properties’.

PowerShell ISE

PowerShell Profiles

  • AllUsersAllHosts

    • %windir%\System32\WindowsPowerShell\v1.0\profile.ps1
  • AllUsersCurrentHost

    • %windir%\System32\WindowsPowerShell\v.10\Microsoft.PowerShell_profile.ps1
  • CurrentUserAllHosts

    • %userprofile%\My Documents\WindowsPowerShell\profile.ps1
  • CurrentUserCurrentHost

    • %userprofile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Desired State Configuration (DSC)



PowerShell Providers (Location)


  • WSMan (wsman:)
  • FileSystem (Default - c: <- function alias)
  • Registry (HKLM:, and HKCU:)
  • Aliases (alias:)
  • Functions (function:)
  • Environment (env:)
  • Certificates (cert:)
Set-Location HKLM:


dir, ls -> Get-ChildItems cd ->

PowerShell Modules

Install and configure servers (15-20%)


Udemy 70-410 Video Course

Big changes around virtualisation and managability. R2 is a minor update to 2012 standard which focused on more around private cloud (virtualisation, storage and networking) A role is considered a primary feature of a server - a feature helps a server perform its primary role.

Server 2012 R2 Licensing has four options: - Datacenter - Standard - Essentials (Smaller Companies - 25 Users) - Foundation (OEM Only - 15 Users)

Datacenter has the same functionality as Standard however DC edition has unlimited number of VMs, where Standard only has two (2). Further, licensing is per two phyical cores.

Roles (built in roles) that are not supported in Server Core 2012 R2: - Federated Services - Application Server - Network Policy and Access Services - Windows Deployment Services

In-Place Upgrades

In-place upgrade to Server 2012 R2 is supported from the following previous Windows versions:

  • Server 2008 R2 Datacenter with SP1 -> 2012 R2 Datacenter
  • Server 2008 R2 Enterprise with SP1 -> 2012 R2 Standard or Datacenter
  • Server 2008 R2 Standard with SP1 -> 2012 R2 Standard or Datacenter
  • Web Server 2008 R2 with SP1 -> 2012 R2 Standard
  • Server 2012 Datacenter -> 2012 R2 Datacenter
  • Server 2012 Standard -> 2012 R2 Standard or Datacenter
  • Hyper-V Server 2012 -> 2012 Hyper-V R2
  • Storage Server 2012 Standard -> 2012 Storage Server R2 Standard
  • Storage Server 2012 Workgroup -> 2012 Storage Server R2 Workgroup

Configuration Levels

In Server 2012, the configuration level at any time after installation (and during installation). Server core is considered the default.

There are now four (4) different configuration levels available (from lowest to highest): 1. Server-Core 2. Server-GUI-Mgmt-Infra 3. Server-GUI-Shell 4. Desktop-Experience

Configuration levels can be changed through Server Manager, PowerShell and DISM, and require a restart.

Example: Changing configuration levels using PowerShell.

Open up a PowerShell windows and use the Install-WindowsFeature cmdlet to update the servers configuration levels.

Install-WindowsFeature server-gui-mgmt-infra
Install-WindowsFeature server-gui-shell
Uninstall-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell -Restart

Additional option, Install-WindowsFeature can use an XML file created by Server Manager Add Features Wizard. Install-WindowsFeature -ConfigurationFilePath <filepath>

You can also install the windows role directly to a VHD file using the -VHD argument to Install-WindowsFeature.

Server Manager in 2012 has been updated to allow management of multiple servers. Remote management is enabled by default on Server 2012. If not, it can be enable using the powershell utility Enable-SMRemoting.exe -Enable. If your infrastructure includes 2008 or 2008 R2 installations you can install the Windows Management Framework. PowerShell 3.0 will be available and these machines can be managed remotely using Server Manager.

If you want to manage your servers on a Windows desktop machine you can install the Remote Server Administration Tools (Windows 8+ only).

You could also remove these features by running the Remove-WindowsFeature cmdlet.

Since the installation will require a restart anyway, you can use the -Restart argument to restart immediately after installation.

Post Configuration Steps

  • Setting the computer name: Rename-Computer -ComputerName “Example” -Restart netdom.exe renamecomputer %ComputerName% /NewName: NewComputerName

  • Joining the domain Add-Computer -DomainName (-ComputerName) netdom.exe %ComputerName% /join /userd /passwordd


Configure Networking Details

Using the netsh interface context

netsh interface ipv4 set address "Ethernet" static netsh interface ipv4 set dnsservers "Ethernet" static primary

Using PowerShell cmdlets

New-NetIPAddress -NetworkAlias "Ethernet" -IPAddress -DefaultGateway -PrefixLength 24

Set-DNSClientServerAddress -NetworkAlias "Ethernet" -ServerAddresses

Note: The first IP Address for DNS servers will be the primary address. You can remove DNS settings from an interface completely using the command:

Set-DNSClientServerAddress -ResetServerAddresses

Nic Teaming / LBFO

NIC Teams are used where high-availability is required (really always). A virtual machine network switch would usually use NIC teaming. In 2012, NIC teaming is native to Windows and supports up to 32 individial network cards in a team.

Note: While the Hyper-V Host/Hypervisor can support up to 32 NICs in an LBFO team, an individual VM will only support two NICs in a team.

Set up Load Balance Fail Over (LBFO)

Shortcut: Typing lbfoadmin from the command line brings up the NIC teaming window.

New-NetLbfoTeam -Name "Name" -TeamMembers nic1,nic2 TeamingMode static/lacp/switchindependent

Set-NetLbfoTeam(Ad Above)

Microsoft’s recommended teaming mode is Switch Independent and Dynamic (new in 2012 R2).

Activating windows

Configure server roles and features (15-20%)

Storage Spaces

  • @Todo: Columns and types of space (mirror/parity/etc…)
  • @Todo:

Create a new Storage Pool

$disks = (Get-PhysicalDisk -CanPool $true)
New-StoragePool -FriendlyName -StorageSubsystemFriendlyName -PhysicalDisks $disks

Storage Layouts


  • Requires at least 1 physical disk
  • **No fault tolerance
  • Data will be stripped across disks (good performance)


  • Requires at least 2 physical disks
  • Good read/pool write performance
  • 2 disks for single drive failure tolerance and 5 disks for 2 drive failure tolerance.


  • Requires 3 disks
  • Parity data is striped
  • 3 disks for single drive failure and 7 disks for 2 drvive failure tolerance.



Configure Hyper-V (15-20%)

Hyper-V Details and History

Hyper-V is a Type 1 hypervisor. It runs on the bare-metal of the server. When the Hyper-V role is installed and the server is reinstalled, Window Server itself runs essentially on top of the Hyper-V hypervisor.

Came out as a post RTM update to Windows Server 2008.

Server 2008

  • Limited to 4 vCPUs and 64GB of RAM per VM
  • Limited to 2TB VHD Size
  • Quick Migration (Pausing the VM)
  • Iterative VSS Backup
  • Snapshots
  • Passthu Storage

Server 2008 R2

  • Live Migration (Running VM - no pauses)
  • Clustered Shared Volumes
  • Processor compatibility mode
  • Hot-add SCSI storage
  • Jumbo Frames and VMQ (Virtual Machine Queues)
  • NIC teaming allowed (NIC vendor only, but supported)
  • SLAT support

Server 2008 R2 SP1

Server 2012

  • 64 vCPU and 1TB RAM per VM
  • NUMA support
  • 64TB VHDX
  • 64-node clusters
  • SMB 3.0 support
  • Storage Migration
  • Shared-nothing live migration.
  • Hyper-V Replica
  • Virtual Fibre Channel
  • Network Virtualisation
  • dVMQ and SR-IOV
  • Hyper-V Extensible Switch
  • Improved Dynamic Memory (Minimum Memory)
  • Resource Metering
  • First Class Linux Support

Server 2012 R2

  • Generation 2 VM (UEFI)
  • Dynamic SCSI VHDX resize
  • Shared VHDX on CSV/SoFS
  • Storage metering / QoS
  • Live migration compression / SMB
  • Hyper-V replica granularity & extended (multiple replicas)
  • Network virtualisation Gateway
  • Live VM/checkpoint export
  • vRSS (Virtual receive side scaling)
  • Automatic VM activation (AVMA)
  • More Linux features



The VHDX virtual disk format was introduced with Server 2012.

  • Support for storage capacities up to 64TB.
  • Protection against corruption during power failures.
  • Improved alignment on newer, large sector, disks (4KB vs. 512B with the older VHD format).
  • TRIM compatibility (on Physically connected disks only)


New-VHD -Path -SizeBytes -PhysicalSectorSizeBytes


Generation 1 vs Generation 2 Virtual Machines

Introduced in Server 2012 R2, Hyper-V supports Generation 2 virtual machines. The generation of VM determined which hardware and features are presented to the VM guest operating system.

Generation 2

  • PXE boot with a standard network adapter.
  • Boot from SCSI virtual HDD.
  • Boot from SCSI virtual DVD.
  • Secure Boot (enabled by default).
  • UEFI firmware support.

Generation 2 virtual machines support only Windows version 6.2 (64bit only) and higher.

  • Windows 8 (64bit), Server 2012 (6.2)
  • Windows 8.1 (64bit), Server 2012 R2.
  • Windows 10, Server 2016 (When it’s released).

Note: Linux VMs will not boot unless secure boot is disabled.


VM Resource Metering

Introducted in Hyper-V for Windows Server 2012, allows tracking of resource usage at the VM level.

Get-VM "VM Name" | Enable-VMResourceMetering
Measure-VM -VMName "VM Name" | Format-List

Get-VMMemory only gets the configured memory settings for the host server, not the actual usage of running virtual machines.

Hyper-V Networking

Hyper-V supports virtual subnetting on a VM network adapter basis. Virtual subnet IDs can range from 4096 to 16777215. Setting the Virtual Subnet ID to 0 disables the virtual subnetting feature.

Set-VMNetworkAdapter -VirtualSubjetId 0

Virtual machines only support two (2) virtual network adapters used in a team. You can add more, but only two are supported.

Metering network connections to a specific subnet.

PS C:> Get-VMNetworkAdapter -VMName Redmond | Add-VMNetworkAdapterAcl -RemoteIPAddress -Direction Outbound -Action Meter

Managing Hyper-V Virtual Machines

Using Virtual Machine Connection Enhanced Session Mode

Enhanced session mode allows the sharing of more data between the client and the guest virtual machine. Such as:

  • Clipboard content (Copy and Paste)
  • Audio
  • Drives
  • Printers
  • Smart cards and USB devices
  • Display configuration

These features are only available when the Hyper-V host is Server 2012 R2 and the guest OS is Windows 8.1 Professional/Enterprise or Server 2012 R2.

Enhanced session mode is disabled by default, to enable:

  • Enable Enhanced Session Mode Policy on the Hyper-V Host
  • Enable Enhanged Session Mode of Hyper-V Host
  • Restart the Hyper-V Service

For each host - Enable guest services - Ensure Remote Desktop Services is running/enabled.


Deploy and configure core network services (15-20%)


  • IPV6 Specifically AAAA Records (Quad-A Records) translate a domain name in to a IPv6 address. A Records translate a DNS domain name to an IPv4 address. Cache.dns contains designated root hints for the DNS server. ISATAP

For hosts to resolve address without the FQDN (i.e. only from the base hostname), the DNS server should be set to have a new Primary Zone called GlobalNames. It’s recommended it be AD integrated.

Add-DnsServerPrimaryZone -Name GlobalNames -ReplicationScope Domain


Migrating Printers - printbrm tool.


  • @Todo: Auditing file system access
  • @Todo: Auditing system changes (time?)
  • @Todo: Auditing AD and GP Access





  • 2000/3000 - Global unicast address space. (publically addressable)
  • FE80 - Link Local prefix. Reserved for single (non-public) broadcast domains.


In IPv4 land, IP addresses are typically configured through a DHCP server. The DHCP server will provide IP addresses as well as other subnet specific options, such as the address/es for DNS , gateway (router) and Windows Deployment Services (networking booting).

In IPv6 land, IP addresses are typically automatically configured. When IPv6 is enabled on an interface, it will (attempt to) create multiple IPv6 addresses.

The first is a EUI-64 generated Link-Local address. This address is broadcast domain scoped (It’s a Link-Local address) so routers will not transmit addresses beyond the subnet.

This address is created by taking the interface’s MAC address, flipping the 7th bit (don’t ask me why!) and putting FFFE right bang in the middle of the MAC address - then using the result (a 64 bit address) at the host ID in the FE80:: network.

For example, given the MAC address: 68:C2:D4:99:B9:E6, the resultant EUI-64 host ID will be 6AC2:D4FF:FE99:B9E6.

Putting the FE80:: network address at the beginning leaves the full EUI-64 address as:


Note the :: which has omitted a series of 0’s from the address. The full address is FE80:0000:0000:0000:6AC2:D4FF:FE99:B9E6/64.

In addition, if your network supports it, devices may attempt to generate a stateless autoconfiguration IPv6 address (see below).

Broadcast Groups

In an IPv4 network, you have the notion of a network broadcast. This is restricted to the subnet and was used by processes such as ARP requests to try and find the hardware address from an IP address.

IPv6 no longer has a notion of broadcast address. On network connection, the interface on the device will automatically join itself to at least the all devices multicast group an to an additional multicast group that corresponds to the last 24 bits of it’s MAC address.

For example, given the same MAC address as above (68:C2:D4:99:B9:E6), the machine will be a member of the FF02::1 multicast group (all devices), and the FF02::1:FF99:B9E6 multicast group.

Stateless Autoconfiguration

Devices can also attempt to discover the network they are located on and automatically generate an appropriate address for the network. On connection to the network, the interface will send out a Router Solicitation message to the FF02::2 multicast group (Routers are configured to be a part of this group automatically). If found, a router will respond with a Router Advertisement message. This message will contain the networks prefix and whether or not other options are available from the router (I’ll get to this in a second).

Further, the interface will by default set the gateway address to the router that responding to the Router Solicitation address.

From the network prefix provided by the router, the interface will attempt to generate a unique host ID, and will then send out a neighbor discovery to find out if any other devices have already taken the generated host address.

If the router advertisment message included the -o option (aka: options), then an additional DHCPv6 message will be sent to the router which may respond with additona important network options (DNS servers, etc…).


Install and administer Active Directory (15-20%)

Domain Controllers

FSMO Roles

Global Catalog Role

A global catalog server lets you search the entire AD DS forest (for a sub set of AD information) without requests to the domain controller in the domain that stores the target of your search.

To promote a domain controller to a global catalog server for the forest, you can use either *Active Directory Sites and Services or the Set-ADObject command:

Set-ADObject "CN=NTDS Settings,CN=Server-Name,CN=OU-Name,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=Fabrikam,DC=COM" -Replace@{options='1'}

Replacing options='1' with options="0" will disable the global catalog role for that domain controller.


Offline joining a workstation

Supported from the Server 2008 R2 domain functional level.

djoin.exe Machines running Windows 7, Server 2008 R2, Windows 8, Server 2012 or Server 2012 R2 only.

djoin /provision /domain /machine /savefile [/machineou ] [/dcname ] [/reuse] [/downlevel] [/defpwd] [/nosearch] [/printblob] [/rootcacerts] [/certtemplate ] [/policynames ] [/policypaths ] djoin /requestodj /loadfile /windowspath /localos

Create and manage group policy (15-20%)

PowerShell Commands (Get-Command -Noun GP*) - New-GPLink - Set-GPLink - New-GPO - New-GPStarterGPO - Restore-GPO - Copy-GPO - Export-GPO - Import-GPO - Backup-GPO

Central Store

Supported from Server 2008 and allows


TechNet How to implement the central store for GP Admin Templates

To Go Over

DHCP and Complex Configuration

- Policies to restrict DHCP scope based on type of machine (VM’s only, or other types of machines).

Certificate and Cert Services

Work Folders

Domains and Trusts - Group types and PowerShell/Cmd utilities and arguemnts - Set-ADGroup (To change group type to universal for example if it needs to contain user or computer accounts from a different domain in the forest) - Dsmod can also be used.


netsh (used a lot)

netsh firewall <- is depreciated. netsh advfirewall

Important Ports

3389 - Remote Desktop 1723 - PPTP VPN Access 80 - Web Traffic 443 - HTTPS Web Traffic 110 - POP Email 25 - SMTP Email


Firewall Configuration

Measuring Performance


Essentially an updated version of Software Restriction Policies. Can only only AppLocker policies to machines running Windows 7 and Server 2008 R2 onwards.

AppLocker policies are a computer based GPO, found at the Computer Configuration\Windows Settings\Security Settings\Application Control Policies\AppLocker container.

AppLocker requires the Application Identity Service to be running, which is set to manual by default on machines.

  • @Todo: Local policies

You can merge AppLocker policies using the Set-AppLockerPolicy PowerShell cmdlet.


Get-Counter will only get memory usage for the host server, not the memory allocated by Hyper-V

Command Lins Tools - netsh - net share - dism - rsat - sc - dnscmd - secedt - scwcmd

slmgr.vbs (Activation)

slmgr.vbs /ipk must be run first to set the product key. slmgr.vbs /ato Activate Windows. slmgr.vbs /act-type will set the specific activation type for volume licensing (AD or KMS)

Active Directory - dsamain - ldifde - dsadd - dsmod - csvde - djoin - dsmgmt - dsacls

PowerShell Cmdlets - Get-ADGroupMember - Get-ADGroup - Set-VMNetworkAdapter (VLan etc…)

Operating System Versions

NT 10

  • Windows 10
  • Windows Server 2016

NT 6.3

  • Windows 8.1
  • Windows Server 2012 R2

NT 6.2

  • Windows 8
  • Windows Server 2012

NT 6.1

  • Windows 7
  • Windows Server 2008 R2

NT 6.0

  • Windows Vista
  • Windows Server 2008

Goals for 2016

To help acheive my goals for the next 12 months, I am going to break each goal down in to monthly targets.

TL;DR - Goals for January, 2016

  1. Have lunch or coffee with at least one London based tech entrepreneur.
  2. Have a date night with Renee.
  3. Complete at least 15 headspace guided meditation sessions.
  4. Create my new blog at
  5. Complete study of four measured skills for the 70-410 MCSA Exam.
  6. Request a correct legal contract for the contracting Project Management work I’m doing.
  7. Complete at least 6 4 HIIT sessions.
  8. Release a public MVP of
  9. Write one blog post about the MCSA study process.

Gym and Fitness

  • Complete a half marathon with Renee.
  • Increase my gym personal bests to:

    • 140kg Deadlift (x 5)
    • 80kg Bench Press (x 5)
    • 120kg Squat (x 5)
  • Run at least once per week and at least two solid HIIT sessions per week leading up to David’s wedding in early April.

  • Continue Gym workouts at least 2 times per week in the leadup to the wedding and 3 times per week afterwards.

  • Record all gym work so that my progress can be more accurately measured or analysed.


As I can have a history ot stress and anxiety, my aim for 2016 is to reduce stress and be able to more easily recognise the hallmarks of stress and react accordingly. This is not an easy goal to break down in to acheivable metrics, but I can try!

Meditate every morning for a least 10 minutes using my new annual subscription to headspace.

Business and Professional

Become more professional in my dealings with others. I have become lazy in professional settings.

  • Get a correct legal work contract with my current employer. With 3 months recurring contract terms.
  • Complete all three exams for the Microsoft Server 2012 R2 MCSA certification. While I have a lot of these skills from experience - the MCSA certification can provide solid evidence of skills and will help sure up my knowledge.
  • Have lunch or coffee at least once per week with interesting and/or innovative people.


Generally, I want to improve my writing and communication skills. I also want to build an audience of others in a similar sitation to myself (working part time, solopreneur the other times).

  • Create a new blog (based on Hugo) hosted here at - if you’re reading this, looks like I succeeded ☺
  • While studying for my MCSA certification and working on other projects, I aim to write a blog entry at least once per week with updates and information that others could find useful.


Keeping more information will allow me to go back and check on how much progress I’m making towards my goals.

I want to continue to work on my releationship with Renee. I have recoginised a level of co-dependence with Renee so I want to improve on that so we can both excel this year. Generally speaking, everyone can usually do better with their relationships, and I’m no different.

And more generally, I want to waste less time on television and other distractions ☺

  • Keep a log book of all Gym and sports activity on excel.
  • Arrange food orders and meals ahead of time. Avoid take-out where possible.
  • Arrange at least one date-night with Renee per month.
  • Arrange at least one night per week where Renee is not present (could be a professional night, or a board game night or a night with friends).
  • Research assertiveness.

2015 in review

Welcome to my new blog.

How many people finish each year with a sense of lack-of-accomplishment? For me it always feels like I did in high school, just before each new semester was about to start. I’ve bought all my books, I’ve gotten all new pencils and sharpeners, I’m ready to tackle the world. However, come the first day at school and the illusion shatters and I’m stuck back in the same grind as before.

So this year is going to be different.

Starting with a year end review (my first!). Because while I feel quite down about the overall outcome of the year, I have done so much that I want to keep some perspective.

My partner Renee and I moved to London in March, 2015 and within a few weeks I found a position at a small managed service provider caretaking a helpdesk role, which after 2 months transitioned to a project management role. At the beginning of August I moved the role moved from 5 days a week to 3 days a week to both learn to code and to attempt to develop a web-app to sell (this one will get it’s own blog post). Renee quickly found a position at a local artist management company as a finance assistant.


No way else to cut it, we’ve done a lot of travel this year!

On the way to London, Renee and I visited Japan, Germany, Sweden, Norway and Scotland. We’ve taken two trips back to Scotland (the second one to the fantastic Edinburgh Comedy Festival), one trip back to Sweden for a massive Kayak trip with our friends Oskar and Kristin, and to top it off we just got back from a massive trip to Switzerland with Renee and her family!

I’ve sprinkled some photos from our travel throughout this blog post.

So what have I learnt/accomplished over the past year?

Job and Career

It never hurts to put your name out there. My current job was found just by emailing various MSPs around London. I got an email back from one and started about a week later!


  • The big one is GOLang. I’ve used GOLang to develop an HTTP API back end with JSON Schema support connecting to both a Redis and PostgreSQL data store.
  • Ember JS - While I still don’t fully understand every concept in EmberJS (It’s a heck of a starting point when learning Javascript) I’m starting to get the hang of it.
  • Ember-Data - the most commonly used Ember JS data store.
  • Chef infrastructure management (in Ruby).
  • Linux, server, administration.
  • Sublime Text.
  • More than need to know about OSX nuts and bolts (including bash scripting).


Business wise it feels like a bit of a let-down for 2015. I plan for 2016 to be a massive improvement. Work on my web-app product went ahead without a business plan (even though I knew better), and without researching competition or any of the existing online process management market. Further, the industry this app is built is not one I’m verly excited about.

So while I’ve learnt a significant amount about coding and development, which will help me this year, I am much less confident that my web-app will be a success. There are so many stories of solopreneurs who just don’t make it.

First goal for 2016 is to develop the web-app in to a Minimum Viable Product. Goal for this? End of the January, 2016. This needs to be polished only enough to show to customers without significant regret. As such, features will need to remain light. I’ll develop a research questionaire and get as much feedback as possible regarding the product - and decide where to take it from there.


2015 was a fantastic year for (anerobic) fitness. I signed up to a local el cheapo gym and have been going at least twice (normally 3 or 4) a week since May this year.

I feel and look much larger than at the beginning of the year. However I have also put on a significant amount of weight (which I guess was the goal). My personal bests of 2015 are:

  • Deadlift: 110kg (242lbs) x 1
  • Benchpress: 70kg (154lbs) x 3
  • Squat: 105kg (231lbs) x 5

My weight is up to a solid 91kg as of December 31, 2015. I have my brothers wedding coming up early this year and I aim to have my weight down to a lean 84kg.

2015 Highlights

  • Travelling around Germany and Japan with my fantastic partner Renee.
  • The beautiful Swiss Alps during the 2015 christmas period (and learning how to ski!).
  • Consistently working out at the gym (to be improved again in 2016)