Getting the Ngrok URL
A quick addendum to my previous ngrok post. If you are not using subdomains, it can be useful for your app to know what ngrok’s dynamically generated URL is. The simplest way to do that is to set an environmental variable.
Autostart Ngrok With Rails
I’ve been using ngrok on quite a few projects lately. I’ve written about it before, but in short, it solves to problems for me.
- It tunnels back to localhost from a hostname that live on the net, allowing me to develop for webhooks that would barf on http://localhost:3000
- It provides a valid SSL cert. More and more the platforms I build apps for require HTTPS when talking to an app.
The downside is that it adds another moving part to the process. I’m too lazy for that, let’s automate it!
How I Start Rails Projects
Everyone has their patterns, here’s mine for starting a new Rails project:
1 2 3 4 5 6 |
|
Building Emacs on macOS Sierra
Important update -> here.
It’s been quite a while since we built Emacs from source on the Mac, but 25.1 has been official release, not to mention macOS (really?) Sierra to muddy the waters, so let’s take it for another spin.
Best Chrome Extension Ever!
I was recently shown the Best. Chrome. Extension. Ever.
JSONView is a Chrome extension that formats JSON when opened in Chrome. Normally when you hit a URL that returns JSON, Chrome displays a pile of goo. Actually, it just display the JSON as is, but most rendered JSON is not well formatted (and doesn’t need to be, it’s not intended for humans).
JSONView cleans up the formatting and applies syntax highlighting. Better still, it displays any errors it finds while parsing the JSON. If you are developing an API that sends JSON, it’s a great way to make sure what you are sending is valid and, when it’s not, to debug the problem.
It seems like everyone knew about this before me, but if you don’t, you just might want to add your tool box.
Cheap SSH VPN
Recently (I seem to start a lot of posts with “Recently”), I was on the road needed to access a server that was behind a firewall. There was no VPN and access was limited to a small set of IPs. I could however access another server in that set of IPs. That would let me bounce through for SSH access, but really I needed access from my laptop.
Dotfiles II: Choosing BASH Startup Files
A post or two back, I looked at having BASH detect if I was on my “desktop” (for lack of a better word) or a server and decided the best approach was to hard-code that fact. I casually tossed the configuration in my .bashrc. Was that the right place?
Sudo, Rsync, and Authentication Forwarding
rsync will happy copy files between
servers and will keep the ownership and permissions the same. However,
if you aren’t the owner of all of the files then ownership sync
requires the rsync
on the receiving end (which we’ll call server
B) to be running as root. Likewise on the sending server (server
A) if we don’t own the files we might not be able to read them and
again need to be running as root.
root on server A is easy, we can just use sudo:
1
|
|
root on server B requires a little more finesse, we need to
override the remote rsync
command to include sudo
, this is done
with the --rsync-path
path option:
1
|
|
(This presumes you can run sudo
without a password on server B,
things get a little hairy if you can’t.)
Great. Done. But, what if you can’t log into server B with a password?
Dotfile Organization Part I: Local vs. Remote
I’m embarking on a long, long over due project to organize my dotfiles, you know, all those files in your home directory that start with “.” and configure your software. (If you don’t then this isn’t the post or the blog for you.)
There are lots of schemes for storing and distributing dotfiles, and I’ll get to that. But first, I need to clean up the mess of living in the UNIX shell for 30 years. Really.
My goals are twofold: 1) Any time I spin up a new server, I want to be able to deploy my preferred configuration out to it. 2) I want a complete copy of my local machine’s config setting to make it (relatively) simple to setup on a new machine.
These goals conflict.
Invalidate CloudFront and Wait
In my occasional series on waiting for things, I setup a BASH function to wait for AWS CloudFront invalidations. I mentioned it would be possible to invalid and wait in the same function, but was feeling lazy and left it to the reader. Well, I’ve gotten tired of the two step process, so I’m being industrious so I can be lazy.