<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Greymeister.net]]></title>
  <link href="https://greymeister.net/atom.xml" rel="self"/>
  <link href="https://greymeister.net/"/>
  <updated>2024-06-21T20:47:47+00:00</updated>
  <id>https://greymeister.net/</id>
  <author>
    <name><![CDATA[Charles Erwin]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Death of a Blog]]></title>
    <link href="https://greymeister.net/blog/2023/10/04/death-of-a-blog/"/>
    <updated>2023-10-04T22:02:00+00:00</updated>
    <id>https://greymeister.net/blog/2023/10/04/death-of-a-blog</id>
    <content type="html"><![CDATA[<p>I&#8217;ve been letting this site languish and rather than any false pretense of revamping it, I think it&#8217;s safe to say I&#8217;m hanging up my spurs.</p>

<!-- more -->


<p>I&#8217;ve been posting crap on here at least since I first set up and switched to <a href="http://octopress.org/">Octopress</a> in <a href="https://greymeister.net/blog/2009/06/03/zombie-must-eat-brains/">2009</a>.  I&#8217;ve had a few posts I meant to finish, a few posts I wrote and never published, and a select few that I removed.  There was some motivation I guess to profess my values to others from the comfort of my own sandbox, but even in 2009 the idea of having your own site had started transforming into a rented parking lot at one of the walled garden estates.  Having your own irc channel or Teamspeak/Mumble server turned into having &#8220;your&#8221; Discord server.  Like real life, Internet life has become one of renting and not of owning, and you can be evicted on a whim at any moment, no <a href="https://en.wikipedia.org/wiki/Squatter%27s_rights">squatter&#8217;s rights</a> exist online.</p>

<p>I really don&#8217;t see much getting better about the Internet until the problems of monopoly and monopsony are addressed at a fundamental level.  The <a href="https://www.jwz.org/blog/2023/02/the-bullshit-fountain/">stochastic parrot economy</a> is going to make this even worse, since your landlord probably already sold your intellectual works (known depressingly today as <a href="https://tante.cc/2023/09/21/the-age-of-the-grift-shift/">&#8220;content&#8221;</a>) or else had it taken out from under them while they were busy monetizing with ad tech.</p>

<p>The idea of &#8220;life imitates art far more than art imitates life&#8221; has sort of come to describe how I see the world, except &#8220;offline behavior imitates online behavior&#8221; with Twitter tantrums and the celebration of narcissism.  I do find the whole Twitter/X thing ironic, as I can recall reluctantly having to cut a check to <a href="https://web.archive.org/web/20010302003411/http://x.com/">x.com</a> 22 years ago because they had fucked up the Paypal/eBay payment processing.  Maybe because some <a href="https://images.greymeister.net/melon.jpg">giant idiot</a> had a shiny toy they wanted to show off, who knows?</p>

<p>I&#8217;ll be leaving this blog as is up as long as I still maintain my site, but I doubt I&#8217;ll be writing any more here.</p>

<blockquote><p>So long, and thanks for all the fish</p><footer><strong>Douglas Adams</strong> <cite>(1984)</cite></footer></blockquote>



]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[2021 Router Replacement]]></title>
    <link href="https://greymeister.net/blog/2021/02/28/2021-router-replacement/"/>
    <updated>2021-02-28T23:41:00+00:00</updated>
    <id>https://greymeister.net/blog/2021/02/28/2021-router-replacement</id>
    <content type="html"><![CDATA[<p>I decided to finally replace the
<a href="https://web.archive.org/web/20210613022512/https://store.ui.com/collections/operator-isp-infrastructure/products/edgerouter-lite">ERLite-3</a>
router that purchased in 2017.</p>

<!-- more -->


<p>I purchased the Edgerouter to replace my old D-Link
<a href="https://eu.dlink.com/xk/sq/products/dir-655-wireless-n-gigabit-router">DIR-655</a>
WiFi/Ethernet router that I had used for years. The router firmware was no
longer receiving updates and I was a little perturbed trying to do some uncommon
configurations with it. I looked around, and although I don&#8217;t have the research
material I used back then, I was trying to find something that allowed the
configuration options I wanted without having to buy something big and expensive
from Cisco. The ERLite-3 worked really well, and provided the network separation
I wanted between my WAN connection, my lab/server network, and the network with
Wi-Fi access.</p>

<p>Eventually, there were a few things I started to dislike about the ERLite-3.
First, firmware updates were less frequent, and eventually they bifurcated into
a 1.x and a 2.x version. I had read about stability and performance issues in
2.x and had remained on 1.x even though the updates I felt were getting behind
issues I was noticing on security sites. The
<a href="https://old.reddit.com/r/Ubiquiti/comments/jpojhi/securing_an_edgerouter_against_the_nat/">NAT slipstreaming attack</a>
and
<a href="https://iperf.io/2019/12/27/intercept-and-redirect-dns-requests/">DNS Redirect</a> were
just some of the issues I wanted to solve. Additionally, Ubiquiti or UniFi or
whatever they call themselves now were pushing more and more towards management
via &#8220;apps&#8221; on iOS or Android. To me this is a terrible idea, introducing the
requirement of these ecosystems into managing my home network. I don&#8217;t trust
these devices and I don&#8217;t know how you&#8217;re supposed to trust your network
infrastructure management to something running on one. A web-based configuration
was a dependency I was reluctantly dealing with, but fuck having to depend on a
proprietary device to remotely control my router. It&#8217;s the same reason I hated
Apple&#8217;s Airport devices. Finally I thought it might be a good idea to get off of
the Edgerouter and replace it, but what to replace it with? A long time ago I
remember using <a href="https://archiveos.org/freesco/">Freesco</a> but figured there were
probably better options today.</p>

<p>Luckily I&#8217;m not the
<a href="https://loganmarchione.com/2019/06/migrating-away-from-the-ubiquiti-edgerouter-lite/">only one</a>
looking to replace this device. That blog had a well reasoned explanation for
what they chose, which in the end was a
<a href="https://shop.netgate.com/products/1100-pfsense">Netgate SG-1100</a> running
<a href="https://www.pfsense.org/">pfSense</a>. I have seen pfSense discussed quite a bit
on different subreddits and blogs, so it seems like a reasonable choice.
However, those choices didn&#8217;t feel right for me, as it would still be coupled to
one vendor&#8217;s choices like with Ubiquiti. I was glad they mentioned
<a href="https://www.pcengines.ch/">PC Engines</a> as it seems like a great choice for this
type of hardware project. I also came across
<a href="http://openbsdrouterguide.net/">this site</a> that <a href="https://unixsheikh.com/">someone</a>
assembled describing a router using <a href="https://www.openbsd.org/">OpenBSD</a> and its
<a href="https://www.openbsd.org/faq/pf/">pf</a> capabilities. After my experience with
Ubiquiti, this was a more appealing as I should be able to use generic hardware
and pick my software stack. If I found OpenBSD lacking I could always switch to
a different OS.</p>

<p>I ordered an <a href="https://www.pcengines.ch/apu2e4.htm">apu2e4</a> system from PC
Engines as it provides the same 3 NIC configuration that the ERLite-3 had. I
decided to go ahead and use OpenBSD and found
<a href="https://github.com/elad/openbsd-apu2">this page</a> which gave a nice overview for
booting a similar system with OpenBSD. Setting up the OS was pretty easy
(although it had been a long time since I used a serial TTY) and I was ready to
dig into setting up a replacement for my existing network. This meant I&#8217;d need
to configure the 3 networks, DHCP, and a <code>pf.conf</code> that was at least as good as
my current router setup.</p>

<p>Setting up <code>pf.conf</code> the way you want is a little tricky. For one thing, you see
in alot of configurations they rightly block access out on the WAN network to
any <a href="https://tools.ietf.org/html/rfc1918">RFC1918</a> addresses. However, while
testing locally, my external network <strong>will</strong> be a restricted network, as I&#8217;m
testing it within my existing NAT&#8217;d network. Not only that, but to access my
cable modem, I have to allow access to at least one specific class C network
address. Things like this made getting a final configuration hairy. I was able
to test my firewall rules by plugging in 2 machines to the 2 internal networks
and doing basic port and nat testing within my existing network. Finally, it was
doing everything I figured it should, and I made the switch. I had to shut down
the ERLite-3 and then boot up the new box. Of course, a few last minute fixes
were required before everything &#8220;worked&#8221; but those were mostly things I realized
I had to fix about the WAN DHCP client configuration.</p>

<p>I&#8217;m very happy with how things are working. I ocassionally need to fix a few
things, but I keep my <code>pf.conf</code> and <code>dhcpd.conf</code> files in version control so
it&#8217;s easy to get back to a last known working configuration if something breaks.
I don&#8217;t have any WebUI or dependency on some proprietary vending machine to
manage my router, everything can be done via restricted SSH connections to the
router. It&#8217;s a return to simpler times in alot of ways. I also find updates more
frequent than I did with either D-Link or Ubiquiti, and there is a wealth of
information online for mitigations and advisories. I don&#8217;t <em>think</em> OpenBSD is
necessarily better at everything, but I appreciate the focus being on security
and simplicity which is exactly the sort of thing you want on a box that&#8217;s just
routing packets.</p>

<h4>Coda</h4>

<p>It felt a bit sad to remove the last
<a href="https://en.wikipedia.org/wiki/MIPS_architecture">MIPS</a> system I still have
running. I know it&#8217;s possible to flash it and
<a href="https://wiki.gentoo.org/wiki/MIPS/ERLite-3">install a different OS</a>, but I
read about some pretty ugly problems people doing this have run into with the
storage the ERLite-3 uses. I decided to just factory reset and put it back in
the box, hopeful that one day I can sell it to someone who wants it.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Infrastructure 2021 Edition]]></title>
    <link href="https://greymeister.net/blog/2021/01/22/infrastructure-2021-edition/"/>
    <updated>2021-01-22T00:20:00+00:00</updated>
    <id>https://greymeister.net/blog/2021/01/22/infrastructure-2021-edition</id>
    <content type="html"><![CDATA[<p>For the last few years I have run a <a href="https://www.centos.org/">CentOS 6.5</a> machine at <a href="https://www.linode.com/?r=f70fe0fa70404e79dc979c42b1c3befa0eaf165f">linode</a> to host my <a href="https://greymeister.net">site</a>.  It was previously set up to host my <a href="https://web.archive.org/web/20240424133609/https://emoji.xyz/">url shortener</a> that I described <a href="https://greymeister.net/blog/2014/09/19/i-made-a-thing/">here</a> and <a href="https://greymeister.net/blog/2020/02/25/death-of-a-project/">ultimately</a> <a href="https://www.youtube.com/watch?t=1873&amp;v=qh7EARxkxoU&amp;feature=youtu.be">sunsetted</a> last year.  I still host the blog and the <a href="https://github.com/greymeister/emoji.xyz">shell</a> of my former url shortener.  I&#8217;ll briefly cover what that was set up with and then describe what I&#8217;m using now.</p>

<!-- more -->


<p>I used <a href="https://web.archive.org/web/20140227095243/http://www.ansible.com/home">Ansible</a> at a previous job and found it much less complicated and annoying than <a href="https://www.chef.io/">previous</a> <a href="https://puppet.com/">options</a> I had tried.  Basically how we used it was to set up a base machine image from an <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html">AMI</a> that had some initial configuration done.  We then ssh into the host and perform tasks depending on the <a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks.html">playbooks</a> and <a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html">roles</a> specified in the <a href="https://docs.ansible.com/ansible/2.3/intro_inventory.html">inventory</a>.  The process made setting up a specific type of machine consistent even though it was still running on groups of machines via ssh at a time.  I had begun investigating &#8221;<a href="https://netflixtechblog.com/ami-creation-with-aminator-98d627ca37b0?gi=a593283764a2">baking images</a>&#8221; the way Netflix described, and that sounded good, but never got much further with it.</p>

<p>Time went by and I left that job, but for my personal site I stuck with essentially the same idea, of course not using AWS because why would I contribute to that <a href="https://prospect.org/labor/amazon-warehouse-workers-in-alabama-they-work-you-to-death/">human</a> <a href="https://stallman.org/amazon.html">catastrophe</a>.  I had initially used linode to host the server side of my ill-fated <a href="https://web.archive.org/web/20110207174819/http://frizfinder.com/">iPhone application</a> as <a href="https://greymeister.net/blog/2014/05/28/migrating-from-octopress-to-squarespace/">described here</a>.  A co-worker had recommended linode as an alternative and so far I have had no reason to complain.  But you can&#8217;t exactly utilize AMI-centric techniques for their platform.  Enter <a href="https://www.packer.io">Packer</a>.</p>

<p>Packer allows you to add a layer of abstraction on top of different hosting providers.  They support <a href="https://www.dmagazine.com/publications/d-magazine/2014/july/matt-rutledge-woot-has-a-new-deal-mediocre-corporation/">the mollusk eating psycho</a>, <a href="https://www.vagrantup.com/">vagrant</a>, <a href="https://www.packer.io/docs/builders/vmware/iso">VMWare</a>, <a href="https://docker.io">docker</a>, linode, and many more.  Normally, adding an extra layer like this is a dumb idea, because it&#8217;s just extra complexity to do things you could otherwise.  What I like about most of the tools by <a href="https://www.hashicorp.com/">HashiCorp</a> is that they allow you to focus on common functionalities without getting wrapped up in <strong>all</strong> the particular idiosyncrasies of the individual providers.  Since there isn&#8217;t a well-defined standard that all these providers support, and since if that did exist in the current ecosystem, it would just be dominated to be done the way the largest players wanted it, the tools HashiCorp gives a close approximation of one.  I think of it very similarly to scraping webpages for sites that don&#8217;t provide APIs or provide broken APIs that don&#8217;t expose features that the platforms feel is a competitive advantage to their walled gardens.</p>

<p>With packer, I can create a docker image, a linode image, and any other image that I might need.  Good, so now I&#8217;ve got an answer to the problem I had 7 years ago.  Here is the first example of where the abstraction layer provides an advantage.  If I wanted to run my server in docker, I could use <a href="https://docs.docker.com/engine/reference/builder/">any</a> <a href="https://docs.docker.com/compose/">number</a> of <a href="https://rancher.com/">options</a> for docker, but that doesn&#8217;t really get me what I want, unless what I want is to run a docker container on my web host.  I do not.  This is where the concept of <a href="https://www.packer.io/docs/provisioners">provisioners</a> comes into play for packer.  I can still use Ansible as before, but now I can target a <a href="https://www.packer.io/docs/builders/docker">docker image</a>, a <a href="https://www.packer.io/docs/builders/linode">linode image</a> or any of the previous options I mentioned.  For example, here is what building an <a href="https://nginx.org/en/">nginx</a> server using docker and Ansible as a provisioner might look like:</p>

<figure class='code'><figcaption><span>nginx_packer_template.json</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="nt">&quot;builders&quot;</span><span class="p">:</span> <span class="p">[</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="nt">&quot;changes&quot;</span><span class="p">:</span> <span class="p">[</span>
</span><span class='line'>                <span class="s2">&quot;ENTRYPOINT [\&quot;docker-entrypoint.sh\&quot;]&quot;</span><span class="p">,</span>
</span><span class='line'>                <span class="s2">&quot;EXPOSE 80&quot;</span><span class="p">,</span>
</span><span class='line'>                <span class="s2">&quot;CMD [\&quot;nginx\&quot;, \&quot;-g\&quot;, \&quot;daemon off;\&quot;]&quot;</span>
</span><span class='line'>            <span class="p">],</span>
</span><span class='line'>            <span class="nt">&quot;commit&quot;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;image&quot;</span><span class="p">:</span> <span class="s2">&quot;debian:10&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;docker&quot;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">],</span>
</span><span class='line'>    <span class="nt">&quot;post-processors&quot;</span><span class="p">:</span> <span class="p">[</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="nt">&quot;repository&quot;</span><span class="p">:</span> <span class="s2">&quot;greymeister/debian10-test&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;tags&quot;</span><span class="p">:</span> <span class="p">[</span>
</span><span class='line'>                <span class="s2">&quot;latest&quot;</span>
</span><span class='line'>            <span class="p">],</span>
</span><span class='line'>            <span class="nt">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;docker-tag&quot;</span>
</span><span class='line'>        <span class="p">},</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="nt">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;docker-save&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;path&quot;</span><span class="p">:</span> <span class="s2">&quot;test.tar&quot;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">],</span>
</span><span class='line'>    <span class="nt">&quot;provisioners&quot;</span><span class="p">:</span> <span class="p">[</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="nt">&quot;script&quot;</span><span class="p">:</span> <span class="s2">&quot;../scripts/test.sh&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;shell&quot;</span>
</span><span class='line'>        <span class="p">},</span>
</span><span class='line'>        <span class="p">{</span>
</span><span class='line'>            <span class="nt">&quot;playbook_file&quot;</span><span class="p">:</span> <span class="s2">&quot;../../ansible/test.yml&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;ansible&quot;</span><span class="p">,</span>
</span><span class='line'>            <span class="nt">&quot;user&quot;</span><span class="p">:</span> <span class="s2">&quot;root&quot;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">]</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>There&#8217;s a couple of things going on here, first, I&#8217;m using docker for my builder with my docker-specific options.  Some will look familiar because they&#8217;re the same things you would put in the <code>Dockerfile</code>.  In <code>post-processors</code> I have specified <code>docker-tag</code> and <code>docker-save</code> to both tag my image in my local docker as well as generate a tarball for the halibut.  The last section is for provisioners, which I&#8217;ve selected 2, both an arbitrary shell script and an Ansible playbook.  You can see the referential paths because I have all of this in one git repository, which makes changing things much easier for me.  The layout is something like this:</p>

<figure class='code'><figcaption><span>directory_structure.txt</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
</pre></td><td class='code'><pre><code class='text'><span class='line'>|-- Infrastructure
</span><span class='line'>  |-- ansible
</span><span class='line'>    |-- roles
</span><span class='line'>      |-- debian10
</span><span class='line'>      |-- nginx
</span><span class='line'>  |-- packer
</span><span class='line'>    |-- docker
</span><span class='line'>    |-- linode
</span><span class='line'>    |-- scripts
</span><span class='line'>      |-- test.sh
</span><span class='line'>  |-- terraform
</span><span class='line'>    |-- linode
</span></code></pre></td></tr></table></div></figure>


<p>It&#8217;s pretty handy to be able to make all of these changes at once.  My playbooks are pretty simple too:</p>

<figure class='code'><figcaption><span>test.yml</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
</pre></td><td class='code'><pre><code class='yaml'><span class='line'><span class="nn">---</span>
</span><span class='line'><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Provision Python</span>
</span><span class='line'>  <span class="l-Scalar-Plain">hosts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">all</span>
</span><span class='line'>  <span class="l-Scalar-Plain">gather_facts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">no</span>
</span><span class='line'>  <span class="l-Scalar-Plain">tasks</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Boostrap python</span>
</span><span class='line'>      <span class="l-Scalar-Plain">raw</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">test -e /usr/bin/python || (apt-get -y update &amp;&amp; apt-get install -y python-minimal)</span>
</span><span class='line'>
</span><span class='line'><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Provision Debian Utils</span>
</span><span class='line'>  <span class="l-Scalar-Plain">hosts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">all</span>
</span><span class='line'>  <span class="l-Scalar-Plain">tasks</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Add debian role</span>
</span><span class='line'>      <span class="l-Scalar-Plain">import_role</span><span class="p-Indicator">:</span>
</span><span class='line'>        <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">debian10</span>
</span><span class='line'>
</span><span class='line'><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Provision nginx</span>
</span><span class='line'>  <span class="l-Scalar-Plain">hosts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">all</span>
</span><span class='line'>
</span><span class='line'>  <span class="l-Scalar-Plain">tasks</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Ensure nginx configured with role</span>
</span><span class='line'>      <span class="l-Scalar-Plain">import_role</span><span class="p-Indicator">:</span>
</span><span class='line'>        <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">nginx</span>
</span><span class='line'>
</span><span class='line'><span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Container cleanup</span>
</span><span class='line'>  <span class="l-Scalar-Plain">hosts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">all</span>
</span><span class='line'>  <span class="l-Scalar-Plain">gather_facts</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">no</span>
</span><span class='line'>  <span class="l-Scalar-Plain">tasks</span><span class="p-Indicator">:</span>
</span><span class='line'>    <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Remove python</span>
</span><span class='line'>      <span class="l-Scalar-Plain">raw</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">apt-get purge -y python-minimal &amp;&amp; apt-get autoremove -y</span>
</span><span class='line'>
</span><span class='line'>    <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">name</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">Remove apt lists</span>
</span><span class='line'>      <span class="l-Scalar-Plain">raw</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">rm -rf /var/lib/apt/lists/*</span>
</span></code></pre></td></tr></table></div></figure>


<p>I was very much inspired by <a href="https://alex.dzyoba.com/blog/packer-for-docker/">this post</a> on how to use Ansible with packer.  It&#8217;s been pretty straightforward.  This site is now hosted by a machine using this setup and I plan on trying to move some older VMs I have into this scheme.  My next challenge will be setting this up to talk to something other than docker because I don&#8217;t want to have to deploy that way for all of my local services, but that&#8217;s still <code>TODO</code> for now.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[YAGNI Jenkins Edition]]></title>
    <link href="https://greymeister.net/blog/2021/01/18/yagni-jenkins-edition/"/>
    <updated>2021-01-18T05:19:00+00:00</updated>
    <id>https://greymeister.net/blog/2021/01/18/yagni-jenkins-edition</id>
    <content type="html"><![CDATA[<p>I&#8217;ve been working on <a href="https://greymeister.net/blog/2021/01/08/housekeeping-2021">what</a> I mentioned last time WRT updating my website.  The first step I&#8217;ve taken was preparing to migrate to a new webserver.  I&#8217;ll detail what I&#8217;m using to do that, but this post is about simplifying things, and one of the simplest things I use is <a href="https://www.gnu.org/software/make/">make</a>.</p>

<!-- more -->


<p>Software people, especially those that work on <a href="http://n-gate.com">webshits</a>, <strong>love</strong> complexity.  I don&#8217;t mean that they necessarily <a href="https://blog.codinghorror.com/the-magpie-developer/">seek it out</a> but it seems like many find using the latest <a href="https://kubernetes.io/">big pile of code</a> irresistible.  Unfortunately, build systems have not escaped this.  Now, not all of them have been accused of &#8221;<a href="https://blog.jetbrains.com/blog/2021/01/07/an-update-on-solarwinds/">russian hacks</a>&#8221; by ignorant people, but they have real annoyances all their own.  I&#8217;ve <a href="https://www.atlassian.com/software/bamboo">used</a> <a href="https://www.eclipse.org/hudson/">several</a> <a href="https://www.gocd.org/">myself</a> and they&#8217;ve all been painful.  The least painful solution I have opted for recently was <a href="http://jenkins-ci.org">Jenkins</a> but even it&#8217;s gone all &#8221;<a href="https://www.youtube.com/watch?v=HltbQZmego4">enterprisey</a>&#8221; it seems.  Between trying to sift through dozens of <code>Jenkinsfile</code> groovy hacks and the unintelligible <a href="https://plugins.jenkins.io/job-dsl/">Job DSL</a> that I deal with at work, the last thing I wanted to do was deal with that at home.</p>

<p><img src="https://images.greymeister.net/rage.png" alt="Rage Gohan, pure rage"/></p>

<p>So when it was time to set up some basic structure for deploying my site, I was determined not to bring a CI system into the mix.  Sure, it wouldn&#8217;t be &#8220;fully-automated&#8221; but it would be <a href="https://xkcd.com/1319/">hardly worth</a> doing that for an infrequently updated blog.  People getting fixated on &#8220;automating everything&#8221; even for things that really don&#8217;t deserve it is another strange affliction I&#8217;ve noticed.  Remember when <a href="https://github.blog/2013-02-15-introducing-boxen/">Boxen</a> was a thing people wanted to opt into?  Gee whiz mister, sure, let me have your &#8221;<a href="https://github.com/boxen/boxen">solution</a>&#8221; to IT on my personal machine, that&#8217;ll be a <a href="https://autodexer.greymeister.net/dex_train.gif">blast</a>.  Oh wait, you stopped supporting it?  Whoops!</p>

<p>All I needed was a consistent storage mechanism for the <a href="https://en.wikipedia.org/wiki/Tar_(computing)">tarball</a> that I build from my blog source.  Having older versions available for any oopsies would be great too.  I ended up using the following:</p>

<figure class='code'><figcaption><span>Makefile</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='make'><span class='line'><span class="nv">reposrv</span> <span class="o">:=</span> foo
</span><span class='line'><span class="nv">repodir</span> <span class="o">:=</span> /bar
</span><span class='line'><span class="nv">version</span> <span class="o">:=</span> <span class="k">$(</span>shell date +<span class="s2">&quot;%Y%m%d%H%M%S&quot;</span><span class="k">)</span>
</span><span class='line'>
</span><span class='line'><span class="nf">all</span><span class="o">:</span> <span class="m">public.tar.gz</span>
</span><span class='line'>
</span><span class='line'><span class="nf">public.tar.gz</span><span class="o">:</span>
</span><span class='line'>  rake clean generate
</span><span class='line'>  tar -C public/ -czf public.tar.gz .
</span><span class='line'>
</span><span class='line'><span class="nf">upload</span><span class="o">:</span> <span class="m">public.tar.gz  </span>
</span><span class='line'>  scp public.tar.gz <span class="k">${</span><span class="nv">reposrv</span><span class="k">}</span>:<span class="k">${</span><span class="nv">repodir</span><span class="k">}</span>/public.<span class="k">${</span><span class="nv">version</span><span class="k">}</span>.tar.gz
</span><span class='line'>  ssh <span class="k">${</span><span class="nv">reposrv</span><span class="k">}</span> <span class="s2">&quot;cd ${repodir} &amp;&amp; rm -f public.latest.tar.gz &amp;&amp; ln -s public.${version}.tar.gz public.latest.tar.gz&quot;</span>
</span><span class='line'>
</span><span class='line'><span class="nf">clean</span><span class="o">:</span>
</span><span class='line'>  rake clean
</span><span class='line'>  rm -f public.tar.gz
</span></code></pre></td></tr></table></div></figure>


<p>As you can see, it&#8217;s pretty simple.  After I build I push a copy to a location that is available via HTTP (in this case, it was an empty <a href="https://en.wikipedia.org/wiki/WebDAV">WebDav</a> share on my <del>FreeNas</del><a href="https://www.freenas.org/">TrueNas</a> machine).  I then make a symlink to the latest version (the one I just uploaded) so that I have a consistent location to pull the tarball from.  It&#8217;s very simple and I doubt I will have to redesign it everytime someone decides to go all <a href="https://www.jwz.org/doc/cadt.html">CADT</a> on something I have the misfortune of using.  Cleaning up old builds would be something I could do as part of the <code>Makefile</code> or just as a 🌽<a href="https://en.wikipedia.org/wiki/Cron">tab</a> later.</p>

<p>I&#8217;ll have more on what I&#8217;m using to set up my new servers soon and <a href="https://images.greymeister.net/ohboy1.gif">oh boy</a> is it more complicated than I wanted.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Housekeeping 2021]]></title>
    <link href="https://greymeister.net/blog/2021/01/08/housekeeping-2021/"/>
    <updated>2021-01-08T00:42:00+00:00</updated>
    <id>https://greymeister.net/blog/2021/01/08/housekeeping-2021</id>
    <content type="html"><![CDATA[<p>I&#8217;ve been preoccupied over the last few months as I&#8217;m sure many others have been.  Between the <a href="https://coronavirus.jhu.edu/us-map">pandemic</a>, the <a href="https://www.americanthinker.com/blog/2020/11/me_ber_alles_the_unknown_reason_politicians_break_their_own_lockdown_rules.html">lockdown</a>, and a death in my family, 2020 ended up being a pretty awful year.  I decided I&#8217;d just put together a quick list of items I&#8217;m juggling and post them here.</p>

<!-- more -->


<h3>Blog Upkeep</h3>

<p>It&#8217;s obvious the blog needs some <a href="https://www.youtube.com/watch?v=8WEtxJ4-sh4">TLC</a>.  I need to go back through and find dead links and replace them with <a href="https://archive.org">archived</a> versions where possible.  I also want to find places I&#8217;ve embedded <a href="https://youtube.com">YouTube</a> videos and have alternate versions available, as I&#8217;m seeing more and more videos disappear from there.  I also need to look into replacing <a href="http://octopress.org">Octopress</a>, as of this writing I&#8217;m having to develop it in a <a href="https://docker.io">docker</a> container as it seems impossible to get Ruby 1.9.3 running on any system I have available.  Truly it is a sign of the times that the tool I&#8217;m using needs ancient versions of openssl to generate static websites.  The replacement preferably won&#8217;t depend on openssl,  Ruby or <a href="https://www.destroyallsoftware.com/talks/wat">npm</a>.</p>

<h3>Social Media</h3>

<p>Due to recent events, I think I&#8217;m going to <a href="https://youtu.be/_hqI_DGuUAE?t=116">opt-out</a> of all forms of social media other than direct messaging.  I&#8217;ll have more to say about this in a subsequent post but suffice to say I think engaging in any of them at this time is unhealthy and I&#8217;ll take missing information over the alternative.</p>

<h3>Personal</h3>

<p>I&#8217;ve been in Kentucky after a death in my family.  The speed at which video conferencing completely replaced in person meetings for work while also erasing any memory of how to <a href="https://en.wikipedia.org/wiki/Conference_call">communicate by voice</a> surprised me.  It has made working remotely pretty convenient, even with the time zone difference, but I&#8217;m certain most of that flexibility will be rolled back post-COVID.  I&#8217;ve been investigating <a href="https://desktop.jitsi.org/">Jitsi</a> and other software to setup video conferencing.  It&#8217;ll be interesting to see how hard it would be for me, a simple developer <a href="http://n-gate.com/">babysitting a webshit data toilet</a>, to do so without feeding into further tech centralization as a side project.  The fact Skype is irrelevant and Zoom completely monopolized communication in this pandemic is something worth studying in a research project of its own.</p>

<p>I had to stop using <a href="https://duckduckgo.com/?q=samsung+SGH-A927">my</a> &#8221;<a href="https://greymeister.net/blog/2018/06/06/2018-smartphone-buyers-guide/">smart</a>&#8221; phone as <a href="https://www.mintmobile.com/">my</a> <a href="https://en.wikipedia.org/wiki/Mobile_virtual_network_operator">MVNO</a> is <a href="https://www.androidpolice.com/2020/07/25/t-mobile-will-soon-require-volte-on-all-phones-incomopatible-devices-kicked-off-january/">dropping support for 3G devices</a> in 2021.  I&#8217;m currently using a hand-me-down <a href="https://www.samsung.com/us/mobile/phones/galaxy-s/galaxy-s8-plus-64gb--unlocked--sm-g955uzkaxaa/">android dingus</a> and I hate it.  When it &#8220;stops working&#8221; (is no longer updated/supported) the next phone I&#8217;ll buy will probably end up <a href="https://us.nuumobile.com/f4l-flip-phone/">without a keyboard</a> as that seems to be the only option for people not wanting to buy into a tech monopoly on top of a carrier monopoly.  Wonder how long until <a href="https://www.washingtonpost.com/news/the-switch/wp/2017/06/13/its-official-verizon-finally-buys-yahoo/">those are the same</a>?</p>

<p>I&#8217;m still in the process of replacing <a href="https://www.zerotier.com/">ZeroTier</a> with my own personal <a href="https://www.wireguard.com/">WireGuard</a> setup for VPN to my network and server-to-server tunnels.  I managed to have it set up in time for my trip home and it&#8217;s proven very resilient to my haphazard attempts to set it up.  ZeroTier was very interesting but I appreciate the aspect of hosting it all end-to-end for myself without relying on a third party network.</p>

<p>I&#8217;ve spent most of my free time since October reading dead tree books I had queued up.  I&#8217;m most interested in the hand-in-hand pace authoritarianism and monopolization seems to be moving at in the US.  Reading good non-fiction is a great way to realize how bad I am at writing it.</p>

<p>Well that&#8217;s it, stay safe out there.  The only thing that might be executed worse than public health during the pandemic is the <a href="https://www.patreon.com/posts/pandemic-roundup-45620469">vaccine rollout</a>.</p>

<p><img src="https://images.greymeister.net/bobby_cat.jpg" alt="bobby cat"/></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Migrating Terraform State]]></title>
    <link href="https://greymeister.net/blog/2020/03/05/migrating-terraform-state/"/>
    <updated>2020-03-05T18:49:00+00:00</updated>
    <id>https://greymeister.net/blog/2020/03/05/migrating-terraform-state</id>
    <content type="html"><![CDATA[<p>Recently at work I needed to migrate some resources from one Terraform state file to another.  I found useful information on this <a href="https://stackoverflow.com/a/51489058">Stack Overflow answer</a> but decided to document the procedure I used.</p>

<!-- more -->


<p>We use an <a href="https://www.terraform.io/docs/backends/types/s3.html">S3 bucket and a DynamoDB table</a> to manage Terraform state changes.  This is used to compare with the tf source files in a repository to determine changes in AWS that are necessary.  I needed to split some Terraform source files into separate repositories, but just moving the source will not work the way you might want.  When you run <code>terraform plan</code> on the old repo, the files that you moved will still be in the state file, thus, Terraform thinks it needs to delete these and will attempt to do so.  This means those resources will be removed if you apply the plan.  You then need to run plan and apply in the new repository to create them in AWS again.  This works if you don&#8217;t mind the AWS resources getting removed temporarily.</p>

<p>If you need to move Terraform source files but do not want the AWS resources removed, you have to manipulate the state files directly with Terraform.  In this scenario, I&#8217;m moving Terraform to a new S3 bucket and want to move <em>some</em> of the resources therein.  Note that the version of Terraform used must be consistent between the two repositories, at least while migrating.</p>

<h3>1.  Backup old state file</h3>

<p>Go into S3 and download the file that contains your Terraform state.  This is a fail safe if anything goes horribly wrong.</p>

<h3>2.  Pull the old state file into a local file for modification</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>terraform init '-input=false' -reconfigure
</span><span class='line'>terraform state pull &gt; ../../old.tfstate </span></code></pre></td></tr></table></div></figure>


<h3>3.  Get the list of modules from the old state</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>terraform init '-input=false' -reconfigure
</span><span class='line'>terraform state list &gt; ../../old.module_list</span></code></pre></td></tr></table></div></figure>


<h3>4.  Create the new state file</h3>

<p>You might need to create and delete an AWS resource to generate an empty state file.  The empty state file should look something like this in S3:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>{
</span><span class='line'>    "version": 3,
</span><span class='line'>    "terraform_version": "0.11.11",
</span><span class='line'>    "serial": 3,
</span><span class='line'>    "lineage": "b63aef7c-1042-48eb-a162-ed8f1137a9c3",
</span><span class='line'>    "modules": [
</span><span class='line'>        {
</span><span class='line'>            "path": [
</span><span class='line'>                "root"
</span><span class='line'>            ],
</span><span class='line'>            "outputs": {},
</span><span class='line'>            "resources": {},
</span><span class='line'>            "depends_on": []
</span><span class='line'>        }
</span><span class='line'>    ]
</span><span class='line'>}
</span></code></pre></td></tr></table></div></figure>


<h3>5.  Pull the new state file into a local file</h3>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>terraform init '-input=false' -reconfigure
</span><span class='line'>terraform state pull &gt; ../../new.tfstate </span></code></pre></td></tr></table></div></figure>


<h3>6.  Edit the old.module_list file</h3>

<p>This file contains all of the resources that are referenced in the old module state.  You will have to edit this file and find the resources you want moved to the new state.  Remove all of the lines that you want to remain in the old state file.</p>

<h3>7.  Migrate the modules from the old state file to the new one</h3>

<p>Terraform will not move state from one remote file to another, which is why you have to retrieve the state files locally.  Once you have them locally, you are able to move state from one to another using Terraform commands.  This can be time consuming if you have to move several resources, so you can use a script like the following:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>#!/bin/bash
</span><span class='line'>
</span><span class='line'>filename="../../old.module_list"
</span><span class='line'>cat $filename | while read line
</span><span class='line'>do
</span><span class='line'>    echo $line
</span><span class='line'>    terraform state mv -state=../../old.tfstate -state-out=../../new.tfstate $line $line
</span><span class='line'>done</span></code></pre></td></tr></table></div></figure>


<p>Run this script and it will move all of the modules you left in the <code>old.module_list</code> file from the old state to the new state.</p>

<h3>8.  Push the local Terraform state to the S3 backend location</h3>

<p>Run this from the new location</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>terraform init '-input=false' -reconfigure
</span><span class='line'>terraform state push ../../new.tfstate </span></code></pre></td></tr></table></div></figure>


<p>Run this from the old location</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>terraform init '-input=false' -reconfigure
</span><span class='line'>terraform state push ../../old.tfstate </span></code></pre></td></tr></table></div></figure>


<h3>9.  Check your Terraform plan</h3>

<p>Run <code>terraform plan</code> from each location and verify there are no state changes present.  This should happen if you&#8217;ve correctly moved over the modules to the new source location, and removed the terraform source from the old location.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Death of a Project]]></title>
    <link href="https://greymeister.net/blog/2020/02/25/death-of-a-project/"/>
    <updated>2020-02-25T21:11:00+00:00</updated>
    <id>https://greymeister.net/blog/2020/02/25/death-of-a-project</id>
    <content type="html"><![CDATA[<p>Looking at this <a href="https://web.archive.org/web/20160104210439/http://www.hover.com/blog/top-xyz-websites-in-the-wild/">page</a> I found it funny that they mentioned my site, but what was really depressing was that none of the other sites loaded anymore.  Well, emoji.xyz may only host shortened links but it will remain up for the forseeable future.</p>

<!-- more -->


<p>As initially described in <a href="https://greymeister.net/blog/2014/09/19/i-made-a-thing/">my blog post</a> emoji.xyz was a fun side thing I did while I was working on a project that was based in <a href="https://nodejs.dev/">nodejs</a>.  I do not care much for <a href="https://www.destroyallsoftware.com/talks/wat">javascript</a> and I have avoided updating the project because I did not want to delve back into it.  The libraries I used were woefully out of date and I expected that continuing to run the service would eventually end up with some sort of exploit taking down my web host.  However, trying to be as good of a netizen as I can be, I have implemented a way for the site to continue serving links that were already shortened.  I&#8217;m updating the [repository](https://github.com/greymeister/emoji.xyz** to include the script.  I didn&#8217;t want the links to die even if I stopped running the app.</p>

<p>I have mixed feelings about the legacy of URL shorteners, but they were probably a mistake.</p>

<p><strong>Update June 2024</strong> I let the site expire because another person wanted to use it and it&#8217;s one less cert/domain to maintain.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Yes, Comcast Really is This Bad]]></title>
    <link href="https://greymeister.net/blog/2019/11/09/yes/"/>
    <updated>2019-11-09T19:27:00+00:00</updated>
    <id>https://greymeister.net/blog/2019/11/09/yes</id>
    <content type="html"><![CDATA[<p>Thanks to Comcast, I&#8217;m enabling HTTPS on my personal websites. The only reason I need it is that I now reside on a hostile network.</p>

<!-- more -->


<p>I have had FIOS for the last 5 years but after my recent move, the only option I had available was cable Internet.  I was greeted this morning with the following popup injected onto my personal site:</p>

<p><img src="https://images.greymeister.net/comcast_fu.png" title="comcast_fu.png" alt="Fuck you from Comcast"/></p>

<p>Now, I had read about how Comcast was <a href="http://blog.ryankearney.com/2013/01/comcast-caught-intercepting-and-altering-your-web-traffic/">injecting content into HTTP sites</a> but had been lucky enough not to endure it personally.  The fact that they are <a href="https://www.owasp.org/index.php/Man-in-the-middle_attack">MITM</a> my browsing is bad enough, but they just let me know that my connection is metered as well.  One could ask &#8220;Why would you be using over 1 TB of Internet Traffic?&#8221;  One could respond with &#8220;Fuck you, it&#8217;s none of your business&#8221;, but this month I was downloading the last of my S3/Glacier backups so that I could move them to <a href="https://www.quantum.com/en/products/tape-storage/lto-tape-drives/">something reliable</a> without handing more money over to a <a href="https://www.eff.org/deeplinks/2018/05/amazon-stop-powering-government-surveillance">company working against my right to privacy</a>.  I apparently have 2 <a href="https://www.youtube.com/watch?v=PCfiqY05BpA">&#8220;courtesy&#8221;</a> months that, once exceeded, I will get charged a pretty ludicrous fee for going over in 50 GB increments.  I of course could hand over an additional $50 a month for uncapped traffic, which would put my monthly Internet bill over $90.</p>

<p>I have used <a href="https://www.digicert.com/">digitcert</a> to purchase an SSL certificate, but I had heard about <a href="https://letsencrypt.org">letsencrypt</a> and decided to try using <a href="https://certbot.eff.org/">certbot</a>.  It was relatively painless and as of the publication of this post, they are providing the certificate my websites use.  I agree with <a href="http://n-gate.com/software/2017/07/12/0/">n-gate</a> that putting HTTPS on everything is unecessary and a sign of things being broken, and had avoided doing it until this incident.  I wish I had better solutions but for now I&#8217;m stuck.</p>

<p>These sorts of intrusions are why I <a href="https://supporters.eff.org/donate/join-eff-4">support the EFF</a> even if they get some things wrong like advocating <a href="https://mjtsai.com/blog/2019/11/08/firefox-making-dns-over-https-the-default/">DOH</a>.  I will be <a href="https://letsencrypt.org/donate/">supporting letsencrypt</a> considering the amount of money that their service has saved me from purchasing commercial certificates.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Getting Bhyve to Behave on OmniOS]]></title>
    <link href="https://greymeister.net/blog/2019/07/15/getting-bhyve-to-behave-on-omnios-ce/"/>
    <updated>2019-07-15T15:00:00+00:00</updated>
    <id>https://greymeister.net/blog/2019/07/15/getting-bhyve-to-behave-on-omnios-ce</id>
    <content type="html"><![CDATA[<p>I&#8217;ve been toying with the idea to run a variant of <a href="https://illumos.org/">illumos</a> for my home server for some time now.  I started with Joyent&#8217;s <a href="https://www.joyent.com/smartos">SmartOS</a> but
that is more a specialized install that is geared for running a hypervisor in a datacenter.  The best options seemed to be <a href="https://www.openindiana.org/">OpenIndiana</a> which I have played with before and <a href="https://omniosce.org/">OmniOS CE</a>.  I decided to go for OmniOS as I saw it had both <a href="https://omniosce.org/info/bhyve.html">bhyve</a> support and <a href="https://omniosce.org/info/lxzones.html">lx zone</a> support.
I have always been a fan of how zones worked in Solaris 10 when I used to use that, which alongside ZFS were some of the &#8220;holy crap&#8221; features compared to what I had been used to with GNU/Linux.
Now, ZFS finally has decent support in most brands of GNU/Linux, but they never got the great zone feature.  When using virtualization on my Gentoo machine, I still usually do KVM/QEMU for spinning
up a server to use.  Zones and the associated utilities make that feel like real <a href="https://www.youtube.com/watch?v=fumHqmqpWqs">caveman stuff</a>.</p>

<!-- more -->


<p>I am using the omnios-r151030j release as of this writing.  According to the documentation, OmniOS CE recommends using bhyve branded zones over KVM for performance.  I wanted to migrate
my <a href="https://tt-rss.org/">Tiny Tiny RSS</a> <a href="https://www.youtube.com/watch?v=WRWrmT0ovPE">Ubuntu</a> machine over to a zone on the OmniOS server, so I started with the bhyve flavor.  I defined the zone as per the example on the
<a href="https://omniosce.org/info/bhyve_kvm_brand.html">omniosce.org page</a> but used my ubuntu-18.04-live-server-amd64.iso for the installation file system.  I started the zone with <code>zoneadm</code>
with another terminal using <code>zlogin -C ubuntu</code> and I got a blinking cursor that hung around until I halted the zone.  After some research, it seems
<a href="https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227765">maybe this kernel was too new</a> for bhyve, so I downloaded ubuntu-16.04.6-server-amd64.iso and tried that.  This time, instead of
just a blinking cursor, the zone immediately halted.  After some additional research, I zeroed in on switching the <code>bootrom</code> attr of the zone to <code>BHYVE_RELEASE</code> instead of
<code>BHYVE_CSM_RELEASE</code> which got me the ubuntu installation menu.  I then had edit the boot menu option to <a href="https://ubuntuforums.org/showthread.php?t=2401674">utilize a serial console</a> for installation.
The installation went smoothly, and after the zone rebooted, I got the CD installation menu again.  I tried changing the <code>bootorder</code> attr to dc instead of the default cd, but that also did not
seem to make it boot off the virtual hard drive.  Finally, I went into the bhyve EFI menu, and noticed that the virtual hard disk did not appear.  I tried adding it manually but that also did not succeed.</p>

<p>After some frustrating hours of trial and error with zonecfg and zoneadm, I found two more pieces that worked.  Firstly, I switched the <code>diskif</code> to <code>ahci</code> instead of the default <code>virtio</code>.  This made the disk
appear in the EFI menu (although I could never figure out how to use it by default, other than removing the cdrom attr and fs from the zone).  The second thing I learned from a closed
<a href="https://github.com/cneira/zcage/issues/2#issuecomment-445365164">zcage GitHub issue</a> that linked to a <a href="https://redmine.ixsystems.com/issues/25459">FreeNAS bug</a> that included copying the
grubx64.efi file into a different location on the boot partition.  The last step was to configure grub to use the serial console on boot which was best documented
<a href="https://github.com/ynkjm/ubuntu-serial-install">here</a>. For reference, here is the working zone configuration file I have that boots the bhyve branded zone from disk:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>&lt;?xml version="1.0"?&gt;
</span><span class='line'>&lt;!--
</span><span class='line'>    DO NOT EDIT THIS FILE.  Use zonecfg(1M) instead.
</span><span class='line'>--&gt;
</span><span class='line'>&lt;!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1"&gt;
</span><span class='line'>&lt;zone name="ttrss" zonepath="/zones/ttrss" autoboot="true" brand="bhyve" ip-type="exclusive" debugid="9"&gt;
</span><span class='line'>  &lt;network physical="vnic0"/&gt;
</span><span class='line'>  &lt;device match="/dev/zvol/rdsk/tank/bhyve/ttrss"/&gt;
</span><span class='line'>  &lt;attr name="bootdisk" type="string" value="tank/bhyve/ttrss"/&gt;
</span><span class='line'>  &lt;attr name="diskif" type="string" value="ahci"/&gt;
</span><span class='line'>  &lt;attr name="ram" type="string" value="2G"/&gt;
</span><span class='line'>  &lt;attr name="vcpus" type="string" value="1"/&gt;
</span><span class='line'>  &lt;attr name="bootrom" type="string" value="BHYVE_RELEASE"/&gt;
</span><span class='line'>&lt;/zone&gt;</span></code></pre></td></tr></table></div></figure>


<p>Here is the relevant section of <code>/etc/default/grub</code> file on the ubuntu zone to boot with the serial console:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'># Uncomment to disable graphical terminal (grub-pc only)
</span><span class='line'>GRUB_TERMINAL='serial console'
</span><span class='line'>GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
</span></code></pre></td></tr></table></div></figure>


<p>Overall this has been a decent learning experience, but I&#8217;ve also played around with some lx branded zones.  They also took some interesting tricks to get running, but are much nicer to deal with.
They natively support zlogin without needing to specify -C option, as well as not needing a separate zvol for their disk.  The one thing I can do so far with a bhyve branded zone is limit
vcpus and memory, which I have not managed to figure out yet with lx branded zones.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[De-Applification Part 3: The Last MacBook I'll Ever own]]></title>
    <link href="https://greymeister.net/blog/2018/06/10/de-applification-part-3-the-last-macbook-ill-ever-own/"/>
    <updated>2018-06-10T08:00:00+00:00</updated>
    <id>https://greymeister.net/blog/2018/06/10/de-applification-part-3-the-last-macbook-ill-ever-own</id>
    <content type="html"><![CDATA[<p>Continuing <a href="https://greymeister.net/blog/2015/07/30/de-applification-part-1-the-long-road-here/">part 1</a> and <a href="https://greymeister.net/blog/2015/09/02/de-applification-part-2-the-trash-can-had-to-go">part 2</a> I have less  in my life than I have for the last 10 years.  The Mid 2015 15&#8221; Retina MacBook Pro is the last MacBook I&#8217;ll ever own.</p>

<!-- more -->


<p>Since my first laptop, a <a href="https://en.wikipedia.org/wiki/Sony_Vaio_505_series">Sony Vaio</a>, laptops haven&#8217;t really changed much.  They have faster hardware, bigger screens, and more battery life.  Basically just iterative improvements taking place over 10 years.  My <a href="https://everymac.com/systems/apple/macbook-air/specs/macbook-air-core-i7-2.0-13-mid-2012-specs.html">MacBook Air</a> was the lightest and most powerful laptop I&#8217;d ever had all at once.  I had been using that until 2016 when I started a new job and was issued a <a href="https://everymac.com/systems/apple/macbook_pro/specs/macbook-pro-core-i7-2.8-15-dual-graphics-mid-2015-retina-display-specs.html">Mid 2015 15&#8221; MacBook Pro</a>.  After using it for a few months, I got over the heft of the MacBook Pro vs the Air for daily carrying and got used to the performance improvement.  Using the MBA started to be annoying when watching HD video would beachball or outright crash the system over and over.  I looked around for some non- alternatives but didn&#8217;t really see anything compelling.  I saw people at work start to be issued the first MacBook with the <a href="https://everymac.com/systems/apple/macbook_pro/specs/macbook-pro-core-i7-2.7-15-late-2016-retina-display-touch-bar-specs.html">touch bar</a> and right away I could tell it wasn&#8217;t for me.</p>

<p>The reason I bought a new (new but over a year old) 2015 MacBook Pro  was that despite how cynical I had gotten about the direction  had been going in with its hardware, it didn&#8217;t fully sink in how bad it could git until I saw people using the new ones.  What a piece of shit.  The touch bar does nothing useful, the USB port immediately requires a <a href="https://www.apple.com/shop/product/MJ1K2AM/A/usb-c-digital-av-multiport-adapter">giant dongle</a> that is very inconvenient to plug in external displays and peripherals.  The <a href="https://twitter.com/dhh/status/995731113241956352">keyboard is shit</a>.  All of these tradeoffs are for things I don&#8217;t want or need, so I have no interest in ever owning or using one.  I realized that if I wanted a more powerful laptop than the MacBook Air, I&#8217;d better get one of these last tolerable MacBook Pros.</p>

<p>The software changes have been just about as welcome as the hardware changes.  I&#8217;m currently running El Capitan on my personal laptop, while my work laptop was force upgraded to Sierra.  All that managed to do was break the Hush app I have been running since  introduced <a href="https://en.wikipedia.org/wiki/Notification_Center">spam for the desktop</a>.  I looked to see if there was a newer version but it seems like the app was <a href="https://www.youtube.com/watch?v=WAQbRFZU7rE">erased from existence</a> on the Internet.  I guess it&#8217;s bad form to allow users to silence a potential revenue generator on their personal computers in 2018.  I especially like the notification that appears anytime I used a <a href="https://www.mozilla.org/en-US/firefox/new/">browser</a> other than Safari.  Way to take a page out of the <a href="https://www.jwz.org/xscreensaver/xscreensaver-windows.html">MICROS~1</a> playbook <a href="https://images.greymeister.net/udick.gif">you dicks</a>.  You can try to hide them by having them only show up <a href="https://images.greymeister.net/no-thank-you-notifications.png">for one minute of the day</a> but even that doesn&#8217;t work all the time.</p>

<p>Now  plans on <a href="https://mjtsai.com/blog/2018/06/07/removed-in-macos-10-14-mojave/">removing OpenGL and OpenCL support</a> from their latest release and making &#8220;macOS&#8221; applications work more like iOS applications.  That&#8217;s no surprise, they&#8217;ve been moving towards that since the Forstall days and good riddance as far as I&#8217;m concerned.  I do about 80% of my work in a hosted GNU/Linux environment at this point and eventually I&#8217;d like to just wipe the disk.  Right now I still need it running somewhere so I can access the stuff I&#8217;ve bought on iTunes but that&#8217;s fine to run in the background while I fullscreen a remote VNC session.</p>

<p>The final chapter of De-Applification is well underway and all that remains is to eventually find some computer that isn&#8217;t hot garbage once this one dies.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[2018 Smartphone Buyers Guide]]></title>
    <link href="https://greymeister.net/blog/2018/06/06/2018-smartphone-buyers-guide/"/>
    <updated>2018-06-06T09:00:00+00:00</updated>
    <id>https://greymeister.net/blog/2018/06/06/2018-smartphone-buyers-guide</id>
    <content type="html"><![CDATA[<p>It&#8217;s a tough decision, deciding how one forfeits their privacy, so I thought I would provide a guide to buying a smartphone in 2018.</p>

<blockquote><p>We all live in a house on fire, no fire department to call; no way out, just the upstairs window to look out of while the fire burns the house down with us trapped, locked in it.</p><footer><strong>Tennessee Williams</strong> <cite>The Milk Train Doesn&#8217;t Stop Here Anymore (1963)</cite></footer></blockquote>




<!-- more -->


<h2>LG Xpression 2</h2>

<p>While clearly not a <em>smartphone</em>, I believe using a phone like this is smarter than opting into the bullshit ecosystem of Apple, Amazon or Google in 2018.  Every piece of technology is a tradeoff for convenience, but somehow people forgot that and just assume it&#8217;s necessary to carry around one of these things.  After being free of any smartphone for about a year now, the illusion of their necessity has vanished.  I do feel like carrying a cell phone daily is still worth the tradeoff for me, I don&#8217;t have a land line and have to be reachable while at work.  Ideally I <a href="https://stallman.org/rms-lifestyle.html">wouldn&#8217;t use one</a> or at the very least, not carry it around with me.</p>

<p>As to which model you get, it really doesn&#8217;t matter.  This phone worked for me but YMMV.  Find something cheap and expendable that you can get a signal with.  As of this writing, AT&amp;T didn&#8217;t even offer plans without some data surcharge.  You could opt for pay as you go which I may do in the future.</p>

<h2>Garmin Drive 50</h2>

<p>I still find it useful to have GPS for when I&#8217;m driving somewhere new or in a congested area.  There are several Garmin models to choose from, but most of the new ones offer some sort of app integration which is superfluous.  This particular model seems fine.  The map update feature requires you to plug it into a PC with USB and run an application which has been a little flakey.  It gets the job done and is as accurate as the directions on my last iPhone.</p>

<h2>MP3 Player</h2>

<p>There are still models that you can get new, or you may have one lying around.  If you were in Apple hell you can opt to do what I did since I already had most of my music library in iTunes and use an old iPod Nano.  What was remarkable to me is that I can manually manage music on an iPod from multiple computers!  What a novel concept that was removed from the iPhone?  The OS hasn&#8217;t had any updates in a very long time and so I&#8217;m sure it&#8217;s vulnerable if I had Bluetooth enabled.  The nice thing about that is the worst case scenario is losing some mp3s that I have elsewhere.  I&#8217;d like to try out a non-Apple MP3 player when this iPod inevitably dies, but no sense in buying another one yet.</p>

<h2>Field Notes</h2>

<p>You don&#8217;t need to buy <a href="https://fieldnotesbrand.com">this particular brand</a>, but I&#8217;ve found having a small notebook I can carry around in my pocket has served adequately for note taking.  They come with the added benefit of being cheap and requiring no updates.  I&#8217;ve bought a few packs and have enough to last me for years to come.</p>

<h2>Summary</h2>

<p>I&#8217;ve found after selling my last iPhone in 2017 and using these devices, I have made the minimum tradeoffs for all of the convenience I had previously.  This comes with the added benefit that I don&#8217;t have to worry about security updates walled behind some designer&#8217;s shit ideas of how I need to do things I&#8217;ve managed to do just fine for years.  Try it out,  you might be surprised.  And you know the thing they have in common? <a href="https://youtu.be/qMkkfuSizc4?t=18">They&#8217;re cheap</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Moving Off of S3]]></title>
    <link href="https://greymeister.net/blog/2017/03/02/moving-off-of-s3/"/>
    <updated>2017-03-02T00:11:00+00:00</updated>
    <id>https://greymeister.net/blog/2017/03/02/moving-off-of-s3</id>
    <content type="html"><![CDATA[<p>So I moved the <a href="https://greymeister.net/blog/2017/02/07/moving-the-blog-back/">blog to S3</a> and now I&#8217;m moving it back off of S3.  Mainly because the DNS headaches created by forwarding the naked domain <em>greymeister.net</em> to an S3 bucket wasn&#8217;t worth it.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Moving the Blog Back]]></title>
    <link href="https://greymeister.net/blog/2017/02/07/moving-the-blog-back/"/>
    <updated>2017-02-07T02:20:00+00:00</updated>
    <id>https://greymeister.net/blog/2017/02/07/moving-the-blog-back</id>
    <content type="html"><![CDATA[<p>I have decided after not posting for a long while to take down my Squarespace site.  I&#8217;ll be hosting this older version built
off of Octopress on S3 in case anyone happens to wonder back this way.  Links will probably be broken but at least there will
be something left here in case it was useful to anyone.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The Full Stack]]></title>
    <link href="https://greymeister.net/blog/2015/10/14/the-full-stack/"/>
    <updated>2015-10-14T13:30:00+00:00</updated>
    <id>https://greymeister.net/blog/2015/10/14/the-full-stack</id>
    <content type="html"><![CDATA[<!-- more -->


<p>When I see a job requirement list like the following, I really have to wonder about what the day-to-day would be.</p>

<p><span class="full-image-block ssNonEditable"><span><img src="https://greymeister.net/images/the_full_stack.png" alt=""/></span></span></p>

<p>My guess is that it is a nightmare of bad management and poorly made technology decisions, but thankfully I&#8217;ll never know.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[De-Applification Part 2: The Trash Can Had to go]]></title>
    <link href="https://greymeister.net/blog/2015/09/02/de-applification-part-2-the-trash-can-had-to-go/"/>
    <updated>2015-09-02T06:00:00+00:00</updated>
    <id>https://greymeister.net/blog/2015/09/02/de-applification-part-2-the-trash-can-had-to-go</id>
    <content type="html"><![CDATA[<p>As mentioned in <a href="https://greymeister.net/blog/2015/07/30/de-applification-part-1-the-long-road-here/">part 1</a> I decided to start removing my dependencies on the   company due to my increasing sense that their platform was becoming hostile to my usage patterns.  The biggest, fanciest, and most expensive piece of hardware came in the form of my 2013 Mac Pro.</p>

<!-- more -->


<p><img src="https://greymeister.net/images/macpro-2013-ebay-ss.png" title="Mac Pro Ebay" alt="Mac Pro Ebay"/></p>

<p>When the new Mac Pro was announced, my enthusiasm for Macs was already in decline.  I was a little disappointed that the classic cheese-grater look was going away, but it made sense given the tendency that Macs were getting smaller, more streamlined designs.  The hardware was a significant upgrade compared to my 2008 Dual Quad Core Mac Pro.  That machine, in retrospect, was one of the most reliable computers I ever owned.  Its hardware expandability allowed it to stay useful and performant 6 years after its manufacture date.  This new, ashtray Mac was more akin to the retina Macbook Pro, there were little or no options when it came to upgrading the machine.  <a href="http://eshop.macsales.com/shop/memory/Mac-Pro-Memory#1866-memory">OWC</a> and some other shops eventually offered upgraded components, but it was certainly not going to be with any components that were readily available.  The only way to add SATA drives would be through expensive <a href="http://eshop.macsales.com/shop/Thunderbolt/External-Drive/OWC/Elite-Dual-RAID">Thunderbolt drive enclosures</a>.  The optical drive would have to be a <a href="http://www.apple.com/shop/product/MD564LL/A/apple-usb-superdrive">USB Superdrive</a>.  For HDMI video capture, I&#8217;d either need an expensive Thunderbolt <a href="https://www.aja.com/en/products/io-xt">capture device</a> or an expensive Thunderbolt <a href="http://eshop.macsales.com/shop/Thunderbolt/PCIe_Chassis/Mercury_Helios_2">PCIe enclosure</a> for my current capture card.  There&#8217;s a theme to all of this, but I&#8217;ll revisit that shortly.</p>

<p>I eventually took the $6000 [≈ 2007 CEO hourly pay] plunge and got a model that made tradeoffs I could live with.  The benefits to the new design were instantly recognizable.  The machine is almost silent.  I thought the 2008 Mac Pro was quiet for such a powerful machine, but sitting next to the 2013 Mac Pro, there was a noticeable difference.  The 2013 Mac Pro is also very small in comparison, I have shoeboxes that are larger.  That might not be a selling point for everyone, but moving across the country has taught me to appreciate the cubic centimeters of boxes.  Everything that Apple had promised to deliver was proven out with this impressive, fancy new machine.</p>

<p>Recall that previously I mentioned all upgrades would largely need to be based on the 6 Thunderbolt ports the Mac Pro has.  I started with adding an Elite Pro Dual to have some fast temporary space off the main SSD for video files.  The two SATA drives in it were previously inside the 2008 Mac Pro, so those were already on hand.  I also added a very nice Aja ioXT HDMI capture device to replace the Blackmagic PCIe card I had been using.  I also connected an older USB 3 enclosure that had been hooked up to the 2008 Mac pro to one of the Mac Pro&#8217;s USB 3 ports.  After some time and a lot of money, I essentially had reinvented my old setup.  But at what cost?</p>

<p>Certainly there was a financial cost, as pricing for Thunderbolt devices seem to be &#8220;take the cost of a USB or Firewire device and then multiply it by 1.5.&#8221;  There was also a very noticeable desk space cost.  While the 2013 Mac Pro took up much less space than the 2008 model by itself, I had the 2008 tower underneath my desk.  Now I had to make new space on my desk and around it for all of these peripherals that replaced the internal drives and PCIe capture card.  On top of that, I had to dig out an old power strip because of my new set of required AC adapters.  There was also the Thunderbolt Kudzu growing from beneath my desk, spreading to every corner.  One day while cleaning up, along with the occasional unmounting of a drive and a device getting knocked out of its surge protector, it dawned on me:</p>

<p><strong>The 2013 Mac Pro is a fancy laptop.</strong></p>

<p>Sure, a laptop with more powerful hardware, but also a laptop without a screen, battery, or mobility.  For years, the solution to using a Macbook Pro for professional work was a collection of cables and chords to connect all matter of periphery to expand it.  It&#8217;s not that I don&#8217;t use laptops or begrudge their usefulness, but this machine seemed to come with all of the drawbacks of a laptop with none of the benefits.</p>

<p><img src="https://greymeister.net/images/daisychainmacpro.jpg" title="To Expandibility and beyond!" alt="To Expandibility and beyond!"/></p>

<p>My idea of a home office workstation is a machine that fulfills many different roles, some of which the 2013 Mac Pro did.  I also prefer it to be able to run games, even if it has to dual boot or run a Windows VM.  I also want it to be able to support running multiple virtual environments to test things for work or for hobby projects.  That requires a lot of resources and a lot of flexibility.  The cheese-grater Mac Pro was the last example of that combination offered by Apple.  The 2013 and presumably later Mac Pros have limited flexibility to external expansion which, generally, was the only flexibility laptops had.  My Macbook Air can connect via Thunderbolt to a <a href="http://www.amazon.com/gp/product/B00NIQPDIC?psc=1&amp;redirect=true&amp;ref_=oh_aui_detailpage_o01_s00">CalDigit docking station</a> which gives it Ethernet, display, and USB 3 ports.  This is great, especially since I move my laptop around a lot and don&#8217;t want to have a lot of cables to unplug when I grab it.  For a workstation, this provides no benefits at all (unless you happen to need to run workstations office to office which, given how expensive these are, I totally understand).</p>

<p>Interior flexibility and customization is actually much more useful for a workstation because it not only extends its usefulness beyond its initial technological limits, but because it provides simplicity with the literal and figurative &#8220;black box&#8221; of components it contains.  When I need to move things around my workstation, I can turn it off, unplug it, and then move it.  I don&#8217;t have to worry about which power strips its peripherals are plugged into and which combination of chords I need to orchestrate for everything to work again.</p>

<p>I used the 2013 Mac Pro for awhile and, although I eventually sold it, it was a very impressive machine.  It turns out though that, much like their software, Apple Hardware is going in a direction that doesn&#8217;t really fit my needs.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[De-Applification Part 1: The Long Road Here]]></title>
    <link href="https://greymeister.net/blog/2015/07/30/de-applification-part-1-the-long-road-here/"/>
    <updated>2015-07-30T08:00:00+00:00</updated>
    <id>https://greymeister.net/blog/2015/07/30/de-applification-part-1-the-long-road-here</id>
    <content type="html"><![CDATA[<p>I have come to a difficult decision: I need less  in my life.</p>

<!-- more -->


<p>I have been using Apple hardware and Software semi-exclusively since around 2007.  I was very impressed when I first saw a consultant my company had brought in who used a Macbook Pro.  That company I worked at in 2006 was a Windows-only shop, and I had naively assumed that was just what to expect.  In my time at Universities, I had fallen in love with the GNU/Linux ecosystem.  In 2006, I thought &#8220;Well, this is industry I guess&#8221; and started the long tedious battle for productivity against my nemesis: Windows XP.</p>

<p>The consultant had shown me some amazing things in a very short time.  The first was, yes, this fancy laptop looked impressive.  After working with it first hand, I learned it had very respectable hardware, and was running BASH natively.  I felt right at home, the sludge and frustration of working in Windows COMMAND.COM world was suddenly lifted.  He also set up VMWare Fusion or Parallels running a Windows VM.  We hooked a monitor, keyboard, and mouse to the Macbook.  One of us could be sitting at the Macbook using the built-in display and keyboard/trackpad using Leopard and the other less fortunate person (me) could sit at the external display and keyboard using Windows.  The application had to work in IE and so the Windows side would usually just have a browser window while the IDE and application server ran on the host OS.</p>

<p>Within a year of that experience, I had other co-workers who were enthusiastic about Macs and Mac OS X.  I had also gone to a couple of conferences where, unsurprisingly, most of the presenters used Macbook Pros.  I saved up and bought a used 15&#8221; 2006 Macbook Pro.  Not only was it lighter and faster than the ugly craptop my company had issued me, it looked fancier.  Slowly but surely I moved to doing all my development on the Macbook Pro and let the craptop perform the one function it was fit for; a hot paperweight.</p>

<p>Those were happier times using Mac OS X 10.5 Leopard, and there was very little to complain about.  Expose` seemed like magic to me.  I could hit F3 and all of my windows would scale down to properly proportioned versions where all of them were visible.  Macports was similar to FreeBSD and enabled most open source packages I wanted.  VMWare Fusion wasn&#8217;t cheap, but it let me bring up IE as well as Office to open proprietary documents that every company I worked at loved.  After buying a replacement battery, the Macbook Pro seemed to run noticeably longer than the craptop did.  This, despite having replaced the CDROM with a second battery on the craptop.</p>

<p>All things, especially good things, eventually come to an end.  The first signs were subtle little annoyances when I upgraded to 10.6 Snow Leopard.  Expose` didn&#8217;t work the way it used to.  It no longer spaced the windows proportionally across the screen.  I may be inaccurately recalling this from memory, but I believe it made all windows the same size (why?).  There was a hack that I applied to make it function in the old way, but it just seemed odd to me at the time that Apple did this.  Why was I suddenly fighting my old war for productivity against this fancy operating system?</p>

<p>And then there was 10.7 Lion.  This was the first time I honestly wondered if I had made the wrong choice in buying into the Apple ecosystem.  I stumbled through that steaming pile of skeuomorphism, and 10.8 Mountain Lion was hardly an improvement.  None of the changes served any benefit for my uses of the computer, but worse than that, seemed like an increasing set of fancy obstacles.  Take your pick; &#8220;natural&#8221; scrolling, iCloud, Gatekeeper, Mission Control replacing Expose`, Springboard, or Spaces  being eradicated.  One by one features that I relied on were mutating into less useful variants, or going away completely.</p>

<p>10.9 Mavericks, the first non cat release with a fancy California name, is the last release I have used for any extended period of time.  I find the Yosemite look and feel revolting.  I realize I can&#8217;t run Mavericks forever, as security updates eventually become &#8220;upgrade features&#8221; for OS vendors.  This leads me to the painful conclusion that Apple&#8217;s concepts of what an operating system should be is about as far removed as possible from mine.  Realistically, I have to choose to either ignore my instincts and just get used to OS X caring about as much for user preference as Gawker cares about privacy or hit the eject button.  Instead of fancy OS&#8217;s named after fancy California places with new, fancier California fonts, I&#8217;m done.</p>

<p>I plan on documenting how I do this in sequential posts because this will not be an overnight thing.  Wish me luck!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[I Made a Thing]]></title>
    <link href="https://greymeister.net/blog/2014/09/19/i-made-a-thing/"/>
    <updated>2014-09-19T19:52:00+00:00</updated>
    <id>https://greymeister.net/blog/2014/09/19/i-made-a-thing</id>
    <content type="html"><![CDATA[<p>One thing I&#8217;d never done before was a URL shortener.  Obviously there is no direct need for <a href="https://bitly.com/">another</a>
<a href="http://is.gd/">one</a> <a href="http://tinyurl.com/">of</a> <a href="https://goo.gl/">these</a>, but I thought I would add a bit
of a twist: I&#8217;d use <a href="http://en.wikipedia.org/wiki/Emoji">emoji</a> characters.  Already you should realize this has
no practical purpose whatsoever.</p>

<!-- more -->


<p>After Twitter has been infested by these little <i class='emoji smiley'></i> and <i class='emoji poop'></i> icons, I got interested in knowing more
about them.  As usual, <a href="https://www.youtube.com/watch?v=0ZEgluZJpBM">all the best stuff is from Japan</a>, but their use has
become abundant, especially on <a href="http://en.wikipedia.org/wiki/Confirmation_bias">social networks</a>.  If
you are on a modern version of OS X on  hardware, you already see them in every browser without an
extension or plugin, excluding <a href="https://www.google.com/chrome/">one really dumb exception</a>.  Why not
see if I can push the envelope a bit by now using them in URLs? <a href="http://xn--ls8h.la/">One awesome site</a> has already
made use of this as a domain name, using <a href="https://en.wikipedia.org/wiki/Punycode">punycode</a>.  That got
me started down the trail of what I&#8217;d need to make this a thing.</p>

<p>After doing <a href="https://stackoverflow.com/questions/742013/how-to-code-a-url-shortener">some</a>
<a href="https://stackoverflow.com/questions/9866665/unicode-characters-xn-ls8h">research</a> <a href="https://en.wikipedia.org/wiki/URL_shortening#Techniques">on</a>
URL shorteners, punycode, and emoji, I decided to throw together a simple site together to test the idea.
I decided, against my better judgement, to do the site with <a href="http://nodejs.org/">node.js</a>.  I don&#8217;t think
I need to rehash <a href="https://www.destroyallsoftware.com/talks/wat">why JavaScript sucks</a> as a language, so
I&#8217;ll just feign ignorance for the remainder of this article.  <a href="http://expressjs.com/">Express</a> is a
nice framework, much like <a href="https://github.com/go-martini/martini">martini</a> that lets me set up some
simple endpoints and serve static content easily.  There&#8217;s a nice <a href="https://github.com/heroku/node-js-sample">repo</a>
that let me get started.</p>

<p>The bulk of the work was getting the URL->emoji and emoji/punycode-> URL logic working.  I decided to do
the naive implementation of just using a monotonically increasing id as the key, and then some nice
<a href="https://web.archive.org/web/20160804040151/https://gist.github.com/epeli/1158171">CoffeeScript</a> for the encode/decode functions.  I had to of
course modify the alphabet that this was using, and instead of the a-zA-Z0-9 alphabet, I used the
<a href="http://www.unicode.org/Public/UNIDATA/EmojiSources.txt">emoji unicode characters</a>.  It was a matter
of taking the hex codes from the unicode characters from <a href="http://apps.timwhitlock.info/emoji/tables/unicode">here</a>,
putting them into the alphabet array, and then wrapping punycode encodes and decodes around getting the
values from the alphabet array.  Otherwise, the code is identical to the original source.</p>

<p>I needed a source for the previously mentioned integers for URL IDs, so it seemed that throwing
<a href="http://www.sqlite.org/">sqlite3</a> and <a href="http://sequelizejs.com/">Sequelize</a> into the app for
persistence was a quick solution.  Obviously this means I&#8217;d have to move to a full RDBMS should I
have to have multiple web servers, but honestly who would want to use an emoji URL shortener? <i class='emoji wink'></i></p>

<p>I put the (really bad) code on <a href="https://github.com/greymeister/emoji.xyz">GitHub</a> for the halibut.
The site is live at <a href="https://web.archive.org/web/20240424133609/https://emoji.xyz/">emoji.xyz</a>.  You&#8217;ll notice the link generated has the href
pointed at the punycode version of the URL, while the text shows the actual emoticon.  That&#8217;s mostly
because many applications expectedly do not handle the emoji character, and set the location to the
portion of the URL preceding the emoji character(s).  Feel free to use the
<a href="http://smilesoftware.com/TextExpander/index.html">Textexpander</a> as well, I created a gist for it
<a href="https://gist.github.com/greymeister/98c1895d94017b079280">here</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Migrating From Octopress to Squarespace]]></title>
    <link href="https://greymeister.net/blog/2014/05/28/migrating-from-octopress-to-squarespace/"/>
    <updated>2014-05-28T08:00:00+00:00</updated>
    <id>https://greymeister.net/blog/2014/05/28/migrating-from-octopress-to-squarespace</id>
    <content type="html"><![CDATA[<p>Unlike most other articles related to <a href="http://octopress.org/">Octopress</a> and <a href="http://www.squarespace.com/">Squarespace</a> I am actually moving <strong>to</strong> Squarespace <strong>from</strong> Octopress.</p>

<!-- more -->


<p>I came to know about Octopress right around the time <a href="http://www.marco.org/secondcrack">other people</a> were talking about why static blogs were a better option than a) running a full blown CMS for yourself and b) hosting your blog on a service.  I won&#8217;t go into the <a href="http://bit.ly/xticblogg">arguments</a> about whether that&#8217;s true or not, but I bought into it.  I used to run a <a href="https://drupal.org">Drupal</a> site for myself, and when I started spending more time on Drupal security patches than I added content, I switched to use <a href="https://www.blogger.com">Blogspot</a>.  That worked for awhile, and you can <a href="https://greymeister.net/blog/2011/12/01/why-i-left-blogspot-dot-com/">read why</a> I left that service.  I toyed with <a href="http://jekyllrb.com/">Jekyll</a>, <a href="https://github.com/gollum/gollum/wiki">gollum</a> and some others, but ended up using Octopress.</p>

<p>I loved just about everything Octopress offered.  It was really easy to generate my post, write some Markdown, and then deploy, all from the command line.  The content was stored in git, which meant I could edit my blog from pretty much anywhere I wanted to without worrying about losing content.  The default/only theme looked fine for my purposes, and with <a href="https://typekit.com/">Typekit</a> and <a href="https://www.google.com/fonts">Google Fonts</a> I could customize what I wanted to.  Everything was great right?  And then, <a href="https://youtu.be/MH619vxtNdo">one time</a>, I tried merging from the upstream branch to get changes they&#8217;d made to the Octopress core.</p>

<p> <img src="https://greymeister.net/images/Mark-Wahlberg-Confused-In-The-Happening.gif"/></p>

<p>So that didn&#8217;t go very well.  I decided I&#8217;d put it off for awhile since everything seemed like it was working, though I started to wonder if I was missing out on a cool new feature or some security issue.  I also started to <em>really</em> feel the burden of hosting my own server.  I was using a <a href="https://www.linode.com/?r=f70fe0fa70404e79dc979c42b1c3befa0eaf165f">Linode</a> server that was running a web service for my ill-fated iPhone app at the time, so having another virtual host was no big deal.  After all the TLS issues in the last couple of years, again like with Drupal, I felt like I was spending more time with security updates than I was actually making content.</p>

<p>So when I read <a href="http://octopress.org/2015/01/15/octopress-3.0-is-coming/">this post</a> about how Octopress was going to change, I knew <a href="https://images.greymeister.net/DtE1i.png">the day of reckoning</a> had arrived.  I either needed to wait to see what Octopress 3.0 was going to be about, or switch to an  alternative.  Then, I remembered Squarespace.</p>

<p>I created a a Squarespace page back in 2012 based on hearing about it on&#8230; well&#8230; every podcast ever.  I didn&#8217;t do much with it, but I re-opened my account this weekend and started the (somewhat painful) process of importing my blog Markdown files into Squarespace posts.  It seems like I am stuck using some ancient version without all the bells and whistles they advertise today, so I guess I have upgrading to that to look forward to.  In the meantime, I am fairly happy with the results and can safely shutdown my server and not worry (much) about security problems and software upgrades.</p>

<p>I do not regret using Octopress, I really liked using it and I think it&#8217;s been a great project for anyone that wanted a slick static blogging system.</p>

<p><img src="https://greymeister.net/images/octopress_logo.png"/></p>

<p>Now my only problem is figuring out what to write about&#8230;</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Is that Rutger Hauer?]]></title>
    <link href="https://greymeister.net/blog/2014/05/03/no-its-helmut-berger/"/>
    <updated>2014-05-03T21:42:00+00:00</updated>
    <id>https://greymeister.net/blog/2014/05/03/no-its-helmut-berger</id>
    <content type="html"><![CDATA[<p><img src="https://images.greymeister.net/no_thats_helmut_berger.jpg" title="No, That's Helmut Berger" alt="No, That's Helmut Berger"/></p>

<!-- more -->


<p><audio controls="controls" autoplay="autoplay" style="margin-left: auto; margin-right: auto;">
  <source src="https://images.greymeister.net/beast_with_a_gun.mp3" type="audio/mpeg"></source>
  Your browser does not support the audio element.
</audio></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Top 10 Most Played Games of 2013]]></title>
    <link href="https://greymeister.net/blog/2013/12/29/most-played-games-of-2013/"/>
    <updated>2013-12-29T21:22:00+00:00</updated>
    <id>https://greymeister.net/blog/2013/12/29/most-played-games-of-2013</id>
    <content type="html"><![CDATA[<p>I don&#8217;t necessarily play games right when they come out, so it doesn&#8217;t make much sense to make a &#8220;Top 10&#8221;
list considering only games that came out this year.  Instead, I thought I would make a list of the games I played the most this year.  This is a curated list of games I played this year by platform and overall enjoyment.</p>

<h3>10. <a href="http://www.jc-mp.com">Just Cause 2 Multiplayer Mod (Steam)</a></h3>

<p>This is some of the <a href="http://www.giantbomb.com/videos/unprofessional-fridays-12-13-2013/2300-8302/">craziest shit</a> I have ever seen in a game,  and all of it is awesome.  It was worth including on this list for craziness alone.</p>

<h3>9. <a href="http://dota2.com">DOTA 2</a></h3>

<p>I had to try this out after all the hype, and it really is an interesting strategy game.  The depth of this game is beyond anything I&#8217;ve ever seen in a strategy game, which is made all the more brilliant by its apparent simplicity.  I don&#8217;t think I&#8217;ll ever play again unless I end up on a deserted island with broadband and nothing else to do, because that is the only situation I can think of where I would actually have the time to put in and get better at this game.</p>

<h3>8. <a href="http://www.eveonline.com">Eve Online (Steam)</a></h3>

<p>I bought into the madness of this game after seeing the <a href="http://www.giantbomb.com/videos/giant-bomb-travelogue-iceland/2300-7330/">Giantbomb coverage</a> of their event in Iceland.  I was very happy that the Mac client was well supported and had a blast as I mined and traded my time away.  Sadly I realized that I just don&#8217;t have the time investment necessary to enjoy this game, so I ended up having to unplug from this one.</p>

<h3>7. <a href="http://www.saintsrow.com">Saints Row the Third (PS3/Steam)</a></h3>

<p>See my comments on SR2, this game went in a really different direction than its predecessors.  They really nailed the choices for music in the cinematic moments, and I wish I had the Adult Swim radio station in every other game now.  I still haven&#8217;t finished it, largely after switching over to PC when my PS3 started to feel very sluggish, but that just leaves room for fun with this in 2014, along with SR4.</p>

<h3>6. <a href="http://undeadlabs.com/about-state-of-decay/">State of Decay (Steam)</a></h3>

<p>Open world?  Check.</p>

<p>Zombies? Check.</p>

<p>Jankyness? <strong>Double Check</strong>.</p>

<p>I didn&#8217;t have any expectations when I bought this game on sale, but man has it been fun.  I haven&#8217;t finished the original game or tried the expansion, but I&#8217;m guessing I will be putting some hours into this game for 2014.</p>

<h3>5. <a href="http://harebrained-schemes.com/shadowrun/">Shadowrun Returns (Steam)</a></h3>

<p>The first <a href="http://www.kickstarter.com">Kickstarter</a> game that I backed and then bought.  Great memories of the older Shadowrun games and the Shadowrun RPG flooded back.  They actually got decking right with this one!  I beat the initial campaign and look forward to the upcoming German expansion next year.</p>

<h3>4. <a href="http://en.wikipedia.org/wiki/Saints_Row_2">Saints Row 2 (PS3)</a></h3>

<p>I got this when I purchased SR3 in a bundle on the PSN store, and I didn&#8217;t really expect it to hold up.  Strangely, <em>despite</em> having already played SR3, I really enjoyed this game.  It feels much more like a GTA game than the later SR titles, and has a pretty expanded character customization library that neither GTA or later SR games have come close to matching.  Really enjoyed playing through the campaign and I&#8217;m sad to see some of the great features they added with this title get left behind.</p>

<h3>3. <a href="http://www.rockstargames.com/V/">GTA V (360)</a></h3>

<p>I started this on a friend&#8217;s XBox and it was enough to convince me to buy it myself.  I wish I could have played this on PC, but after all signs pointed to a 2014 release date.  So I bought a new 360 after mine had been retired after a <a href="http://en.wikipedia.org/wiki/Xbox_360_technical_problems">Red Ring of Death</a> sustained nearly a day after its warranty had expired..  A fantastic soundtrack and very interesting character-switch mechanic made it stand out from the Saints Row franchise, which had gotten better than GTA in about every other way.</p>

<h3>2. <a href="https://kerbalspaceprogram.com">Kerbal Space Program (Steam)</a></h3>

<p>This game brought back fond memories of messing around with the <a href="http://orbit.medphys.ucl.ac.uk">Orbiter</a> simulator.  Except that KSP is way more fun at the cost of some realism.  I haven&#8217;t played this as often ever since I migrated to a PC from my Mac, but I plan on having many more (mis)adventures with this game/tool/simulator.</p>

<h3>1.  <a href="http://store.steampowered.com/app/211420/">Dark Souls (Steam)</a></h3>

<p>I bought this after seeing the videos on <a href="http://giantbomb.com">Giantbomb</a> and immediately got caught up in the
successor to <a href="https://web.archive.org/web/20130608061415/http://www.demons-souls.com/">Demon&#8217;s Souls</a>.  I only played a few hours of Demon&#8217;s Souls, but Dark Souls has consumed a lot of the last quarter of this year for me.  I think that most of the changes from Demon&#8217;s Souls were improvements, and love that it came out on Steam.  Looking forward to many more hours
of Dark Souls and whatever comes next with Dark Souls 2.  I&#8217;m also grateful From Software didn&#8217;t put a stupid apostrophe in a pluralized title for this game.</p>
]]></content>
  </entry>
  
</feed>
