Jeremy Cherfas: Posts

Jeremy Cherfas

No more reverse engineering

For quite a while now I have been wrestling with the new default theme for Grav, which runs this site, in order to benefit from all the wonderful possibilities going forward. Unfortunately, I am belatedly coming to the realisation that reverse engineering a theme is just more trouble than it is worth, at least for me. In trying to be all things for all people, a lot of themes are just very, very complicated. I don't need all the possibilities on offer. I just need the kind of layout I like, which would essentially mirror the layout you see right now, especially if you are not looking at it on a phone.

The problem, and it is what has kept me tinkering at the edges rather than diving in, is that I stopped doing my own website presentation long ago, and haven't kept up. I have never built a responsive site from scratch, and I really don't understand how to ensure that, for example, people get the images that best suit the device they are using.

Then, just this morning, I happened upon Julia Evans' website, and in particular this post: Tailwind: style your site without writing any CSS!.

Julia was quite clearly in exactly the same position as I am in (though lots smarter). And her write-up ticks a lot of boxes for me. I took a cursory look at Tailwind this morning, thought "hmm, that's interesting", did some paid work and then treated myself by returning to the torture of trying to understand the complexities of the Grav default theme. And after about two hours of that, I had a different thought.

I know the kind of site architecture I want. I know enough Twig, and have enough examples to hand, to build the various template modules. I want to mark everything up correctly with microformats. But I don't understand modern CSS, responsive layouts etc.

Time to give Tailwinds (or something else; I'm open to suggestions) more than a cursory look.

Wed, 07 Aug 2019 15:40:00 +0200

Monthly report: June & July 2019

Not at all unhappy that this report covers two months. June and July we enjoyed a lot of travelling, some of it the very time when I might have been writing a monthly report, so. Travels to Ischia, Wales and Puglia, each of them wonderful in its own way.

One definite discovery, which I sort of knew but hadn't really thought much about. When I'm away on holiday, I sometimes have to do a bit of work. If I set aside a couple of quiet hours early in the morning, I can get as much done then as I can in almost a day at home. Knowing that in a couple of hours I will have to be ready to go to the beach, or sightseeing, or shopping for that day's dinner, prevents me from prevaricating like nothing else.

Highlights of the month:


Steps is about constant, weight is about constant, but time asleep has fallen. Not in the least bit surprised, as the hotter weather means eating later which means getting to bed later. However, because mornings are delicious and cool, getting up early is a good thing. Corroborated, I think, by tagging nap more often when the day is warmer and when the night is warmer. Average bedtime was 10:33 on 2 June and 10:54 today, while wake time was 6:51 on 2 June and 7:03 today.

Tagged Reading on 20 days in June and in July; summer's like that.

Mood average has climbed from 4.3 on 2 June to 4.7 today; summer's like that too.


I know that my logging has been less than comprehensive over the past two months, but even though they may be unreliable, the figures are here.

Month Total Daily Admin % ETP % Other %
07 58 2.9 22 21 57
06 75 3.75 38 18 44
05 145 7.25 40 2 58
04 128 6.4 37 28 35
03 158 7.5 44 28 28
02 121 6.0 32 42 26
2019-01 95 5.4 39 13 48
10 100 4.2 41 34 25
09 131 6.5 45 23 32
08 185 8.0 14 85 1
07 68 5.25 25 63 12
06 96 5.75 34 9 57
05 151 6.0 36 20 44
04 159 7.5 29 29 40
2018-03 152 7.0 20 10 70


Three posts here in two months! That's appalling. But lots of reading; that's great.

Listened to 47 podcasts in June and 45 in July. The highlights were Bundyville: The Remnant from Oregon Public Broadcasting and Longreads and Malcolm Gladwell's episode of Revisionist History dedicated to Randy Newman's Good Old Boys. And having written that sentence, is the first time I have put those two thoughts together.

In May I started to remap various keyboard shortcuts; a couple have become ingrained but I need to add more slowly and allow each one to become a habit. A cheatsheet might help.


I didn't make any progress on mapping, but that's OK. There will be time. And I did make progress on the theme that presents this site. Not quite ready to swap over yet, because there is still a lot of work to make it pretty and IndieWeb-ready, but the logic is working and I am quite pleased with how it is going.

Final remarks

Two things: A month on, I still like shaving with cold water only, and I'm still taking melatonin every night. Dreams are crazy vivid, but not scary, and I think I am awake less.

Sun, 04 Aug 2019 16:28:00 +0200

Technological progress

One night earlier this week we had two power cuts in quick succession. Watching TV on the computer (what does one call that, when the show wasn't actually on television in the first place?) continued as normal, thanks to the UPS bought after a more consequential outage a couple of years ago. Next morning, though, the wifi extender seemed not to be functioning. I tried everything I could think of, but all the LEDs stayed stubbornly lit and the manual offered no advice for that state of affairs. Fried, I concluded.

At around 20€ a pop for a replacement, I didn't hesitate, hoping only that I would make it safely through the song and dance of connecting it to the cable modem and all that.

I was sorely disappointed, in a good way.

There is now a phone app that speaks directly to the extender. Do as it says, and all will be working perfectly in less than five minutes. This is true progress.

I am therefore more than happy to offer the TP-Link WA850 range extender five unsolicited stars out of five.

My rating:

Sun, 04 Aug 2019 15:07:00 +0200

A little automation ...

Quite apart from the fact that I have barely written a thing here for almost a month, I thought it would be worthwhile to pick a low-hanging fruit. So I followed the very simple instructions at Automate your outgoing webmentions and now my hope is that I have removed one more piece of grit from what I laughingly call my workflow. It won't make me write more often, but when I do manage it will be one less thing to concern myself with.

Fri, 26 Jul 2019 10:16:00 +0200

Plain water

For about fifty years, I have been labouring under a personal grooming misunderstanding. It has always been my belief that one needs some sort of lubricant to get a decent shave; soap of some form, for the most part, although I did dabble with a shave oil for a month or two. A couple of days ago, for reasons,1 I decided to shave with just water.


It is entirely possible to get a pretty good shave with nothing but water. The biggest difficulty is to know where you've been and where you haven't been, which is much easier to see if you're lathered up. (That was a drawback with the oil, too.)

Desperate Dan shaves with a blowtorch

Once upon a time, when I restarted shaving with a double-edged blade, I even went so far as to join a dedicated bulletin board, and I have a dim recollection of people there swearing that a shave with plain water alone would, once you get used to it, be superior in all respects. Going back to look, I find advocates of cold water, rather than hot, but not much talk of no soap. In fact, lots more talk about lathering and superlathers and all sorts of bother, with all sorts of science apparently behind it.

I dunno. I've tried a soapless shave twice now, and it feels alright. Better than alright. Admittedly my beard is not in the Desperate Dan league, but I might try this a little longer, before I succumb and buy more shaving soap.

  1. Something weird happens when I get close to the bottom of my bowl of Proraso Green. It just stops lathering up. For a while I thought that might be because the blob of soap was no longer attached to the bowl and so was spinning freely under the brush. But then I held it down with my finger and still failed to get any decent lather. Is it possible that there is some sort of density effect, whereby what is left in the soap after a long while are heavier molecules that don't lather as much? I somehow doubt it. And I'm not sure what, if anything, to do about it? I could continue to shave without lather. I could buy a new bowl and spatula the remainder over. I could just chuck the remainder away. This is not some fancy-pants gentleman's grooming necessity; it's cheap and it works, mostly. We shall see. 

Sat, 29 Jun 2019 17:40:00 +0200

Monthly report: May 2019

I began this monthly report on the first of the month, full of good intentions and excuses. That it took another five days is proof the excuses are real.

"Excuse" always seems to carry such a freight of negativity. They're not reasons for failing to accomplish what you set out to do. They just excuse you, and that's just beating yourself up. Myself. So, no more excuses. Reasons!


Here we are on 1 June, and although May was a good month I am feeling out of sorts. The reason, I believe, is because I let lower priority but doable things get in the way of higher priority tasks that would take longer, even though equally or more doable. So I got some good things done behind-the-scenes on my website but failed to move forward much on any of the bread stuff, book or courses

Towards the end of the month some new sources of paid work came in, and so naturally I wanted to give them plenty of attention but that’s not enough of an excuse (ahem: reason!) because they weren’t an issue in the first three weeks.

Highlights of the month:


Time asleep climbed by a couple of minutes. Weight may be a little bit down, but not by enough. Peanut butter is evil. Steps is bobbing along nicely at around 9500 average. I tagged Reading on 18 days, three times April's total, and finished a wonderful book that I have yet to write about. Started tagging Sticks, meaning Nordic walking, now that the weather isn't quite so dank and gray. What an awful spring it has been. But great for most of the plants.


Logged 145 hours for the month and worked on 20 of the 31 days. That seems excessive, given that I was travelling for five days during which I logged very little. Last month's lack of time spent on Eat This Podcast suprised me; this month's is downright shocking. Must be because I am not logging reading, planning or even interviews that will be published later this year. The little bit of paid work I mentioned turned out to be around 15% of my time. No wonder things have slipped.

Month Total Daily Admin % ETP % Other %
05 145 7.25 40 2 58
04 128 6.4 37 28 35
03 158 7.5 44 28 28
02 121 6.0 32 42 26
2019-01 95 5.4 39 13 48
10 100 4.2 41 34 25
09 131 6.5 45 23 32
08 185 8.0 14 85 1
07 68 5.25 25 63 12
06 96 5.75 34 9 57
05 151 6.0 36 20 44
04 159 7.5 29 29 40
2018-03 152 7.0 20 10 70


Seven posts published on this blog, and some elsewhere too. I think I brought in one or two older ones, but I failed to record them. Listened to 53 podcasts.


Having got my mapping posts working again, and at least one successful post with data collected by Overland and stored in Compass, I realise two things.

First, there is really no need for these little maps to be live. Static images would be just as useful, and doing that would eliminate all the grief currently associated with flailing around in JavaScript. Luckily, in addition to everything else he has built, Aaron has created Atlas, a service that will create image files of routes and much else besides. Making use of it will take plenty of thought and learning, but Aaron has provided what seem like very clear instructions, and in any case thought and learning is the whole point.

The second issue is the theme of this Grav website. The one I use has been deprecated in favour of a new default theme. Last time I looked at it, I didn’t much care for it, but in the meantime I have become a bit more proficient so this might be a good time to change. If I do, I want to think about consolidating my different types of post and instead making use of tags and collections to organise the way they are presented.

Final remarks

But not before I have updated the bread course notes.

Thu, 06 Jun 2019 15:15:00 +0200

Clean clickety-clack keyboard

From time to time a key on my clickety-clack keyboard gets stuck and refuses to register. Usually, I just prise off the keycap, fiddle about with an unbent paperclip or something and hope for the best, but the last time it happened it was one of the letters I need for my password and it was a royal pain. Plus, I've been saying for weeks, if not months, that the keyboard deserved a jolly good seeing to. (I've had it just over nine years now; it's the least I could do.)

Yesterday, with no urgent work on the horizon, I took the plunge. I began, as one begins all such tasks, by watching a Youtube video. I won't bother linking, because the only important advice it offered was to use plain warm water as a solvent. Had it been damaged by coffee or something nastier, perhaps I might have needed isopropyl alcohol, but in fact warm water turned out to be fine.

So, I started off with photos of the keyboard as it is, more to help replace they keys when the time came than to immortalise its state. But why not?

dirty keyboard surface

Once I had removed a couple of keys I was totally horrified. How had all that grunge accumulated. Luckily it takes a lot to disgust me.

close up of filthy keyboard with caps removed

I carried on removing keys, using an old credit card to lever them up. The big ones with the stabilisers I didn't even attempt, because really there weren't that many of them and how much grunge could hide there?

dirty keyboard with all keycaps removed

With all the keys off it was a matter of carefully removing the accumulated cruft -- a mixture of dog hair, my hair and who knows what -- with a stiff brush and then, more carefully still, with a dampened Q-tip. There was a lot of it.

accumulated grunge and dirty Q-tips

close up of cleaned keyboard with keycaps removed

I rinsed the keycaps in warm water for a while and then scrubbed at them with an old toothbrush. The water here is very hard indeed, so I thought it would be worth rinsing them in de-ionised water before setting them out to dry. I also used damp Q-tips to clean the keys I had not removed and the case. And then, a couple of hours later when I judged the keycaps to be dry enough, I consulted the photos and replaced all the keycaps. The only difficulty was the inverted-T arrow keys, which took a bit of juggling (before clicking them back on) to get right.

cleaned keyboard surface

I won't say it is as good as new. But it is jolly spiffy again, and after a day well spent it feels very satisfying to have finally given it the TLC it deserves. And, just as I said nine years ago, I now feel more motivated to invest a little time in creating some more useful keyboard shortcuts. Any suggestions?

Sat, 25 May 2019 16:56:00 +0200

The Future of Bread

two rustic bread loaves

Want to learn more about bread? And how to bake with traditional leavens? And visit a working watermill?

I will be part of a two-day workshop at Coleg Trefeca in the gorgeous Brecon Beacons in Wales on 23-24 June.

I'll be working alongside Colin Tudge, one of the most thoughtful writers on farming and agriculture, and Ruth West, who organised the first Rise of Real Bread conference in Oxford and is a force in farmers markets and agroecology.

We'll be talking about bread itself and as an example of how most food is produced today, with narrowly conceived financial profit as the goal and little regard for the health of people or the planet. Bread offers a chance to look at how we arrived at the wonder of a 36p supermarket loaf and what it would take to put that right.

During the course we will explore the history of bread and milling, modern bread production and who is leading the drive for change, and how a new localised bread culture could change the face of agriculture.

bread dough rising in a banneton

On the second day, at Talgarth Mill, we will see wheat turned into flour and together transform the flour into tasty sourdough loaves.

You will leave with a deeper understanding of the part bread plays in our culture and agriculture, a booklet of instructions and recipes, and your own sourdough starter.

Details of the course are on the Coleg Trefeca website, which has a handy-dandy link to book the course.

Syndicated from Fornacalia

Thu, 23 May 2019 17:47:00 +0200

IndieWebCamp Utrecht

Another absolutely brilliant IndieWebCamp, this time in Utrecht. By now I feel like a bit of an old hand, and it was nice to see old friends and make new ones. The first day, as usual, was devoted to group-organised sessions on different topics.

I was particularly taken with Julia Jannson's presentation of her work on The Attention Fair. This emerged from an "art school" project to bring to the surface just what people supply with their ordinary, everyday behaviour on and offline. Julia had developed a series of games and installations that illuminated the value, to others, of the things people do and say about themselves. Rather than attempt to summarise, far better to just send you off to explore the Attention Fair website.

One of the more interesting aspects of Julia's work is that while most of us in the room marvelled at her clever creations, not much of it was a surprise. That's decidedly not the case for "the public". Most of them, Julia said, were entertained by her work but thought it was a jolly good science fiction project, maybe a bit like Black Mirror. That it is real, they find truly shocking. And while the value Julia put on different sorts of information was strictly fictional, it would be interesting to know just how much advertisers were willing to pay for specific sorts of pattern. The data are there. But is there any independent research that makes use of them?

The hack day, on Sunday, was also marvellous for seeing what smart people are capable of and for pushing my own boundaries. I had resolved to install Aaron Parecki's Compass GPS tracker on my own server. I like the idea of knowing where I've been, but previous attempts to get hold of this data on my own website have been just too complicated. Compass offers an essentially friction-free experience for gathering basic location data. I got pretty far along all on my own, thanks to Aaron's clear instructions, and then ran into a brick wall. Thankfully, more knowledgeable minds than mine were available on hand, and with help from Rose and Sebastiaan I was able to break for lunch knowing that all was working. I apologise for not documenting all the things they did to divert me around my roadblock; suffice to say that it works for me.

screen showing route displayed by compass tracker

Displaying my location more publicly will require more work., although Rose is busy working on a Shortcut that will allow people to share a time-limited link to their actual position. That will be fun and handy. Then I will work on setting fuzzy areas to protect certain locations and figuring out how to display specific routes and trips on my site.

Some fantastic other demonstrations finished the hack day. Martijn built a search engine. Frank built a script to import OPML files into an indie reader. Björn made a thing that scrapes the cover art and summary of a book from one of several sources. Dylan cleaned up his site and reviewed his travel coffee maker. Johan created a Docker container for Aperture; I haven't the faintest idea what that entails, but I know that it is difficult and important. Rose and Sebastiaan worked on Seb's reader map. Julia worked away but is saving the reveal for later.

It was also gratifying to see Rose take my script for sucking up podcast listens from Overcast and, first, tidying it up (though I wish I had a slo-mo recording of what exactly she did)1 and then actually using her version to get a list of the podcasts she had listened to. I learned a huge amount about giving, taking, and sharing.

Great thanks to Frank and Tonz, who organised it all, and to Johan for hosting in his very funky space at Shoppagina. And also to all the other people there, every one of whom gave me something to think about, and many of whom gave me far more help and encouragement than they realise.

The event page has more details, including other write-ups.

  1. And it was super interesting to note that Ton had an exactly similar experience. Watching someone work, especially if they slow down to help or, even better, having them watch you, is clearly a worthwhile practice. 

Tue, 21 May 2019 15:30:00 +0200

Automating Listen posts

Getting my podcast listening history out of Overcast and into this site has been going swimmingly since I started a couple of months ago. I had to do everything manually, but that was OK as it gave me the chance to check that it was indeed all going swimmingly. While my friends have been sharing all their great ideas for the hack day at this weekend's IndieWebCamp in Düsseldorf, earlier this week I decided that the time was right to start automating my Listens posts. This was prompted by the podcast Automators #22: Text Expansion, co-hosted by one of those friends.

TextExpander is one of those apps that does so much more than merely expand text even if, like me, you refuse to upgrade to the subscription model.1 I've never quite got to grips with "proper" scripting languages, but I've dabbled enough in Applescript to be able to run other scripts, and the podcast reminded me that Text Expander can run Applescripts easy peasy. So I began hacking something together.

The first step was simply running the listens-2.php script. That worked fine once my friends pointed out to me the importance of the magic constant __DIR__ if you are going to run scripts from outside the directory they are in.

Then I wanted to be able to check the results, so I hacked together another little bit to open the folder where all those Listen posts live. That doesn't quite work as I would like, because I can only open the folder that contains the folder I want. But hey, at this stage, the need for another keystroke doesn't detract from this being another small win.

Finally, in the manual phase leading up to this, I had to push the new posts from my computer up to github, from which they were automatically sent to this site. That proved not too difficult either, thanks to a handy Stack Overflow answer.2

Here is the final script.3 The rigmarole to set thescript allows me to use a slightly different script for some testing without too much trouble.

set thepath to "/Applications/MAMP/htdocs/listens/"
set thefile to "listens-2.php"
set thescript to thepath & thefile
tell application "Terminal"
    set shell to do script "php " & quoted form of POSIX path of thescript in window 1
end tell

do shell script "cd Applications/MAMP/htdocs/grav-admin/user/pages/06.stream/ && git add -A && git commit -m ListensfromApplescript && git push"

tell application "ForkLift"
    reveal path "Applications/MAMP/htdocs/grav-admin/user/pages/06.stream/"
end tell

It worked, this morning. I don't really want to test too often as it might overuse the Overcast data and requires me to clean up after each test. But I have every expectation that it will work again tomorrow, when I have listened to some new podcasts. Maybe after a couple of weeks with this version I will have the confidence to turn it all into a cron job.

  1. I do also use Alfred to expand text and to run snippets of code, but I find Text Expander a lot more intuitive. I might need to re-examine my decision and see what additional benefits a subscription would bring. 

  2. That also provided a good explanation of why it is better to chain the commands with && rather than use ; to separate them:
    "Chaining commands with the && operator has the benefit that if the first command fails, the second command is skipped too. Semi-colons just act as command separators, as do line feeds; they don't affect execution, so even if a vital command like the cd fails the subsequent commands are still applied, but now in the wrong directory." 

  3. Improvements gratefully accepted. 

Sun, 12 May 2019 11:45:00 +0200

Page created: Mon, Aug 19, 2019 - 09:05 PM GMT