1. Emil Björklund: Thinking so far: accept the webmention, send a signal passing along the URL somehow, model listens to signal, looks up instance and checks.

    @thatEmil Taproot works almost the other way round — a “mentions” module stores incoming mentions, noting their target path after resolving redirects. Then, each content module queries the mentions module for mentions of a particular URL. That way the two are decoupled, and I can keep track of mentions of static URLs and things not represented by a “model”. Haven’t figured out how to handle redirects well yet though.

  2. -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1
    

    Posting my first note over HTTPS, now at indiewebcamp.com/https level two with a self-signed certificate.

    I’ve also enabled HTTPS for Shrewdness (currently optional, will be required once I have a StartSSL cert) — if you want to add an exception, the signature is:

    02:55:68:37:c9:b2:32:89:f7:c7:b5:65:6e:20:b0:87:af:f6:
    1b:9e:c7:bb:2f:5b:0f:f5:23:04:74:47:76:78:7b:38:49:91:
    4b:c5:3e:66:16:32:67:5e:4c:e9:75:c5:b0:52:91:c9:67:cd:
    15:56:53:11:a2:38:5a:39:0e:1e:dd:f9:ec:2d:8e:aa:0f:78:
    47:af:87:48:66:22:7f:35:eb:6f:84:b5:fb:0c:75:c9:84:04:
    fc:c7:80:bf:71:f7:bb:b7:35:df:9c:8d:9f:1d:45:2c:93:a4:
    fe:5d:6a:b2:f5:a5:e5:87:71:6d:91:2d:04:a2:55:7f:a2:8c:
    5d:c6:1d:df:42:14:ea:f2:a6:6c:be:60:0a:88:5b:e8:e0:ed:
    1c:5e:41:63:bc:af:06:16:b8:32:49:d9:9d:c7:28:93:a6:f6:
    d9:18:43:37:bc:54:32:73:f8:ef:38:39:72:46:fa:bc:bc:57:
    19:0d:54:e6:22:a6:b2:93:85:64:3f:4c:f4:ad:91:ae:05:00:
    2a:7e:ff:43:55:01:eb:39:7d:bf:b3:39:17:d9:25:f7:a3:8c:
    11:06:d3:cd:4f:dd:c4:77:b7:b8:48:c6:cb:60:87:5c:ec:75:
    10:4b:88:3e:29:02:70:c1:b5:56:77:55:ec:29:63:48:d5:e0:
    ac:ff:02:fe
    
    
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
    Comment: GPGTools - http://gpgtools.org
    
    iQEcBAEBAgAGBQJUCXg5AAoJEI6GztMrK7tlnmAH/i+WbzD1gv0sgQs3di74bLL8
    W4Enkl6Nnc/raTC5Vd7G2QJ0+84x4+6r8uSG0cJln6S/VSo1zzb9sSKUZkZTX6Vd
    mDE9elfF60UqKTBKNWyzfSlcDPRgumwjWtHxwsAM80sJ0kX335XSTIIuKvsXePIq
    Kfx9hT6aYiXOZkf4yEUrviCZJp2qCaXJHtOMSusaFm6WvwsI4Wa3Go0IJPqLH9rA
    3rjA6YRGBT9gWn1UTel0Bu1xxvXtt92rjuCDbeyyfvkkSRZl9xrggV4pP79qtxm0
    n2SvbuDBN+f9U/6pxXopVm7AVigQK+xVl6wdjK4Nw3++1sqH4r5l/OW1QbKkYRI=
    =7E1S
    -----END PGP SIGNATURE-----
  3. Alternative, smaller, simpler logo based on super-helpful feedback from Aaron Parecki, Brian Suda, Brennan Novak, Kartik Prabhu:

    I kept the multi-stranded green connection as I couldn’t find a single green which looked effective on it’s own, and the whole thing was so much flatter without the extra depth they give.

    Also, an alternative version with randomly truncated segments – symbolising sites with different levels all interacting happily

    which was worth a try, but I think it lacks balance. Probably going to stick with the first one.

  4. Initial draft of a logo:

    Got stuck for inspiration (trees are cliché and, in the UK, ironically associated with the conservatives) so looked on wikipedia, and found this beautiful photo by Stephen Ausmus:

    So made a stylised version for a laugh, and actually really like it. It shares some colours with the indiwebcamp logo

    whilst remaining stylistically separate and visualises a lot of principals: a centralised node split up into a more diverse ecosystem, but still connected by the green strands of standards (many of which are , also associated with the colour green).

    Still a WIP though — thoughts?

  5. superfeedr: @BarnabyWalters Pinging from http://blog.superfeedr.com/indieweb-microformats-fragments-subscriptions/ … to http://waterpigs.co.uk/notes/4T3FSd/  I get "Source URI does not contain a link to the target URI"

    @superfeedr thanks for the heads-up, it was a caching issue in — now squashed with your mention happily on my page! I need to make taproot show names of blog posts instead of/in addition to the first bit of text.

  6. Fixed a simple security hole in , uncovered unintentionally by an attack mounted ≈5hrs ago — intent appeared to be to create new user accounts, unintended result was the creation of a new, empty article.

    Hundreds of requests were made against URLs similar to these:

    • /articles/do.php
    • /articles/modules.php?app=user_reg
    • /articles/index.php?app=home&mod=public&act=register
    • /action/sign_up
    • /articles/sign_up.html
    • /articles/?page=login&cmd=register
    • /articles/tiki-register.php
    • /articles/index.php?page=register&action=register
    • /index.php?page=item&action=item_add
    • /articles/index.php?user/create_form/
    • /articles/join.php
    • /articles/index.php?dll=register
    • /articles/index.php?option=com_community&view=register
    • /articles/register.php
    • /articles/signup.php

    Presumably these URLs are compromised on other systems — needless to say they are far too ugly to exist in ! I’m unsure exactly why /articles was used as the base URL for the attack in all cases apart from two.

    As these URLs don’t exist, and will never exist, it should be safe enough to add server- or application-level filters immediately closing any requests which include them.

  7. Just implemented notifications in ! I get a native, first-class notification when I’m mentioned. Really easy to do with the notification API: developer.mozilla.org/en-US/docs/Web/API/notification

    Update: demo video!

    1. Navigating to my homepage and granting notification permissions
    2. Native notification from iTunes for comparison
    3. Notification of a new comment from KartikPrabhu (thanks for helping demo!)
    4. The notification is a proper, first-class notification in notification centre

    Not shown: clicking on the notification navigates to the source of the mention.

  8. now sports a composite homepage feed, meaning it’s not just notes which show up on the homepage, but also articles and music!

    Next up: breaking out various post types which I’ve been overloading notes to create, e.g. checkins, audio, photo, into their own things, remove the ability to create “named notes” (that was a stupid, yet well styled, idea) and figure out what to do with all the old notes which should actually be in other categories. Auto-detecting which templates to use for them should be easy enough, but I doubt I’ll be able to move them all into their new homes.

    All that old content will have to stay as notes for the purpose of URLs and querying, but in at least some cases can be styled better. Overall I’m comfortable with this, as it leaves history (and, more importantly, URLs) untouched without compromising the reading experience too much.

  9. Reflecting on 2013 with my . Biggest things personally have been making my second , moving to Iceland and meeting+working with all the great people over here. Lots of and progress, including a great indiewebcamp in September.

    Looking forward to 2014: more cooking, more indieweb progress, seeing more of Iceland, going to some gurdy festivals, improving hardware hacking abilities, connecting my gurdy and other devices to the web and each other.

  10. The other detail added to : phoning via SIP and a “Call Me” button. On desktop devices you’ll see it on my homepage in the Elsewhere section. Clicking it on a WebRTC-enabled browser will start an audio call with me if I’m logged into a SIP client.

    Next: using a Tropo app as a middleman for providing voicemail transcription and local numbers, improving/providing mobile UI.

  11. Notes vs Articles, again

    After deliberating a little about how to “do” a composite homepage feed, whether or not I should forget about having “notes”, “music” and “articles” and just merge them all, coupled with the fact that I already use notes for replies, I have reached a simple conclusion, of which this post is the first demonstration.

    /notes/ and what used to be “Notes” is now my de-facto dump for short-medium length chronological posts of all types. This covers notes, replies, checkins, short articles (basically named notes with more structure) and so on. Posts with a name live at /notes/DDD-name, those without names live at /notes/DDDSSS.

    /articles/ retains all content which lived there in the past. Going forward it might become more of a wiki, or a place for very long things like Data Export.

    /music/ will retain all it’s content, and be where I post standard musical notation tunes. Audio recordings of those tunes will be posted as audio posts with a link to the relevant tune.

    Hopefully these changes, along with improved templating (post-type-specific DOM templates here I come) will make finding, posting and reading posts on a much more pleasant experience.

  12. Sandeep Shetty: @BarnabyWalters Very cool. What's the use-case though? Also is this coming of the doctrine based indexer that you had?

    @sandeepshetty thanks! I’ve wanted to plot tag usage over time for a while now to see if there are any interesting patterns. I’m not using doctrine any more, in fact I’m not even using a SQL database for indexing until I really need one — data stored in yaml files, indexed by a csv file in ~210 lines of code — see also waterpigs.co.uk/notes/4TQNY2

    When I post a note, adds one to the week counter for each tag, then I have an endpoint which makes that data into an SVG.

  13. @chloeweil great article and great work implementing ! Interested in your choice to use a database for performance reasons, was that prompted by actual experience or just the cited help thread? fwiw I’m having no performance problems storing >2000 notes in flat files with a CSV file index

  14. New in this version of :

    • Improved styling (still WIP, as always)
    • stream on homepage, currently just notes but will add other things too
    • content creation/editing UIs publicly viewable (take a peek!)
    • profile photo as the icon
    • complete code restructure, now using silex for HTTP routing
    • removed tonnes of nonsense framework code, replaced with small number of ≈200 line functional libraries. Clearer, easier to navigate and much more fun to work with
    • no more SQL databases — content is indexed using a custom built 209 LOC CSV index which is surprisingly speedy, and suits my needs perfectly
    • no more support for rendering content in many forms using content negotiation (HTML, JSON, ATOM etc.) — now only HTML+microformats2 representations of content are given
    • ATOM feed shimmed with microformats2 to ATOM converter
    • Pingbacks no longer natively accepted (though they are sent), using webmention.io to shim them into webmentions for easier handling

    The local maximum has been overcome, for now. There is still much to do.