November 8, 2019

Configure a Raspberry Pi as a print server for Dymo label printers

This seemed like an odd article to post after nearly 11 months of blog inactivity, but it’s a problem I had to solve on my own today and felt it necessary to write this. Other Internet-based sources I consulted ended up only being partially correct so this is ultimately a combination of all the correct pieces of information that exist online.

I’m going to assume you have a Raspberry Pi (I’m using the Pi 3B+) already set up and connected to your network.


  1. Install and configure CUPS
  2. Install Dymo printer drivers
  3. Add the Dymo printer to CUPS

Part 1: Install and configure CUPS

This is relatively easy and only requires a few steps.

1. Ensure your package repository information is up to date, then download and install cups:

sudo apt-get update
sudo apt-get install cups

2. Once installed, open /etc/cups/cupsd.conf and make the following changes:

…change the listen configuration to listen globally on port 631…

# Only listen for connections from the local machine.
Port 631

…and update the <Location> configurations to allow local user access…

<Location />
# Restrict access to the server...
Order allow,deny
Allow @local

<Location /admin>
# Restrict access to the admin pages...
Order allow,deny
Allow @local

<Location /admin/conf>
AuthType Default
Require user @SYSTEM

# Restrict access to the configuration files...
Order allow,deny
Allow @local

3. Add your Pi’s user to the lpadmin user group:

sudo usermod -a -G lpadmin pi

(there are alternative ways to handle this, like change which user group CUPS should consider properly allowed to make printer changes, but in all likelihood, this’ll be sufficient.)

4. Restart CUPS

sudo service cups restart

Part 2: Install Dymo Printer Drivers

This is the part where I got stuck. Most documentation will point you to the official download, but during the install process, I received tons of errors and had to back out of it.

Preferred method

1. Install the printer-drivers-dymo package:

sudo apt-get install printer-driver-dymo

Alternative method

Alternatively, you can follow the below steps to download and compile manually, but I couldn’t get this to work properly. YMMV.

1. Download the linux drivers from dymo onto your Pi.

2. Decompress them with tar and enter the directory:

tar -zxf dymo-cups-drivers-1.4.0.tar.gz
cd dymo-cups-drivers-

3. Configure and install the drivers:

sudo ./configure
sudo make
sudo make install

NOTE: During the ./configure step, if you receive this error:

configure: error: Can't find cups library

…you’ll need to point the configure script to the location of the CUPS server folder, as it was unable to find it on its own. If you installed CUPS via apt, it’s probably at /usr/lib/cups so re-run the command like so:

sudo cups_serverbindir='/usr/lib/cups' ./configure

If it still doesn’t work, you’re missing a couple fundamental libraries. Go ahead and install those:

sudo apt-get install libcups2-dev libcupsimage2-dev

Part 3: Add the Dymo printer to CUPS

With CUPS set up and your printer (hopefully) already plugged in–if not, make that happen–access the CUPS admin interface at:


Your browser will probably complain about the SSL certificate. Skip through that, if necessary. You’ll land on a page that looks something like this:

1. Click the Add Printer button under the Printers section. Select the Dymo printer and click Continue.

2. Fill in the fields as you see fit and make sure to check Share This Printer before clicking Continue:

If everything went according to plan in Part 2, the relevant drivers should appear, with the specific printer at the top of the list.

If that’s the case, leave everything as is and click Add Printer.

Lastly, and optionally, set some default print settings and wrap up the setup by clicking Set Default Options:

The printer should be set and ready to go, and visible from the CUPS admin page:


After doing this for the third time now I’ve found myself having to hack through some component of the printer driver process, save for this most recent effort (what I’ve documented in this post). I highly recommend doing everything via the package manager if you can help it. What made me think to include that as an option was noticing the version of dymo-cups-drivers in the Ubuntu source repo was newer than what Dymo itself was offering. That version was also used to build printer-driver-dymo. When the metaphorical lightbulb came on, I realized this was probably a solution to my compile struggles.

The latest

from each category.
January 7, 2019

Some of the Best Independent WordPress Theme Shops

For 2019, one of my “goals” if you will is to spend more time noting more of the resources and tools I find valuable. The first category I’m targeting has to do with WordPress. Over the last 10 years of using WordPress in various capacities, I’ve seen, tested, tinkered with, and used more than a few WordPress themes, both free and for money.

In that time, I’ve used a lot of themes from big names like Elegant Themes and Genesis, and they’re fantastic products. This tweet from Tom McFarlin got me thinking about the smaller shops and independent developers:

Here’s my list of some of my favorite smaller/indie (or niché as Tom put it ?) WordPress theme developers/shops.

For every shop I listed, I know there are three more that would probably make the cut. These are just the ones I’m most familiar with and would recommend to WordPress users looking for high quality product.

ThemeForest and Creative Market often have high quality products from indie developers, too, so their marketplaces are always worth checking out, too.

January 2, 2019

Cloudflare Argo: 228 Days Later

It seems like such a random amount of time to review (and it kind of is) but I wanted to start of 2019 right and review a topic I touched on in 2018: Cloudflare‘s smart-routing product, Argo.

In my previous post about Argo, I covered the vast improvements to response times just by enabling the service. Response times were practically cut in half. Since then, I’ve made some more tweaks to my site so it felt fair to review if Argo is still picking up the slack it claims to. If you’re unsure of how Argo works, my previous post has a good explainer.

Considering Aggressive Caching

One improvement I made was to lean heavy on Cloudflare’s Page Rules functionality. I purchased myself a set of five Rules for an additional +$5.00/month and got to work. I focused on wielding caching for everything that isn’t likely to change often if ever. In this case, most static assets will live on Cloudflare’s servers and in a visitor’s browser for quite a while.

When I first implemented this, I didn’t consider plugin JS, but in reality, most of what’s being caught by that rule is WordPress-related (read: Jetpack), and I haven’t experienced issues thus far.

With the majority of /wp-content being taken care of with page rules, it was time to re-evaluate the now decreased load and its effect on the benefits Argo provides.

Argo Post-Aggressive Caching

There’s a reason Cloudflare recommends Argo regardless of how you cache. Even with aggressive caching in place, I’m still seeing about 25% response time improvements:

The average runs between 23-27%, depending on the days I’m checking, but the 23.28% in the image above is pretty close to “most of the time.” What’s also worth pointing out is the peaks and valleys largely follow the same percentage improvement across the board, and it’s no wonder: 75% of requests end up going through Argo’s pipeline.

With the aggressive Page Rules and Argo, I’m comfortable in saying Argo has a permanent home with this site and any future projects I take on. It’s a no-brainer and still remains highly cost-effective.

December 23, 2018

SpinupWP: The Best Service for Deploying Self-Hosted WordPress

Over the last 10-ish years, I’ve deployed more WordPress sites than I can count. If there’s one service I could have used to make my life easier, it would have been an all-inclusive deployment tool that makes not only servers appear, but a complete and secure WordPress installation, too.

That’s not to say that easy solutions don’t exist. If you’re a Digital Ocean user, you know WordPress-specific images are already a thing and only require a few clicks. The problem there is WordPress isn’t configured with anything useful1 like caching, and passwords are up to RNG.

This is where SpinupWP comes into play, built by the folks at Delicious Brains, makers of the WP Migrate DB Pro and WP Offload Media WordPress plugins. They build amazing plugins, so you know they built a great service, too.

SpinupWP does one thing really damn well: make servers with WordPress pre-installed and pre-configured appear on Linux servers. Out of the box, they hook up with Digital Ocean, but if you have your own box elsewhere, just feed them the IP address and credentials. They’ll handle the rest.

For the sake of my review, we’ll be focusing on Digital Ocean deployments, but most of what I cover is the same elsewhere.

Part 1: Creating the Server

Creating a server starts simply: tell SpinupWP how large and where:

SpinupWP New Server page
The server setup page. This is where you’ll feed things like passwords and database names.

At this stage, you’ll provide things like the database name and it’s password, as well as any SSH keys for access to the server from a Terminal. Make note of the password before continuing.

SpinupWP New Server feed
The setup live feed.

Once all the details are plugged in, SpinupWP will take care of the rest. It starts by using the Digital Ocean API to create a server in the region you selected earlier and with the correct size. Once the server is up, SWP will update and patch the server, then deploy the version of PHP and MySQL you chose. This can take some time, so feel free to come back in a few minutes. They say it can take up to 10 minutes, and I found that often to be the case.

The SpinupWP dashboard with a server ready to accept new WordPress sites.

Just the fact that you can go from zero to a fully-functioning and ready-to-go WordPress server without any sites is awesome. It gets even better when we get to the next half: creating WordPress sites in a few clicks.

Part 2: Creating a WordPress Site

Creating the WordPresss site is also just as easy as the server itself and only requires a few bits of information:

Choose the PHP version and site type (single- or multisite):

Setting the PHP version and WordPress site type.

Name the database and its user and password:

Naming the database, setting the WordPress’ database access username, and the user’s password.

Name the site and create the admin user and its username and password:

Give the site a name, set the admin username, the admin email, and password.

And that’s it! After a few minutes it’ll appear on your dashboard:

A complete, ready-to-go WordPress site.

Once the site is live, you’ll be able to control certain aspects about it like SSL and caching settings. If the site ever needs to disappear, this is also where you’d delete it.

From end to end, this process takes about 20 minutes. If you’re in the market to host an array of WordPress sites for clients or you have a lot of unique blogs you keep operating, this is the way to go. I’d even go so far as to say it’s worth migrating your WordPress blog to a SpinupWP-created instance of WordPress just for the pre-configured caching and security hardening.


This service is killer and priced very competitively. Since they’re still fresh, everyone that signs up gets special pricing, starting at $6/month for the first three months with unlimited sites on one server or $9/month for the first three months with unlimited sites on up to three servers (+$5/month for every server thereafter). The fact that one can pay $6 to have a WordPress site appear in mere moments is awesome. If your goal is to only ever deploy one site, paying $6 for one month and cancelling is still absolutely worth it.

Sign up for SpinWP right now and safe yourself time and sanity. You’ll be glad you did and even more, you’ll wonder how you managed to deploy WordPress on servers before today.


2018 Year in Review

It’s about that time of year when I look back on the posts that attracted the most eyeballs. Some of the most popular pieces of content this year were also the most popular last year, too. Admittedly, not much of this was actually from this year. By my count, half of these posts came from 2016 and 2017. I didn’t get back into blogging hardcore until the last 1/4th of 2018.

Here are the top 10 most popular posts on this blog based on the number of views in the last year:

#10 PowerPort Mini: The Charging Device Apple Should Have Made

When I got my hands on yet another awesome Anker product, I was almost certain I’d enjoy it. True to form, Anker built a charging brick that is a bit larger than Apple’s standard 5w unit but provides so much more power, it’s almost a no-brainer. Each port is good for minimum 6 watts at 1.2 amps or one port is good for 12 watts at 2.4 amps. It won’t break any speed records, especially compared to larger 18 and 30 watt chargers, but for its size and price (2-pack for $16) I don’t know if it gets much better.

#9 Affinity Publisher Beta

It was especially neat to see Affinity coming out with another killer desktop creative application to give Adobe a run for its money. Even though Publisher is still in beta, it’s extremely stable and worth taking a look at if you have some time.

#8 Add RTMP Support to Nginx Installed From Apt

For the third year, this post makes its way onto my top 10 list. There seems to be just enough people out there–especially in the Raspberry Pi community–that want to stream video and ran into a lot of the same problems I have.

#7 Fighting ffmpeg

Also in its third year, my struggles with ffmpeg don’t go un-noticed in the linux/Raspberry Pi community.

#6 MacPaw’s CleanMyMac X Review

There hasn’t been a day when I wasn’t a fan of keeping my computers fresh and clean. MacPaw makes great software, and their newest version of CleanMyMac is no exception. It’s entirely worth the price, and if you’re a Setapp user, download it right now. If you’re not, go pick it up anyway.

#5 Linode vs Digital Ocean: A Three-Round VPS Benchmark Showdown

This was a fun post to write. I’ve hopped back and forth between the two providers a couple times over the years, and it was good to see just how each of them shined. Since both are equally priced, a lot of it comes down to one part workload and one part personal preference. Take a look at some of the benchmark results for yourself and see what makes the most sense for you.

#4 Phone, Wallet, Keys

Adam Sandler was never one of my favorite comedians, but sharing this video seemed to be a hit with a lot of folks.

#3 Fixing Browsersync Not Reloading

I posted this in December 2017 so it never had the opportunity to make its way to the top that year, but I imagine had I shared it many months earlier, it would have.

#2 Live Streaming with Hardware Acceleration using a Raspberry Pi and RTMP/HLS

The third of four of my posts to make this list for the 3rd time. This is one of the series on my struggles in figuring out how to stream video from a Raspberry Pi to a couple different locations. Specifically, this part involved tackling hardware-accelerated streaming.

#1 Attempting to Stream a Webcam to an RTMP Server

This was my original attempt at streaming video from a webcam to an RTMP server and the fourth of my 2016 posts to make it on this list for the third time.

Johnathan Lyman
Kenmore, WA,
United States
blogging, design, technology, software, development, gaming, photography