This is where I put all the things I've created myself which I hope may somehow be useful to others.
Myself in that I've taken the time to engineer and understand the functionality behind the deliverables.
All software on these pages is released under the GNU General Public License (v3), unless otherwise noted.
I believe in modular, purpose-built software. The more freely a program or library can be adapted and joined to other software the better. This of course begs the question of interoperability, documentation and cooperation amongst developers, and is why I am a sharp proponent of free software. I cannot stress how important it is, not simply just for myself (in that regard I find it to be an unparalleled educational tool), but rather for humanity as a whole. It is the actualization of creating software without constraints of intellectual ownership/micromanagement.
I have a strong interest in distributed software systems, especially favoring self-healing networks and distributed data structures and associated techniques. Beyond that I prefer to create purpose-built, practical use applications in a variety of languages. Practical in that their sole use isn't to pad a resume, but rather be of some use to others now and in the future beyond direct use even, either for design ideas or coding practices. Being able to riddle off a list of intangibles for the sole purpose of creating a list reeks of convenience, if nothing else. Above all else, I would hope what I have created can be of some use to people, even if only pedagogical.
In retrospect, I have since come to understand that I am a very design-driven developer, perhaps even over designing at times. A vast majority of my effort is prepaid out beforehand designing multiple approaches and ideas. Generally this pays off since perfect information about the task at hand rarely exists (so much for SCRUM), and I'd rather fall back on a secondary design than have to re-design again on the fly. Over-designing also helps the implementation in terms of knowing what you'll expect out of certain parts of the program. Despite modern languages offering an over-abundance of higher-order constructs, I honestly don't believe in their liberal use, ie. Php's magic methods. Most of the highly extrapolated capabilities of modern languages are more reliably implemented by means of lower level controls. Illustratively, one could implement an alternative, and more highly-tailored form of reflection in any language that doesn't support it by means of status accessor methods. Judgment calls will inescapably need to be made about any design decision and in some cases these constructs can be indispensable, however a rush to be highly reflexive/dynamic isn't always the best approach, as readability can suffer.
After connecting a VPN client, if you need to add routes for various reasons (ie. to route all upstream traffic), there are a couple of minimal routes which must be added to get it working. This can be useful if you're setting up your own tunnel to a VPN server you manage, which of course must have IP forwarding enabled, or are subscribed to one of the many ubiquitous services around and the routes are not getting automatically pushed for whatever reasons.
These have been tested to work on windows. The unix version of 'route' most likely will be identical.
Whats useful about these three rules is that they get all upstream traffic flowing to the tunnel address (on the vpn server), ignoring "METRIC". This is important as it can be and usually is configured arbitrarily for each system. Therefore a more, 'guaranteed' approach is necessary. Since route matching always sticks to the most specific rule, ie. a catchall rule for 0.0.0.0 is lower bound than one to an arbitrarily-specific address (1.2.3.4), the easiest way to override the 'usual' default catchall rule is to break the ip space in half and push both halves to the new VPN default gateway. Each half (with MASK 128.0.0.0) is more specific than the catchall (with MASK 0.0.0.0).
Adjusting routes manually this way is also ideal in that if a VPN 'disconnects', the routes to the original gateway aren't automatically reinstated, and as such traffic should halt until manual intervention...