Some people argue that Semantic Versioning fails to deliver. Why they expect miracles, I’m not sure. Other people propose entirely new schemes for schemas, because they want to get some different meanings out of their versioning system.

My current approach:

  • Using SemVer gives you compatibility, feature and build information that you would otherwise not get; it may not be absolutely precise to use these big buckets, but having them is good
  • Using SemVer for schemas works for me, in this way:
    • to represent database incompatibility, bump the major version (“don’t fear the major bump”)
    • to represent the need for a database upgrade, bump the minor version
    • perk #1: database upgrades can be completely driven by just the minor version (major versions must match, of course, but patch can be ignored)
    • fallout #1: you MUST consider dbs with older major versions to be incompatible, even if the major bump was not db related
    • fallout #2: you MUST run an upgrade on databases with older minor versions, even if the minor bump was not db related; the upgrade will simply update the internal db version

Works for me.  Upwards.

Check it out on github.

Also, rad-scripts.

My domains just got a little more life in them. As in, an A rating from ssllabs, at least for the moment!

ssl_A

Highlights:

  • Problem: Time Warner has a monopoly on broadband here; they gouge you if you want a static IP; and they do thorough reporting of all IP ranges as dynamic to spamhaus, so no email servers from home folks
  • Problem: 1and1 has a horrible interface to maintain even a handful of domains, as you have to use a useless separate “packages” layer to get enough subdomains; they charge for email
  • Solution: Switched all domains to Google Registrar, which has a much better UI, supports subdomains, and allows domain name email forwarding for free
  • Solution: Once you have control over your domain email, StartSSL provides amazing easy free SSL certs; they have the BEST completely automated service and the best docs; my Apache site configs are now better organized, SNI-based, and the sites are getting great scores on ssllabs, thanks to using Mozilla’s “modern” recommendations
  • Solution: phabricator needs to run on its own domain, and with this new level of control, I can easily get that going; although curl and arcanist are picky about the CA store – I could NOT get them to work with the agile.bitpost.com subdomain, at all, and I really tried – so I went with https://abettersoftware.org

A brave new world.  I love it when a plan comes together.

I have ONE option for high-speed residential service, Time Warner.

It’s $78 for 300Mbps, which is good.  But stick to consumption-only, you sad lonely couch potato.

If you want a static IP so you can actually PARTICIPATE in the internet, you’ll have to pay for “Business Class”, which is $129 for 15 up 2 down Mbps.  Yes, THIRTY THREE POINT OH EIGHT times more expensive.

(300Mbps / $78) / (15Mbps / $129) = 33.08

Here’s the email I sent back to the sales rep (who was a total sweetheart, by the way – she was not the problem):

Thank you so much Kathleen for setting this up.  I realize this is a full service contract, but as I mentioned on the phone, all I need in addition to my great residential service is a single static IP address.  I just can’t justify the cost.  I can set up a server with a static IP on Amazon’s AWS for one hundredth the cost.  Do you see the price structure changing any time soon?

I blame you the voter, for voting for ass-kissing politicians, who allow companies like Time Warner to pass their own legislation crushing community broadband effort.  P0wn3d!  😛

Node is fun!  Except when it’s not.  It’s pretty easy stuff, but I was burned by a couple things today while debugging.  Take note!

  • You can – and MUST, at times – mess with installed node modules; hack away directly at their source for instantaneous satisfaction!
    • find them here:
      • linux (always easier): ~/.npm
      • Windows: C:\Users\#name#\AppData\Roaming\npm
    • however, watch out that you follow dependencies properly; if a module requires another, it will often keep a copy underneath its folder; there may also be a global copy in the root npm folder
  • debugging is most easily accomplished by the good old-fashioned “jam in print statements” hacker methodology
    • via console.log(“WHAT IS HAPPENING!?);
  • when you grow up and want to get into serious debugging, use linux, and sling your code into the Chrome debugger, via node-inspector