From UPS’s tracking information for my Mac mini package, here’s the voyage it took to get to Charlottetown from Shenzhen, China:

Google Map screen shot showing stops my Mac mini took to get from China to me

The package started in Shenzhen, China, leaving late on Saturday, November 3 and arriving at Chek Lap Kok, Hong Kong on the next morning, Sunday, November 4.

After spending the day in Hong Kong, the package left for Taoyuan, Taiwan Sunday evening, spent a few hours there, and then left for the USA.

It arrived in Anchorage, Alaska on Monday afternoon, spent three hours there, and then left for Louisville, Kentucky, where it arrived just after midnight on Tuesday, November 6.

The package spent a day in Louisville, leaving for Canada early Wednesday morning and arriving at Mirabel International Airport in Montreal just before breakfast.

After confusingly-reported customs formalities in Montreal (“We currently have the package. The receiver requested clearance by a non-UPS broker. / As requested, the package was transferred to a Free Trade Zone or a non-UPS broker.”), it left for Dieppe, New Brunswick on Wednesday morning, arriving mid-morning Wednesday.

The package began the last leg of its trip this morning at 4:30 a.m., leaving Dieppe for Charlottetown, where it arrived at 6:45 a.m. and went on a truck for delivery to my house.

Total distance traveled, give or take, was 12,000 km in 5 days.

My new Mac mini is scheduled for delivery today, and I received an SMS from Apple this morning alerting me:

Screen shot of SMS from Apple with shipping notification

Because this is bilingual Canada, the alert was in both English and French, and I noticed that the French version of “Today’s the day” was “C’est le jour J.” I initially though the “J” was an errant character, but it turns out that “le jour J” has become a generic French term for “the big day”:

Le jour J and, to a lesser extent, D-Day can also be used by civilians, as a figurative reference to an important event, similar to saying “the big day” in English. While jour J can be used for happy occasions like parties, D-Day is limited to events that one doesn’t look forward to, like a deadline, perhaps because it’s easy to imagine D standing for doom or disaster.

From this I learned that while VE Day (Victory in Europe) and VJ Day (Victory in Japan) are references to specific events, the “D” in “D-day” means, oddly, “Day”:

The terms D-day and H-hour are used for the day and hour on which a combat attack or operation is to be initiated. They designate the day and hour of the operation when the day and hour have not yet been determined, or where secrecy is essential. The letters are derived from the words for which they stand, “D” for the day of the invasion and “H” for the hour operations actually begin. There is but one D-day and one H-hour for all units participating in a given operation. It is unnecessary to state that H-hour is on D-day.

The military has a raft of letter-designations for days and hours, including E-day (“the unnamed day on which a NATO exercise commences”) and P-day (” the expected date at which the rate of production of a consumable equals the rate at which the item is required by the Armed Forces”).

C’est le jour J!

Along with my friend Ton, I am seeking to emancipate myself from Evernote, a very capable cross-platform organizational app that I’ve been using for many years. The emancipation is part regaining-data-sovereignty and part (a related) worry about Evernote’s future, and how I would be stuck if Evernote disappeared.

The most serious day-to-day integration of Evernote into my life is using it to manage my household and office bills.

When a new bill arrives–mostly by email, these days–I create a new Evernote note, attach a due date (a week before the actual bill’s due date, to give me some breathing room) and drop it in the “Bills - Unpaid” Evernote category.

Here’s an example of this, showing my home heating oil bill with an alarm set for October 27, and my PEI Property Taxes bill’s final installment, with a reminder set for later in the month:

Screen shot of my Unpaid Bills category in Evernote.

Evernote sends email alerts, and Mac and Android notifications, on the due date I set, making it very hard to ignore the fact that I need to pay a bill when it’s due.

Once I’ve paid the paid–again, almost always online–I copy and paste the confirmation message from my credit union bill payment screen into the note, and move the note into the “Bills - Paid” Evernote category.

As you can see from the screen shot, I’ve paid 896 bills this way, going back to July 2010: this system has worked well, and I have an almost-100%-on-time bill payment record as a result.

To replace Evernote’s role in this, I needed a way to:

  1. Store the bills themselves–PDF files–with some redundancy built in.
  2. Set reminders to pay the bills.
  3. Record the payment information when I pay the bill.

I’ve come up with a system that uses Nextcloud, a PHP script, and the Mac Reminders application, and it works like this.

When a new bill arrives in my inbox, I do whatever’s needed to download a PDF version of the bill (usually this involves logging into a vendor website). I save the PDF to my computer.

Next, I right-click on the PDF to fire an Automator workflow that I wrote to process the PDF; the workflow looks like this:

Screen shot of Automator workflow to process bills

The workflow is simple: it takes the PDF file and passes it to a PHP script I wrote, /Users/peter/bin/bill.php, and, when the script is done, it has the Mac speak “I created a Reminder!”.

The bill.php script is where the heavy lifting happens:

First, I use pdftotext to convert the PDF to a text file:

function getTextFromPDF($file) {
	system("/usr/local/bin/pdftotext $file /tmp/pdfdump.txt");
	$text = file_get_contents("/tmp/pdfdump.txt");
	return $text;
}

Next, I use the text version of the PDF to find which vendor it’s from; I do this by looking for known strings in each bill, like the account number (I’ve removed my actual account numbers and replaced them with Xs):

function getBillType($text) {
	if (strpos($text, "XXXX XXXX XXXX XXXX")) {
		return "Eastlink";
	}
	else if (strpos($text, "XXXXXXX")) {
		return "Bell";
	}
	else if (strpos($text, "XXXXXXX")) {
		return "Kenmac";
	}
	else if (strpos($text, "XXXXXXX-XXXXXXX-XXXXXXX")) {
		return "MaritimeElectricStudio";
	}
	else if (strpos($text, "XXXXXXX-XXXXXXX-XXXXXXX")) {
		return "MaritimeElectricHome";
	}
}

With the bill’s vendor known, and assuming that the format of every month’s bill is the same, I can then extract the date of the bill, using what I know about how this appears on each bill:

function getBillDate($text, $billtype) {
	if ($billtype == "Eastlink") {
		// September 24, 2018 Account Number
		if (preg_match("/(.*) Account Number/", $text, $matches)) {
			return getNormalizedDate($matches[1]);
		}
	}
	else if ($billtype == "Bell") {
		// 5421473 9 September 21, 2018
		if (preg_match("/\n5421473 9 (.*)/", $text, $matches)) {
			return getNormalizedDate($matches[1]);
		}
	}
	else if ($billtype == "Kenmac") {
		// 10/4/2018
		if (preg_match("/\n(\d+\/\d+\/\d\d\d\d)/", $text, $matches)) {
			return getNormalizedDate($matches[1]);
		}
	}
	else if (($billtype == "MaritimeElectricStudio") or ($billtype == "MaritimeElectricHome")) {
		// Bill issued on 03Oct18 includes payments received
		if (preg_match("/Bill issued on (.*) includes/", $text, $matches)) {
			return getNormalizedDate($matches[1]);
		}
	}
	return FALSE;
}

I also need the bill’s due date: in some cases I look for the actual due date, in other cases the due date isn’t printed, and I calculate one based on a known amount of time after the bill date. I also set a reminder date, 7 days before the due date; as with Evernote’s reminder dates, this gives me some breathing room to pay the bill well before it’s due.

function getDueDate($text, $billtype, $billdate) {

	if ($billtype == "Eastlink") {
		// Please pay the total amount by Oct 15, 2018.
		if (preg_match("/Please pay the total amount by (.*)/", $text, $matches)) {
			$duedate = getNormalizedDate($matches[1], TRUE);
			$reminddate = strftime("%Y-%m-%d, 9:00 AM", strtotime($duedate) - (7 * 86400));
			return array($duedate, $reminddate);
		}
	}
	else if ($billtype == "Bell") {
		// please pay by: October 12, 2018
		if (preg_match("/please pay by: (.*)/", $text, $matches)) {
			$duedate = getNormalizedDate($matches[1], TRUE);
			$reminddate = strftime("%Y-%m-%d, 9:00 AM", strtotime($duedate) - (7 * 86400));
			return array($duedate, $reminddate);
		}
	}
	else if ($billtype == "Kenmac") {
		// No due date specified -- add 30 days to bill date
		$duedate = strftime("%Y-%m-%d, 9:00 AM", strtotime($billdate) + (30 * 86400));
		$reminddate = strftime("%Y-%m-%d, 9:00 AM", strtotime($duedate) - (7 * 86400));
		return array($duedate, $reminddate);
	}
	else if (($billtype == "MaritimeElectricStudio") or ($billtype == "MaritimeElectricHome")) {
		if (preg_match("/Payment Due On or Before: (.*) Amount/", $text, $matches)) {
			$duedate = getNormalizedDate($matches[1], TRUE);
			$reminddate = strftime("%Y-%m-%d, 9:00 AM", strtotime($duedate) - (7 * 86400));
			return array($duedate, $reminddate);
		}
	}
}

Now that I know which vendor the bill is from, what the bill date is, and what the due date is, I copy the file to a directory that’s mirrored to Nextcloud, and trigger an AppleScript that creates a reminder in the Reminders app:

system("cp $thisfile $bills_root/$billtype/$newfilename");

$reminder_script = <<<EOT
tell application "Reminders"
	set myList to list "Bills"
  tell myList
  	make new reminder with properties { name:"$billtype Bill $billdate", due date:date "$duedate", remind me date:date "$reminddate", body: "file:///$bills_root/$billtype/$newfilename" }
  end tell
 end tell
EOT;

exec("/usr/bin/osascript -e '$reminder_script'");

By including a file:/// URL as the body of the reminder, with a link to the PDF, I get a clickable link to the PDF of the bill included with the node:

Screen shot of the Mac Reminders app showing a bill

Nextcloud fits into this system in two ways:

  1. The PDF files of the bills are mirrored to a “bills” directory in Nextcloud, where I can reference them as PDF files. They’re named by the vendor and the date for ease of reference.
  2. My Reminders app on my Mac is connected to the Tasks app in Nextcloud. This not only serves to back up the reminders, but also allows me access to the reminders from the Tasks app on my Android phone. This is all powered by CalDAV, which is an open standard.

As such, I’m leveraging the utility of desktop and mobile applications without being beholden to them, and I’m maintaining control over where my data is stored and in what format.

I’ve been using this new system since August, and it’s proved a capable replacement for Evernote; indeed, because more of the workflow is automated, it’s actually a better system than I had in Evernote, and I enjoy using it more.

I’ve still got more Evernote-functionality-replacing to work on, mostly its utility as a place to dump various bits and bobs of information, from boarding pass to network diagrams, that I don’t want to lose.

But replacing Evernote’s bills payment function in my life is a huge hurdle overcome.

I popped up to The Source (née Radio Shack) in the Confederation Court Mall yesterday to pick up some earphones for my brother Mike, who was about to jump on a plane back to Hamilton and needed a pair to while away the flight. I was greeted by this scene:

Photo of The Source, closed in Confederation Court Mall

Photo of closed sign for The Source,  in Confederation Court Mall

The Source has closed.

This is a blow to downtown Charlottetown, the immediate practical effects of which were evident from my earphone search: I tried “Bob’s,” the dollar-store-like discount store on the first floor of the mall, and Shopper’s Drug Mart, and while they both sell earphones, they are of the cheap $7 variety, and they don’t have anything for a modern iPhone.

When I first moved to Charlottetown in 1993, I was happy to find a very well-stocked Radio Shack store on Queen Street just south of Richmond. It was a handy shop to pick up many things unavailable elsewhere: batteries, serial cables, soldering irons, resistors, floppy disks, tractor printer paper; all the stuff of digital life at the dawn of the Internet.

The store later moved to Grafton Street across from the Confederation Centre of the Arts1, and later, rebranded as “The Source,” to the second floor of the Confederation Court Mall. Although The Source was never as hobbyist-focused as Radio Shack, it continued to be a place to get batteries, USB cables, mobile phone SIM cards, ink cartridges, clock radios, SD cards, Ethernet cables and earphones; all the stuff of digital life in the Internet’s adolescence.

While there’s a The Source out at the Charlottetown Mall, that’s effectively as far away as Amazon.ca is for many people living and working downtown, and the effect will, I’m sure, be a loss of local jobs and purchasing in addition to the loss of convenience.

So long, Radio Shack: you will be missed.

1. Thanks to my friend Dave Cairns for reminding me of this location.

Citizens of Charlottetown woke up with a new mayor and city councillor following from yesterday’s municipal election in the city. Picking up our daily newspaper The Guardian, this morning, however, you’d never know it:

The Guardian, Page 1, November 6, 2018

Instead of election coverage, we see a delightful piece about the local brewing industry.

Why?

Because, starting this summer, The Guardian is no longer printed on Prince Edward Island.

As the CBC reported in May, the paper is printed in Halifax now, a move instituted by its new owners:

In an email statement to CBC News, SaltWire Network spokesperson Barbara Cameron said the Guardian and Journal Pioneer’s digital platforms will be the “primary venue for late-breaking news.”

“Printed newspapers are evolving and so is what we include in that medium. More and more we’ll be playing to the strength of print, which facilitates thoroughness, resonance and permanence,” she said.

That’s powerful PR, but little consolation for someone who wants to read about the election by opening a real newspaper.

Here’s how the non-news was explained on the front of the paper today:

There are new mayors in Charlottetown, Summerside and Stratford today, as well as a new council in the new municipality of Three Rivers. While print deadlines prevented results in today’s print edition of The Guardian, full coverage is online and will be in Wednesday’s paper.

By Wednesday, who will care?

By comparison, here’s the front page of The Guardian from February 11, 1904, the morning after that year’s municipal election in the city:

The Guardian, Page 1, February 11, 1904

Those were the days.

If you only need one reason to stay at The Charlottetown Hotel, surely this sign qualifies.

Brother Mike is visiting and is sporting a fancy new iPhone with “portrait mode.” Here’s a photo he took of Ethan with me in the background.

After printing the bold headline in yellow on Wednesday, today was the day to print the explanatory body copy on my California Typewriter poster.

I didn’t really want to print this in black, both because I wanted to avoid a honeybee colour scheme, and because I was afraid that the density of the black would detract from the sunshine of the yellow.

“How about grey?”, I asked myself.

I don’t have any grey ink, but I do have both black and white.

So I put a dollop of opaque white on the ink disk:

Photo of a dollop of white letterpress ink

And then I added a tiny, tiny, tiny amount of black. So tiny you wouldn’t believe how tiny it was. In this regard I had the helpful Making the color gray forum topic from Briar Press to guide me, especially:

Don’t forget adding your colour to white should be done in tiny amounts slowly building towards what you want. If you go to dark there’s no going back, by adding more white!

The result was a very pleasing, dare I say “smokey” grey:

Photo of mixture of black and white letterpress ink to make grey

Letting the rollers of the press have at it, a couple of minutes later I had a lovely grey ready for printing:

Letterpress ink disc covered in grey ink

The type for the body copy is relatively new foundry type, for both faces, and so there was very little need for makeready; here’s what one of the first prints looked like:

Photo of finished poster, showing grey print

It’s hard to get a sense, from that photo, of how not-intense-black the grey is.

Here are the final posters, drying stacked:

Photo of California Typewriter posters drying

You may have noticed, if you’re paying careful attention, that I’ve organized a screening of the documentary California Typewriter for Sunday, December 9 at 1:30 p.m. at City Cinema. Please spread the word. And watch for the posters around town.

I bought this plate from Michael Stanley some years ago. It was a remnant from a set he’d created for a family with small cupboards.

It wasn’t until I set it down with Oliver’s breakfast this morning, in front of his laptop, that I realized that its design is also well-suited for other purposes.

Oliver and I were in Catherine’s studio yesterday morning for an emergency Halloween costume alteration when I heard a commotion in the parking lot below her back window.

I looked out to see the November issue of The Buzz being unloaded.

I’m so used to seeing piles of the paper in coffee shops in quantities of 5 or 10 that being exposed to all of the copies gave me a new appreciation for how much The Buzz has grown since the early years.

A photo of two palettes of The Buzz being unloaded.

About This Blog

Photo of Peter RukavinaI am . I am a writer, letterpress printer, and a curious person.

To learn more about me, read my /nowlook at my bio, read presentations and speeches I’ve written, or get in touch (peter@rukavina.net is the quickest way). You can subscribe to an RSS feed of posts, an RSS feed of comments, or receive a daily digests of posts by email.

Search