Infinite Wishes: ♾️🧞‍♀️✨

Is a weblog by Emma Humphries

12 Jan 2021 » December 2020 link log

Links from my gemlog for December 2020

I run a Gemini server on which I have a simple link log. At the start of the month, I’ll dump the last month’s links in an entry here.

1 December 2020

2 December 2020

3 December 2020

4 December 2020

6 December 2020

8 December 2020

9 December 2020

11 December 2020

24 December 2020

If you’re interested in Gemini, start at the FAQ. My favorite client is Lagrange.

02 Jan 2021 » Making tweets ephemeral

Expiring tweets as a liberatory practice

Death comes for the tweets
Credit: Derrived from a cartoon by Bang Ong

I’m now running a job that will, once it gets through the backlog, delete all of my tweets which are ten days or older, and remove likes from older tweets.

I’m using my own fork of a node project to handle the clean-up.

I’m not using this to be unaccountable for what I write. It’s to make me make my non-ephemeral posts somewhere other than Twitter.

30 Dec 2020 » This year

A few things that got me through 2020

Dark orange skies in San Jose on September 9, 2020
Credit: Photo by the author

Aside from waves hands at everything, my year started and ended with a familiar issue: email bounces.

The first was the bounces from the self-run mailhosts of Firefox contributors that had gone down or had mistakenly classified mail from Bugzilla as spam.

The end of the year was bounces at industrial scale from a Gmail outage that affected every organization sending mail, including my new job at Bandcamp.

In app notifications can be the Devil’s work, but oh my Sweet XML Jesus, sending email is still a thing.

Books read


Notable Albums

Notable Singles

Theme song

Games of note

28 Dec 2020 » An eInk calendar for Raspberry Pi

Seven Calendar Cafe leverages vanilla JS, HTML, and CSS to generate a monthly calendar for to display on an eInk display

Photo of eInk display of calendar
Credit: Photo by the author

I wanted a simple desk calendar. Like the ones you’d get from the buisnesses you traded with over the previous year.

A photo of a paper calendar for 2016 from the Tasty Crust restaurant in Wailuku, Maui, Hawai'i

I had an eInk display which would work with a Raspberry Pi. Generating the calendar page as HTML and sending a screenshot to the eInk display was appealing to me, so after finding useful note on using CSS grid to display a calendar, I extended on it to make a calendar generator.

The generated HTML is intended for display on an eInk display, via a screen capture by running a browser on the command line, or a screenshot service.

The CSS on this project is optimized for display on Pimoroni’s seven-color eInk display for the Raspberry Pi.

Generating the calendar

Browsers have HTML and CSS engines we can use to lay out the calendar for us.

Start with three-line layout using CSS Grid where you wrap a list in a container with display: grid set on it, and format the list as a seven column display.

<div class="calendar-wrapper">
    <h1>December 2020</h1>
    <ul class="calendar">
    <li class="weekday">Sun</li>
    <li class="weekday">Sat</li>
    <li class="last-month">29</li>
    <li class="last-month">30</li>
    <li class="">1</li>
    <li class="">31</li>
    <li class="next-month">1</li>

Instead of frameworks, the JavaScript uses native date functions to figure out the current date (as determined by the system running the browser,) the start, end, and previous/next month’s overlapping dates. The calendar markup is generated using JavaScript template strings.

Starting from the current day:

var today = new Date();
var first = new Date(today.getFullYear(), today.getMonth(), 1);
var DoW   = first.getDay();

then you can check if DoW is a Sunday, and fill in the days from the previous month which fall in the first week accordingly. And yes, if you use a calendar that starts weeks on Monday, you may want to make a fix and submit a patch to the project on GitHub.

Adding a custom background, different typography, or even date-sensitive styling is a straightforward extension of the project. Other things to try would be to fetch personal or household calendar items and merge the data in with the calendar grid.

You can see the code in a Glitch project and at Patches are accepted on GitHub.

URL parameters

This project accepts the optional query string parameter month which can take on the value previous and next to display the calendar for the previous and next months.

The current date is highlighted when the calendar is displayed.

Using with eInk Display

If you have an eInk display is attached to a Pi or other device and the necessary drivers and libraries are installed, you can fetch a screenshot with the current calendar using Firefox:

firefox --headless --screenshot --window-size=600,448 ''

You need to be specific about the --window-size parameter for the dimensions of your eInk display’s screen.

You’ll need a script (in this case Python) which works with the Pimoroni eInk display’s libraries:

#!/usr/bin/env python3

import sys

from PIL import Image
from inky.inky_uc8159 import Inky

inky = Inky()
saturation = 0.5

image ="/home/pi/screenshot.png")

inky.set_image(image, saturation=saturation)

And a bash script can run the process daily once you set up crontab entries for it. You’ll want to run the script at startup and at least once a day.

cd $HOME bash
firefox --headless --screenshot --window-size=600,448 ""

Since the idea behind eInk is to only update when you need to, using a whole Raspberry Pi (even a Pi Zero W) feels like one’s over specified the hardware for the project.

I’m not sure if a Pi Zero W can run Firefox, if you’re using one to drive the eInk display, you might want to use a screenshotting service in the workflow.

However, that Pimoroni display has buttons you can program, and using them will be the next version of this project.

Show off your mods with the hashtag #SevenCalendarCafe on Twitter and the Fediverse.

The project’s title is a nod to both the Pimoroni Inky Impression and The Cocteau Twins.

20 Dec 2020 » Saturn and Jupiter in conjunction

We are fortunate to be living when Saturn and Jupiter are in their closest conjunction in hundreds of years. Go outside at dusk and marvel.

A photo of Saturn and Jupiter in conjunction
Credit: Photo by the author

Updated with better photo.

Because of the periocity of their orbits and their great distances from our Sun the close conjunction of Jupiter and Saturn are not once-in-lifetime, but once-in-centuries events. Since these happen roughly 800 years apart’, they were considered to be linked to the end of ages and empires.

Since this summer, when Saturn and Jupiter started rising in the night sky after sunset, I’ve watched them close their apparent distance: they are still millions of miles apart.

This past Monday was the closest point of the conjunction, and I’ve been out with my telescopes and marveling that I can see both of these giant worlds in the eyepiece this week.

Sunday night I attached my camera to the back of my big telescope and took photos while the two worlds, which are low in the sky at dusk, were still visible. This is a single frame, and I am shooting horizontally through the evening sky which puts a lot of dust and air between my telescope and space, so it’s blurry.

To see the conjunction look towards the West at dusk during Christmas week. A pair of binoculars will be enough to resolve both planets as separate disks, with the point-like dots of the Galilean moons and Titan if you’re in a dark enough sky.