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.
This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.
This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.
This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.
This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.
This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.
This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.
This guide is a part of a series on Proxmox for Homelabs. You can find the Series Overview here.
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.
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.
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.
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.
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.
To accompany my recent handle change I took the time to upgrade this blog.
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.
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.
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.
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.
This is part of my complete guide to Setting up a CentOS DigitalOcean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
If you want to get to the meat of the post, jump down to the guide.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
This is part of my complete guide to Setting up a CentOS Digital Ocean droplet with Nginx for beginners.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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."
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!
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
As part of my goal to actually have a professional web presence (which starts with this blog), I made a home page.