Moving Away Moving Toward

In 2016, elementary moved to a Medium publication to host our official blog. At the time, Medium was touted as a simple, clean, and reader-focused host for writers. They supported custom domains, a robust API, RSS, rich formatting, and great image embedding. We had been largely happy with the experience—as were our readers—but something changed in 2017.

(Via Welcome to the New Blog ⋅ elementary Blog)
I like elementaryOS. Yet this is not a post about it. Nor is this yet another post about the problems with Medium.
I’m still considering moving from my self-hosted WordPress on DreamHost to a static site on This elementaryOS post documents my own thoughts on this potential migration.


The post talks to several key points I like:

  • Fast. Since it’s a static site, there’s no waiting around for pages to load and render on a server. They’re served as-is directly off a fast, global CDN.
  • Total control. Since we are writing the entirety of the HTML, CSS, and JS, it means we can decide exactly what the blog is, looks like, etc.
  • Privacy-first. Because we have total control and are leaning on the static nature of Jekyll, it means we can be fanatical about privacy: no external JavaScript, no analytics, no social tracking scripts, etc. Just what matters: the content.

Where I diverge is not relying on GitHub. i have two reasons:

  1. It’s yet another corporate cloud provider owned by Microsoft; and
  2. I don’t use GitHub all that much for reasons that have nothing to do with 1. has Jekyll support. I like SDF’s model and they’ve been around for over 30 years.
More advantages:

Modern Features
Just because it’s a simple static blog doesn’t mean we don’t support all the modern features you’d expect:

  • RSS feed for all the subscribing and cross-posting you could desire.
  • Completely responsive design from the start.
  • Great typography for long-form reading with sane line-lengths, pull quotes, etc. […]
  • Rich image embedding with side-by-side layouts, zooming in, and full-bleed support.
  • Sharing to social media without the privacy-invasiveness that usually comes with it.

I’m also following their lead by avoiding a on-site comment system. Instead I will rely on ActivityPub. If I want to see how my posts do, because:

… [I] get enough sense of “engagement” via social media and press coverage to know what [my] users and readers find interesting. And since [my] goal for the blog is to spread genuinely useful information …
[I’m] not incentivized to tailor […] content to what gets the most clicks or attracts the “right kind” of readers. 

No Tracking, Remote JS, External CSS, or AMP

Here is one of my key tenants:

… avoid as many forms of tracking as possible. This sounds easy, but it turns out that modern web development practices heavily push you towards including external scripts, tags, etc. for simple functionality … 

Because this drives me crazy:

We’ve also found that a clean, tailored blog doesn’t actually need any JavaScript to function (a near-blasphemous concept on the modern web!), and any tiny amounts of progressively-enhancing JS we may want can be included on the page where needed. For CSS, we use Sass to make it easier to write (and more organized across multiple component files), then the preprocessor compiles it all into one minified file.

In addition to the above, I love their statement around Google’s largely unnecessary AMP technology:

We feel that AMP is perhaps an acceptable technology that may solve problems for large, slow sites, but Google is unacceptably pushing it on all websites—and unfairly deprioritizing sites that don’t adopt their technology. Instead, we believe in web standards and the open web, and will continue to publish stories on a crazy-fast performing static blog without resorting to non-standard technologies.

Final Thoughts on WordPress and DreamHost

I have no ill will for either company (Automattic in the case of WordPress). I’m finding I’m spending too much time fixing and tuning compared to writing. Both are solid choices for a self-hosted on a trusted platform solution.
Stay tuned!

Service Restoration

For those tormented by the outages of this site and PVC Security, they are restored.
When we’re out of commission, please check:

UPDATE: Both sites are destined for a new location. Stay tuned, but if Paul does it right you won’t know.
UPDATE2: Paul won’t fix it right the first time so you, Dear Friend, will provide your own resilience. Keep the above links in your read-it-later or browser bookmarking solution of choice.

Sadly my hosting provider upgraded my WordPress to version 5 today. Classic Editor to the partial and temporary rescue. Still vulnerable to the bug filled new editor’s security problems.

Playing with Gutenberg

The WordPress folks decided a new post editing metaphor, one copied from many other services, is the future of WordPress. It’s called Gutenberg with no sense of irony or semblance of modesty.
I am playing with Gutenberg in case I might like it or find value in it.
At face value, there’s an audience for Gutenberg that is not me. It takes the pieces of Medium with which I disliked interacting and used them to replace the fine tuned control of my content in WordPress’ admittedly 90’s era editing interface.
My content is not toy blocks.
WordPress’ marketing on this move is markedly tone deaf. There is nothing from Matt & the team that actually explains what problem they endeavor to solve with the change.
The thing is, the current editing metaphor is easy to understand. It’s not sexy. It works. There is room for improvement, especially in removing formatting. For example, I have on particular iOS integration that makes quoting content look terrible. I have to manually edit the HTML to clear it out. Posting tight, clean HTML (and CSS and …) should be goal #1 assuming content is king.
Anyway, please stay tuned to what happens here. I am running the test for a spell.

Some PVC Security maintenance

Dear Friends,
Our dearly departed podcast project is drifting into the dark recesses of the collective mind, so the time arrives for some archiving.
The pvcsec twitter account is disabled & on its way to deletion. I will be going through to make sure all of our other social media bits are similarly retired – Facebook, Google+, and so on.
I am not sure if the web site will move over here as a subsection or if I will let the Internet Archive have its way with it. I’m also considering a plain text archive on gopher, but that might be more work than I want.
Anyway, this will be thought about and done over the next 2 to 4 weeks or so. Stay tuned?

Plain text life, including gopher

With a bit of python, lynx, and tidy I was able to pull very clean plain text versions of my WordPress posts. The sparse HTML can be found at and the markdown text version can be found on my gopher site at gopher://
How did I do it? This site has full text RSS for everyone’s enjoyment. No one has to actually visit in order to consume the high value content I generate. The feed contains everything needed for this plain text life. How to make use of it?
I fumbled through my first in a long time python script relying heavily on the very powerful feedparser module.
This Just In: python’s documentation is terse almost to the point of incomprehension While accurate, the documentation does not help beginning (and maybe middling) python coders get to solving problems. Oddly, the Reddits and StackExchange sites are also of limited utility as the answers there often point back to or copy the documentation.
Anyway, taking a very Unix approach I decided not to do everything in python. I know tidy for making valid HTML. I know lynx for terminal-based web browsing, and the ‘-dump’ option produces markdown versions of web pages.
Once I got the script to the point of providing the website data in a reliable and eventually parse-able way, then I turned to getting all my posts.
I cranked the RSS feed of up to 20,000 to make sure the feed briefly included all of my posts. I moved my parsing script to my MacBook Pro because I didn’t want to choke the servers with my madness. I installed modules and localized the script to run on the MBP.
I ran the script. I checked my email. I then got up to … hmmm. The script finished in under two minutes. Suddenly I had all of my posts back to 2011 in both very clean HTML and in plain text. I synced them to their proper home. I reset my website feed back to a more reasonable number.
There are any number of improvements I can make:

  • My script does not grab images
  • I capture categories and tags from WordPress but don’t do anything useful with them
  • I need to include modifying my gophermap and my index.html (as appropriate)
  • A full text RSS feed of the plain HTML site
  • A full text RSS feed of the gopher site
  • Maybe use a static web site generator like Jekyll for the plain HTML site
  • Maybe use this for and If so, then I need to handle …
  • Media enclosures

Watch this space for the link to my script on GitHub. Which is here!

Anti-Social Site

I want to start by clearly stating that I am not “rage quitting” my social media. I am reducing my footprint and reliance on them. To that end …
I removed the share buttons for social media from my site. I do not like how they call home even if you chose not to share my post. It’s rude. And the buttons row on my posts is ugly. I might reverse my decision at any point.
I removed the automatic post sharing on social media. Blasting my posts across the Social Media with no tailoring is inconsiderate at best. While all my written gems are exactly that, it is not my place – after this post – to demand your attention on every utterance. I might reverse my decision at any point.
How will I follow your crazy shenanigans“, you ask?
The best way to track my site is to subscribe to the full text RSS feed.If you’re not interested in every one of my whims, each category has its own RSS feed as well. If you’re my parents and siblings, your email updates will not change.
If you, Dear Reader, would like an email newsletter of some kind, please leave a comment on this post to let me know.
Another note for the more technically interested in website hosting, I am playing with removing CloudFlare from my site. I experienced odd behaviors I thought my CDN caused. Turns out that my site was no longer redirecting to the HTTPS page, maybe due to the service.
In other news, all requests are once again going to the HTTPS version of my site. I don’t know when, why, or how my old .htaccess file changed, but it is again serving up the correct version of my site.
If you have questions, comments, or concerns, please leave a comment on this post.

Troubleshooting Emacs Org2blog

Go here: When posting I get ‘Lisp error: (wrong-type-argument listp t)’ #216 for the history on this issue.
For fun, here are some Unicode characters: ” ‘ & 🗾 😄
Here is my current slim emacs config to get org2blog working:

(setq load-prefer-newer t)
(add-to-list 'package-archives
             '("gnu" . ""))
(add-to-list 'package-archives
             '("melpa" . "") t)
  (unless (package-installed-p 'package+)
    (package-install 'package+))
(add-to-list 'load-path "~/src/org-mode/lisp")
(add-to-list 'load-path "~/src/metaweblog")
(add-to-list 'load-path "~/src/org2blog")
(add-to-list 'load-path "~/src/xml-rpc-el")
(add-to-list 'load-path "~/src/pretty-mode")
(add-to-list 'load-path "~/src/use-package")
(require 'org)
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-cb" 'org-iswitchb)
(require 'xml-rpc)
(require 'metaweblog)
(require 'org2blog-autoloads)
(require 'auth-source)
 auth-sources '(
 epa-file-cache-passphrase-for-symmetric-encryption t
 auth-source-debug 'trivia
    :url ""
    :username ,(car (auth-source-user-and-password ""))
    :password ,(cadr (auth-source-user-and-password ""))
    :default-title "Hello, World!"
    :default-categories ("Uncategorized" "org2blog")
(require 'use-package)
(use-package htmlize
             :ensure t)

I created local git clones for xml-rpc-el, org-mode, org2blog, metaweblog, pretty-mode, and use-package.
This is done in order to post a draft of this blog. Then I will publish it.
Wish me good times!

Extra Medium

While works for many it does not work for me. My several month test of the platform left me less than impressed.
While it is nice when someone else takes care of the plumbing, I am not comfortable with the exchange.
Thus I bring my musings and ditherings and blatherings and occasional cogent insights back to my personal site.
Share and Enjoy!