For 2019’s Q1 I want to do a ‘weekly hack’. There are many small odd jobs around the house, on my computer, our network, or in my workflows. They often are in my todo lists, but never get done, simply because they never have any urgency attached to them and so the rest of my life goes first. Yet they often do hinder me, and keep nagging to be resolved. Either that or they are the small wished for fixes (I really should have a page for X / I really should make a template for Y).

So 12 ‘hacks’, fixes or odd jobs in Q1 2019 it is. If it becomes a habit after that it will mean doing some 4 dozen small things to make life easier per year. That’s a lot of things done incrementally over time. A first braindump gave me some 20 things to choose from (and the one I ended up doing first wasn’t even on that original list, but came to me later 😉 ).

  • 19#01 Create and use a template for the first read through and note taking of a non-fiction book.
    I made it in Tinderbox, which is an outliner plus mapping tool by Mark Bernstein. The template is mostly based on this WikiHow page on reading non-fiction, with some added questions (e.g. concerning assumptions made by the author)

    (the template in map and in outline view).
    For each book I copy that template. Each element in the outline/map is also a note which can have text, images etc. Tinderbox then lets you export the whole thing as a document, in this case the summary of my reading notes of a book. Which can then be blogged or published in other ways. [Category: workflow, habits]
  • 19#02 Do an edit in Open Street Map. For a long time open data consultant and activist, I actually do very little with data. My focus is on helping government entities change, so that their data becomes available routinely and at high quality. So, while Open Street Map (OSM) is a re-users of large amounts of Dutch open government data I never actually edited something in it. Peter’s suggestion this week triggered me to change that. [Category: learning]
  • 19#03 Export notes from presentation deck. I regularly give presentations, and use the speaker notes to write out the story and to present. Writing up the presentation story afterwards I used to copy by hand the presenter notes to my text editor and then turn it into a blogpost. This is however time consuming (copy and pasting text from each slide). To make that easier I searched for an applescript online and adapted it to my use. Now copying the notes to the clipboard is just one click, and then it is stored in my ClipMenu tool to past into whatever editor or word processor I want to use it in. Available from github.
  • 19#04 Add an ‘on this day’ function. To show blogposts from earlier years on the current day. Added and fixed a plugin, that provides a shortcode.
  • 19#05 Automatically transform bank journal entries into procurement journal entries Made an Applescript that takes the bank journal entries from my double entry book keeping system as csv, and then for the entries that are marked as procurement, creates the correct entry for the procurement journal. Output is in CSV again, which I can directly import into my book keeping system. Script published on github
  • 19#06 I redid my changes to the Semantic Backlinks plugin to display webmentions differently on my site. After an update my earlier changes had been overwritten. So following my own earlier documentation, I fixed it again.
  • 19#07 Fixed the authorization header issue on my site. This was keeping me from using microsub and micropub applications to post to my site. Having tried various things suggested online, in the end the Drupal fora provided the right answer. Adding RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] to htaccess solved the issue
  • 19#08 Added experimental check-ins to the blog. Ultimately I’d like to recreate the Plazes and Dopplr experience, available to just my network.
  • 19#09 Wrote a new front page text for my professional web presence.

Aim: run Quill locally, to write draft posts offline (and later maybe see if I can store drafts locally).

(I run MAMP PRO on my Mac, I also run a WordPress install locally, with all IndieWeb plugins enabled and a Sempress theme)


I downloaded, installed in http://localhost:8888/quill
The installation instructions mention using Composer to install a range of dependencies. I did not know what that was, so had to Google around to find out it is a tool to install php dependencies. I followed the instructions at to install Composer on my Mac.
Then I could call the URL http://localhost:8888/quill/public/index.php ok.

However it doesn’t load images correctly and links don’t work as they are relative to http://localhost:8888/ and not http://localhost:8888/quill/public

Aaron, who created Quill, told me Quill expects to run as a root domain.
So: I added a host quill.test on port 80 in my MAMP set-up, with the /public as root folder. Now Quill loads fine and URLs work.

To get it to work right with mysql on my laptop I added a database called quill. I first had created new user, but that didn’t work. So I used an existing root user for that. I had to also run this sql query to create a table in the database that Quill uses.

After that it worked fine. Next up, thinking about how I’d like to change Quill, as an offline tool for me to prepare postings. Also want to experiment with using it to post to different blogs.

An attempt to a) map my info strategies better and b) map them to indieweb protocols, so I can c) map them to tooling / processes

Blogpostings I wrote over the years.


Webmentions were shown as “Peter mentioned this on”, but that does not provide context for a reader to decide if they want to click to go there. So I want to display a part of the linked item, as a teaser. Years ago pingbacks were presented like that on my site.


Find out how webmentions are stored, and how they are presented. Change the presentation by displaying an excerpt.


It turned out that webmentions are actually stored in full (so the text of the linked item is available in my wordpress database). It was just that the template for how it got presented needed tweaking. There is also a character count limit, below which a mention is indeed shown as I like it. All this however isn’t done in the theme, but in a plugin, called Semantic Linkbacks and in a specific file: class-linkbacks-handler.php. Once I localised that, I could change what I needed.
So I

  1. changed the character count limit to 500
    // Mentions with content less than this length will be rendered inline.
    define( 'MAX_INLINE_MENTION_LENGTH', 500 );
  2. changed the template for a webmention in public static function get_comment_type_excerpts()
    It was 'mention'=> __( '%1$s mentioned %2$s on href="%3$s">%4$s., 'semantic-linkbacks' )
    I changed it to
    'mention'=> __( '%1$s mentioned %2$s on href="%3$s">%4$s: %5$s', 'semantic-linkbacks' )
    This adds a 5th parameter at the end. This will hold the excerpt.
  3. Then filled that template in, in function public static function comment_text_excerpt
    • After it sets the length of the webmention, stored in $text in $text_len I evaluated that to see if it is longer then the limit. If so it sets a delimiter $text_delim to that maximum, or else sets it to the actual length.
    • Then I create a text snippet from the start of the text to that delimiter $text_snip = substr($text, 0, $text_delim) and add a few dots to the end $text_snip .=" ...."
    • That snippet is then added as 5th parameter to a call of the template mentioned above $text = sprintf( $comment_type_excerpts[ $semantic_linkbacks_type ], get_comment_author_link( $comment->comment_ID ), $post_type, $url, $host, $text_snip);


  • This tweak is to a plugin, so the next update will overwrite my changes. Need to figure out how to post it back to the plugin source so it might get incorporated as an option
  • Still need to change how the excerpt is selected. Now it is some 500 characters from the start of a posting. I want it to be 500 characters around the actual link.
  • It seems I need to change webmentions for various types, as a reply to a comment I made is shown as ‘x mentioned y’ (I changed it to the text of the actual comment by hand in this case.)
  • A summary overview of changes I made to this site, to make it more fully a indieweb hub / my core online presence.

    Theme related tweaks

    • Created child theme of Sempress, to be able to change appearance and functions
    • Renamed comments to reactions (as they contain likes, reposts, mentions etc.)
      in the entry-footer template and the comments template
    • Removed h-card microformats, and put in a generic link to my about page for the author in the Sempress function sempress_posted_on. Without a link to the author mentions show up as anonymous elsewhere.
    • Removed the sharing buttons I used (although they were GDPR compliant using the Sharriff plugin, but they got in the way a lot I felt.

    Functionality related tweaks

    Smart Home in a broad sense. As many things that make a home smarter are social not technological in nature, or are dumb technologies. And some ‘smart’ technologies make a home dumber.

    We will look at the role of a house from multiple angles.

    • Home as a shelter
    • Home as a family space
    • Home as a productive unit (food, water, energy, products)
    • Home as a meeting space
    • Home as a working and learning space
    • Home as a node or connector in the neighbourhood, as active part of a city
    • Home as a platform for sensors whose data is used at home and across the community it is located in
    • Home as an actuator platform that actively responds to its own sensor data, and data signals from other sources
    • And above all the role of smart residents, in creating such a home.

    This is an AppleScript I wrote to automatically post weekly overviews of bookmarks I made in Evernote, as a Suggested Reading post on my WordPress blog.

    set singletaglist to {}
    set multitaglist to {}
    set alltaglist to {}
    set allbulletlist to {}

    --get the notes from Evernote
    tell application "Evernote"
    set query_string to "notebook:\"linklog\" created:day-7" --get notes since last week
    set notities to find notes query_string --gives you list of relevant notes
    set notenum to count of notities
    repeat with notitie in notities
    --for every note fetch title, tags and source
    set titel to title of notitie
    set bron to source URL of notitie
    set taglist to tags of notitie
    set numtags to number of items in taglist
    --the taglist needs to be processed
    repeat with counter from 1 to numtags
    set tagtest to name of item counter of taglist
    --if tag already encountered it goes to multitaglist
    if (number of items in alltaglist is 0) then
    copy tagtest to end of alltaglist
    if (alltaglist contains tagtest) then
    copy tagtest to end of multitaglist
    --if not encountered it goes to all tags
    copy tagtest to end of alltaglist
    end if
    end if
    end repeat
    --fetch content and cut down to first line
    set inhoud to ENML content of notitie --gets you en xml, we want text between and

    set AppleScript's text item delimiters to "" --text to the right of
    set tinhoud to text item 2 of sinhoud
    set AppleScript's text item delimiters to ""
    set inhoud to ""
    set sinhoud to ""
    set thisbullet to {titel, bron, tinhoud} --list of this particual ever note
    set end of allbulletlist to thisbullet
    end repeat
    end tell
    -- we got what we need from Evernote
    -- we now have a list of all items, but need to look at tags to create the title of post
    -- I want a title like Suggested reading: tag1, tag2, tag3 and more
    -- where two tags are used more than once and one just once
    -- alltaglist contains all tags used, multitaglist contains all tags occurring multiple times
    -- now create a list of tags that are used once (basically alltags minus multitags)
    set allnum to number of items in alltaglist
    set doubles to number of items in multitaglist
    repeat with counter from 1 to allnum
    if (multitaglist does not contain item counter of alltaglist) then copy item counter of alltaglist to end of singletaglist
    end repeat
    set singles to number of items in singletaglist
    --I need 3 tags for the title, two used more than once, and one single. Unless there's not enough.
    set posttitle to "Suggested Reading: "
    if (allnum < 4) then -- too few tags, use them all repeat with counter from 1 to allnum - 1 set posttitle to posttitle & item counter of alltaglist & ", " end repeat set posttitle to posttitle & item allnum of alltaglist & " and more" else -- at least four tags available set takedouble to 2 --default value if (doubles < 2) then --take from doubles what possible set takedouble to doubles --0 or 1 end if if (singles = 0) then -- take all from doubles set takedouble to 3 end if --in all other cases default value works -- with value of takedouble now build posttitle if (takedouble = 3) then -- take first & last, and in the middle from doubles set middlelist to round doubles / 2 rounding up set posttitle to posttitle & item 1 of multitaglist & ", " & item middlelist of multitaglist & ", " & item doubles of multitaglist & " and more" end if if (takedouble = 2) then -- take first & last from doubles, first from singles set posttitle to posttitle & item 1 of multitaglist & ", " & item 1 of singletaglist & ", " & item doubles of multitaglist & " and more" end if if (takedouble = 1) then -- take first from doubles, first and last from singles set posttitle to posttitle & item 1 of multitaglist & ", " & item 1 of singletaglist & ", " & item singles of singletaglist & " and more" end if if (takedouble = 0) then -- take first middle & last,from singles set middlelist to round singles / 2 rounding up set posttitle to posttitle & item 1 of singletaglist & ", " & item middlelist of singletaglist & ", " & item singles of singletaglist & " and more" end if end if -- we now can start building the blog posting -- title is available posttitle -- now let's build the html for the posting --first opening line and start of UL set blogpostext to "

    Some links I thought worth reading the past few days

      --for each bullet in bulletlist a new LI
      --with the blurb, and the title as href to the link
      repeat with listitem in allbulletlist
      set thislisitem to "

    • " & item 3 of listitem & ": " & item 1 of listitem & "
    • "
      set blogpostext to blogpostext & thislisitem
      end repeat
      --end the ul started at the top
      set blogpostext to blogpostext & "

    " --we got it all now
    --mail it to wordpress cat linklog, tags all tags, title and body.
    --the content of the mail is determined by the Postie plugin settings
    --the plugin used in my WordPress
    -- cat and title in subject, rest in body: delay to post must come first, then body, then tags after one empty line
    set mailsubject to "standard//[Linklog] " & posttitle
    set tagtext to ""
    repeat with counter from 1 to allnum - 1
    set tagtext to tagtext & item counter of alltaglist & ", "
    end repeat
    set tagtext to tagtext & item allnum of alltaglist
    set mailbody to "delay: 1d
    set mailbody to mailbody & ":start " & blogpostext & "

    tags: " & tagtext --don't use :end delimiter

    --now send it as email
    tell application "Mail"
    set myMessage to make new outgoing message with properties {sender:"", subject:mailsubject, content:mailbody}
    tell myMessage
    make new to recipient with properties {address:""}
    end tell
    send myMessage
    delay 5 --wait for the mail to be processed
    quit --quit Mail as I don't use it for anything else
    end tell

    This page provides basic information for event organisers who want to invite me to speak at their event.

    Keynotes, workshops, facilitation

    I’m an experienced presenter and group facilitator. Over the years I have given many keynote talks, presentations and fully participatory workshops in Europe, North America, Central and South East Asia. I’m comfortable in front of small audiences, and in front of several thousands. See TalksandVideos for an overview of the last few years.

    Topics, grounded in my own experience

    Topics I enjoy presenting on include data governance, open government, open data, networked agency, digital disruption, digital transformation, ethics by design, and digital making. I usually combine material from my own professional practical experience with insights and sensemaking on a higher and broader level of understanding.

    Stories tailored to you, in three languages

    All my presentations are tailored to the audience and event I’m invited to. Although material and observations may be re-used regularly, and key messages are always consistent, the story arc is always specific to the occasion. I am fluent in English, German and Dutch. I’m also comfortable working with simultaneous translators.

    Full attention for your event

    I always take an active stance at the conferences I contribute to, out of curiosity in the audience’s experience and their questions, passions and going concerns. By engaging in conversations with event participants and being approachable, by being active on the social media back channels of your event, and by being available for press or sponsor meetings. In short I am as much a participant as anybody else attending the event. It also means I normally try to take part in the entire event, and whenever possible avoid attending for just my slot on the program.

    I’m an event organiser myself

    As an invited speaker I will aim to avoid causing you hassle, and will take my responsibilities to your event serious.
    Over the years I have organised many events myself. International conferences in different countries, a multi-year long series of international workshops across 3 continents, community and fringe events in parallel to global conferences, all varieties of workshops, and with my wife I repeatedly organise international indie-conferences for our birthday party. I’ve organised events with large budgets and with no budget at all. In short, I get it.

    Rights, slides, videos

    I retain all rights to my presentations and will publish them myself online with a Creative Commons BY-(NC)-SA license. You are welcome to publish and distribute my slides within those license conditions. You are always allowed to record and/or stream my presentation.


    Please approach me as early before your event as possible (generally at least 2 months in advance is excellent, less than 3 weeks in advance likely means I’m not available). It would be great if you can send an e-mail first that explains how you would like me to contribute to making your event great, and providing links to general information, program ,and / or history of the event. Let’s talk to eachother in person after that first e-mail, to explore how we can work together. This also allows your team and me to make my presentation fit your event and audience.

    Should I not be available on the date of your event, I will try to suggest other speakers to you.

    Speaking fees, travel costs

    As a self-employed professional I charge fees for speaking. The costs of international travel and lodging are not covered by the speaking fee and should always be covered in addition. My speaking fee is 3150,- Euro excluding VAT if applicable, for a keynote of up to 45 minutes or a panel or working session up to 90 minutes. It can be higher, based on mutual agreement, if the requested contribution is larger or requires more preparation than usual. It can be lower as well.

    My speaking fee will be lowered for low income countries (to 1900 Euro) and middle income countries (to 2500 Euro).

    If you organise a free event or a non-commercial event, the fee may become negotiable or may be waived (but not international travel costs). Over the last 15 years I have contributed to many free conferences, unconferences and BarCamps for free, because the theme, the audience or my own learning agenda was a good fit. If you would like me to waive my speaking fee, please provide reasons why I might do so in your first e-mail (saying it will be great exposure for me is not a valid reason), and let’s discuss. In other words: don’t be discouraged to approach me.

    Logistics, practicalities

    I will expect to be able to use my own laptop to present (because of speaking notes and monitor functionality), and will bring the needed adapters.

    Usually I will finalise my slides at and during your event (unless I’m the opening speaker), and adjust some of the messages, wording and examples based on hearing participants and other speakers, and the general atmosphere of your event. This means that other than a basic outline I will not be likely to provide my slides before your event. When working with (simultaneous) translators, I will try to provide speaking notes or an outline upfront for the translators.

    Bio, photos

    Please find shorter and longer descriptions in English, German and Dutch, as well as photos for you to use on the page BiosandPics. I may propose to change the bio to emphasise aspects more relevant to your event.


    Ethics by design is adding ethical choices and values to a design process as non-functional requirements, that then are turned into functional specifications.

    E.g. when you want to count the size of a group of people by taking a picture of them, adding the value of safeguarding privacy into the requirements might mean the picture will be intentionally made grainy by a camera. A more grainy pic still allows you to count the number of people in the photo, but you never captured and stored their actual faces.

    When it comes to data governance and machine learning Europe’s stance towards safeguarding civic rights and enlightenment values is a unique perspective to take in a geopolitical context. Data is a very valuable resource. In the US large corporations and intelligence services have created enormous data lakes, without much restraints, resulting in a tremendous power asymmetry, and an objectification of the individual. This is surveillance capitalism.
    China, and others like Russia, have created or are creating large national data spaces in which the individual is made fully transparent and described by connecting most if not all data sources and make them accessible to government, and where resulting data patterns have direct consequences for citizens. This is data driven authoritarian rule.
    Europe cannot compete with either of those two models, but can provide a competing perspective on data usage by creating a path of responsible innovation in which all data is as much combined and connected as elsewhere in the world, yet with values and ethical boundaries designed into its core. With the GDPR the EU is already setting a new de-facto global standard, and doing more along similar lines, not just in terms of regulations, but also in terms of infrastructure (Estonia’s X-road for instance) is the opportunity Europe has.

    Some pointers:
    My blogpost Ethics by Design
    A naive exploration of ethics around networked agency.
    A paper (PDF) on Value Sensitive Design
    The French report For a Meaningful Artificial Intelligence (PDF), that drive France’s 1.5 billion investment in value based AI.

    This pages attempts to catch ping backs to the home page of my blog using the Webmention plugin. A list of sites mentioning this blog is provided below.


    This page is a Hub page, providing an overview of everything about Networked Agency in this wiki-section, with links and references leading away from it.

    Networked Agency building blocks

    This is my take on agency, which is a networked agency. I formulated it in 2016 as a way to express what unifies all my work, basically since I started working.

    In our digital, globally networked and hence more complex age, we need a qualitatively different approach to agency.

    This means embracing the affordances digitisation and networks give us.
    This means designing our digital tools fully aligned with the core ideas behind interconnected networks (smart at the edges and within control of its users, can work alone yet (much better) locally or preferably globally connected).
    This means taking complexity as a given, where experiences, probing, and responding to things play a key role.

    This makes an individual including its meaningful relations to others, in a specific and real life context the relevant unit of agency.
    This is networked agency.

    Networked Agency, residing at the level of an individual plus its social context, I see consisting of three parts:

    • Striking power. The ability to (collectively) act and create on your own accord. This is where low-threshold tools are important, as is knowledge of working methods and processes.
    • Resilience. The ability to shield oneself against and mitigate negative consequences of other’s behaviour propagating through the network to you. This is where being able to work locally when disconnected is important, and temporarily suspending interdependencies. Next to early warning systems, and how to help put a brake on negative patterns you identify.
    • Agility. The ability to leverage, adapt and respond to opportunities from other’s behaviour propagating through the network to you. This means sensing what is going on early, seeing what aligns with the interests and needs of the local network, how to use that for yourself, and how to feed attractive patterns with ones own contributions to help sustain them. (e.g. open source development).

    Relevant blog postings:

    As an example of a design aid, I created the image below:


    Early 2017, in collaboration with the Frisian Library Service, we used the above to design a project with a primary school group, for them to design and create ‘solutions’ to things they wanted to change in their environment. The feedback was very positive, both from the participants, my project partners and the financing Dutch Royal Library. It turned into the basic working method of the Frisian Library Service, and we’re currently trying to extend that collaboration also with other local libraries in Europe.

    Keynote video

    At the June 2018 State of the Net conference in Trieste I gave a keynote on networked agency. A video, alongside my slides, is available.

    This is the frontpage of my emerging wiki-like collection of semi-permanent content. Where blogposts form a ‘river’ of items, for reference it is useful to have a range of more static ‘pools’ of content. Both to provide additional context and background to blogposts, as well as a useful documentation in itself. Documentation of ongoing work, reading, research, or experiments. (April 2018).