Houtje-touwtje, literally ‘small stick-short rope’, or cord loops fasteners in English, is the more down to earth and old Dutch phrase for putting stuff together with duct tape (known as MacGyver tape to many here, after the 80’s tv series). After messing around in the FreshRSS back-end last weekend, yesterday I made a houtje-touwtje working version to let me post more easily about the things I find in my feed reader.
In my previous post I mentioned I want to support three different reactions:
- favourites, something I liked, or want to let the author know I appreciated
- bookmarks, something I (want to) read, and keep reference to for my notes
- replies, something where I comment on or reply to a posting and its author directly
Four labeled posts in my feed reader
The way I mark postings in my feed reader is attaching a label to them (favourite, bookmark, reply)
Then with the SQL statement from the last posting I pull out those labeled postings (label, url, title, author, and content).
Yesterday evening I attempted to bring it a step or two further, but ended up with something that works.
I created a php html page that shows me, using the SQL query, every labeled posting and for each posting shows a webform. That webform is needed because I want to be able to add two things to every labeled posting (though they’re not mandatory)
- My motivation for favouriting, or bookmarking, or my reply
- A quote of the bit in the original posting I am picking up on
The form for me to add motivation and selected quote
Next to that the form is needed to forward the other information (link, title, URL) to the next stage, along with my response and quote. This simultaneously allows me to clean up URLs, shorten the title or provide the actual author name if the post only contains a shortened username e.g.
The webform also contains a field for the total number of labeled items (hidden), and a field for the label itself. Again needed to forward them to the next stage of the process.
The second stage is that submitting the form, calls the same php page again, but this time to process the submitted form information (no longer the database query)
Based on the label (fav, bookmark or reply) it selects a template for how I want to show those in my blog (each have their own svg-icon and first sentence), uses the right microformat, and adds in the url, author, title and my reaction and selected quote in the right spots. The microformat is relevant for when my posting sends a webmention to the website I’m reacting to, and lets that site know if it’s a reply (to show underneath in their comments), or a bookmark or favourite. Assuming that the other website can receive webmentions that is.
Resulting HTML
The result of that is then shown to me in HTML. I paste that HTML into my blog editor, add things like posting categories and tags, and hit publish. In essence I’ve replaced what the Post Kinds plugin, that I stopped using, in my WordPress blog did before: automating fetching some info, and adding it into my posting. It is akin to what I had previously, where I weekly posted links to my blog from my Evernote bookmarks using e-mail.
The posting on the blog
This ‘houtje-touwtje‘ set-up doesn’t do the fancy things yet, like posting itself automatically to my blog through micropub (UPDATE January 2022 it now does!), or providing me this functionality within my FreshRSS reader’s interface. Also, after posting things, I need to manually delete the labels, so they don’t resurface the next time I run the php script.
Another path to explore is using the same or similar workflow to put labeled posts into my personal notes.
This morning I tested out the workflow, and I was pleased with the result. I loaded up the feed reader, and did my usual reading. I marked things for follow up. I ran the script, added my motivation and selected quotes. Pasted the resulting HTML into my blog, added categories and hit publish. This definitely feels smoother and less time consuming. It’s been a while I posted more than 1 thing based on my feedreading that day, let alone four (1, 2, 3, 4) within minutes of reading it. The ‘normal’ routine was ending up with a bunch of open tabs in my browser, and at the end of the day giving up and hitting close-all for those I didn’t get around to during the day.
[Update: the php script is available in my GitHub account]
This week I recovered from Covid-19. I mostly kept to myself on the top floor of our home and later in the week also in my home office space. Y went back to school Tuesday after no longer showing symptoms. We went in for an official test on Monday. E continued to test negatively. I of course tested positive and secured my spot in the official statistics. I consider myself recovered now, and as it’s been 14 days since my first symptoms also will be breaking my isolation from today. I do still have a somewhat itchy throat. Breaking isolation from tomorrow means little, as meanwhile lock-down restrictions have been tightened again. The difference is I can leave the house, go to the park and to the shops when needed, but will otherwise be at home as everyone else.
This week I did work, but as I still easily tired, I tried to follow my energy levels. This week saw me
Preparing three meetings for a client for the coming two weeks, one with the European Commission, one with all INSPIRE data holders in the Netherlands, and one with a client’s advisory board and board. This was quite a bit of work.
Finally receiving a Jabra hybrid meeting microphone I ordered online over three weeks ago. Somehow they never started processing the order, until I complained. Then it shipped within a day. No word of apology of course. Also their order form and feedback form was in Dutch, but then I received automated responses in Italian, French and Spanish, and mails from their support staff in English. The support staff was responsive and helped me well, but if you cannot ensure multilingual support, don’t pretend to!
Having the monthly all hands company meeting, in which I presented a small tool to better track how busy we all are. We also announced everyone will get the week between Christmas and New Year off, not counting it against their 25 vacation days. We also took delivery of the ‘New Logic’ upcycled travel bags. I had ordered them through a Kickstarter project in the summer. Then it was unsure we could even travel in the summer, so I ordered everyone bags that were unsure to ever be delivered, as it seemed fitting.
Having the weekly client meetings.
Attending a half day session on digital twinning
Joining a half day work session on a reference architecture for a national digital twin of the built environment.
Pruning some shrubs and roses in the garden, removing also what had grown over the roof of our shed. Still a lot of pruning to do in other parts of the garden. The first time I was outside again in 2 weeks (except for getting tested)
Doing the digital type of gardening. Fixed where e-book highlights end-up as resource for my notes. Removed Flickr embeds from my blog, now there are just 90 postings still to go (but they all have multiple images, so it’s easily 600 images stil.) I also took the opportunity to further clean up those postings (removing Technorati tags, which stopped functioning in 2014, from the body of the posting e.g.). Made a template with which I can replace Post Kinds check-ins in my blog with a basic form so they no longer use Post Kinds for it (because). Enjoyed making use of my quick-n-dirty posting from Fresh RSS.
Medical waste shipping containers on the parking lot next to the Amersfoort Covid-19 testing station.
Starting in 2010 I have posted an annual ‘Tadaa’ list, a list of things that made me feel I had accomplished something.
This is the first time in 11 years I did not feel like making this list. This second pandemic year was again a year where our lives had a small and local scope mostly, where most days just carried over into the next. Additionally as I’ve been keeping day logs since April 2020, and have been posting week notes for three years now, maybe there’s less of an internal need of looking back annually, as unlike a decade ago I’ve been doing it weekly and daily for myself as well. Mostly I think it’s the pandemic, where nothing much happens during a year of staying home almost exclusively. As E mentioned this week, you miss out on so much coincidental inspiration, ideas and associative thoughts that you’d normally get from just being out in the world.
Yet, maybe that means I really should be making the effort of writing the annual list. So here goes, in no particular order.
Made sure that Y got to fully enjoy playing in the snow, and skating on the ice, for the few days in February that both were possible. Important memories to make with her.
E and I made it work well at home, despite irregular school closures, a quarantine, and having Covid breach our household. I appreciated our house a lot, allowing us space as it does to both have our own home office, being able to sit in the garden under the apple tree or at the water’s edge watching the swans, ducks and coots. We complemented each other well, and E even completed a half year training program on data and AI on top of all of it.
Went away when we could, e.g. to Zeeland over the easter weekend, enjoyed some lunches in town, visited a few museums.
We spent two weeks in Copenhagen in the summer in a beautiful house we rented. Cycling through the city, just hanging out, meeting up with friends and having a nice place to return to or stay at and relax for a day was a great break. I am very glad that I booked the rental early in the spring, when it wasn’t at all clear that it would be even possible to travel across inner-EU borders. Just the act of having booked it was valuable as it put something on the horizon a few months out.
A week in Versailles and Paris at the end of summer was an unplanned but huge pleasure. We enjoyed camping out in a forest area on the edge of Versailles, while having Paris within 30 mins by train and the railway station a 10 minute walk away. We got to be outside a lot, played around with Y in the camp ground’s swimming pool, while also exploring Paris (which Y loved), taking in (a small section of) the Louvre, and having lunch and coffee any place we liked. Paris wasn’t very busy, but not empty either, the perfect setting to roam as we pleased in a city that was lively enough to feel its pulse. It was a very energising week, and the best spur of the moment decision we made this year.
Volunteered to speak at the FOSS4G Netherlands conference this fall, that fell in the brief period where such events could take place face to face.
My company had a good year, again well above the pre-pandemic 2019. Our team I think grew tighter, and we managed to have a lot of fun despite the pandemic measures taking a mental toll on all of us at times. That financially things went well helped as stabilising factor, reducing uncertainty in uncertain times. Renting cabins in a holiday park in June, so we could work together for a week while each having our own cabin, is something to do during regular years as well. Last month it was a decade ago that we started our company, and in fact I feel these past years, despite the pandemic, were the best ones as a group and for me personally had most meaning.
I got to work this year on a topic that I really enjoy, learning to work with and within the coming EU digital and data legal framework. The work evolved from a study I did last year, advising the European Commission on the planned open data obligations for EU countries. This important wave of 6 pieces of legislation is the biggest influence on data governance in Europe since the original PSI Directive and INSPIRE Directive 10-15 years ago. It goes much deeper and is much wider in scope than what came before though. There’s a renewed elan, and I feel the type of energy that my work 10 years ago generated around European open data efforts. This new wave will be key to any data work for at least five years, if not for the rest of the decade.
For next year, I’ve already signed a contract with a client to keep track of those European developments, help Dutch dataholders and users to leverage their potential, and build bridges to initiatives elsewhere in Europe. It provides me with even more time to do that, which allows me to organise it more as a program of continuous work, not like one project out of several. I hope and intend to use this opportunity to help drive the momentum from this new batch of data legislation in 2022.
I’ve been writing my blog here for 19 years now. Again this year it was an important instrument in having and generating conversations with a wide variety of people. In these stay at home times having a way of connecting to people all over the world is very valuable, and doing it all from my own domain is a source of agency. Thank you to all I had the opportunity to interact with this year, to all who dropped by in my inbox.
Last year I started making a notes system (in Obsidian) having revamped my personal KM system. Last year I made some 800 conceptual notes mostly gleaned form existing blogposts and presentations I wrote the past 20 years. That number hasn’t grown very fast this year, to a 1050 plus about 200 more factual notes. Together with an ideas collection, and book notes they make some 1650 notes, or about a third of the total number of 5000 notes in my PKM system. Other notes are work related notes, day logs and an annotated library of things that caught my eye this year. I am happy it felt effortless to keep the note making going this year, even if I feel I had too little time to actually sit down and think and write, growing the conceptual part of it all. I’ve also done little non-fiction reading, an annual complaint I have though it was more than in previous years. Such reading provides input that could let my notes grow. Having dusted off my PKM system last year has really helped me this year in keeping track of my work, and being able to keep building on little things I started earlier and then had to leave alone for a while. What pleases me no end, in terms of reducing friction and the sense of ‘magic’ that I got it to work, I now run two client websites, where I publish information for them directly from my notes collection. It allows me to work in my own notes on my own laptop, and in the background GitHub ensures that those notes get published as a website.
I’m what is called the ‘programming equivalent of a home cook. Making small adaptations to my laptop’s working environment, and little pieces of code to help me do some tasks is gratifying (if sometimes frustrating during the process of creation), and let’s me incrementally reduce friction in my workflows. This year I enjoyed rummaging around the back-end of my feed reader, and experimenting with what I call federated bookshelves, and a few other small things. The federated bookshelves stuff will be a topic of discussion and, I hope, making during a tentatively planned online IndieWeb meet-up in February on distributed libraries.
In terms of work hours, I mostly worked about 3 days per week in the first six months, using the rest to balance the logistics of a household in times of pandemic and find some space for myself. The rest of the year I worked more or less fulltime.
As we’ve been home mostly I had ample time to read, just over 70 books, of which a handful non-fiction. Fiction reading is something I worked into my day well in the past years (at least 30 mins before sleeping, an easy to arrange habit). The non-fiction reading is still something I want to find a working flow and rhythm for (and have been for years). It requires making time in a way that is less easy (reading, noting, thinking) than it is for fiction. On the plus side, the non-fiction I did read I also much more actively made notes on.
We will spend some days around New Year in Switzerland, visiting dear friends. A tradition we couldn’t adhere to last year, but can do this year (if we test negative before leaving).
Ever onwards! (After having the first week of January off that is)
2021 wasn’t a piece of cake, but like the one pictured despite its imperfections and cracks still held beauty. I enjoyed this raspberry and chocolate confection towards the end of a joyful day with E and Y in Tivolo Gardens in Copenhagen last August.
In reply to My Personal Micropub Client’s Potential Use Cases by Ton Zijlstra
The four use cases I listed earlier contain two that don’t require anything new I soon realised. Both adding the Micropub logic at the back-end of my previous work to create replies etc. straight form my FreshRSS feedreader, and adding it to a basic form, only require one thing: adding the script that handles the posting to them, by way of an include.
Meaning this reply is generated the way I made possible earlier, and immediately posted now as well. And meaning I now also have a local webform that allows me to quickly jot something down and hit publish.
The other two cases mentioned (moving towards a microsub server and reader, and posting directly from my local markdown text files) do require new logic to be created, which takes more steps. Posting from my own notes is the one I will pick up now first, starting from the work I already did on publishing booklists. There I already have created building blocks that grab the content of my notes and turn them into something for the web.
I’m pleased with how little friction I now feel to automatically publish my responses to what people send to my feed reader, using my newly home cooked Micropub client. This morning firing up the feed reader, writing and publishing responses felt very smooth. I’ll need to add some draft saving elements I think, because when responses become longer the risk of losing text in the local edit window rises.
Today I posted a bookmark directly to this blog, straight from a feed reader I created myself. A few days ago I already posted about how I am building a Microsub client, which basically is the front-end of a feed reader: it’s the part where you actually read the content from the RSS feeds you subscribe to. It does not in itself subscribe to any feeds, or store what it gets from those feeds. That’s the Microsub server, and I use an existing WordPress plugin called Yarns for it. By splitting the server (subscribing, fetching and storing) from the client (presenting), making the feed reader becomes building a website that can show me whatever is stored in the server. It makes it possible to shape my feed reader the way I want it. I had the basic fetching and presenting part done earlier this week. The next step was interacting with the things I read from within the reader, having a reply button underneath each posting, with which I can post to this blog. I’ve got that part working now too. To build it I re-used things I previously already created. For instance I already had a form, to formulate a response (originally stuck on the back-end of another feedreader), and a way of posting directly to this site. So adding this was more a remix than coding something new. The only new additions were the ‘glue’ needed to join the existing parts together, and a bit of Javascript to be able to process the form in the browser, while staying on the same page as where I’m reading feeds. And it works!
Here’s a posting by Peter, as presented in my feed reader:
Note the button underneath which says in Dutch ‘respond to the post above’. Each posting has a button like that.
Clicking such a button reveals a form (which is at first hidden, and revealed by a line of Javascript).
In the form I specify what type of response it is (reply, bookmark, or favourite), and I write my reaction, and can add a quote from the article above which is useful if I’m responding to something specific, and provides context for readers on my own site who aren’t aware of the posting I’m responding to. It also allows me to change the title, author name and URL of the original post. This sometimes is useful when the title is very long, the name in the feed is a user name (e.g. ‘siteadmin’), or when the URL contains appended tracking elements that I want to remove.
Underneath is another button saying ‘Process’ in Dutch.
Hitting that button activates a little bit of Javascript to call the PHP script that processes the form, without leaving the page. It means that once I’ve clicked the button I can go on reading in the same page. The script that silently processes the form, turns what I’ve submitted into proper HTML for a posting, and then sends it on to my blog. Where it ends up as:
On my blog you get to see what the processing script has created, including e.g. the icon for a bookmark (or reply or favourite).
I’m pleased with how this works now, and I can start adding a few things. Like adding optional titles to a reaction (as I’ve done in this posting), or to add multiple tags or categories. For these too I have existing code sections I can re-use. Another element is being able to subcribe, unsubscribe and mark things as read from within the Microsub client.
After that it will become more difficult, if I want to work down my list of things an ideal feed reader should be capable of.
Part of that may require storing feed items client side, or maybe even also building my own Microsub server. So it’s a potential rabbithole I want to approach with caution. For now I will try this as my new workflow for a week or two.
(also posted to Indienews)
Current status:
Created a working way to submit JSON formatted blogposts to this site, code on GitHub
Included that in my earlier scripts to create posts from my feed reading, that I now no longer then have to post by hand.
Created a Microsub client to replace my feed reader, in which I can respond directly from within the page I am reading.
Combined the same basic script with a local webform so I can very quickly post something. I don’t think I will be using this possibility much but it was a good way to add a front-end to the micropub script first and fast.
Can take a local markdown file written in Obsidian and post it as html to my site. This is by far the most useful to me
I write my blogposts in Obsidian, drafts live in a specific writing folder. They have two inline data fields, status and tags. While writing a note has status ‘writing’, when it is ready to publish I set the status to ‘draft’.
Within Obsidian I use the same status field to create a dynamic overview of posts being written, ready to publish, and previously published (using the DataView plugin).
When I’m ready to post, I hit a hotkey which launches my PHP script. It looks at all files in the specific writing folder and checks for files that changed within the last few hours and if those contain a status field ‘draft’. For those that do it transforms the markdown in those files to html, and then posts that to my site, using the tags in the other data field to tag and categorise the post. It also sets the status field in my notes from ‘draft’ to ‘posted’.
I could also run the script every hour or so using a cron job, so that anything posts automatically, while I go on with my other work.
Rationale:
Local first, personal, narrow band
See blogpost.
Narrow band means:
my preferences can be treated as default inputs
my tasks are predictable to me
together they are functions with parameters, aka code.
Sources:
Micropub standard
IndieWeb wiki on Micropub
Tips from Jan Boddez (in Dutch)
Jamie Tanna’s work on his personal micropub client
Jamie Tanna’s tool to get authorisation tokens manually, great for testing/development.
Parsedown, which I use to translate markdown files written in Obsidian, to HTML for my site.