I love this example of paying it forward:
{
"type": "entry",
"published": "2018-10-28T19:10:15Z",
"url": "https://adactio.com/links/14458",
"category": [
"serviceworkers",
"debugging",
"browsers",
"safari",
"video",
"frontend",
"development",
"playback",
"blogging",
"sharing",
"bugs"
],
"bookmark-of": [
"https://ruk.ca/content/phil-nash-and-jeremy-keith-save-safari-video-playback-day"
],
"content": {
"text": "Phil Nash and Jeremy Keith Save the Safari Video Playback Day\n\n\n\nI love this example of paying it forward:\n\n\nPhil Nash wrote a post on his site that really helped me, so\n\nI wrote a post on my site, which helped Peter, so\nPeter wrote this post on his site, which showed up via webmention on my site, and now\nthis post will help somebody else \u2026who I hope will write about it.",
"html": "<h3>\n<a class=\"p-name u-bookmark-of\" href=\"https://ruk.ca/content/phil-nash-and-jeremy-keith-save-safari-video-playback-day\">\nPhil Nash and Jeremy Keith Save the Safari Video Playback Day\n</a>\n</h3>\n\n<p>I love this example of paying it forward:</p>\n\n<ul><li>\n<a href=\"https://philna.sh/blog/2018/10/23/service-workers-beware-safaris-range-request/\">Phil Nash wrote a post on his site</a> that really helped me, so</li>\n<li>\n<a href=\"https://adactio.com/journal/14452\">I wrote a post on my site</a>, which helped Peter, so</li>\n<li>Peter wrote this post on his site, <a href=\"https://adactio.com/journal/14452#comment64243\">which showed up via webmention on my site</a>, and now</li>\n<li>this post will help somebody else \u2026who I hope will write about it.</li>\n</ul>"
},
"post-type": "bookmark",
"_id": "1284432",
"_source": "2",
"_is_read": true
}
Come discuss the alternative web protocols and standards that can enable the decentralized future we want to see. On Guidebook Wiki: indieweb/2018-10-27-mozfest
RSVP: post an indie RSVP on your own site!
{
"type": "event",
"name": "#MozFest: Decentralized Web Standards: From ActivityPub to Webmention",
"summary": "Come discuss the alternative web protocols and standards that can enable the decentralized future we want to see. On Guidebook Wiki: indieweb/2018-10-27-mozfest\nRSVP: post an indie RSVP on your own site!",
"published": "2018-10-28 07:00-0700",
"start": "2018-10-28 14:00-0700",
"end": "2018-10-28 15:00-0700",
"url": "http://tantek.com/2018/301/e1/mozfest-decentralized-web-standards",
"location": [
"https://mozillafestival.org/"
],
"content": {
"text": "When: 2018-10-28 14:00\u202615:00\nWhere: MozFest\n\nHost: Tantek \u00c7elik\n\n\n\nCome discuss the alternative web protocols and standards that can enable the decentralized future we want to see.\n\nOn Guidebook\n\nWiki: indieweb/2018-10-27-mozfest\n\n\nRSVP: post an indie RSVP on your own site!",
"html": "<p>\nWhen: <time class=\"dt-start\">2018-10-28 14:00</time>\u2026<time class=\"dt-end\">15:00</time><span>\nWhere: <a class=\"u-location h-card\" href=\"https://mozillafestival.org/\">MozFest</a>\n</span>\nHost: <a class=\"u-organizer h-card\" href=\"http://tantek.com/\">Tantek \u00c7elik</a>\n</p>\n\n<p>\nCome discuss the alternative web protocols and standards that can enable the decentralized future we want to see.\n</p>\n<ul><li>On <a href=\"https://guidebook.com/guide/147793/event/21982867/\">Guidebook</a>\n</li>\n<li>Wiki: <a href=\"https://indieweb.org/events/2018-10-27-mozfest\">indieweb/2018-10-27-mozfest</a>\n</li>\n</ul><p>\nRSVP: post an <a href=\"https://indieweb.org/rsvp\">indie RSVP</a> on your own site!\n</p>"
},
"post-type": "event",
"refs": {
"https://mozillafestival.org/": {
"type": "card",
"name": "MozFest",
"url": "https://mozillafestival.org/",
"photo": null
}
},
"_id": "1283349",
"_source": "1",
"_is_read": true
}
{
"type": "entry",
"published": "2018-10-27T19:23:40-04:00",
"url": "https://david.shanske.com/2018/10/27/simple-location-version-3-4-0-released/",
"syndication": [
"https://twitter.com/dshanske/status/1056325603677388801",
"https://news.indieweb.org/en/david.shanske.com/2018/10/27/simple-location-version-3-4-0-released/"
],
"name": "Simple Location Version 3.4.0 Released",
"content": {
"text": "I released a new version of Simple Location this evening. I had to start this project, moving it up my list of things to do because Nominatim started blocking me. I used Nominatim for looking up addresses from coordinates.\nBecause of that, I completely rewrote the system that registers new location providers so I could more easily create new ones.\nThe Nominatim provider has been switched to now use the Nominatim API provided by MapQuest(Yes, they are still around).\nYou can now use Bing and Google to lookup addresses from coordinates\nBing, Google, and Mapquest will now fill in elevation/altitude data on posts if not supplied during lookup, based on their APIs for this.\nAltitude will display if it is over 500 meters. So, right now, basically if I post on a plane.\nLocation visibility, which is a feature now built into at least one Micropub client, has been enhanced in here. It should work more reliably now.\nMapquest and HERE are new static map providers.\nThe conflict with the Jetpack plugin, which added location services in 2017 unknown to me, has been resolved.\u00a0 If you activate this plugin, it unloads the conflicting Jetpack module.\nIf there is no address to display, it will now display the coordinates.\nDark Sky is now an alternate weather provider. I was going to add Weather Underground as well, but they apparently shut down their API.\nWhen publishing using Micropub, if coordinates are provided, it automatically generates a display address if none is provided and stores the current weather conditions.\nThe default location visibility checkbox now offers any three of the visibility options\u2026 Private, Public, or Protected. Protected is show the display address but not the map or the coordinates.\nWhat\u2019s next for this plugin? Well, better logic around location visibility. Right now, if you do not set it, it goes to a global default.\nSo, I\u2019d like to include geofencing. That would be a list of zones. Zones would be a location with a radius around it that if you are inside, it would automatically set to protected and/or replace the address with a generic one. For example, if you are within 50 meters of home, it would always use a pre-identified location of \u2018Home\u2019 and/or default to a city level description.\nThe plugin supports Location providers other than the browser. This means that the plugin could query a server to get the current location of the user.\nHowever, there aren\u2019t any I\u2019ve implemented yet really. But this would allow me to query an API to get my location, which has a lot of potential in future, especially if I want to look up my historical location.\nFor example, I\u2019ve let Google store some of my location history since March of 2013. There is no API I know of to poll the data, but you can export it. I would just have to find a place to import it to. 6 years, 50mb of data. If I had some way to load it up, query it by date and time, I would be able to add location to all posts and photos that didn\u2019t have it, based on the location of my phone at the time the post was made.\nI already have a program on my phone that sends my location periodically to my home automation system, but I\u2019d have to try something different to store historical data. There are several options for this. I\u2019m tempted to write something into WordPress, as I have a tendency to build things into my website. Not sure if there is an off the shelf project to suit my needs, though I\u2019ve looked at Aaron Parecki\u2019s Compass. I could build similar functionality into my site to accommodate this, but I think I need something that both my house and my website can query.\nEither way, look to see me testing this on my upcoming trip to Indiewebcamp Berlin.\n\u00a0\n\u00a0\n\u00a0",
"html": "I released a new version of Simple Location this evening. I had to start this project, moving it up my list of things to do because Nominatim started blocking me. I used Nominatim for looking up addresses from coordinates.\n<p>Because of that, I completely rewrote the system that registers new location providers so I could more easily create new ones.</p>\n<ul><li>The Nominatim provider has been switched to now use the Nominatim API provided by MapQuest(Yes, they are still around).</li>\n<li>You can now use Bing and Google to lookup addresses from coordinates</li>\n<li>Bing, Google, and Mapquest will now fill in elevation/altitude data on posts if not supplied during lookup, based on their APIs for this.</li>\n<li>Altitude will display if it is over 500 meters. So, right now, basically if I post on a plane.</li>\n<li>Location visibility, which is a feature now built into at least one Micropub client, has been enhanced in here. It should work more reliably now.</li>\n<li>Mapquest and HERE are new static map providers.</li>\n<li>The conflict with the Jetpack plugin, which added location services in 2017 unknown to me, has been resolved.\u00a0 If you activate this plugin, it unloads the conflicting Jetpack module.</li>\n<li>If there is no address to display, it will now display the coordinates.</li>\n<li>Dark Sky is now an alternate weather provider. I was going to add Weather Underground as well, but they apparently shut down their API.</li>\n<li>When publishing using Micropub, if coordinates are provided, it automatically generates a display address if none is provided and stores the current weather conditions.</li>\n<li>The default location visibility checkbox now offers any three of the visibility options\u2026 Private, Public, or Protected. Protected is show the display address but not the map or the coordinates.</li>\n</ul><p>What\u2019s next for this plugin? Well, better logic around location visibility. Right now, if you do not set it, it goes to a global default.</p>\n<p>So, I\u2019d like to include geofencing. That would be a list of zones. Zones would be a location with a radius around it that if you are inside, it would automatically set to protected and/or replace the address with a generic one. For example, if you are within 50 meters of home, it would always use a pre-identified location of \u2018Home\u2019 and/or default to a city level description.</p>\n<p>The plugin supports Location providers other than the browser. This means that the plugin could query a server to get the current location of the user.</p>\n<p>However, there aren\u2019t any I\u2019ve implemented yet really. But this would allow me to query an API to get my location, which has a lot of potential in future, especially if I want to look up my historical location.</p>\n<p>For example, I\u2019ve let Google store some of my location history since March of 2013. There is no API I know of to poll the data, but you can export it. I would just have to find a place to import it to. 6 years, 50mb of data. If I had some way to load it up, query it by date and time, I would be able to add location to all posts and photos that didn\u2019t have it, based on the location of my phone at the time the post was made.</p>\n<p>I already have a program on my phone that sends my location periodically to my home automation system, but I\u2019d have to try something different to store historical data. There are several options for this. I\u2019m tempted to write something into WordPress, as I have a tendency to build things into my website. Not sure if there is an off the shelf project to suit my needs, though I\u2019ve looked at Aaron Parecki\u2019s Compass. I could build similar functionality into my site to accommodate this, but I think I need something that both my house and my website can query.</p>\n<p>Either way, look to see me testing this on my upcoming trip to Indiewebcamp Berlin.</p>\n<p>\u00a0</p>\n<p>\u00a0</p>\n<p>\u00a0</p>"
},
"author": {
"type": "card",
"name": "David Shanske",
"url": "https://david.shanske.com/",
"photo": "https://david.shanske.com/wp-content/uploads/avatar-privacy/cache/gravatar/2/c/2cb1f8afd9c8d3b646b4071c5ed887c970d81d625eeed87e447706940e2c403d-125.png"
},
"post-type": "article",
"_id": "1281470",
"_source": "5",
"_is_read": true
}
{
"type": "entry",
"published": "2018-10-27T15:40:43-07:00",
"url": "https://aaronparecki.com/2018/10/27/7/ownyourswarm",
"category": [
"ownyourswarm",
"indieweb"
],
"syndication": [
"https://news.indieweb.org/en/aaronparecki.com/2018/10/27/7/ownyourswarm"
],
"name": "Some OwnYourSwarm Updates",
"content": {
"text": "Today I launched some updates to OwnYourSwarm, the service that sends your Swarm checkins to your own website. It does this by watching your Swarm account and sending checkins to your site via Micropub.\u00a0\nPrivate Posts\n\nI made two changes to how OwnYourSwarm can handle private posts. Private posts are currently an experimental feature in Micropub, accomplished by adding a new property to posts called \"visibility\". The WordPress Micropub plugin already has support for this property, so if you use WordPress you can start using this feature today!\nIf you mark a checkin in Swarm as \"off-the-grid\", now OwnYourSwarm will include visibility=private in the Micropub request. Your website can recognize this property and handle setting the post as private.\nThere is an additional checkbox to have OwnYourSwarm always mark the post as private. You can use this to import all your checkins to your site as private posts in case you don't want all your checkins public on your website.\nAutomatically Add Tags to Posts\nLike OwnYourGram, there is now a way to have OwnYourSwarm always include a list of tags in your checkins. You can use this to automatically set your checkins into a specific page on your website by adding the tag \"checkin\" for example.\nWebmention Settings for Comments\n\nBy default, OwnYourSwarm will always try to send Webmentions for any responses to your checkins, such as when someone likes or comments on your checkin, as well as when Swarm itself shows the little tidbits like \"11 weeks in a row at coffee shops\" awarding coins.\n\nThere are now two additional settings you can use to decide whether you want to receive Webmentions for either type of responses. If you'd prefer to not get the Swarm coins, you can disable that. If you'd prefer not to have anybody else's comments appear on your checkins, you can disable that as well.\nI also added a user agent string when OwnYourSwarm sends webmentions so that you'll be able to identify the HTTP requests in your server logs.\nHope you enjoy continuing to own your checkins!",
"html": "<p>Today I launched some updates to <a href=\"https://ownyourswarm.p3k.io\">OwnYourSwarm</a>, the service that sends your Swarm checkins to your own website. It does this by watching your Swarm account and sending checkins to your site via <a href=\"https://micropub.net\">Micropub</a>.\u00a0</p>\n<h2>Private Posts</h2>\n\n<img src=\"https://aperture-media.p3k.io/aaronparecki.com/65d58f585e571597639a980dfb5dc178fe795ab94184771e04ff565283cd78e7.png\" alt=\"\" style=\"float:right;\" /><p>I made two changes to how OwnYourSwarm can handle private posts. Private posts are currently an experimental feature in Micropub, accomplished by adding a new property to posts called \"<a href=\"https://indieweb.org/Micropub-extensions#Visibility\">visibility</a>\". The <a href=\"https://wordpress.org/plugins/micropub/\">WordPress Micropub plugin</a> already has support for this property, so if you use WordPress you can start using this feature today!</p>\n<p>If you mark a checkin in Swarm as \"off-the-grid\", now OwnYourSwarm will include visibility=private in the Micropub request. Your website can recognize this property and handle setting the post as private.</p>\n<p>There is an additional checkbox to have OwnYourSwarm <i>always</i> mark the post as private. You can use this to import all your checkins to your site as private posts in case you don't want all your checkins public on your website.</p>\n<h2>Automatically Add Tags to Posts</h2>\n<p>Like <a href=\"https://ownyourgram.com\">OwnYourGram</a>, there is now a way to have OwnYourSwarm always include a list of tags in your checkins. You can use this to automatically set your checkins into a specific page on your website by adding the tag \"checkin\" for example.</p>\n<h2>Webmention Settings for Comments</h2>\n\n<img src=\"https://aperture-media.p3k.io/aaronparecki.com/8290d2bd302d82c81d2d39c77d1b8d45adf4f7f1c8a8a7e9849080a32044271f.jpg\" alt=\"\" /><p>By default, OwnYourSwarm will always try to send Webmentions for any responses to your checkins, such as when someone likes or comments on your checkin, as well as when Swarm itself shows the little tidbits like \"11 weeks in a row at coffee shops\" awarding coins.</p>\n\n<img src=\"https://aperture-media.p3k.io/aaronparecki.com/d80db998229a05edeb141ab5d8ecb57cee93a2cf43e7ae436dfd86cb5505b54f.png\" alt=\"\" style=\"float:right;\" /><p>There are now two additional settings you can use to decide whether you want to receive Webmentions for either type of responses. If you'd prefer to not get the Swarm coins, you can disable that. If you'd prefer not to have anybody else's comments appear on your checkins, you can disable that as well.</p>\n<p>I also added a user agent string when OwnYourSwarm sends webmentions so that you'll be able to identify the HTTP requests in your server logs.</p>\n<p>Hope you enjoy continuing to own your checkins!</p>"
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://aaronparecki.com/",
"photo": "https://aperture-media.p3k.io/aaronparecki.com/2b8e1668dcd9cfa6a170b3724df740695f73a15c2a825962fd0a0967ec11ecdc.jpg"
},
"post-type": "article",
"_id": "1279876",
"_source": "16",
"_is_read": true
}
I use it for the same things, also daily. I reply to Twitter and to the Micro.blog social network through webmentions that use mf2 on my site.
{
"type": "entry",
"published": "2018-10-27T14:01:34-04:00",
"summary": "I use it for the same things, also daily. I reply to Twitter and to the Micro.blog social network through webmentions that use mf2 on my site.",
"url": "https://eddiehinkle.com/2018/10/27/5/reply/",
"in-reply-to": [
"https://twitter.com/swentel/status/1056214204875751424?s=12"
],
"content": {
"text": "I use it for the same things, also daily. I reply to Twitter and to the Micro.blog social network through webmentions that use mf2 on my site.",
"html": "<p>I use it for the same things, also daily. I reply to Twitter and to the Micro.blog social network through webmentions that use mf2 on my site.</p>"
},
"author": {
"type": "card",
"name": "Eddie Hinkle",
"url": "https://eddiehinkle.com/",
"photo": "https://aperture-proxy.p3k.io/cc9591b69c2c835fa2c6e23745b224db4b4b431f/68747470733a2f2f656464696568696e6b6c652e636f6d2f696d616765732f70726f66696c652e6a7067"
},
"post-type": "reply",
"refs": {
"https://twitter.com/swentel/status/1056214204875751424?s=12": {
"type": "entry",
"url": "https://twitter.com/swentel/status/1056214204875751424?s=12",
"name": "https://twitter.com/swentel/status/1056214204875751424?s=12",
"post-type": "article"
}
},
"_id": "1279705",
"_source": "226",
"_is_read": true
}
@ohhelloana loved your #ViewSource talk “Please send me your blogs”! Great job!
I took photos from the second row, may I post a few? @viewsourceconf #indieweb
{
"type": "entry",
"published": "2018-10-26 05:52-0700",
"url": "http://tantek.com/2018/299/t1/loved-viewsource-talk",
"category": [
"ViewSource",
"indieweb"
],
"in-reply-to": [
"https://twitter.com/ohhelloana/status/1055721867644993536"
],
"content": {
"text": "@ohhelloana loved your #ViewSource talk \u201cPlease send me your blogs\u201d! Great job!\nI took photos from the second row, may I post a few? @viewsourceconf #indieweb",
"html": "<a class=\"h-cassis-username\" href=\"https://twitter.com/ohhelloana\">@ohhelloana</a> loved your #<span class=\"p-category\">ViewSource</span> talk \u201cPlease send me your blogs\u201d! Great job!<br />I took photos from the second row, may I post a few? <a class=\"h-cassis-username\" href=\"https://twitter.com/viewsourceconf\">@viewsourceconf</a> #<span class=\"p-category\">indieweb</span>"
},
"author": {
"type": "card",
"name": "Tantek \u00c7elik",
"url": "http://tantek.com/",
"photo": "https://aperture-media.p3k.io/tantek.com/acfddd7d8b2c8cf8aa163651432cc1ec7eb8ec2f881942dca963d305eeaaa6b8.jpg"
},
"post-type": "reply",
"refs": {
"https://twitter.com/ohhelloana/status/1055721867644993536": {
"type": "entry",
"url": "https://twitter.com/ohhelloana/status/1055721867644993536",
"name": "@ohhelloana\u2019s tweet",
"post-type": "article"
}
},
"_id": "1271969",
"_source": "1",
"_is_read": true
}
Hello from IIW! This is a post from Quill to demonstrate IndieAuth.
{
"type": "entry",
"published": "2018-10-25T06:46:01-07:00",
"url": "https://aaronparecki.com/2018/10/25/4/",
"content": {
"text": "Hello from IIW! This is a post from Quill to demonstrate IndieAuth."
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://aaronparecki.com/",
"photo": "https://aperture-media.p3k.io/aaronparecki.com/2b8e1668dcd9cfa6a170b3724df740695f73a15c2a825962fd0a0967ec11ecdc.jpg"
},
"post-type": "note",
"_id": "1264854",
"_source": "16",
"_is_read": true
}
My post on the Mozilla Hacks blog was just published! "Identity for the Decentralized Web with IndieAuth" https://hacks.mozilla.org/2018/10/dweb-identity-for-the-decentralized-web-with-indieauth/
If you're at #iiw today, I'll be at demo hour showing how this works!
{
"type": "entry",
"published": "2018-10-24T08:15:11-07:00",
"url": "https://aaronparecki.com/2018/10/24/4/dweb",
"category": [
"iiw",
"indieauth",
"dweb",
"indieweb"
],
"syndication": [
"https://twitter.com/aaronpk/status/1055115510918959106"
],
"content": {
"text": "My post on the Mozilla Hacks blog was just published! \"Identity for the Decentralized Web with IndieAuth\" https://hacks.mozilla.org/2018/10/dweb-identity-for-the-decentralized-web-with-indieauth/ \n\nIf you're at #iiw today, I'll be at demo hour showing how this works!",
"html": "My post on the Mozilla Hacks blog was just published! \"Identity for the Decentralized Web with IndieAuth\" <a href=\"https://hacks.mozilla.org/2018/10/dweb-identity-for-the-decentralized-web-with-indieauth/\"><span>https://</span>hacks.mozilla.org/2018/10/dweb-identity-for-the-decentralized-web-with-indieauth/</a> <br /><br />If you're at <a href=\"https://aaronparecki.com/tag/iiw\">#<span class=\"p-category\">iiw</span></a> today, I'll be at demo hour showing how this works!"
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://aaronparecki.com/",
"photo": "https://aperture-media.p3k.io/aaronparecki.com/2b8e1668dcd9cfa6a170b3724df740695f73a15c2a825962fd0a0967ec11ecdc.jpg"
},
"post-type": "note",
"_id": "1259156",
"_source": "16",
"_is_read": true
}
Learning about User Managed Access (UMA) and thinking about how it might be applicable to sharing private feeds in #indieweb readers. #iiw
{
"type": "entry",
"published": "2018-10-23T15:10:18-07:00",
"url": "https://aaronparecki.com/2018/10/23/18/",
"category": [
"indieweb",
"iiw"
],
"photo": [
"https://aperture-media.p3k.io/aaronparecki.com/b7c78252ee2c92e5b5cae619f3dc7a59402e08cb99b09b52c3b8c270ef7122ba.jpg"
],
"syndication": [
"https://twitter.com/aaronpk/status/1054857584790781952"
],
"content": {
"text": "Learning about User Managed Access (UMA) and thinking about how it might be applicable to sharing private feeds in #indieweb readers. #iiw",
"html": "Learning about User Managed Access (UMA) and thinking about how it might be applicable to sharing private feeds in <a href=\"https://aaronparecki.com/tag/indieweb\">#<span class=\"p-category\">indieweb</span></a> readers. <a href=\"https://aaronparecki.com/tag/iiw\">#<span class=\"p-category\">iiw</span></a>"
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://aaronparecki.com/",
"photo": "https://aperture-media.p3k.io/aaronparecki.com/2b8e1668dcd9cfa6a170b3724df740695f73a15c2a825962fd0a0967ec11ecdc.jpg"
},
"post-type": "photo",
"_id": "1254019",
"_source": "16",
"_is_read": true
}
Spent a good evening reading up on Reader-discussions and -ideas, then on refactoring the Microsub endpoint in Leesmap into separate Controllers. Very curious how Aaron this does in Aperture (which is also PHP/Laravel), but still not looking at his code until I'm done with it.
{
"type": "entry",
"published": "2018-10-23T21:22:47+0000",
"url": "https://seblog.nl/2018/10/23/4/spent-a-good-evening-reading",
"category": [
"indieweb"
],
"content": {
"text": "Spent a good evening reading up on Reader-discussions and -ideas, then on refactoring the Microsub endpoint in Leesmap into separate Controllers. Very curious how Aaron this does in Aperture (which is also PHP/Laravel), but still not looking at his code until I'm done with it.",
"html": "<p>Spent a good evening reading up on Reader-discussions and -ideas, then on refactoring the Microsub endpoint in Leesmap into separate Controllers. Very curious how Aaron this does in Aperture (which is also PHP/Laravel), but still not looking at his code until I'm done with it.</p>"
},
"post-type": "note",
"_id": "1367148",
"_source": "1366",
"_is_read": true
}
Do you know that feeling when you just get out of a rollercoaster and want more, more, more, but when you are being hoisted up in the cart, you're certainly unsure about why again? That's what I feel with IndieWebCamp Berlin right now. But I'm sure it will be fine once I'm there :)
{
"type": "entry",
"published": "2018-10-23T18:22:34+0000",
"url": "https://seblog.nl/2018/10/23/3/rollercoaster",
"category": [
"indieweb"
],
"content": {
"text": "Do you know that feeling when you just get out of a rollercoaster and want more, more, more, but when you are being hoisted up in the cart, you're certainly unsure about why again? That's what I feel with IndieWebCamp Berlin right now. But I'm sure it will be fine once I'm there :)",
"html": "<p>Do you know that feeling when you just get out of a rollercoaster and want more, more, more, but when you are being hoisted up in the cart, you're certainly unsure about why again? That's what I feel with IndieWebCamp Berlin right now. But I'm sure it will be fine once I'm there :)</p>"
},
"post-type": "note",
"_id": "1367149",
"_source": "1366",
"_is_read": true
}
Packed house for #IIW! Looking forward to three days of discussions about identity with everyone!
Ask me about: OAuth, self-hosted identity, IndieWeb.
Tomorrow I'll be talking about @Indie_Auth during demo hour!
{
"type": "entry",
"published": "2018-10-23T10:35:57-07:00",
"url": "https://aaronparecki.com/2018/10/23/11/",
"category": [
"IIW",
"indieweb",
"iiw"
],
"photo": [
"https://aperture-media.p3k.io/aaronparecki.com/32b42474b13530ddfaf835e11e41728a5c2c9b96744503308d4f1fccfa00b482.jpg"
],
"content": {
"text": "Packed house for #IIW! Looking forward to three days of discussions about identity with everyone! \n\nAsk me about: OAuth, self-hosted identity, IndieWeb. \n\nTomorrow I'll be talking about @Indie_Auth during demo hour!",
"html": "Packed house for <a href=\"https://aaronparecki.com/tag/iiw\">#<span class=\"p-category\">IIW</span></a>! Looking forward to three days of discussions about identity with everyone! <br /><br />Ask me about: OAuth, self-hosted identity, IndieWeb. <br /><br />Tomorrow I'll be talking about <a href=\"https://twitter.com/Indie_Auth\">@Indie_Auth</a> during demo hour!"
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://aaronparecki.com/",
"photo": "https://aperture-media.p3k.io/aaronparecki.com/2b8e1668dcd9cfa6a170b3724df740695f73a15c2a825962fd0a0967ec11ecdc.jpg"
},
"post-type": "photo",
"_id": "1252217",
"_source": "16",
"_is_read": true
}
Awesome post! I'd love to see some of your suggestions implemented within Together, specifically on the graph-based side. I continue to believe that the most critical problem to solve to drive Indieweb adoption is a unified experience for reading, interacting, and publishing. Pull requests are welcome! We definitely need more smart people working on Together :)
{
"type": "entry",
"published": "2018-10-22T20:33:14+00:00",
"url": "https://cleverdevil.io/2018/awesome-post-id-love-to-see-some",
"in-reply-to": [
"https://seblog.nl/2018/10/22/13/three-things-about-readers"
],
"content": {
"text": "Awesome post! I'd love to see some of your suggestions implemented within Together, specifically on the graph-based side. I continue to believe that the most critical problem to solve to drive Indieweb adoption is a unified experience for reading, interacting, and publishing. Pull requests are welcome! We definitely need more smart people working on Together :)"
},
"author": {
"type": "card",
"name": "Jonathan LaCour",
"url": "https://cleverdevil.io/profile/cleverdevil",
"photo": "https://aperture-proxy.p3k.io/77e5d6e5871324c43aebf2e3e7a5553e14578f66/68747470733a2f2f636c65766572646576696c2e696f2f66696c652f66646263373639366135663733383634656131316138323863383631653133382f7468756d622e6a7067"
},
"post-type": "reply",
"_id": "1246502",
"_source": "71",
"_is_read": true
}
It really is pretty sad and shameful. Such a missed opportunity, too. I must say, I've been so impressed with how the Indieweb community has been explaining the need for CoCs on the wiki, including responses for common objections, questions, and more. https://indieweb.org/code-of-conduct-why
{
"type": "entry",
"published": "2018-10-22T20:30:18+00:00",
"url": "https://cleverdevil.io/2018/it-really-is-pretty-sad-and-shameful",
"in-reply-to": [
"https://twitter.com/EddieHinkle/status/1054461301156691969"
],
"content": {
"text": "It really is pretty sad and shameful. Such a missed opportunity, too. I must say, I've been so impressed with how the Indieweb community has been explaining the need for CoCs on the wiki, including responses for common objections, questions, and more. https://indieweb.org/code-of-conduct-why",
"html": "It really is pretty sad and shameful. Such a missed opportunity, too. I must say, I've been so impressed with how the Indieweb community has been explaining the need for CoCs on the wiki, including responses for common objections, questions, and more. <a href=\"https://indieweb.org/code-of-conduct-why\">https://indieweb.org/code-of-conduct-why</a>"
},
"author": {
"type": "card",
"name": "Jonathan LaCour",
"url": "https://cleverdevil.io/profile/cleverdevil",
"photo": "https://aperture-proxy.p3k.io/77e5d6e5871324c43aebf2e3e7a5553e14578f66/68747470733a2f2f636c65766572646576696c2e696f2f66696c652f66646263373639366135663733383634656131316138323863383631653133382f7468756d622e6a7067"
},
"post-type": "reply",
"_id": "1246481",
"_source": "71",
"_is_read": true
}
{
"type": "entry",
"published": "2018-10-22T14:22:41+0000",
"url": "https://seblog.nl/2018/10/22/13/three-things-about-readers",
"category": [
"indieweb",
"microsub",
"readers"
],
"syndication": [
"https://news.indieweb.org/en/seblog.nl/2018/10/22/13/three-things-about-readers"
],
"name": "Three things about Readers during IndieWebCamp N\u00fcrnberg",
"content": {
"text": "Oh IndieWebCamp. You come with a few things you want to for your own website, then you do some completely other things, and after that you leave with an even longer list of things to do for your own website.\nThis year is marked as the \u2018Year of the Reader\u2019, and indeed, there was a lot of Reader talk last weekend. I really like the progress we are making with Microsub and apps like Indigenous, but I also noticed we\u2019re not there yet for me. But that\u2019s not a discouragement, quite the opposite!\nThis blogpost has three parts: first I describe the painpoints I feel at the moment, then I describe what I have been hacking on yesterday, and in the last part I share some other ideas we talked about over dinner in N\u00fcrnberg, that where not recorded in any form other than short notes on some phones.\nPart 1: The current painpoints of the Readers\nIn May, at IWC D\u00fcsseldorf, I installed Aaron\u2019s Aperture (with Watchtower in the back) on my own server, so I could start getting the joys of having my own reader as well. It was before he offered a hosted version, but more on that one later.\nSo I started using Aperture as a backend, got into Eddie\u2019s beta for Indigenous, tried to make my own frontend, added all my Twitter feeds and got distracted with my dayjob. Although I am using Twitter lists to split up the giant feed into smaller channels per topic, I could not keep up with the volume of it all. When I arrived at N\u00fcrnberg Wednesday, I had over 10k of unread posts.\nI have a problem with algorithms that sort my posts by parameters I don\u2019t know about, made by people who want to sell my attention to others. I like having an IndieWeb Reader to solve that problem. But I also have a problem with the volume of posts created by people I follow. I want a tool to manage these streams of information, so I probably need a more sophisticated algorithm than just sorting Twitter-users by channel.\nAs for my 10k unread posts: I declared bankruptcy and marked them all unread to start over. I am glad I wasn\u2019t wasting Aaron\u2019s resources for this.\nSpeaking of Aaron\u2019s resources: although there are a few other Microsub projects popping up, his Aperture is stil the dominant Microsub-server. He is limiting the services he offers to store posts only for one week to keep people from being too comfortable, but his instance is still slowly growing and there is no \u2018competitor\u2019 on the market yet.\nAs Sven put it: this is another single point of Aaron in our stack.\nThose are roughly the points I started my hackday with. I\u2019m not suggesting I have solved them at all, but I tried \u2013 as we say in Dutch \u2013 to hit multiple flies in one clap.\nPart 2: A graph-based IndieWeb-reader\nThis part gets a bit technical, feel free to scroll ahead to the section about How it looks in the Reader if you\u2019re more into the main idea behind this reader. Also watch the screenshots.\nA little while ago I came across the topic of graph-databases and checked out Neo4j. It\u2019s quite a cool tool. I still have very little experience with it, but the basics are not that hard.\nThe current iteration of this site is written in Kirby and stores posts in .txt files, in a folder structure like 2018/295/13/entry.txt, in which the numbers refer to the year, the day of the year and the number of the post of the day. In order to make things like categories searchable across my 9000+ posts, I index them in an SQLite database. The nice thing about this database, is that I can throw away the contents at any time and just regenerate it from the .txt files.\nThe original idea I had in mind with the graph database, was to use it as this indexing database. Neo4j can still answer questions like \u2018give me all entries with the #indieweb tag\u2019, so I can use it for that. Some posts, however, point to other posts outside of my site. Things like bookmarks and likes have external URLs associated with them, and it would be nice to plot those as a graph. In N\u00fcrnberg, however, I realised that it\u2019s cool as an index for my own posts, but even more powerful for an index for a Reader.\nGetting it graphed\nSo yesterday I started a Microsub server that does that. It\u2019s really not that far, as I have to manually point it at feeds to import, but it\u2019s a base. Take a look, for example, at the following graph I got after importing Aaron\u2019s main feed, Aaron\u2019s like-feed and my own like-feed:\nThere is something wrong with my own authorship discovery on feeds, but I placed posts on Seblog near each other. As you can see, there are a lot of posts by Aaron, some of which are likes, which point to other posts (which have authors as well). Aaron likes multiple posts my Joschi. Also note that I like one of those posts too.\nThe importing algorithm currently looks something like this:\nfetch the feed (using XRay);\nfor every entry, save the entry as an (:Entry) node, storing the full jf2-JSON in a content property, as well as some special properties like published and url for better indexing;\nif there is an author:\nsave the author as an (:Author) node, with name and url properties;\nsave the relation between these nodes as a -[:AUTHOR_OF]-> relation;\n\nif the entry has a like-of property:\nfetch the liked entry;\nstore the liked entry as another (:Entry) node;\nsave the relation between the entries as a -[:LIKES]-> relation.\n\nOf course, this can be extended for bookmarks, replies, any mentions really. Note that these relations have a direction, just like a like-post has a direction.\nQuerying the graph\nLooking at the graph provided with Neo4j Desktop is really cool, but it\u2019s not yet a Reader. Luckily that\u2019s not the only output. You can actually query this stuff.\nI made a Microsub stub endpoint (without authorization) that could return timelines for three different pre-defined channels: \u2018Latest posts\u2019, \u2018Checkins\u2019 and \u2018Liked posts\u2019. Let me walk you through the queries involved.\nIn Neo4j\u2019s query language named Cypher, you can form SQL-like statements with a bit of ASCII-art to get your data out. It is made out of two parts: a MATCH and a RETURN. (There are others, like CREATE, but this pair is most useful in this context.)\nThe query below matches any node ((n)) with the label :Entry, and names those e. It then returns 100 of them, ordered by the published date.\nMATCH (e:Entry)\nRETURN e \n ORDER BY e.published DESC \n LIMIT 100\nThe next query does exactly the same, but filters by the post_type of checkin:\nMATCH (e:Entry {post_type: \"checkin\"})\nRETURN e \n ORDER BY e.published DESC \n LIMIT 100\nI believe it\u2019s also possible to create the same query by adding a WHERE e.post_type = \"checkin\" as a second line, and I have no idea what the difference is. The above example is more ASCII-like, but, it gets even better. Say that we would like to see only posts by Aaron:\nMATCH (aaron:Author)-[:AUTHOR_OF]->(e) \n WHERE aaron.url = \"https://aaronparecki.com/\"\nRETURN e LIMIT 100\nThe (n) resembles a node (of any kind, unless specificly tagged), and the -[r]- represents the relation, in our query even in a certain direction.\nNow the last query is the most interesting. (Any Neo4j experts out there: please tell me how performant this would be on a bigger data collection.)\nMATCH (entry:Entry)-[:LIKES]->(liked:Entry)\n WITH liked, count(entry) AS likes\nRETURN liked\n ORDER BY likes DESC, liked.published DESC \n LIMIT 100\nThis one looks for entries that like other entries. It then counts the number of entries that like these newly discovered liked entries, and orders the result by that.\nHow it looks in the Reader\nIf you scroll back to the screenshot of the graph above, you will see that there is one post by Joschi, that is liked by Aaron, that I also liked. This one post is now liked by two people in my graph, and thus it will show up above all other posts.\nHere is a screenshot of the result of that query in the reader:\nNote that these are all posts that do not appear in any of the feeds I follow in this test-reader: in this reader I only follow Aaron, his likes and my own likes. I have discovered new interesting posts by looking at the likes my friends post.\nAs a bonus, to take it one step further, I can also actively look for posts of people I do not follow, with something like this (completely untested) query:\nMATCH (me {url: \"https://seblog.nl/\"}),\n (entry:Entry)-[:LIKES]->(liked:Entry)<-[:AUTHOR_OF]-\n (:Author)<-[:FOLLOWS]-(follower)\n WHERE NOT me <> follower \n WITH liked, count(entry) AS likes\nRETURN liked \n ORDER BY likes DESC, liked.published DESC \n LIMIT 100\nThat\u2019s just hard to do in SQL.\nI will try to hack on it some more, to get a really functional reader with this graph as a database behind it.\nPart 3: Some other strategies worth exploring\nSo in the previous part, I got kind of carried away with explaining how this graph stuff works. Let me get back to the Reader experience itself. This part consists more of ideas that are not yet implemented by any reader. If you feel inspired, go ahead and make something.\nFiltering feed data\nIn the cocktailbar last night (elitists as we are), we discussed the place of my graph-based Reader (codename Leesmap) next to Aperture. It\u2019s sad that, in order to discover these posts liked by friends, you will need to switch your full Reader backend from Aperture to Leesmap.\nWe discussed that it would be nice to have an way of using Leesmap with Aperture as a sort of plugin. Leesmap could then receive posts from Aperture, index them, and create a few custom channels to fill with interesting posts.\nAny Microsub server could of course use the same mechanism to also have Leesmap plug into it, and others could make filters too, for example spam-filtering or crazy Machine Learning stuff.\nWe need more thought about how such interaction would look like, but the nice thing is that you can use one server to savely store your data, regardless of the fancy filtering services you choose to use as well.\nMore ways to combat feed overwhelm\nBefore IndieWebCamp, we had a discussion about Readers in a traditional N\u00fcrnberger restaurant. Here also, people came up with some ideas to deal with accruing unread-counts.\nOne idea came from how Aperture deletes posts after 7 days. This actually prevents the overload. It would be nice if you can tell your reader that, for example your Twitter feed, is ephemeral and that the posts can be discarded if you did not read them in time.\nOne other idea that came up was to keep track of the average time between posts of a certain feed. This way a Reader could boost posts when they are from a feed that is not regularly updated. These kind of posts are usually lost in piles of more posts from more frequently updates feeds.\nYet a last idea was to tell your reader to leave out posts with certain words for a small period of time. This can come in handy when you haven\u2019t watched the newest episode of Game of Thrones yet, but want to stay connected to your feeds without spoilers.\nThis year really is the year of the Reader and it\u2019s really exciting. I will continue to work on Leesmap a bit more, and share progress if I make some. Hope you do too!",
"html": "<p>Oh IndieWebCamp. You come with a few things you want to for your own website, then you do some completely other things, and after that you leave with an even longer list of things to do for your own website.</p>\n<p>This year is marked as the \u2018Year of the Reader\u2019, and indeed, there was a lot of Reader talk last weekend. I really like the progress we are making with <a href=\"https://indieweb.org/Microsub\">Microsub</a> and apps like <a href=\"https://github.com/EdwardHinkle/indigenous-ios\">Indigenous</a>, but I also noticed we\u2019re not there yet for me. But that\u2019s not a discouragement, quite the opposite!</p>\n<p>This blogpost has three parts: first I describe the painpoints I feel at the moment, then I describe what I have been hacking on yesterday, and in the last part I share some other ideas we talked about over dinner in N\u00fcrnberg, that where not recorded in any form other than short notes on some phones.</p>\n<h2>Part 1: The current painpoints of the Readers</h2>\n<p>In May, at IWC D\u00fcsseldorf, I installed <a href=\"https://aaronparecki.com\">Aaron</a>\u2019s <a href=\"https://aperture.p3k.io/\">Aperture</a> (with <a href=\"https://github.com/aaronpk/watchtower\">Watchtower</a> in the back) on my own server, so I could start getting the joys of having my own reader as well. It was before he offered a hosted version, but more on that one later.</p>\n<p>So I started using Aperture as a backend, got into Eddie\u2019s beta for Indigenous, tried to make my own frontend, added all my Twitter feeds and got distracted with my dayjob. Although I am using Twitter lists to split up the giant feed into smaller channels per topic, I could not keep up with the volume of it all. When I arrived at N\u00fcrnberg Wednesday, I had over 10k of unread posts.</p>\n<p>I have a problem with algorithms that sort my posts by parameters I don\u2019t know about, made by people who want to sell my attention to others. I like having an IndieWeb Reader to solve that problem. But I also have a problem with the volume of posts created by people I follow. I want a tool to manage these streams of information, so I probably need a more sophisticated algorithm than just sorting Twitter-users by channel.</p>\n<p>As for my 10k unread posts: I declared bankruptcy and marked them all unread to start over. I am glad I wasn\u2019t wasting Aaron\u2019s resources for this.</p>\n<p>Speaking of Aaron\u2019s resources: although there are a few other Microsub projects popping up, his Aperture is stil the dominant Microsub-server. He is limiting the services he offers to store posts only for one week to keep people from being too comfortable, but his instance is still slowly growing and there is no \u2018competitor\u2019 on the market yet.</p>\n<p>As <a href=\"https://svenknebel.de\">Sven</a> put it: this is <em>another single point of Aaron</em> in our stack.</p>\n<p>Those are roughly the points I started my hackday with. I\u2019m not suggesting I have solved them at all, but I tried \u2013 as we say in Dutch \u2013 to hit multiple flies in one clap.</p>\n<h2>Part 2: A graph-based IndieWeb-reader</h2>\nThis part gets a bit technical, feel free to scroll ahead to the section about <b>How it looks in the Reader</b> if you\u2019re more into the main idea behind this reader. Also watch the screenshots.\n<p>A little while ago I came across the topic of graph-databases and checked out Neo4j. It\u2019s quite a cool tool. I still have very little experience with it, but the basics are not that hard.</p>\n<p>The current iteration of this site is written in Kirby and stores posts in <code>.txt</code> files, in a folder structure like <code>2018/295/13/entry.txt</code>, in which the numbers refer to the year, the day of the year and the number of the post of the day. In order to make things like categories searchable across my 9000+ posts, I index them in an SQLite database. The nice thing about this database, is that I can throw away the contents at any time and just regenerate it from the <code>.txt</code> files.</p>\n<p>The original idea I had in mind with the graph database, was to use it as this indexing database. Neo4j can still answer questions like \u2018give me all entries with the <a href=\"https://seblog.nl/category/indieweb\">#indieweb</a> tag\u2019, so I can use it for that. Some posts, however, point to other posts outside of my site. Things like bookmarks and likes have external URLs associated with them, and it would be nice to plot those as a graph. In N\u00fcrnberg, however, I realised that it\u2019s cool as an index for my own posts, but even more powerful for an index for a Reader.</p>\n<h3>Getting it graphed</h3>\n<p>So yesterday I started a Microsub server that does that. It\u2019s really not that far, as I have to manually point it at feeds to import, but it\u2019s a base. Take a look, for example, at the following graph I got after importing Aaron\u2019s main feed, Aaron\u2019s like-feed and my own like-feed:</p>\n<a href=\"https://aperture-proxy.p3k.io/92f0f999174797f98b7d147209cae1ef34fef213/68747470733a2f2f7365626c6f672e6e6c2f636f6e74656e742f323031382f3239352f3134323234312d31332f6c696b65732d6f6e2d612d67726170682e6a7067\"><img src=\"https://aperture-proxy.p3k.io/92f0f999174797f98b7d147209cae1ef34fef213/68747470733a2f2f7365626c6f672e6e6c2f636f6e74656e742f323031382f3239352f3134323234312d31332f6c696b65732d6f6e2d612d67726170682e6a7067\" alt=\"\" /></a><p>There is something wrong with my own authorship discovery on feeds, but I placed posts on Seblog near each other. As you can see, there are a lot of posts by Aaron, some of which are likes, which point to other posts (which have authors as well). Aaron likes multiple posts my Joschi. Also note that I like one of those posts too.</p>\n<p>The importing algorithm currently looks something like this:</p>\n<ol><li>fetch the feed (using XRay);</li>\n<li>for every entry, save the entry as an <code>(:Entry)</code> node, storing the full jf2-JSON in a <code>content</code> property, as well as some special properties like <code>published</code> and <code>url</code> for better indexing;</li>\n<li>if there is an author:\n<ol><li>save the author as an <code>(:Author)</code> node, with <code>name</code> and <code>url</code> properties;</li>\n<li>save the relation between these nodes as a <code>-[:AUTHOR_OF]-></code> relation;</li>\n</ol></li>\n<li>if the entry has a <code>like-of</code> property:\n<ol><li>fetch the liked entry;</li>\n<li>store the liked entry as another <code>(:Entry)</code> node;</li>\n<li>save the relation between the entries as a <code>-[:LIKES]-></code> relation.</li>\n</ol></li>\n</ol><p>Of course, this can be extended for bookmarks, replies, any mentions really. Note that these relations have a direction, just like a like-post has a direction.</p>\n<h3>Querying the graph</h3>\n<p>Looking at the graph provided with Neo4j Desktop is really cool, but it\u2019s not yet a Reader. Luckily that\u2019s not the only output. You can actually query this stuff.</p>\n<p>I made a Microsub stub endpoint (without authorization) that could return timelines for three different pre-defined channels: \u2018Latest posts\u2019, \u2018Checkins\u2019 and \u2018Liked posts\u2019. Let me walk you through the queries involved.</p>\n<p>In Neo4j\u2019s query language named Cypher, you can form SQL-like statements with a bit of ASCII-art to get your data out. It is made out of two parts: a <code>MATCH</code> and a <code>RETURN</code>. (There are others, like <code>CREATE</code>, but this pair is most useful in this context.)</p>\n<p>The query below matches any node (<code>(n)</code>) with the label <code>:Entry</code>, and names those <code>e</code>. It then returns 100 of them, ordered by the <code>published</code> date.</p>\n<pre><code>MATCH (e:Entry)\nRETURN e \n ORDER BY e.published DESC \n LIMIT 100</code></pre>\n<p>The next query does exactly the same, but filters by the <code>post_type</code> of <code>checkin</code>:</p>\n<pre><code>MATCH (e:Entry {post_type: \"checkin\"})\nRETURN e \n ORDER BY e.published DESC \n LIMIT 100</code></pre>\n<p>I believe it\u2019s also possible to create the same query by adding a <code>WHERE e.post_type = \"checkin\"</code> as a second line, and I have no idea what the difference is. The above example is more ASCII-like, but, it gets even better. Say that we would like to see only posts by Aaron:</p>\n<pre><code>MATCH (aaron:Author)-[:AUTHOR_OF]->(e) \n WHERE aaron.url = \"https://aaronparecki.com/\"\nRETURN e LIMIT 100</code></pre>\n<p>The <code>(n)</code> resembles a node (of any kind, unless specificly tagged), and the <code>-[r]-</code> represents the relation, in our query even in a certain direction.</p>\n<p>Now the last query is the most interesting. (Any Neo4j experts out there: please tell me how performant this would be on a bigger data collection.)</p>\n<pre><code>MATCH (entry:Entry)-[:LIKES]->(liked:Entry)\n WITH liked, count(entry) AS likes\nRETURN liked\n ORDER BY likes DESC, liked.published DESC \n LIMIT 100</code></pre>\n<p>This one looks for entries that like other entries. It then counts the number of entries that like these newly discovered liked entries, and orders the result by that.</p>\n<h3>How it looks in the Reader</h3>\n<p>If you scroll back to the screenshot of the graph above, you will see that there is one post by Joschi, that is liked by Aaron, that I also liked. This one post is now liked by two people in my graph, and thus it will show up above all other posts.</p>\n<p>Here is a screenshot of the result of that query in the reader:</p>\n<img src=\"https://aperture-proxy.p3k.io/4e1a7531b2f467e10e5cb71f6d561f4a8deb3ca5/68747470733a2f2f7365626c6f672e6e6c2f636f6e74656e742f323031382f3239352f3134323234312d31332f726573756c742d696e2d7265616465722e6a7067\" alt=\"\" /><p>Note that these are all posts that do not appear in any of the feeds I follow in this test-reader: in this reader I only follow Aaron, his likes and my own likes. I have discovered new interesting posts by looking at the likes my friends post.</p>\n<p>As a bonus, to take it one step further, I can also actively look for posts of people I do not follow, with something like this (completely untested) query:</p>\n<pre><code>MATCH (me {url: \"https://seblog.nl/\"}),\n (entry:Entry)-[:LIKES]->(liked:Entry)<-[:AUTHOR_OF]-\n (:Author)<-[:FOLLOWS]-(follower)\n WHERE NOT me <> follower \n WITH liked, count(entry) AS likes\nRETURN liked \n ORDER BY likes DESC, liked.published DESC \n LIMIT 100</code></pre>\n<p>That\u2019s just hard to do in SQL.</p>\n<p>I will try to hack on it some more, to get a really functional reader with this graph as a database behind it.</p>\n<h2>Part 3: Some other strategies worth exploring</h2>\n<p>So in the previous part, I got kind of carried away with explaining how this graph stuff works. Let me get back to the Reader experience itself. This part consists more of ideas that are not yet implemented by any reader. If you feel inspired, go ahead and make something.</p>\n<h3>Filtering feed data</h3>\n<p>In the <a href=\"https://seblog.nl/2018/10/21/9\">cocktailbar</a> last night (elitists as we are), we discussed the place of my graph-based Reader (codename Leesmap) next to Aperture. It\u2019s sad that, in order to discover these posts liked by friends, you will need to switch your full Reader backend from Aperture to Leesmap.</p>\n<p>We discussed that it would be nice to have an way of using Leesmap with Aperture as a sort of plugin. Leesmap could then receive posts from Aperture, index them, and create a few custom channels to fill with interesting posts.</p>\n<p>Any Microsub server could of course use the same mechanism to also have Leesmap plug into it, and others could make filters too, for example spam-filtering or crazy Machine Learning stuff.</p>\n<p>We need more thought about how such interaction would look like, but the nice thing is that you can use one server to savely store your data, regardless of the fancy filtering services you choose to use as well.</p>\n<h3>More ways to combat feed overwhelm</h3>\n<p>Before IndieWebCamp, we had a discussion about Readers in a traditional N\u00fcrnberger restaurant. Here also, people came up with some ideas to deal with accruing unread-counts.</p>\n<p>One idea came from how Aperture deletes posts after 7 days. This actually prevents the overload. It would be nice if you can tell your reader that, for example your Twitter feed, is ephemeral and that the posts can be discarded if you did not read them in time.</p>\n<p>One other idea that came up was to keep track of the average time between posts of a certain feed. This way a Reader could boost posts when they are from a feed that is not regularly updated. These kind of posts are usually lost in piles of more posts from more frequently updates feeds.</p>\n<p>Yet a last idea was to tell your reader to leave out posts with certain words for a small period of time. This can come in handy when you haven\u2019t watched the newest episode of Game of Thrones yet, but want to stay connected to your feeds without spoilers.</p>\n<p>This year really is the year of the Reader and it\u2019s really exciting. I will continue to work on Leesmap a bit more, and share progress if I make some. Hope you do too!</p>"
},
"post-type": "article",
"_id": "1367150",
"_source": "1366",
"_is_read": true
}
{
"type": "entry",
"published": "2018-10-21T20:41:33-04:00",
"url": "https://david.shanske.com/2018/10/21/version-2-0-of-the-micropub-plugin-released/",
"syndication": [
"https://news.indieweb.org/en/david.shanske.com/2018/10/21/version-2-0-of-the-micropub-plugin-released/"
],
"name": "Version 2.0 of the Micropub Plugin Released",
"content": {
"text": "At the Indieweb Summit in June, someone said something to me that made me decide to embark on a major rewrite of the Micropub endpoint for WordPress.\nFor those of you not familiar with it, Micropub is a standard that allows for you to publish to a website.\nThe major work on this actually finished in August, but due to some bug issues, most of them in the accompanying IndieAuth plugin, that affected some of the testers, I held off on releasing the plugin till today. If there is anyone still experiencing issues, please open an issue on the Micropub plugin Github repository.\nThe core functionality of the plugin remains the same, as does much of the original code. So, what changed?\nThe plugin is no longer a single file. The code that handles the endpoint, the code that handles authorization, and the code that handles rendering are now separated.\nThe code no longer works outside of WordPress.\nThe original design didn\u2019t log the user into WordPress. It determined which user was supposed to be represented and posted as them. If it couldn\u2019t figure out what user was represented, it posted it anyway, which is no longer permitted.\u00a0 The new version is much better integrated into the WordPress stack, which admittedly revealed some new login issues.\nThe Micropub endpoint is now implemented using the WordPress REST API functionality. Again, this means that it is implemented inside functionality built into WordPress for creating custom endpoints as opposed to the previous system, where a query variable bypassed the WordPress load and substituted a separate one. It also has the positive advantage of a pretty permalink for the endpoint(wp-json/micropub/1.0/endpoint).\nDozens of little bugfixes and checks to remove nagging error notices\nImproved error handling\nFixes to better comply with the Micropub spec, which was finalized after the initial creation of this plugin\nA nag for those who use the plugin on a site without encryption(http as opposed to https). It can be disabled if you want to live dangerously.\nAnd only one major new feature. A media endpoint. A media endpoint handles uploading of media files and hands back a URL to the Micropub endpoint. This one uploads to the WordPress Media Library.\nThe Post Kinds update last week already ensured that Post Kinds will work well with the changes.\n\u00a0",
"html": "At the Indieweb Summit in June, someone said something to me that made me decide to embark on a major rewrite of the Micropub endpoint for WordPress.\n<p>For those of you not familiar with it, Micropub is a standard that allows for you to publish to a website.</p>\n<p>The major work on this actually finished in August, but due to some bug issues, most of them in the accompanying IndieAuth plugin, that affected some of the testers, I held off on releasing the plugin till today. If there is anyone still experiencing issues, please open an issue on the Micropub plugin <a href=\"https://github.com/indieweb/wordpress-micropub\">Github repository</a>.</p>\n<p>The core functionality of the plugin remains the same, as does much of the original code. So, what changed?</p>\n<ul><li>The plugin is no longer a single file. The code that handles the endpoint, the code that handles authorization, and the code that handles rendering are now separated.</li>\n<li>The code no longer works outside of WordPress.</li>\n<li>The original design didn\u2019t log the user into WordPress. It determined which user was supposed to be represented and posted as them. If it couldn\u2019t figure out what user was represented, it posted it anyway, which is no longer permitted.\u00a0 The new version is much better integrated into the WordPress stack, which admittedly revealed some new login issues.</li>\n<li>The Micropub endpoint is now implemented using the WordPress REST API functionality. Again, this means that it is implemented inside functionality built into WordPress for creating custom endpoints as opposed to the previous system, where a query variable bypassed the WordPress load and substituted a separate one. It also has the positive advantage of a pretty permalink for the endpoint(wp-json/micropub/1.0/endpoint).</li>\n<li>Dozens of little bugfixes and checks to remove nagging error notices</li>\n<li>Improved error handling</li>\n<li>Fixes to better comply with the Micropub spec, which was finalized after the initial creation of this plugin</li>\n<li>A nag for those who use the plugin on a site without encryption(http as opposed to https). It can be disabled if you want to live dangerously.</li>\n</ul><p>And only one major new feature. A media endpoint. A media endpoint handles uploading of media files and hands back a URL to the Micropub endpoint. This one uploads to the WordPress Media Library.</p>\n<p>The Post Kinds update last week already ensured that Post Kinds will work well with the changes.</p>\n<p>\u00a0</p>"
},
"author": {
"type": "card",
"name": "David Shanske",
"url": "https://david.shanske.com/",
"photo": "https://david.shanske.com/wp-content/uploads/avatar-privacy/cache/gravatar/2/c/2cb1f8afd9c8d3b646b4071c5ed887c970d81d625eeed87e447706940e2c403d-125.png"
},
"post-type": "article",
"_id": "1241142",
"_source": "5",
"_is_read": true
}
Just pushed Version 2.0 of the Micropub plugin to the WordPress repository and am using a Micropub client to write this note about it.
{
"type": "entry",
"published": "2018-10-21T20:09:42-04:00",
"url": "https://david.shanske.com/2018/10/21/2112/",
"syndication": [
"https://twitter.com/dshanske/status/1054162866746593281"
],
"content": {
"text": "Just pushed Version 2.0 of the Micropub plugin to the WordPress repository and am using a Micropub client to write this note about it."
},
"author": {
"type": "card",
"name": "David Shanske",
"url": "https://david.shanske.com/",
"photo": "https://david.shanske.com/wp-content/uploads/avatar-privacy/cache/gravatar/2/c/2cb1f8afd9c8d3b646b4071c5ed887c970d81d625eeed87e447706940e2c403d-125.png"
},
"post-type": "note",
"_id": "1241143",
"_source": "5",
"_is_read": true
}
{
"type": "entry",
"published": "2018-10-21T16:51:56+02:00",
"url": "https://aaronparecki.com/2018/10/21/17/indiewebcamp-live",
"category": [
"indiewebcamp"
],
"syndication": [
"https://twitter.com/aaronpk/status/1054022484989636608"
],
"content": {
"text": "We're starting demos at @IndieWebCamp N\u00fcrnberg! Livestream is here \ud83d\udcfa\u27a1 https://www.youtube.com/watch?v=QZxDltB4_fo",
"html": "We're starting demos at <a href=\"https://indieweb.org/IndieWebCamps\">@IndieWebCamp</a> N\u00fcrnberg! Livestream is here <a href=\"https://aaronparecki.com/emoji/%F0%9F%93%BA\">\ud83d\udcfa</a>\u27a1 <a href=\"https://www.youtube.com/watch?v=QZxDltB4_fo\"><span>https://</span>www.youtube.com/watch?v=QZxDltB4_fo</a>"
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://aaronparecki.com/",
"photo": "https://aperture-media.p3k.io/aaronparecki.com/2b8e1668dcd9cfa6a170b3724df740695f73a15c2a825962fd0a0967ec11ecdc.jpg"
},
"post-type": "note",
"_id": "1238357",
"_source": "16",
"_is_read": true
}
Reading @adactio's Going Offline and learning about how to use Service Workers at #indiewebcamp! It's very nice to read someone's words to guide you through the otherwise obtuse syntax and APIs. https://abookapart.com/products/going-offline
{
"type": "entry",
"published": "2018-10-21T11:17:59+02:00",
"url": "https://aaronparecki.com/2018/10/21/13/indiewebcamp",
"category": [
"indiewebcamp",
"indieweb"
],
"syndication": [
"https://twitter.com/aaronpk/status/1053938450477412352"
],
"content": {
"text": "Reading @adactio's Going Offline and learning about how to use Service Workers at #indiewebcamp! It's very nice to read someone's words to guide you through the otherwise obtuse syntax and APIs. https://abookapart.com/products/going-offline",
"html": "Reading <a href=\"https://twitter.com/adactio\">@adactio</a>'s Going Offline and learning about how to use Service Workers at <a href=\"https://aaronparecki.com/tag/indiewebcamp\">#<span class=\"p-category\">indiewebcamp</span></a>! It's very nice to read someone's words to guide you through the otherwise obtuse syntax and APIs. <a href=\"https://abookapart.com/products/going-offline\"><span>https://</span>abookapart.com/products/going-offline</a>"
},
"author": {
"type": "card",
"name": "Aaron Parecki",
"url": "https://aaronparecki.com/",
"photo": "https://aperture-media.p3k.io/aaronparecki.com/2b8e1668dcd9cfa6a170b3724df740695f73a15c2a825962fd0a0967ec11ecdc.jpg"
},
"post-type": "note",
"_id": "1237416",
"_source": "16",
"_is_read": true
}
I have shared my Micropub action for @DraftsApp to the actions directory – https://actions.getdrafts.com/a/1QC
{
"type": "entry",
"published": "2018-10-18T18:06:06+00:00",
"url": "https://cleverdevil.io/2018/i-have-shared-my-micropub-action-for",
"syndication": [
"https://twitter.com/cleverdevil/status/1052984193477763073"
],
"content": {
"text": "I have shared my Micropub action for @DraftsApp to the actions directory \u2013 https://actions.getdrafts.com/a/1QC",
"html": "I have shared my Micropub action for @DraftsApp to the actions directory \u2013 <a href=\"https://actions.getdrafts.com/a/1QC\">https://actions.getdrafts.com/a/1QC</a>"
},
"author": {
"type": "card",
"name": "Jonathan LaCour",
"url": "https://cleverdevil.io/profile/cleverdevil",
"photo": "https://aperture-proxy.p3k.io/77e5d6e5871324c43aebf2e3e7a5553e14578f66/68747470733a2f2f636c65766572646576696c2e696f2f66696c652f66646263373639366135663733383634656131316138323863383631653133382f7468756d622e6a7067"
},
"post-type": "note",
"_id": "1221833",
"_source": "71",
"_is_read": true
}