Seblog.nl
Mijn schermloze dag is nu officieel mislukt. Ik ging van 'geen scherm' naar 'alleen telefoon', maar toen zat er een bug in de code die moet bijhouden hoe veel ik gelezen heb vandaag, dus nu zit ik toch weer achter mijn laptop, in de code, met koffie, IndieWeb-dingen te doen.
Day 23: automatic retweet
Okay, I admit: I already did this yesterday, as you can see from my previous retweet. But I wanted one day off. One day without screens. So that’s today.
Earlier on I made my site like tweets when I post a like to a tweet on my site. This means I get just feed my Micropub endpoint an URL as a like-of
, and don’t think about it anymore. Now I added reposts to this too, so I can just paste a link in Quill and it’s ok.
I also seemed to miss pictures in reposts since I redid them, so I fixed that as well. It’s the little things. See you tomorrow!
De voorlopige uitslag is dat we voorlopig even beter geen Stemwijzer moeten invullen. https://www.invetek.nl/de-voorlopige-uitslag-van-de-stemwijzer/
Goed, elke klik in de #stemwijzer wordt naar Google Ads gestuurd. Daar kun je iets of niets van vinden. Het gebeurt in ieder geval.
Day 22: read posts
In December I already posted some plain text notes tracking my reading progress in Stoner by John Williams. (The Dutch translation, by the way, because I got that one somewhere in a very portable version and I was on a city trip to Vilnius.) I already planned to upgrade those plain text notes to a more standarized format, so that I would have /read posts.
Before I could add them, though, I needed a way to give them URLs. So now I have this public list of books I own / owned / want to track, on my new library page: /bieb. All books in there are marked up as h-cite
s and have a url in the format https://seblog.nl/isbn/9780123456789
. Their u-uid
is set to isbn:9780123456789
, because that seems to be a valid url scheme (but browsers don't know what to do with it).
The next step was simple: I just expanded my shortpost type with a 'read' type, that looks for a read-of
field. Thanks to XRay and my existing code, the seblog.nl/isbn/
-url gets expanded to a title and author. I also added a page
field, because I posted when I was at certain points at the book, and I actually haven't finished it yet.
Now my new /gelezen page looks like this:

Inzichten op de late avond: het probleem is niet dat ik niet op Facebook zit. Het probleem is dat jullie er allemaal wel op zitten, en dat normaal vinden.
En, min of meer door Tegenlicht van vanavond: zwart-wit denken los je niet op met grijstinten. Het tegenovergestelde van zwart-wit is kleur, een totaal andere manier van kijken.
En dat gaat dan dus niet over ‘Trump denkt zwart-wit’ of ‘mensen die Trump erg vinden hebben een psychose’, want dat is in zichzelf nog steeds zwart-wit. Dat relativeren (wat ik net deed) is denk ik een grijstint. Kleur is de nuance proberen te zien.
Mijn broer Wouter staat in de finale van de Dutch Barista Championships en heeft koffie nodig. Dus maakte ik ikkoffiejijkoffie.nl voor hem. Doe mee!
Day 21: basic Micropub endpoint
Today I added a very basic Micropub endpoint to my Indieweb Toolkit. A Micropub endpoint is a hard thing to keep generic, because every site has a different way of storing data. The idea about the endpoint in the toolkit is that it does all the things that are the same about Micropub.
So here's an example of what it can do. This one simply writes a YAML file with the received fields to a folder. Please note that it overwrites any post with an existing slug. It's only an example.
endpoint::micropub([
'create' => function($type, $fields, $slug) {
$map = [
'entry' => 'blog',
'event' => 'events',
'review' => 'reviews',
];
if(!isset($map[$type])) return false;
if(!$slug) $slug = uniqid();
yaml::write(__DIR__ . DS . $map[$type] . DS . $slug . '.yml', $fields);
return url::makeAbsolute('/'.$map[$type] . '/' . $slug . '.yml');
}
]);
The idea is that you can put this code where-ever you want. It can be at /micropub.php
or in some route you define. The new endpoint::micropub()
does all the authentication for you and returns the appropriate header. All you need to do is pass in a 'create' callback function, which takes the fields and returns a URL. endpoint::micropub()
will do the redirect with a 201
header.
At this moment it only supports 'create' with x-www-form-urlencoded, but JSON and 'delete', 'undelete' and 'update' will follow. I also want callbacks for different mp-synticate-to
s, and of course there is the ?q=config
query. But I like this idea, and will use this idea to clean out the code of my own endpoint.
Last caveat: at this moment I have not implemented the IndieAuth
class in my toolkit. You can steal the class from my kirby-micropub plugin, but I want to clean it first before putting it in the toolkit.

Day 20: automatic liking on Twitter
Today I drafted a SiloAPI class in indieweb-toolkit. The idea is that it gives an easy way to interact with different Silo API's. In some ways this is a bad idea, because all API's work different and have different capabilities, but I like the idea, even if it's bad.
One API call that is available for both Twitter, Instagram and Facebook is to create a like. So that's where I focussed on first. Today, I made SiloAPI
a wrapper for the TwitterOAuth PHP library, and it now supports ::like()
just like micropub::like()
. You still need to pass in the name of the silo though, but maybe I'll detecting the silo from the URL later.
siloapi::setToken('twitter', [
'consumer_key' => 'xxx',
'consumer_secret' => 'xxx',
'oauth_token' => 'xxx',
'oauth_token_secret' => 'xxx',
]);
siloapi::like('https://twitter.com/_/status/123456', 'twitter');
Then I realised that Brid.gy probably can do this for me too, since it already syndicates my Tweets for me when I ask for it. So I just made my Micropub endpoint call Brid.gy publish for every like-of
that is a twitter-URL.
I will add to SiloAPI though, because I want to autolike to Instagram too!
Day 19: reposts again
Today is a weird day. Fixed a lot of things, but also did kinda useless things. (I learned more about HTTP requests by trying to create a Micropub request using netcat
, and at some point, I was chatting with myself in two Terminal windows with nc -l localhost 8080
in one and nc localhost 8080
in the other, completely by accident.)
Then it was 1:30 at night.
Earlier on in this series, I fixed my repost context. These contexts where based on a .json file I exported with my whole Twitter archive. A few days ago I made XRay look up likes for me. Today, I retweeted someone, and since .json files don't magically appear on your server (luckily), it didn't show any repost context.
So I combined the two and now XRay fetches the repost context for me. I don't use the .json file anymore, but keep the data the same way I keep likes: in a refs
field.
And then it was 2:00 at night. I'm going to bed.
Beste @rplasterk, ik reken erop dat u straks geen wettelijke basis achterlaat voor massasurveillance in NL via een #sleepnet