Redirecting with iptables


In the last few posts we've gone over how to build and secure a reverse proxy. While this is a great option if you want to add extra access controls, rewrite urls, or hide multiple servers behind an IP, sometimes it is just a bit of overkill. Sometimes all that is needed is to change the port that a service listens on. Let's take Atlassian Confluence for example. By default it serves up pages on port 8090.…
Read more ⟶

Basic Access Restrictions with NGinx


Last week, we went over how to quickly build a reverse proxy using NGinx. While this solved our immediate problem of hiding n+1 servers behind our n ip addresses, it could still stand a bit of work. As it stands right now, we don't have any access control capability. The Setup Let's assume we have two sites that need to be proxied: public.example.com and internal.example.com1 and 2. upstream internal { server 10.…
Read more ⟶

Building a Quick Reverse Proxy


Our universe is comprised of a seemingly infinite number of rules ranging from little tidbits like magnetism and inertia, to the unchangable truths of buyer's remorse and Steam downtime occurring on a weekend. Still, there is another rule that seems to be more faithful than gravity itself: given ‘n’ public facing IP addresses, you will receive ‘n+1’ requests for their allocation. Six IPs? I'll see your six IPs and raise you seven servers.…
Read more ⟶

Moving the MySQL Data Directory on Ubuntu


If you've ever setup a web-app on a Linux server, chances are that you've setup a MySQL server at least once. On the off chance that you haven't, we'll do a quick crash course now: apt-get install mysql-server It might seem like I'm being a bit sarcastic. I am, though not by much. I suspect that most of the instances that I've seem running have had no configuration past what comes stock.…
Read more ⟶

Finding Duplicate Linking in Multi-Module Flex Apps


The Setup Thirty-eight megabytes. Over time our application had somehow grown to 38 megabytes. The road to that point made sense: features needed to be added, and with features came new libraries each with a few dependencies. Still, somehow the path of good intentions had led us to an application that weighed in at a colossal 38 megabytes. The would have actually been a reasonable size if it weren't for one slight detail: it was a web app.…
Read more ⟶

Fun with Memory Allocation


Just a bit of a fun puzzle today. Take a moment to look at the following two classes. Given an architecture where an int is four bytes and a character is one, what is the size of an instance of each class? struct Alpha { int x; char ch1; int y; char ch2; } a1; struct Beta { int x; int y; char ch_name[2]; } b2; The most obvious answer would be 4+1+4+1, giving us 10 bytes for the first class, and 4+4+1+1 giving us another 10 bytes with our second class.…
Read more ⟶

Find All Directories That Have Been Deleted In Git


Had an interesting question posed to me the other day from David Ruttka: Did I have a favorite way to list all of the directories that have been deleted from a folder in git? Admittedly, this took a bit of thought. No arcane git command came to mind. Nothing did. Google wasn't that much help either. Not only did I not have a favorite way, I didn't have a way at all!…
Read more ⟶

Adding an Ubuntu Machine to a Windows Domain


If you run a Linux server alongside Windows servers long enough, you'll eventually have the need (or request) to add that machine to a Windows domain. Thankfully, it's a rather easy process. Assuming you run Ubuntu, you can simply run the following commands, substituting the domain and a domain admin in place of EXAMPLE.COM and jsmith, respectively. sudo apt-get install likewise-open sudo domainjoin-cli join EXAMPLE.COM jsmith sudo lwconfig AssumeDefaultDomain true Out of the above lines, the first two are probably self-explanatory, but the third is likely a bit more opaque.…
Read more ⟶

MCEdit Surface Circle Filter


Just wanted to share a quick MCEdit filter that I put together. Given a selection, this replaces the top layer of the perimeter circle with glowstone. On our server we use this to mark off private land borders so that people don't accidentally interfere with one another or set up camp on top of one another. Feel free to use it as you like. from pymclevel.materials import alphaMaterials import math displayName = "Player Boundary" inputs = ( ) replacableblocks = [ alphaMaterials.…
Read more ⟶

Find All Issues Referenced in Commit Messages


Software is constantly changing. Bugs are fixed, features are added, performance is increased, and finally binaries are built. With this constant cycle of change come people wanting to know exactly what the changes are. Between major versions, and minor versions, we normally have release notes to give us this information. However, between release builds the list of items is in constant flux with no let up in the people wanting to know what the changes are.…
Read more ⟶