Thursday, August 18, 2016

Last Post using Blogger

Blogger has been great, but after a two year break from running my own site, I have chosen to start back with a custom blog at

Wednesday, July 27, 2016

Arcade Joystick

This idea has been a long time in the cooker. I've been wanting to put together an Arcade style joystick since my Commodore days. I finally just did it:

I ordered one of these from amazon:

"Easyget Zero Delay Pc Arcade Game Joystick Cabinet DIY Parts Kit for Mame Jamma & Fighting Games Support All Windows Systems - Color Black Kit"

It came today:

The unboxing.

It came in a bunch plastic bags.

Here are the parts fanned out.

A blurry one of me testing the joystick without the buttons on my computer before assembled it.

I found these on thingaverse. I printed them, but one of them snapped. I'm reprinting it with a higher fill density.

Raspberry Pi Arcade Stick Console

Crude markings for drilling.

The pieces drilled.

A trip to Ace hardware and I was ready to sand, paint, and assemble.

I thought I would test out some paints on the bottom piece which isn't very visible once assembled.

Here is the painted version without assembly.

Mostly assembled. I drilled holes for the joystick but after putting the hardware in I noticed the D-stick bumped one of the edges of the wall. instead I used some wood screws and re-centered stick.

Here we go hooked up. You can see the keyboard underneath. I'm going to add a wrist rest next.

After some advice from my long time friend I stumbled upon the joytokey software to get things working for games which don't support standard joysticks.

The joystick parts from amazon cost me 25 dollars and 10 dollars worth of search history sold to "Bing" for Amazon gift cards.

We had the wood left from a crib to outdoor couch project.

Then I spent about 10 dollars at Ace Hardware.

The risers I 3d printed from a giant orange spool of .175 I ordered for around $13 so I'll go ahead a say about .$.50 worth.

Total out of pocket $35ish. Not bad.

Wednesday, July 13, 2016

Teamspeak Install/Setup Instructions

Teamspeak Install/Setup Instructions

For Ubuntu

  1. Install PUTTY or SSH utility (optional)
  2. Install VirtualBox
  3. Download latest server ISO from Ubuntu.
  4. Provision the Virtual Machine to match or exceed the recommendations for minimum system specifications
  5. Attach the ISO and install
    • use entire disk no LVM
    • install updates automatically
    • standard system utilities
    • OpenSSH (optional)
    • GRUB on boot is fine for dedicated VM
  6. Add port forwarding to your NAT
    • map a port for SSH
    • map a UDP port for client port 9987
  7. Install Guest Additions
    1. sudo mount -t iso9660 -o ro /dev/cdrom /media/cdrom
    2. cd /media/cdrom
    3. sudo apt-get -y install gcc make
    4. sudo ./
    5. sudo umount /media/cdrom
    6. sudo /sbin/shutdown -r now
  8. update os
    • sudo apt-get update
  9. clone vm so you don't need to install ubuntu again
    • setup a different host name for each full clone
    • setup a different port for openSSH so you can boot a few up at once
  10. start headless virtualbox instance
    • ssh with PuTTY or another tool
  11. install teamspeak-server
    1. Download from
    2. Click the copy link
    3. wget and paste into putty
      wget pastedurlhere
    4. decompress the download
      tar -xvf somedownload.bz2
    5. start the server
      ./ start
    6. save off that screen that pops up it is important
      • sign in from the TeamSpeak client
      • add the network key from the screen that appeared
    7. set the teamspeak server to startup on server ``` crontab -e @reboot /path/to/decompressedlocation/ start

Sunday, July 10, 2016

Replacing MySQL with MariaDB

Get MariaDB SQL Up and Running

If you read the previous article you will see that we installed the LAMP stack as is. We are going to be removing the MySQL component today and replacing it with MariaDB.

Remove MySQL

  1. Start the server in headless mode
    • right click the context menu
    • choose start headless
  2. SSH into it
  3. See what is installed
    dpkg --get-selections | grep -v deinstall > installedFiles.txt
  4. Open the file
        mysql-client-5.7                                install
        mysql-client-core-5.7                           install
        mysql-common                                    install
        mysql-server                                    install
        mysql-server-5.7                                install
        mysql-server-core-5.7                           install
        mysql-client-5.7                                install
        mysql-client-core-5.7                           install
        mysql-common                                    install
  5. Remove these with apt-get remove
    • For the lazy and uncaring
         sudo apt-get remove  mysql* 
         sudo apt-get autoremove
  6. remove /etc/mysql
    • For the trusting and lazy (seriously be careful with any rm commands)
          sudo rm -Rf /etc/mysql
          sudo rm -Rf /var/lib/mysql
    • You might find more like:
      • /var/lib/mysql-5.7
      • /var/lib/mysql-files
      • /var/lib/mysql-keyrings
When that doesn't work
sudo service mysql stop  #or mysqld
sudo killall -9 mysql
sudo killall -9 mysqld
sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean
sudo deluser mysql
sudo rm -rf /var/lib/mysql
sudo apt-get purge mysql-server-core-5.5
sudo apt-get purge mysql-client-core-5.5
sudo rm -rf /var/log/mysql
sudo rm -rf /etc/mysql

Install MariaDB

sudo apt-get install --force-reinstall true mariadb-server
sudo mysql_secure_installation

Grant localhost

Fix the bind address

Allow any do not do this in production or on an internet accessible machine:


  • map a port to connect
  • if you want it locked to your host you could put a host IP of

Thursday, July 7, 2016

Apache on Ubuntu inside of VirtualBox Headless

Ubuntu LAMP Headless

  1. Install PUTTY or SSH utility (optional)
  2. Install VirtualBox
  3. Download latest server ISO from Ubuntu.
  4. Provision the Virtual Machine to match or exceed the recommendations for minimum system specifications
  5. Attach the ISO and install
    • use entire disk no LVM
    • install updates automatically
    • standard system utilities
    • LAMP server
      1. Set a MySQL password
    • OpenSSH (optional)
    • GRUB on boot is fine for dedicated VM
  6. Add port forwarding to your NAT
    • map a port for SSH
    • map a port for Web Traffic
  7. Install Guest Additions
    1. sudo mount -t iso9660 -o ro /dev/cdrom /media/cdrom
    2. cd /media/cdrom
    3. sudo apt-get -y install gcc make
    4. sudo ./
    5. sudo umount /media/cdrom
    6. sudo /sbin/shutdown -r now
  8. start headless virtualbox instance
    • ssh with PuTTY or another tool
  9. Add Shared Directory for web
    1. create script to automap in /etc/init.d Sample Script:
      sudo mount -t vboxsf PublicWeb /var/www/html
    2. Make script executable
          sudo chmod +x /etc/init.d/
    3. Update RC to run at start
          sudo update-rc.d defaults

Saturday, May 14, 2016

Jekyll with Virtual Box and Network Mount

It appears when you have your files for Jekyll stored on the host machine on VirtualBox the files get cached and you receive a stale copy.

A simple solution is to "touch" the file.


echo "Touching all the things..."

find . -exec touch {} \;

echo "Finished Touching..."

jekyll serve

Wednesday, May 11, 2016


After watching:

I was sold on the idea of obtaining a synthesizer. I had done a little research and realized it was going to be an expensive hobby. I decided I was going to get the cheapest thing possible:

The MicroBrute. I found one for less than retail from an auction site.

I've been watching videos about synthesizers and found a tutorial:

I'm pretty sure I need to find a EuroRack power module and begin collecting.

Here are some interesting modules I found:

Wednesday, April 13, 2016


PowerShell Functions:

Recently I made a PowerShellFunctions. In a previous post I talked about one of the functions used Display-Calendar. I have since updated it to utilize the appropriate verb show. For a list of appropriate PowerShell verbs look no further than: Approved Verbs

I have recently updated it to include:
  • PS-Windows-Functions
    • Sync-WindowsTime
  • PS-File-Functions
    • ConvertFrom-Base64
    • ConvertTo-Base64
    • Write-CompressedFiles
  • PS-Calendar-Functions
    • Show-Calendar
  • PS-Structured-Query-Language-Functions
    • Get-Sql
    • Show-DatabasesWithTable
  • PS-GUI-Functions
    • Set-Clipboard



This starts the Windows Time service and calls w32tm /resync
Why might you use such a command? Perhaps you dual boot and the time is off after rebooting.
See: KB2385818.



This takes a input and produces a Base64 string:
echo "Look of disapproval" | ConvertTo-Base64
Results in: TG9vayBvZiBkaXNhcHByb3ZhbA0K


"TG9vayBvZiBkaXNhcHByb3ZhbA0K" | ConvertFrom-Base64
Results in: Look of disapproval


Takes a directoryPath and writes a zip file in the destinationFile location.
Write-CompressedFile $directoryPath $destinationFile
I use this to zip up my module directory and save to my cloud:
Write-CompressedFile $env:PSModulePath.Split(";")[0] $ExportCompressedModuleFilePath $true



Previous Blog Post



This one is probably one of my favorite functions in the library. Here is an example:
Get-Sql "mycoolserver" "mydb" "select * from widgets"
You can pipe it to something like:
Get-Sql "mycoolserver" "mydb" "select * from widgets" | Out-GridView
Or make a query that calls a query:
Get-Sql "mycoolserver" "mydb" "select serverName, databaseName from linkedServerTable" | %{Get-Sql $_.serverName $_.databaseName "Select * from Widgets"}
Hopefully your database doesn't do that, but if it does it is nice to know PowerShell can handle it.


Sometimes you need to find a database with a specific table:
DatabasesWithTable "mycoolserver" "importantTableName"
Gives you a list of databases with the appropriate table.
As we learned from the previous example you can chain these via the pipe line so you could run a query for each database.

Wednesday, April 6, 2016

How to make the most of archiving a web page to PDF

When you work in a technology industry and like to code your own pet projects there is often overlap. Sometimes when I am at work and I find an interesting to which article I would like to dedicate further research, I email myself a link. 

When I don't have time to fully digest the page, I like to save the content for later. As the web is a dynamic ever changing environment often sites change owners, or newer content takes the place. I like to archive them into PDF. 

Typically the web page is filled with clutter, but some browsers offer a "Reading Mode"

Internet Explorer 11:


Firefox (proposed):

Chrome (also in the works)

Turning on reader mode increases the quality of your archive through noise reduction.

Friday, April 1, 2016

Handling distractions when sleeping (For a Friend)

If you work in the IT operations industry for any length of time you probably will be "on call" at some point.

Being on call is typically a stressful time. You are constantly dreading the inevitable beep from your phone, or pager if your company is stuck in the mid-eighties. With a modern cellphone it is mostly used for more than one task. Some phones have a messenger application which might use the same ringtone as your phone.

A call at 3:00AM versus a Facebook Messenger message from one of your buddies who works the night shift can be just as stressful if you can't tell the difference.

Two of my close friends and I were in a group Facebook message. One of us works a regular business schedule. Another works the nightshift, another works a slightly different nightshift. One of us was on call this week and informed us that "It's my midnight.". I got to thinking about how to manage applications which provide interruptions in our sleep.

Assuming you don't get "on call" messages via Facebook Messenger here is how to manage it:

Find the gearicon on the application:

It is currently located on the top bar, but with the constant refining of the application it might change in the future.

After clicking the gear you will find yourself on the settings page:

Click Notifications & Sounds:

The "kill it with fire" choice is up at the top:

Simply sliding to off whilst you sleep might give you the best bang for your buck, but some of the other choices might be more appropriate, such as changing the sounds.

Saturday, March 12, 2016

Calendar In Powershell

I've added a new Repo on GitHub for making a calendar in PowerShell, much like the Linux command cal. I have omitted multi-language support and have opted to only implement the core functionality of displaying a calendar rather than also including the date of Easter.

Tuesday, March 8, 2016

Visual Studio Debugging

If you are a VB.NET developer for any length of time you probably will need to debug code. One of the tools I use is the Immediate Window. CTRL-ALT-I will open it. If you use the ? shortcut to print the value of a variable with multiple lines you probably get something like "Blah"+vbnewline+"someotherfield", but with the string formatter ",nq" you can get the following:


I hope this helps.

Monday, February 8, 2016

EVE Online

I recently started playing a popular space game. EVE Online.

If you've never heard of the game, I would suggest going to YouTube and look at a few videos.

Here is a trailer:

I had joined a corp and they wanted to get a list of all their player's assets. I created a PowerShell Script specifically for that purpose.

This one requires setting up your API key:

Skill Script:

This one shouldn't need any special permissions:

Sector Script:
The script above lists the solar systems along with some interest data. Kills, Warps, and Corporation Ownership.

To view all just use:

Since it is PowerShell you can harness the Pipeline to find quite spaces and put them in a CSV file:

 $solarSystems.Values | %{if($_.ShipJumps -lt 3 -and $_.ShipKills -eq 0){$_}} | export-csv "your file path.csv"

If you decide you want to try it sign up for a free trial below:

Click on my Buddy link and sign up for a free trial: