permalinks
type: Article
actor: me
content: As mentioned in Blog Post URIs, I'm a bit concerned about people replying to the 'wrong' URI for a post. That is, using the URL of a HTML page with the post rendered within it, rather than the post's permalink. I couldn't find a Microformats2 term for permalink, which I thought would be the obvious solution. The webmention 'protocol' says that when I recieve a webmention: Check the target is a valid URI on my site after following redirects. In my case, upon recieving a target of a https://rhiaro.co.uk/yyyy/mm/id, to validate it, rather than 'following a redirect' I'll actually be getting it's foaf:topic from the triplestore, which is fine. But in accepting this as the target I'm confirming to the sender that this is the correct URI to reply to. Hypothetically this non-permalink could break, breaking the reply. The permalink URI is one I'm promising won't break, so it's in everybody's interests to send the reply there. But logically, if somebody is linking to me in a post of their own, they're going to want to link to the rendered version, rather than whatever my raw version will look like (probably crappy, but that's on me, and maybe part of the problem). Replying to shortlinks Because I'm a linked data nut, my problem derives from a deliberate differentiation between a blog post and a page about a blog post. The connection between them (or from one to the other) can be discovered through RDF, but there is no HTTP redirection. I suspect this is a very much minority use-case for #indieweb folks. However, use of shortlinks is widespread (and you can see redirects are accounted for in the webmention protocol), and so as soon as someone's URL shortner breaks (or moves) permanently, unless they store the post contents and metadata themselves, they might have to have to think about this a bit. Solution? I'd like to be able to send back the correct URI (303 redirect style) so the sender can either: try again with the correct URI, or update their system with the correct URI…
name: Permalinks and webmention
published: 2015-01-04T19:17:00+0000
tag: doing
tag: Doing
tag: hacking
tag: indieweb
tag: learning
tag: linked+data
tag: mf2
tag: microformats2
tag: microformats
tag: permalinks
tag: slogd
tag: uri
tag: webmention
updated: 2015-01-04T19:17:00+0000

microformats2-rdf
type: Article
tmpcontent: # Microformats2 RDF Ontology I'm serializing the [microformats2](http://microformats.org/wiki/microformats2) vocabulary into RDF; [repo on github](https://github.com/rhiaro/mf2rdf). **Disclaimer:** This post is (not necessarily coherant) notes as I go along. Useful notes by [Tom Morris](https://tommorris.org/) about [mf2 to RDF mapping on the microformats wiki](http://microformats.org/wiki/microformats2-parsing-rdf). I updated the namespace to use the one suggested there (`http://microformats.org/profile/`). Everything starting with `h-` looks like it's a class. Typically RDF classes are capitalised so this makes me cringe, but I'll cope. Woah, there are a lot of properties. Seventy unique properties. I didn't realise. On the wiki most don't have a description, many are duplicated in the list, and none of them seem to have their own description page (and thus no URIs to refer to them with). Pasting them into a spreadsheet was the quickest way to de-dup and alphabetise them. Now I'm working through one at a time, adding descriptions and mapping them to existing properties in [FOAF](http://xmlns.com/foaf/0.1/) (because many are obvious), [VCard](http://www.w3.org/2006/vcard/ns#) (because many (all?) are derived from this), [ActivityStreams 2.0](http://rawgit.com/jasnell/w3c-socialwg-activitystreams/extended-vocabulary/activitystreams2-vocabulary.html) (because SocialWebWG) and hesitantly [Dublin Core](http://purl.org/dc/elements/1.1/) and [SIOC](http://rdfs.org/sioc/types#). Where they map to something well-described in RDF, I don't bother with `rdfs:comment` and `domain` and `range` of their own, but I'll add for those with no good `sameAs` mappings. * Is `dt-reviewed` same as `dt-published`? If not, why do reviews get special treatment with regards to differentiation between when they're written and published, and nothing else does? * Is there an official definition of `e-content`? Couldn't find one on the wiki, so made one up that is compatible with AS2.0 content, …
content: I'm serializing the microformats2 vocabulary into RDF; repo on github. Disclaimer: This post is (not necessarily coherant) notes as I go along. Useful notes by Tom Morris about mf2 to RDF mapping on the microformats wiki. I updated the namespace to use the one suggested there (http://microformats.org/profile/). Everything starting with h- looks like it's a class. Typically RDF classes are capitalised so this makes me cringe, but I'll cope. Woah, there are a lot of properties. Seventy unique properties. I didn't realise. On the wiki most don't have a description, many are duplicated in the list, and none of them seem to have their own description page (and thus no URIs to refer to them with). Pasting them into a spreadsheet was the quickest way to de-dup and alphabetise them. Now I'm working through one at a time, adding descriptions and mapping them to existing properties in FOAF (because many are obvious), VCard (because many (all?) are derived from this), ActivityStreams 2.0 (because SocialWebWG) and hesitantly Dublin Core and SIOC. Where they map to something well-described in RDF, I don't bother with rdfs:comment and domain and range of their own, but I'll add for those with no good sameAs mappings. Is dt-reviewed same as dt-published? If not, why do reviews get special treatment with regards to differentiation between when they're written and published, and nothing else does? Is there an official definition of e-content? Couldn't find one on the wiki, so made one up that is compatible with AS2.0 content, with additional caveat about including markup, which is explicit on the mf2 wiki: "The contents of something like a post, including markup and embedded elements." Are e-description and e-instructions sub-properties of e-content? I keep getting caught out by AS2.0 terms that are in the JSON-LD document but are actually deprecated (the JSON-LD contains no information other than property and class names and sometimes types; I have to remember to check the written …
name: Microformats2 RDF Ontology
published: 2015-03-22T15:00:00+0000
tag: doing
tag: Doing
tag: activitystreams
tag: as2
tag: foaf
tag: hacking
tag: indieweb
tag: json-ld
tag: linked+data
tag: mf2
tag: microformats2
tag: ontologies
tag: ontology
tag: owl
tag: https://rhiaro.co.uk/tags/rdf
tag: socialwg
tag: vcard
tag: w3c
updated: 2015-04-28T17:49:00+0100

https://rhiaro.co.uk/2015/04/1429820460
type: Add
actor: me
object: social-network-portability
published: 2015-04-23T21:21:00+0100
summary: Amy added http://microformats.org/wiki/social-network-portability to https://rhiaro.co.uk/bookmarks/
tag: data+ownership
tag: microformats2
tag: ownmydata
tag: phd
tag: profiles
tag: social+network+portability
tag: social+networks
tag: social+web
target: bookmarks

post-and-activity-types
type: Article
has reply: https://brid-gy.appspot.com/like/twitter/elfpavlik/587684624760987651/144624330
has reply: https://brid-gy.appspot.com/like/twitter/elfpavlik/587684624760987651/2413390255
has reply: https://brid-gy.appspot.com/like/twitter/elfpavlik/587684624760987651/42415655
has reply: https://brid-gy.appspot.com/like/twitter/elfpavlik/587684624760987651/432585401
has reply: https://brid-gy.appspot.com/like/twitter/elfpavlik/587684624760987651/96850673
has reply: 0052.html
has reply: 0061.html
has reply: https://twitter.com/mivesto/status/591993792170962944
has reply: https://twitter.com/SocialWebWG/status/587685860407054336
has reply: https://twitter.com/thierrymarianne/status/587710467772174336
content: Recently I've been trying to wrap my head around the implicit vs. explicit post types debate (in the Social Web WG, indieweb community, and elsewhere). Here is some analysis of the different perspectives, and report on my own experiences so far. tl;dr I think each side of the debate about explicit vs implicit types are misaligned, due to conflation of Objects and Activities. I think Objects (like blogposts) needn't have explicit types, but Activities (like the act of creating a post) should do. Thanks to Tantek, Aaron, elf Pavlik, Chris and everyone whose conversations I've listened in on in #social and #indiewebcamp IRC channels for discussing this stuff with/around me. Indieweb: focus on UI Indieweb development starts with thinking about UI. The reason for thinking about different kinds of posts comes from a desire to display some posts differently to others. But rather than declaring them outright, one can infer how to display them based on the properties of a post (see also IndieWeb Posts by aaronpk. "explicit post/object types are architecture-centric design, rather than user-centric design" - tantek, #indiewebcamp irc Posting UI Another rationale against explicit post types is that it encourages posting clients to constrain users regarding what kind of posts they can create. "...content types dictate the kinds of content you actually allow people to create with your software" - benwerd, The tyranny of content types Most mainstream social networks now have a generic posting interface, that allows one to add things like photos, videos, people tags, etc, without forcing you to choose what type of post you want to make first. Software architecture Some people started with explicit post types and ran into problems when structuring their software around this idea. TODO: Citation from aaronpk in irc in March/April that I can't find right now. URL design If you include a slug for a post type in your URLs and decide to change the post type, this is definitely a pain. I…
name: Post and Activity types
published: 2015-04-12T19:47:00+0100
tag: doing
tag: Doing
tag: activities
tag: activitystreams2.0
tag: activitystreams
tag: feed
tag: hacking
tag: indieweb
tag: mf2
tag: microformats2
tag: post+types
tag: social+web
updated: 2015-04-12T22:19:00+0100

https://rhiaro.co.uk/2015/05/1432208679
type: Note
actor: me
content: Render reposts of tweets properly
published: 2015-05-21T12:44:39+0100
summary: Amy wrote about http://vocab.amy.so/blog#Todo, http://vocab.amy.so/blog#Todo, hacking, slogd, twitter, microformats, microformats2, mf2, & parser
tag: todo
tag: Todo
tag: hacking
tag: mf2
tag: microformats2
tag: microformats
tag: parser
tag: slogd
tag: twitter

checkins
type: Article
tmpcontent: # Checkins When is it a checkin (with a note) and when is it a note (with a location)? Hot topic. I differentiate them for display purposes (currently I just show a map-marker icon next to checkins, but I'm also going to want to show them on a map and stuff). For now, my rule is: * If a post has a `location` property, which should be a URL of a place (venue/city/country/vague), it's a checkin. * A checkin *may* have a `latitude` and `longitude` (my vague checkins, eg. 'home', do not). * A checkin *may* have `content`. * If a post has a `latitude` and `longitude` and *no* `location`, it's a note with a location. * A note *should* have content. My inner semantic pedant is unhappy with attaching a lat and lon to a post directly, so I might rethink this at some point.
actor: me
content: When is it a checkin (with a note) and when is it a note (with a location)? Hot topic. I differentiate them for display purposes (currently I just show a map-marker icon next to checkins, but I'm also going to want to show them on a map and stuff). For now, my rule is: If a post has a location property, which should be a URL of a place (venue/city/country/vague), it's a checkin. A checkin may have a latitude and longitude (my vague checkins, eg. 'home', do not). A checkin may have content. If a post has a latitude and longitude and no location, it's a note with a location. A note should have content. My inner semantic pedant is unhappy with attaching a lat and lon to a post directly, so I might rethink this at some point.
latitude: 43.78205
longitude: 11.24954
name: Checkins
published: 2015-05-10T14:35:00+0100
tag: done
tag: Done
tag: checkin
tag: data+model
tag: hacking
tag: indieweb
tag: location
tag: markup
tag: microformats2
tag: slogd

generating
type: Article
tmpcontent: # Generating an ActivityStream ## Part one: posts-for-all-the-things If you've been paying attention to me IRL or in IRC lately, you'll have had me try to persuade you that activities and posts are basically the same thing. People advocating post-centric views and people advocating activity-centric views are really describing the same thing from different angles, and with slightly different data models. An activity looks generally like: ![Activity structure](https://rhiaro.co.uk/posts/201505activitystream/activity_blank.png) And a post looks generally like: ![Post structure](https://rhiaro.co.uk/posts/201505activitystream/post_blank.png) Colour coding indicates what correlates between the two. Differences: | | Activity | Post | | ---------------------------------- | ---------------------------------- | --------------------------- | | **type** | explicit | implied by properties | | **relationship to another object** | `object` | value of arbitrary property | | **meta** | some on activity, some on `result` | all on post | But you can see that the data they contain are basically the same. Bear with me. ### What are activities for? To propagate changes through a network. To tell people that somebody did something. ### What are posts for? Posts are content, an end in themselves. ### Who cares? As someone who just wants to publish stuff and interact on the web, do I care if I'm creating and pushing around posts, or activities? Probably not. I just want to do stuff, and have people see it. As a developer, I want to post objects around that contain as much data as needed, and no more. I want the right people to know when something has changed. Whether I prefer to do this with activities or posts (or JSON or HTML) is, as far as I see it, personal preference. I don't think there's an inherant advantage to one over the other. ### So which to start with? Starting with a blog perspective, the most important thing is that people see my content. Posts are my content, so I start th…
actor: me
content: Part one: posts-for-all-the-things If you've been paying attention to me IRL or in IRC lately, you'll have had me try to persuade you that activities and posts are basically the same thing. People advocating post-centric views and people advocating activity-centric views are really describing the same thing from different angles, and with slightly different data models. An activity looks generally like: And a post looks generally like: Colour coding indicates what correlates between the two. Differences: Activity Post type explicit implied by properties relationship to another object object value of arbitrary property meta some on activity, some on result all on post But you can see that the data they contain are basically the same. Bear with me. What are activities for? To propagate changes through a network. To tell people that somebody did something. What are posts for? Posts are content, an end in themselves. Who cares? As someone who just wants to publish stuff and interact on the web, do I care if I'm creating and pushing around posts, or activities? Probably not. I just want to do stuff, and have people see it. As a developer, I want to post objects around that contain as much data as needed, and no more. I want the right people to know when something has changed. Whether I prefer to do this with activities or posts (or JSON or HTML) is, as far as I see it, personal preference. I don't think there's an inherant advantage to one over the other. So which to start with? Starting with a blog perspective, the most important thing is that people see my content. Posts are my content, so I start there. I create a post, which are objects with various properties. If I want to explicitly notify someone of a post - because I'm replying to them, favouriting, bookmarking, sharing, tagging, etc, I send them a webmention. The reciever is then free to act upon this as they like: display my post on their site, update their own internal friends list, add my post to a collection…
latitude: 43.77953
longitude: 11.24911
name: Generating an ActivityStream
published: 2015-05-20T14:32:21+0100
tag: doing
tag: Doing
tag: activities
tag: activitystreams2
tag: activitystreams
tag: as2
tag: hacking
tag: indieweb
tag: microformats2
tag: posts
tag: slogd
tag: social+web
tag: socialwg

micropubbing-with
type: Article
has reply: https://brid-gy.appspot.com/like/twitter/rhiaro/602591522383646720/1111871
has reply: https://brid-gy.appspot.com/like/twitter/rhiaro/602591522383646720/1583811
has reply: https://brid-gy.appspot.com/like/twitter/rhiaro/602591522383646720/7726162
has reply: https://brid-gy.appspot.com/like/twitter/rhiaro/602591522383646720/961661
has reply: https://twitter.com/CaptSolo/status/605133212252315649
has reply: https://twitter.com/elfpavlik/status/603273389319581698
has reply: https://twitter.com/kevinmarks/status/602605164109762560
tmpcontent: # Micropubbing with json If micropub used JSON instead of (/as well as) form encoding, what might submissions look like? Aaaron Parecki brainstormed about this on our [Social APIs brainstorming doc](https://github.com/w3c-social/Social-APIs-Brainstorming/blob/master/README.md). I'm going to repeat his examples for create/update/delete here, compare them with equivalent AS2.0 json, then explore other post 'types'. Note: I've left out `@context` from all AS examples because we agreed when missing, this is implied to be "https://www.w3.org/ns/activitystreams". ## Create a new post ``` { "object": { "content": "hello world", "category": ["indieweb"], "published": "2015-05-15T13:06:00+02:00", "author": "https://rhiaro.co.uk/about#me" } } ``` No URL is given so it's implied that a new post is being created. Most of this is Aaron's example but I added the explicit published date and author, but these could also be added automatically by the micropub endpoint as the current time and the authenticated user who is sending the request. **ISSUE:** `actor` vs `author` may never get agreed upon. I think `actor` is too abstract and `author` is too specific. I'm a fan of `agent` to mean 'whatever caused this to happen' (be it human, group, process or bot) but I know that's not an easy sell either. I think one side is going to have to suck it up, and I don't know who this is going to be. AS also has `attributedTo` which may be a reasonable compromise but seems a bit clunky. Response per micropub spec: `201 Created` and the URL of the post in the `Location` header. An AS2.0 Activity for creating a new post would look like: ``` { "@type": "Post", "published": "2015-05-15T13:06:00+02:00", "actor": "https://rhiaro.co.uk/about#me", "object": { "content": "hello world", "category": ["indieweb"] } } ``` Response per ActivityPump spec: "This has the side effect that of the object that they are posting is being created." - either I missed something more specific in the spec or this remains t…
updated: 25th May 2015, 00:08 Europe/Berlin
content: If micropub used JSON instead of (/as well as) form encoding, what might submissions look like? Aaaron Parecki brainstormed about this on our Social APIs brainstorming doc. I'm going to repeat his examples for create/update/delete here, compare them with equivalent AS2.0 json, then explore other post 'types'. Note: I've left out @context from all AS examples because we agreed when missing, this is implied to be "https://www.w3.org/ns/activitystreams". Create a new post { "object": { "content": "hello world", "category": ["indieweb"], "published": "2015-05-15T13:06:00+02:00", "author": "https://rhiaro.co.uk/about#me" } } No URL is given so it's implied that a new post is being created. Most of this is Aaron's example but I added the explicit published date and author, but these could also be added automatically by the micropub endpoint as the current time and the authenticated user who is sending the request. ISSUE: actor vs author may never get agreed upon. I think actor is too abstract and author is too specific. I'm a fan of agent to mean 'whatever caused this to happen' (be it human, group, process or bot) but I know that's not an easy sell either. I think one side is going to have to suck it up, and I don't know who this is going to be. AS also has attributedTo which may be a reasonable compromise but seems a bit clunky. Response per micropub spec: 201 Created and the URL of the post in the Location header. An AS2.0 Activity for creating a new post would look like: { "@type": "Post", "published": "2015-05-15T13:06:00+02:00", "actor": "https://rhiaro.co.uk/about#me", "object": { "content": "hello world", "category": ["indieweb"] } } Response per ActivityPump spec: "This has the side effect that of the object that they are posting is being created." - either I missed something more specific in the spec or this remains to be clarified (I'm not criticising, AP is very much under-development!). I prefer the first one. Key differences: Explicit type on the activity (w…
latitude: 43.51198
longitude: 16.43697
name: Micropubbing with json
published: 2015-05-24T22:40:00+0100
tag: doing
tag: Doing
tag: activitystreams
tag: as2
tag: brainstorming
tag: hacking
tag: idea
tag: indieweb
tag: https://rhiaro.co.uk/tags/json
tag: microformats2
tag: micropub
tag: slogd
tag: social+web
tag: socialwg

take-note-weary
type: Note
has reply: https://twitter.com/andyd/status/596743766612045824
actor: me
content: Take note weary travelers, Three's Feel At Home plan does not include Germany. Silly of me to just assume it did. I spent £5 on IRC and reading the microformats wiki.
published: 2015-05-08T18:53:41+0100
summary: Amy wrote about travel, microformats2, three, & 3g
tag: 3g
tag: microformats2
tag: three
tag: travel

microformats2
type: Collection
total items: 9

https://rhiaro.co.uk/tags/microformats2
type: CollectionPage
items: micropubbing-with
items: https://rhiaro.co.uk/2015/05/1432208679
items: generating
items: checkins
items: take-note-weary
items: https://rhiaro.co.uk/2015/04/1429820460
items: post-and-activity-types
items: microformats2-rdf
items: permalinks
name: microformats2
part of: microformats2