Proxmox Installation

#homelab#proxmox#nas

This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.

Read More

Proxmox SMB Shares with Cockpit

#homelab#proxmox#nas#smb#cockpit

This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.

Read More

Proxmox GPU Passthrough on Unprivileged LXC Containers

#homelab#proxmox#nas#smb#cockpit

This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.

Read More

Comparing Proxmox and TrueNAS

#homelab#proxmox#nas#TrueNAS

This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.

Read More

Setup ZFS on Proxmox

#homelab#proxmox#nas#zfs

This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.

Read More

Proxmox Homelab Series

#homelab#proxmox#nas

I recently moved from TrueNAS to proxmox and after a lot of tough lessons I have a working homelab server again. Since I have everything working now I feel confident saying the move was worth it, but it was a painful journey that included the total corruption of my ZFS pool. I hope I can save you the same pain with this series of guides.

Read More

Proxmox ZFS Mount Points

#homelab#proxmox#nas#zfs

This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.

Read More

Installing Servarr Stack with Docker Compose

#homelab#proxmox#nas#servarr

This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.

Read More

Moving to Deno Deploy

#deno#deno deploy#blog

Deno Deploy is an edge hosting platform for Deno projects. It's got a generous free tier and just launched a Deno Kv Beta. After moving over my snow tracker I decided to try out the deno blog kit. I'm very happy with it so far, but it did require some un-documented changes in order to get what I wanted out of it.

Read More

Deploying Hugo to GitHub Pages with GitHub Actions

#GitHub#GitHub Actions#Hugo#GitHub Pages

There are a lot of strategies to hosting in-repo docs on GitHub Pages (as opposed to a dedicated repo for docs). I'm going to cover how to publish docs that are stored on the master branch to the gh-pages branch.

Read More

Getting AWS Availability Zone IDs with Terraform

#aws#terraform#gist

AWS Availability Zone names may look like unique identifiers, but they are mapped to physical availability zones essentially at random. This means that us-west-2b in one account may be the same physical availability zone as us-west-2a in another account.

Read More

Configuring AWS PrivateLink in non-routable VPCs Consumers with Terraform

#aws#vpc#privatelink#terraform

AWS VPCs make it possible to establish private network connections across AWS accounts with VPC Peering, essentially merging the networks into one. However, there is another option for cross-account/cross-VPC network access, with a much smaller surface area.

Read More

Self-Hosting Commento alongside Ghost 2.x

#ghost#disqus#commento#digital-ocean

I recently upgraded this blog to Ghost 2.x and took the opportunity to abandon Disqus. It bloated the post page and came with something like 45 tracking scripts/cookies. To replace it I settled on Commento, a small and privacy-focused open source solution. The minimum subscription is $3/month, which is a bit high for a blog that I only pay $5/month for. Luckily they offer a self-hosted option. Here is how I got it setup.

Read More

Kyeotic

This last weekend I went through what I thought would be the laborious process of changing my handle from "Tyrisus" to "Kyeotic" on every site I use. This turned out to be breeze.

Read More

Migrating Ghost 0.x to 2.x (and a new domain!)

#ghost#dns

To accompany my recent handle change I took the time to upgrade this blog.

Read More

Hot Reloading redux in jspm 0.17

#jspm#redux

I struggled quite a bit with this one, because understanding the components of hot reloading was very difficult. There are a lot of explanations out there that are light on details, or just downright wrong.

Read More

Name Change

I legally changed my name today from

Read More

JavaScript tests with Mocha and jspm

#jspm#mocha#unit-test

It's no secret that I love jspm. I think it does everything right. I think Webpack requires far too much configuration. jspm is also much more standards-oriented, so I expect the patterns I learn and develop to last much longer, which is something I sorely need in JavaScript development.

Read More

Center DIV Vertically and Horizontally with full width and height

#css

There are way too many solutions to this online that just don't work. I want a full-page absolutely centered DIV. It needs to center in the browser, which means forcing the correct height and width.

Read More

Using Mailgun to route email to Gmail

#email#linux-admin-for-beginners#gmail#mailgun

This is part of my complete guide to Setting up a CentOS DigitalOcean droplet with Nginx for beginners.

Read More

Installing Nodejs on CentOS

#nodejs#centOS#linux-admin-for-beginners

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Application Management and Crontab

#nodejs#centOS#linux-admin-for-beginners

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Deploying Applications with Git and SSH

#git#ssh#linux-admin-for-beginners

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Configuring the firewall on CentOS

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Configuring TimeZones and Network Time Protocol on CentOS

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Setting up a CentOS Digital Ocean droplet with Nginx for beginners

#digital-ocean#centOS#nginx#ssh

If you want to get to the meat of the post, jump down to the guide.

Read More

Install Fail2Ban on CentOS

#centOS#linux-admin-for-beginners#fail2ban

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Installing developer dependencies on CentOS

#centOS#linux-admin-for-beginners#yum

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Configuring Nginx as a Reverse Proxy (for NodeJS)

#centOS#nginx#linux-admin-for-beginners

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Setting up a remote SSH user on CentOS

#centOS#digital-ocean#nginx-for-beginners

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Setup swap file on CentOS

#centOS#linux-admin-for-beginners

This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.

Read More

Cron and $PATH

#linux#cron

Linux has a handy tool for runing jobs on a schedule: cron. This is great for things like ensuring your webserver is up, especially in a shared environment like WebFaction where your server may periodically reboot.

Read More

React and jspm

#jspm#react

I've been tinkering with React a lot lately; I am really loving it. Since I still believe that jspm offers a better development and bundling experience than WebPack (unless you need hot module reloading), I spend some time this week getting a solid project template down for React and jspm.

Read More

jspm, jQuery Plugins, and ES6

#aurelia#jspm#jquery-plugins#es6#jquery

jspm is a new package manager for JavaScript fornt-ends that comes with a universal module loading system. It integrates nicely with npm by adding a jspm property to the package.json that specifies what the jspm dependencies are. Mine looks like this:

Read More

Durandal vs Angular

Yep, time to throw in my $.02. I've used Durandal on multiple personal projects, as well as a large professional project spanning several months. I have used Angular on two personal projects, and am currently using it at work. I have a lot more experience with Durandal than I do with Angular, so if I make any factual errors here feel free to let me know. I would love to be wrong about some of my gripes, since that would mean not having to deal with them.

Read More

MultipartForm FileUpload with RestSharp

#RestSharp#file-upoad

RestSharp is handy .NET library for doing REST requests, and it claims to support Multi-part form/file uploads. It doesn't provide any documentation on how to do this though, and I recently got tripped up trying to figure it out.

Read More

Setting up ConEmu with Git Bash on Windows

The Windows command prompt sucks. It just does. Every other terminal in every other operating system is better than it, and Microsoft doesn't seem to care.

Read More

Writing a Programming Book

#knockout#teaching#writing#programming

I am writing a book on KnockoutJS. I've taught JavaScript and Knockout at work before, but I have never tried to produce a book on programming. I ran into some pretty big challenges trying to put the first chapter together.

Read More

Replacing the Durandal Modal with Boostrap's Modal

#twitter bootstrap#bootstrap

Durandal 2.1 is now in pre-release. Despite claiming to have upgraded Bootstrap to 3.1 Durandal is still using a non-responsible, non-bootstrap based modal dialog. Thankfully, switching it out is pretty easy. Somewhere early in your startup process, just dump this code in. It will replace both the custom modal dialog host, as well as the Message Box on app.showMessage.

Read More

Gulp in Windows

#windows#gulp

Maybe you thought you were going to try out the new(ish) javascript build/task system Gulp. Maybe like me you are running Windows, the red-headed step child of the Node world. If so, you may have run into one or more of the following problems.

Read More

Q Promise resolves immediately when .done() is called

#q#promises#javascript

I just spent way to much time on this problem, and it turned out to be a wayward .done() attached to a promise that was getting passed downstream. Because done() returns nothing the next handler in the chain was resolving immediately, instead of waiting for the chain done() was attached to.

Read More

Being open-minded towards closed-minded people

#philosophy#politics#free speech

This doesn't specifically apply to the Brandon Eich saga, but it's come up a lot lately in comments regarding that situation. The idea that being open-minded means being open to everyone, including closed-minded people. Some might call it "being tolerant of intolerance."

Read More

Jasmine Spies Won't Load Outside Test Scope

#jasmine spies#unit-test#jasmine

This is a pretty minor one, but it's not covered in the documentation. If you have a jasmine spyOn call inside of the describe but outside of a test or outside of a beforeEachit will not run!

Read More

Mozilla's new CEO

#mozilla#gay rights

I am a fan of Popehat, a legal blog that focuses primarily on free speech issues. As they like to put it social actions, the many varieties of "speech" in the US, are protected by the 1st amendment. Unlike many parts of the Constitution these days we take the 1st amendment pretty seriously. The government is very limited in what it can do to you for your speech. "Protected" speech, in this sense, means protected from government initiated consequences (like jail or fines). It does not mean protected from social consequences, because any social consequence is itself a form of speech. You publicly state an opinion about something (like gay marriage), and I publicly state an opinion about something (like you). It's all speech. The only people that can't get involved are the g men. Popehat likes to say that speech should have social consequences, because those consequences are free speech. Supporting free speech means also supporting the criticisms of the speech that results.

Read More

Echo is on.

#batch#script

Batch script is old. Batch script is quirky, and has the syntax of the aborted love child of bash and perl. This shouldn't be news to anyone, but if you use batch script as infrequently as I do I have something that might be news. Consider the following block of code

Read More

TFS MSBuild and Grunt

#mdbuild#grunt#tfs

Getting Grunt working with TFS and MSBuild was a pain in the ass this week. There were several problems that took me several hours to figure out, so hopefulyl I can save you some pain with this.

Read More

Validation in Knockout

#knockout#validation

There is already a library for doing validation in Knockout, aply named Knockout-Validation. I don't really remember what issues I ran into when I used it so long ago, but I remember giving up on it. It also doesn't appear to play well with RequireJS, which is critical if you work in Durandal as I do.

Read More

Writing Javascript tests that will run on Windows and Linux with Grunt

#unit-test#phantomjs

I primarily develop at home on my Windows machine, but all of my web projects live on a Webfaction-hosted linux machine. To create a smooth deployment process with Grunt that will run my tests on either machine I used the PhantomJS node package.

Read More

Building Durandal with Grunt

#gruntjs

Durandal is a great framework, but if you are moving your application to a production environment chances are you want to build it. Building a RequireJS app can be done with R.JS, with Durandal's build tool Weyland, or with a task runner like Mimosa or Grunt.

Read More

Durandal Grid

#durandal#widgets#durandal-grid

I've used KoGrid before, but I was never happy with the syntax for writing templates. You have to define your HTML as strings inside your Javascript. Yuck.

Read More

JsTestLite

#jstestlite#unit-test#jasmine#javascript

Have you ever wanted to just check out someone's Jasmine unit test's without having to set up an environment? Or maybe you wanted a quick and easy space to write and run some of your own tests.

Read More

Magnific Popup and Durandal's Router

#durandal#jquery#lightbox#magnific-popup

Magnific Popup is a great little jQuery plugin that creates responsive lightbox's for images. I've used a few lightboxes, but this one definitely has the fewest number of issues when moving between desktop and mobile sizes.

Read More

Relative Paths and PushState in Durandal

#durandal#pushstate

Modern browsers support the history.pushState api for changing the URL without actually navigating on the page. This is a nice replacement for hash-based navigation (where a hash-route is used to change the page without navigating, due to the hash not going to the server) since the URL looks like a normal, clean url. Other than smoother navigation, the implementation is invisible to the user.

Read More

FireBind: Knockout bindings for Firebase

Everybody loves Knockout (or they should, because it's fantastic). I think less people know about Firebase, but its a very cool service. It basically provides a real-time backend for persistent data, along with either client libraries or a REST api for subscribing to the changes in that data.

Read More

Testing Durandal Code with Jasmine

#durandal#unit-test#jasmine#phantomjs

Unit Testing in javascript is usually pretty straightforward. You pick a framework like Jasmine or QUnit, you write some tests, and you run them in your browser or in something headless like PhantomJS.

Read More

Organizing a Durandal Application

#durandal

Durandal is currently my Javascript MV* framework of choice. It's flexible, powerful, and written by the same guys who did the WPF MVVM framework Caliburn.Micro.

Read More

Setting up Webfaction Sendmail with Ghost

#sendmail#email#webfaction#ghost

Ghost's email guide leans pretty heavily on external services. It doesn't seem to think most people will want to use the server they are running on.

Read More

Home page is up

As part of my goal to actually have a professional web presence (which starts with this blog), I made a home page.

Read More

Setting up SSH Git deploy with Webfaction

#git#deploy#webfaction#node#ssh

I spent about three days trying to get this to work with an https server, but eventually gave in. There were too many issues related to the account the hook would run under for my limited linux experience to solve. So the SSH method will have to do for now.

Read More