Working With AWS Parameter Store

There are several very reliable key-value stores to choose from - HashiCorp’s Vault is an honorable mention, but when deploying applications in AWS I often lean on the AWS Parameter Store as the de facto key-value repository. It simplifies the process of storing, encrypting, and retrieving application data and does so in a secure enough manner to satisfy even the most persnickety security engineers. Data is encrypted using the Key Management Service and access is controlled via IAM.

Read More

', '
' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Purging Route53 Zones

The setup and tear-down of Route53 hosted zones doesn’t happen often. In order to delete a hosted zone all records except the NS and SOA records need to be deleted. This can be difficult if you have a zone with a few thousand records - common if you are seeding your reverse and forward lookups. When you are sure a zone needs to purged, you can lean on the below script to purge all records from a hosted zone while saving a backup locally.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Managing Your Linux Home

There’s no place like ~/.

Your home truly is a special place. It’s where you eat, sleep, and store some of your most precious assets. Your unix home isn’t very different. This is where you might store essentials like ssh keys and authorization tokens. While some of it can be published for the world to see, most of it should only be visible to you. After using the same machine for a little while you might amass quite a collection of config files and personal secrets. This collection is commonly called your “dotfiles”. Here’s how I manage my dotfiles.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Docker Shutdown Hooks (Or the Lack Therof)

Let me start by saying there are no shutdown hooks for docker. Supporting hooks in general have been an open feature request for two years now. In lieu of a legitimate shutdown hook, you can manage the graceful shutdown of your container through a wrapper script that responds to SIGINT and SIGTERM signals.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Clone a Hard Drive Using DD

With the ever decreasing price on storage it is becoming increasingly common to upgrade hard drives to something a little faster or a little bigger. I, myself, am making a jump from a 500GB 7200RPM HDD to a 1TB SSD. Pretty excited about it. To emphasise my enthusiasm I decided to crank out a quick article on the technical side of the migration.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Chrome Extension Example

This nifty tool serves up files for quick access. The chrome extension shoots down a quick menu listing all the public files and links to them.

Install it from the Chrome Web Store - Finding Apogee Files

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Deploying Hubot to AWS Elastic Beanstalk

If you haven’t already embraced the ChatOps methodology it’s time to seriously consider it. Coining the term, the folks over at Github describe it as “putting tools in the middle of the conversation”. Their widely adopted implementation of this is through Hubot. Hubot runs on Node.js offering a light-weight backend but also the extensibility that Node.js offers.

To gain the ChatOps benefits from Hubot you’ll want to run it somewhere that allows it access to internal resources. Ths way you can interact with your proprietary systems without exposing them to the internet. Should you find yourself in a place where you’re either comfortable connecting your VPC to your local network or simply don’t care about interacting with local resources this article is for you. Deploying Hubot to AWS Beanstalk is great because it has the scaling availability that Beanstalk offers coupled with the cheap pricing of EC2. Most hubot instances will easily fall within EC2’s free tier.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Collection of Install Scripts

Chef, Ansible, and Puppet are all excellent tools for configuration management but every now and then you just need to install something quick and all you have is bash. I keep a constantly evolving collection of scripts for just this purpose. They are almost all for the Ubuntu flavor. If I know I am going to be in a VM for a while, I’ll just kick off the whole spread.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Auto-Mount Local Drives/Partitions in Linux

So you’ve dual-booted linux but haven’t yet purged Windows from your machine. Congrats on your progress but if you really want to help yourself go ahead and wipe the Windows partition, too. Alas, if you can’t bring yourself to do so, here’s how to mount the partition and ensure its persistence after rebooting.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);

Zoho Invoice Wordpress Plugin

My latest project has been getting our invoicing software, Zoho Invoice, up and running for clients to view past
invoices and current pending invoices from inside their user account. In keeping all things modular, I’ve written it as a plugin for WP and have pushed the source to the WP market.

Read More

', '' ].join(''); box = $(html); $('body').append(box); } $('.article-share-box.on').hide(); box.css({ top: offset.top + 25, left: offset.left }).addClass('on'); }).on('click', '.article-share-box', function (e) { e.stopPropagation(); }).on('click', '.article-share-box-input', function () { $(this).select(); }).on('click', '.article-share-box-link', function (e) { e.preventDefault(); e.stopPropagation(); window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); }); })(jQuery);