New accessible theme for 2021

It’s been a long time since I updated the style of this website. In fact, the last time I sat down to work on the design was way back in 2012, when I picked Manifest as the base for my own CSS customizations. I loved the theme, as it was geared toward writers and writing, which I was doing considerably more of back then.

I like having a simple, minimalist site that puts the content first. In fact, the only real problem I had with using Manifest was the lack of a proper search bar at the top of each page. I have posts going back some twelve years on here, and even I rely on the search when referencing old material. My only option with Manifest was burying a search bar in the footer, which wasn’t ideal.

However, other problems have cropped up over the years. As upgraded their infrastructure, I was constantly at the mercy of subtle changes that required further custom CSS to keep the site looking the way I wanted. Eventually the theme was “retired” altogether – I could still use it but without any support or guarantees from WordPress.

Before you say, “You’re on, why not switch to self-hosted, or something else” – I ran self-hosted WordPress for years. I was a nut for making tons of customizations directly in the code to get exactly what I wanted, and was fine being completely responsible for the maintenance of the site. But I found myself spending more time on the design and maintenance of the site than actually adding any new content to it.

I moved to specifically so I could pay someone else to keep the site up-to-date and running, while I got away with a little personalization here and there. I’d rather spend my time focusing on writing posts.

So, despite having to tweak the CSS every year or so, I’ve been mostly happy with the setup. But as the web has moved to be more mobile friendly, I found a new problem: the old base theme just doesn’t have a mobile version. This has left the site with a functional, but completely plain, default Google AMP site on mobile. I don’t have any explicit issues with it (I love the built-in search at the top), but it felt impersonal for a personal site.

Then recently, I was trying to browse the site on some vintage hardware with older browsers and I wasn’t really happy with the results. For such a simple looking site, there was obviously more complexity in the underlying HTML and JS than I’d imagined. I thought maybe it was time to switch to something simpler, and by chance discovered that maintains a list of Accessibility Ready themes. Having an accessible website, especially an accessible mobile site, goes a long way toward making your site simpler and easier to use for everyone. Also, some of the most rewarding work I do in my career is in making software more accessible.

As a quick test I ran my site through a web accessibility tester and oof, I was not happy with the results. So I decided to finally sit down and update the site after almost nine years.

My number one goal was accessibility, but my stylistic preferences were still for a single-column layout with a simple menu and search bar at the top. If possible, a bonus would be built-in support for nice social icons. While none of the accessible themes were “perfect”, after a lot of experimenting and testing, I finally chose Floral. All it took was a font change and some minor color adjustments in CSS to make it into something my own.

I’ve also gone through and cleaned up all the pages to mesh better with the new theme. Not a lot of work, and I’m sure I’ll find little tweaks that need to be made here and there in the next few weeks, but overall I’m happy with the result. The site still looks pretty clean and minimalistic, but now more accessible and with some much needed mobile support.

What do you think?


What I use in 2012, Part 2: Software

I like to see how people work; especially for those whose work is mostly on the computer. In part 1 of this series, I listed all of the tech hardware I use at home; now I’ll list all of the software I use on a regular basis.

Note: I don’t endorse anything here beyond the implicit “this is what I actually use at home.”

The Basics

OS: Ubuntu w/ Gnome Shell

I played with Linux as far back as high-school, but despite multiple partitions and many early distributions, I always came back to Windows. In college I realized that if I was serious about learning Linux, I needed to use it exclusively. I liked Debian, but it was always just a bit out of date, and I hated that it installed a lot of redundant stuff (ten text editors, five desktop environments, etc).

Then I found Ubuntu.

I started with Ubuntu 5.10 “Breezy Badger” and Gnome with it; and despite some early dalliances with Ubuntu’s many derivations, I’ve been an Ubuntu user ever since. I was skeptical of the trends post-Gnome 2; Unity was slow, customization-poor and untested, while Gnome 3 was taking a risky move away from the Windows-clone icons, desktop and taskbar. I loved the abandoned pre-Unity “netbook launcher”, so I understood that a new UI paradigm might not be a bad thing- so I buckled down and tested both Unity and Gnome 3 extensively to see what fit.

I fell in love with Gnome 3 and the Gnome Shell. It lets me manage all of my personal work effortlessly, all from one laptop screen. Multiple virtual desktops, with previews exposed by the Super key, along with search and a preview of my open apps. I prefer it over every desktop UI that I’ve ever used. (Sounds like something worthy of discussing in its own post).

Browser: Firefox

I have jumped around from browser to browser over the years. In the early days I evangelized about Opera– but then everyone copied their feature set, and opened themselves in ways that Opera just couldn’t keep up with. I lived in the extension-heavy hell of Firefox for years, then leaned down with a focus on bookmarklets, then jumped to Chrome as the hot new thing.

I switched back to Firefox at the beginning of the year, wondering how far they’d come since I jumped to Chrome. I was very impressed. I have very few extensions; five in fact, and I sync all of my computers with the same settings. It’s not a memory hog anymore, and as far as I can tell, it’s no slower than Chrome. Chrome is extensible too- but Firefox has just the right set of tweaks that I want.

Productivity: LibreOffice

I started with even before I switched to Linux full-time; who didn’t want a free office suite with MS-compatibility and PDF export? I’m a big supporter of open formats, and OOo gave us the Open Document standard. One of my most popular software projects is my weight-tracking Open Document Spreadsheet, Weight Tracker ODS. When the majority of the development group moved to LibreOffice, I went with them. I use it for all of my regular Office needs.

Productivity: Microsoft Office Web Apps

I prefer open-source but I’m not evangelical; all I care is that I have the tools I need to get my work done. I use Microsoft Office often enough when I’m on Windows machines, but with the exception of OneNote (don’t get me started on how much I love OneNote for note organizing) there’s nothing about Office that really enables me beyond what LibreOffice offers.

However I have come to be blown away by the Microsoft Office Web Apps. I keep a few documents saved to SkyDrive (namely a couple OneNote notebooks), and it amazes me how much I can do with them in a browser. Plus I can access those docs on my phone. (Sounds like I need to write a post about how awesome OneNote can be).

Email: Gmail

I’ve used Gmail since college, primarily though the web interface, though occasionally I’ve used IMAP clients. I love its features, I love its hacks, and I couldn’t live without its spam filter. It maybe misses one or two emails a year- and I put my email address up everywhere, without obfuscation.

Chat: Google Talk

I don’t IM as much as I used to, but these days when I do, it’s on Google Talk. I think Jabber is a pretty sweet protocol- and having a Google account nabs this for free. I’ve also found that it has the absolute best AV stack I’ve ever used; it sacrifices clarity for faster frame-rates, which in real-life, low-bandwidth conversations, is a much better trade-off. I don’t need to see every pore to read someone’s facial expression: a smooth frame-rate without skipping or audio hiccups means I can follow all of the non-verbal communication and everything feels much more natural, even if it’s out of focus.

File Sync: Dropbox

I use Dropbox for syncing a select few files that I want on every machine, like my encrypted password database, or when I’m lazy for a quick transfer. I don’t trust them for anything else, as they don’t encrypt user’s files well enough. (They save space by not duplicating files that multiple people have, which they know because they keep a copy of the keys so they can decrypt your files.)

Password Management: KeePass

I’ve been using a password manager for a decade, and I use KeePass because it works well and has clients on a ton of platforms.

RSS: Google Reader

I read a lot of things via RSS, and I’ve used Google Reader for years. The web client is great on the PC, and pretty much every mobile ecosystem has a compatible client, so I don’t have to keep track of multiple subscription lists.

Finances: GnuCash

I have OCD when it comes to balancing my checkbook, and for years now have been using the free GnuCash to do so.

Social: HootSuite

I’m on Twitter and Facebook, and believe me, I’ve tried every possible app on every platform I have access to. Right now I live inside HootSuite. It lets me see only the columns I want, and most useful, it lets me space out my posts with AutoSchedule so I don’t flood my followers every time I hop on Google Reader and start sharing links.



Management: Calibre

Calibre is an amazing piece of software. It works with practically every e-reading device, lets you format back and forth between formats, pull down metadata, create new ebooks; the list goes on and on. I keep it running almost all the time, because then I can browse my library remotely with my phone, and pick and choose what books to download when I want to read them.

Really, once you have Calibre, you don’t need any other ebook software on your PC.

Store: Smashwords

I prefer to buy my books on Smashwords whenever possible. You can’t beat DRM-free with access to every format. It’s why I chose to sell my own ebooks through them too.

Store: Kobo Books

When I need to buy more “mainstream” books, I typically find them on Kobo for the same price as everyone else, but with the “benefit” that their DRM (though DRM is always a middle finger to paying customers) is the standard “every device can read it and it’s really easy to make go away” Adobe DRM. Nothing fancy.


Playback: VLC

VLC has handled every media file I’ve thrown at it for a decade. No extra codecs to install, no hoops to jump through- it just works. If you’re new to computers, and the web, you have no idea what it means to have a video player that can, you know, actually play video files. It was the wild west a decade ago.

Encoding: Handbrake

I rip digital backups of my legally-owned DVDs for easy searching and playback on all of my devices, including my Xbox 360. Handbrake enables me to do that perfectly.

Streaming: uShare

I keep all of my video files on my Ubuntu-based home server, and with uShare, I can play those videos on my Xbox 360. It’s wonderful.


Playback: Rhythmbox

Though my music lives on my home server, I do keep a full copy local to my laptop so that I can disconnect and still listen to my music. I’ve used Rhythmbox for years and love it for organizing and playing my music.

Encoding: abcde & lame

Yes, I’m one of those few guys that still buys CDs. And when I do, the very first thing I do is rip them to my hard drive and throw the disc into a box in the closet for safe-keeping. I use abcde because it’s set to the lame settings I like, and it’s one command from CD to MP3s.

Tags: EasyTAG

Everyone has their own rules about MP3 tags, even if the rule is “don’t care as long as they play and I know what they are”. I’m very meticulous about my collection (read: OCD), and EasyTAG rocks for getting those unruly music files under control.

Streaming: Subsonic

Subsonic runs on my home server, and the free version provides a web interface that lets me to browse and stream my music, create playlists, from any computer with a browser. Even from multiple computers at the same time, and with auto-transcoding for different file types and for different machines (if say you want to minimize bandwidth at work).

There are even a bunch of native clients on different platforms to let me access my Subsonic server, and even video support via flash (ala YouTube) if you pay for it. Sometimes, a paid program just really is worth it, and I’ve never regretted the purchase. I’ve tried all the open-source alternatives, but none come close.

Store: Amazon MP3

When I do buy digital music, I buy MP3, and I buy from Amazon. No special client, just give me my files. Like I said above, I usually buy CDs, but every now and then I see an album I’m on the fence about, and the MP3s are usually cheaper. It’s been a slow acclimation for me to buy digital files without the backup of a physical item, but Amazon does a good job.

Software Development

IDE: MonoDevelop

Working in the software industry means I have to use a certain set of technology for my job, and a certain list of programming languages. I also program way more at work than I do at home, so those languages tend to take precedence for me to know. And for a while now, the language to know has been C#.

Don’t get me wrong, I’m not complaining- in fact I love C# and the .Net stack. It just doesn’t seem very Linux.

The real problem is, despite all of its power tools, especially for developers, I have never been happy with any of the IDEs for developing in any language in Linux. It seems either you use some variant of Eclipse (which I hate), or a text editor plus a bunch of command-line tools.

Then they made MonoDevelop… and it is just glorious.

I live in Visual Studio at work, and in MonoDevelop I feel right at home. It makes compatible binaries, uses compatible project files, has Intellisense and nUnit and a real debugger- it’s basically everything I need in one place with nothing I don’t. It makes cross-platform development fun and not a game of “find the tool”.

Text Editor: Gedit

When I’m in the GUI and I need a quick edit, I use Gedit. It’s got just enough spunk for what I need.

Text Editor: Vim

When I’m working in the command-line, I use Vim to edit text files. Emacs users… to each his own.

Source Control: Bazaar

I plan on writing more in the future about Bazaar, but essentially it’s a cross-platform VCS that works in any workflow configuration, or several all at once. I use it for my little projects on my machine, then when I want it on my own server repository, and then again when I want to show off to the world on Launchpad. And every time all I have to do is copy the repository over, then pull down a new branch, a checkout branch, whatever makes the most sense for the project.


Note: I plan on writing about the open-source software I use for writing in greater detail at a later date.

Writing: FocusWriter

Once a year when I sit down to write a new manuscript, I send the developer of FocusWriter a donation. It’s customized to look exactly how I need it to, with progress bars and word sprints and timers and statistics- all of which melt away when I actually write, giving me a distraction free zone to get the words down.

Editing: Geany

Geany is technically an text-editor / lightweight IDE, but I can’t use it for that anymore, cause I’ve customized it so much to support my writing. I may spend a month in FocusWriter to get that first draft, but the next year is in Geany making it shine.

Notes: Zim

I mentioned OneNote above for note organizing, and while it’s true I do use it for some initial story brainstorming, any big writing project eventually makes its way into Zim. It’s cross-platform, uses plain text files, and even uses Bazaar for version control. Right now the entirety of my Guineawick Tales notes and plans are in one giant Zim wiki. I find it indispensable for keeping track of everything.

Web Services


I started using WordPress in the early days of blogging, installed by myself on hosting I paid for while I was in school. I’ve been in and out of its code, and customized the hell out of it for previous websites. Nowadays, I let handle all of the dirty work, pay for enough customization to make my site pretty, and let them take care of the rest. Which they do really, really, well.

Domain Registrar: Namecheap

I’ve been buying domains from Namecheap for years. They’re not always the absolute cheapest, but their dashboard gives me everything I want, with no funny business.


OS: Windows Phone 7.5

It surprised me that Windows Phone 7 really lived up to its “you don’t need apps, everything is built-in” mantra. In fact I have very few apps on my phone, nowhere as many as I did on Android or webOS. Email, Facebook, Twitter, photos, music, video, whatever- the base OS does pretty much every single thing I need it do, with just a couple of exceptions, which I list next.

Ebooks: Freda+

Freda is the new standard by which I hold all mobile ebook reader apps. It’s silky smooth to use, customized just how I like it, and lets me grab books over the net from my laptop running Calibre. I’ve read a dozen books on it this year, and I love it.

RSS: Nextgen Reader

I need my RSS fix, and Nextgen Reader gives it to me on the go. It syncs with my Google Reader account, so I don’t have separate lists of (un)read content to maintain. Fast and easy to use.

Twitter: Twitter

I’ve tried every single Twitter client on the Windows Phone platform, paid and free, and every single one was either slow, bloated, had a funky UI, or was way too power-user for what I need. I’m not a social media maven, I just want all of the Twitter functionality in a fast client that looks good. Surprisingly, the official Twitter client works really well for my needs.

Everything Else

Most pieces of software are specialized tools (especially in the Linux world), the use of which depends on the kind of work you do regularly. I could write a post ten times as long with every piece of software I’ve used at one point or another for specific, one-time tasks, but that would be tiresome and probably a waste of time. (Of course, who knows if anyone even read this far).

“Too Long, Didn’t Read” Summary

I run Ubuntu at home, and I prefer to use open-source, cross-platform software whenever I can. I don’t like paying for software or services unless the value they provide clearly outstrips any free or roll-your-own alternatives. I avoid vendor lock-in like a plague, preferring file formats that I can crack if the software stops working.

And just like in part 1, remember: this is just what I use at home, not necessarily what I use in my job at Microsoft.


P.S. So what do you use at home? Leave a comment below!

Retrieve your blog posts from a WordPress eXtended Rss file with WXR to HTML

If you’ve ever migrated or retired a WordPress blog, you’re probably familiar with WordPress eXtended Rss files. There’s a thorough summary here, but basically a WXR file is a copy of all of the textual content on your site: pages, blog posts, and comments. You can use them to migrate that content from blog to blog, or just to archive it for your own backups.

The problem is, there’s not much you can do with the file other than import it back into WordPress or another blogging system. But what if you just want to read the content? What if it’s been years since that blog was live, and you just want to rescue a favorite post?

The file is XML, so it is technically human-readable, but there’s a lot of ugly markup to sift through as well. Not fun. You could import the file back into a WordPress install, but that seems a tad overkill.

I’ve been hit with this exact problem myself. I have the WXR files of two old WordPress sites, with years of content dating back to the early days of blogging. I’d like to do something with that content.

Though WXR files may be a pain for us to read, as XML it’s a breeze for software to parse. With that in mind, I wrote WXR to HMTL. It’s a short and sweet python script for converting a WXR file into a plain, easy to read HTML file.

Note, the goal is not to recreate the original sites in all their former glory. I don’t even care about comments all that much; I just want the blog posts in a form that I can read, search, and copy/paste from. Also it’s not really possible to rebuild the site; WXR files only contain the raw text: no images, no style, and no layout information. Those limitations in mind, here’s the script:

#!/usr/bin/env python

WXR to HMTL <>

Copyright 2012 Jon Thysell <>

This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

import sys
import codecs
import string
from lxml import etree

_header_html = """
<p><em>Exported from <a href="%s">%s</a> %s</em></p>

_footer_html = """
<p><em>HTML generated by WXR to HTML &lt;<a href=""></a>&gt;</em></p>

_item_html = u"""
<h2><a href="%s">%s</a></h2>
<p>Published: %s</p>

_title = ""
_link = ""
_desc = ""
_pubdate = ""
_items = []

# This controls whether to add in paragraph tags. Most likely you want this on. Only change this to False if for some reason your posts are already valid HMTL.
_autop = True

def autop(s):
    s = string.replace(s, "\r\n", "\n")
    s = string.replace(s, "\n\n", "</p><p>")
    s = string.replace(s, "\n", "<br \>")
    return s

def main(input_file):
    """Take an WXR XML file and export an HMTL file."""
    global _title, _link, _desc, _pubdate, _items, _autop
    print "Reading from %s" % input_file
    with, 'r') as wxr_file:
        tree = etree.parse(wxr_file)
        _title = tree.xpath('/rss/channel/title')[0].text
        _link = tree.xpath('/rss/channel/link')[0].text
        _desc = tree.xpath('/rss/channel/description')[0].text
        _pubdate = tree.xpath('/rss/channel/pubDate')[0].text
        xml_items = tree.xpath('/rss/channel/item')
        for xml_item in xml_items:
            t = xml_item.xpath('title')[0].text
            l = xml_item.xpath('link')[0].text
            p = xml_item.xpath('pubDate')[0].text
            c = xml_item.xpath('content:encoded', namespaces={'content': ''})[0].text
            if _autop:
                c = autop(c)
            _items.append((l, t, p, c))

    output_file = input_file[:-3] + "html"
    print "Writing to %s" % output_file
    with, encoding='utf-8', mode='w') as html_file:
        p = (_title, _title, _desc, _link, _link, _pubdate)
        html_file.write(_header_html % p)
        for _item in _items:
            html_file.write(_item_html % _item)

if __name__ == "__main__":

To run this, you’ll need Python and the lxml module installed. The script takes one parameter, the WXR file, and exports a single HTML file with all of your posts and pages, including titles, original links, and timestamps. It will not export your comments, tags, categories, etc. If you need that, feel free to tweak the script.

Now finally I can delve into my own personal back-catalog. It’s rather exciting to look at my posts from so long ago.

Do you find this script useful? Say so in the comments!


Another day, another domain and fresh new design!

It’s been literally years since I’ve (re)designed a website. It was my primary creative hobby for nearly a decade, one that I set aside in recent years as I focused on other creative endeavors. Now, at long last, I’ve donned the mantle of CSS once again and given this site a much-needed refresh.

First and foremost, I finally bought and have directed it here as this site’s primary domain. Though to keep external urls working I’ll keep redirected here for as long as I can.

Second, I’ve upgraded my hosting here with WordPress to give me more reign over the site’s design, which I’ve customized throughly over the weekend. Wow, it feels good to flex that CSS muscle again.

Finally I’ve started updating the top-level pages with up-to-date content, including removing my resume as these days it only entices recruiter trolling. Not like I’m not leaving Microsoft any time soon.

There’ll always be a few niggling things I need to fix (I still don’t know what if anything I want to put in the site’s footer), so the site’s not 100% complete (it never is), but I’m happy with the changes overall.

I hope you like it too.