How to Delete Ruby Gems, Part II


Back in June I wrote about how to delete Ruby gems and presented a solution that involved a short script. Recently I went through another round of cleaning up Gems and discovered and even shorter method for deleting them.

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done

This will ignore all default Gems errors. Simple and direct.

The flags specified with the gem uninstall, -aIx mean the command will remove all matching versions (-a), will ignore dependency requirements (-I), and will remove executables without needing confirmation (-x). You can read more about gem uninsall on the RubyGems Guide.


Unix Shell's Humble If ⧁


One of the best explanations of shell’s if statement.


Amazon PrimeAir ⧁


Holy crap.

It looks like science fiction, but it’s real.


Half an Operating System ⧁


The first operating system I installed on my first PC-style computer was OS/2 2.1. The company I worked for at the time was using OS/2 with a case tool called ADW, so I was familar with it and wanted to use it at home too. Eventaully it became too cumbersome to continue using and I switched to Windows for Workgroups (3.11). I knew some of the details in this article but not all. It’s a fascinating look at the early days of personal computing.


What is Reddit? ⧁


CGP Grey is wonderful at explaining things. This is as good an explanation of Reddit as you are likely to find.


Laurie Anderson's Farewell to Lou Reed ⧁


Poignant. Beautiful.

For 21 years we tangled our minds and hearts together.


Preparing for Git 2.0


After a recent update to Git I started getting the following message when doing a git push.

warning: push.default is unset; its implicit value is changing in 
Git 2.0 from 'matching' to 'simple'. To squelch this message 
and maintain the current behavior after the default changes, use: 

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use: 

  git config --global push.default simple

The push.default setting controls what happens when you do a git push without specifying a branch. When push.default is set to matching all local branches are pushed to their matching remote pairs.

The new default, simple, means that when you do a git push without specifying a branch, only your current branch will be pushed to the one git pull would normally get your code from.

As the message explains you can configure this setting in your .gitconfig file by using one of the two lines below.

git config --global push.default matching

or

git config --global push.default simple

I’ve gone ahead and set my push.default to be simple.


Hostnames ⧁


A wonderful resource to get you started with hostnames. For a time I used locations from “The Lord of the Rings” books. I once worked at a place that used rivers (test machines) and planets (production machines). I think you could make good use of the periodic table of elements too. Maybe use the atomic weight as the final part of the IP address.


Million Lines of Code ⧁


I know I’m late to this party, but the apparent size of the healthcare.gov site is astounding.


How to Build an RSS Feed for Jekyll


An RSS feed is nothing more than an XML document following a known format. Adding one to a Jekyll site is relatively easy and straight forward. As with all changes to your site’s structure it’s best to use your version control system to create a branch in case something goes horribly wrong.

Start by creating a new file at the root of your website. It should be a peer to your index.html file. Since the previous version of my site called the feed atom.xml that’s what I called it for the Jekyll version. The XML file has some meta information about the feed and then a loop which creates entries.

{% raw %}
---
layout: nil
---
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title type="text" xml:lang="en">{% site.rss_desc %}</title>
  <link type="application/atom+xml" href="https://zanshin.net/feed/" rel="self" />
  <link type="text" href="https://zanshin.net" rel="alternate" />
  <updated>{% site.time | date_to_xmlschema %}</updated>
  <id>https://zanshin.net</id>
  <author>
    <name>Mark H. Nichols</name>
  </author>
  <rights>Copyright (c) 1996-2013, Mark H. Nichols; all rights reserved.</rights>

  {% for post in site.posts limit:20 %}
  <entry>
    <title>{% post.title %}</title>
    <link href="https://zanshin.net{% post.url %}" />
    <updated>{% post.date | date_to_xmlschema %}</updated>
    <id>https://zanshin.net{% post.id %}</id>
    <content type="html">{% post.content | xml_escape %}{% include rss_footer.html %}</content>
  </entry>
  {% endfor %}
</feed>
{% endraw %}

You of course will need to change the site references to match your site, along with the author information.

Within the for loop that builds the individual entries this line is worth extra attention.

{% raw %}
    <content type="html">{% post.content | xml_escape %}{% include rss_footer.html %}</content>
{% endraw %}

All content must be escaped for XML. Here the post.content passes through a Liquid filter that properly escapes angle brackets and quotes for XML. I’ve added a footer that appears only in my RSS feed. Since this does not pass through the xml_escape Liquid Filter like post.content does, I had to make sure that it was properly escaped. The rss_footer.html files is in my _includes directory.

{% raw %}
&lt;hr /&gt;
  &lt;p&gt;
    You should follow &lt;a href=&quot;http://twitter.com/zanshin&quot; title=&quot;Follow me on Twitter&quot;&gt;me on Twitter&lt;/a&gt; and on &lt;a href=&quot;http://alpha.app.net/zanshin&quot; title=&quot;Follow me on App.net&quot;&gt;App.net&lt;/a&gt;. You should also subscribe to &lt;a href=&quot;http://twitter.com/zanshinnet&quot; title=&quot;@ZanshinNet on Twitter&quot;&gt;@ZanshinNet&lt;/a&gt; on Twitter for site updates.
  &lt;/p&gt;
{% endraw %}

It looks ugly but it works.

With the atom.xml file in place (and the rss_footer.html file too, if you are using one) simply regenerate your site and the feed will be created.