While it has some rough edges, the Webmention protocol has a lot going for it. One of the nice things about it is that it’s easy to add support via a third-party endpoint, such as webmention.io, which is what I (and many others) use.
There’s a few things I wish were better, though, and I think these can all be addressed by the endpoint itself, while remaining within the specification as it’s written today. I would be tempted to write an endpoint that works this way, if I weren’t already overwhelmed with other projects.
Definitely support the webmention.io API. There’s a lot of folks already using that to retrieve mentions to display them on their site, and I see no reason for that to change.
Having some form of moderation would be nice. Mentions at their core should be kept perpetually but with a disposition of accept/reject/pending, and domains should also have a default disposition (which defaults to pending). When a new webmention comes in, it should get the domain’s default disposition (along with an unmoderated flag), and then when moderating them, the user should be able to change the default disposition for the domain.
Mentions should be periodically refreshed to see if they’re still valid. The refresh interval can be some form of slow exponential growth, like the Fibonacci sequence or something. Whenever the status of the mention changes, that should reset the refresh interval. Mentions which have disappeared should not be rendered while they’re invalid, and the moderation queue should also show a section for “approved but disappeared” mentions.
When a mention is sent or refreshed, it should also get a source and destination pointer; track the mention in terms of the original URLs provided, but they should be displayed and fetched based on what their current URL is, after chasing redirections or the like.
Relatedly, multiple incoming mentions should be consolidated based on what their source and destination URLs resolve to. For example, if Alice pings Bob from http://alice.example.com/1/first-entry → https://bob.example.org/blog/hello.html, and then Alice’s URL updates to https://alice.example.com/blog/1/First-Entry, if Alice’s site re-sends backfill pings, the endpoint should only report a single ping that comes from https://alice.example.com/blog/1/First-Entry. Likewise, if Bob’s URL changes to https://bob.example.org/weblog/hello, when Bob’s site retrieves mentions for the new URL it should also include mentions that went to the old URL.
Obviously for this case there will be a period of time between a site’s URLs changing and the original pings being refreshed, but maybe a new mention to an older target can also trigger a refresh of existing mentions to see if they’re subject to consolidation.
Also the consolidation should only happen at the retrieval level; the original source/destination URLs should always be preserved, since it’s always possible for an old URL to become unique again.
There should also be some automatic consolidation of pings that have the same URL aside from the scheme; webmention.js handles this on the rendering end but it’d be nice if the endpoint could do this automatically. For example, if a ping comes in from both http://example.com/12345 and https://example.com/12345, they should be consolidated to both have come from the https: version, probably. It would also probably make sense to do some sort of intelligent auto-consolidation based on domain aliases, like www.example.com vs. example.com.
Support for private webmention.
Support for Vouch, both from a validation perspective and providing UX to make it easier for folks to present their whitelist (like maybe when a domain is whitelisted it can also be added to a vouch list).
Also maybe some form of conversation threading would be nice? I’m not sure how that could be reasonably implemented (aside from supporting Salmention and hoping others come along with that) but it’d do a lot to address the UX problems with Webmention as a conversational platform.
{
"type": "entry",
"published": "2019-07-13T11:31:52-07:00",
"summary": "While it has some rough edges, the Webmention protocol has a lot going for it. One of the nice things about it is that it\u2019s easy to add support via a third-party endpoint, such as webmention.io, which is what I (and many others) use.\nThere\u2019s a few things I wish were better, though, and I think these can all be addressed by the endpoint itself, while remaining within the specification as it\u2019s written today. I would be tempted to write an endpoint that works this way, if I weren\u2019t already overwhelmed with other projects.\nDefinitely support the webmention.io API. There\u2019s a lot of folks already using that to retrieve mentions to display them on their site, and I see no reason for that to change.\nHaving some form of moderation would be nice. Mentions at their core should be kept perpetually but with a disposition of accept/reject/pending, and domains should also have a default disposition (which defaults to pending). When a new webmention comes in, it should get the domain\u2019s default disposition (along with an unmoderated flag), and then when moderating them, the user should be able to change the default disposition for the domain.\nMentions should be periodically refreshed to see if they\u2019re still valid. The refresh interval can be some form of slow exponential growth, like the Fibonacci sequence or something. Whenever the status of the mention changes, that should reset the refresh interval. Mentions which have disappeared should not be rendered while they\u2019re invalid, and the moderation queue should also show a section for \u201capproved but disappeared\u201d mentions.\nWhen a mention is sent or refreshed, it should also get a source and destination pointer; track the mention in terms of the original URLs provided, but they should be displayed and fetched based on what their current URL is, after chasing redirections or the like.\nRelatedly, multiple incoming mentions should be consolidated based on what their source and destination URLs resolve to. For example, if Alice pings Bob from http://alice.example.com/1/first-entry \u2192 https://bob.example.org/blog/hello.html, and then Alice\u2019s URL updates to https://alice.example.com/blog/1/First-Entry, if Alice\u2019s site re-sends backfill pings, the endpoint should only report a single ping that comes from https://alice.example.com/blog/1/First-Entry. Likewise, if Bob\u2019s URL changes to https://bob.example.org/weblog/hello, when Bob\u2019s site retrieves mentions for the new URL it should also include mentions that went to the old URL.\nObviously for this case there will be a period of time between a site\u2019s URLs changing and the original pings being refreshed, but maybe a new mention to an older target can also trigger a refresh of existing mentions to see if they\u2019re subject to consolidation.\nAlso the consolidation should only happen at the retrieval level; the original source/destination URLs should always be preserved, since it\u2019s always possible for an old URL to become unique again.\nThere should also be some automatic consolidation of pings that have the same URL aside from the scheme; webmention.js handles this on the rendering end but it\u2019d be nice if the endpoint could do this automatically. For example, if a ping comes in from both http://example.com/12345 and https://example.com/12345, they should be consolidated to both have come from the https: version, probably. It would also probably make sense to do some sort of intelligent auto-consolidation based on domain aliases, like www.example.com vs. example.com.\nSupport for private webmention.\nSupport for Vouch, both from a validation perspective and providing UX to make it easier for folks to present their whitelist (like maybe when a domain is whitelisted it can also be added to a vouch list).\nAlso maybe some form of conversation threading would be nice? I\u2019m not sure how that could be reasonably implemented (aside from supporting Salmention and hoping others come along with that) but it\u2019d do a lot to address the UX problems with Webmention as a conversational platform.",
"url": "https://beesbuzz.biz/blog/6982-My-webmention-endpoint-wish-list",
"name": "My webmention endpoint wish list",
"author": {
"type": "card",
"name": "fluffy",
"url": "https://beesbuzz.biz/",
"photo": "https://aperture-proxy.p3k.io/67f0e159262fa91b1915cde9588795b89a61ec8f/68747470733a2f2f6265657362757a7a2e62697a2f7374617469632f6865616473686f742e6a7067"
},
"post-type": "article",
"_id": "4449347",
"_source": "2778"
}
Just need to invest in jars and containers. (v2.jacky.wtf/post/e8cd1413-…)
{
"type": "entry",
"published": "2019-07-13T23:02:40+00:00",
"url": "https://twitter.com/jackyalcine/status/1150178760831983616",
"content": {
"text": "Just need to invest in jars and containers. (v2.jacky.wtf/post/e8cd1413-\u2026)",
"html": "Just need to invest in jars and containers. (<a href=\"https://v2.jacky.wtf/post/e8cd1413-7fb1-4fe2-bd6d-cdd8ee8bea10\">v2.jacky.wtf/post/e8cd1413-\u2026</a>)"
},
"author": {
"type": "card",
"name": "Jacky's Static Shock for SDCC 2020",
"url": "https://twitter.com/jackyalcine",
"photo": "https://aperture-proxy.p3k.io/7fb55150034c2f355fd9230425bf3f93ac570133/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313134393037373139353736353130343634302f596b4b5f5276455f2e6a7067"
},
"post-type": "note",
"_id": "4448726",
"_source": "2773"
}
No lie, I can’t remember any of the Men in Black films. (v2.jacky.wtf/post/c2dc557f-…)
{
"type": "entry",
"published": "2019-07-13T23:01:12+00:00",
"url": "https://twitter.com/jackyalcine/status/1150178390944694272",
"content": {
"text": "No lie, I can\u2019t remember any of the Men in Black films. (v2.jacky.wtf/post/c2dc557f-\u2026)",
"html": "No lie, I can\u2019t remember any of the Men in Black films. (<a href=\"https://v2.jacky.wtf/post/c2dc557f-0ea1-400b-899f-a375428bce07\">v2.jacky.wtf/post/c2dc557f-\u2026</a>)"
},
"author": {
"type": "card",
"name": "Jacky's Static Shock for SDCC 2020",
"url": "https://twitter.com/jackyalcine",
"photo": "https://aperture-proxy.p3k.io/7fb55150034c2f355fd9230425bf3f93ac570133/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313134393037373139353736353130343634302f596b4b5f5276455f2e6a7067"
},
"post-type": "note",
"_id": "4448727",
"_source": "2773"
}
Just need to invest in jars and containers.
{
"type": "entry",
"published": "2019-07-13T16:02:39.05909-07:00",
"url": "https://v2.jacky.wtf/post/e8cd1413-7fb1-4fe2-bd6d-cdd8ee8bea10",
"content": {
"text": "Just need to invest in jars and containers.",
"html": "<p>Just need to invest in jars and containers.</p>"
},
"author": {
"type": "card",
"name": "Jacky Alcin\u00e9",
"url": "https://v2.jacky.wtf",
"photo": "https://aperture-proxy.p3k.io/9f6c6c125a7640abc3c67f876753b4bf233d06d6/68747470733a2f2f76322e6a61636b792e7774662f6d656469612f70726f66696c652d696d616765"
},
"post-type": "note",
"_id": "4448696",
"_source": "1886"
}
No lie, I can’t remember any of the Men in Black films.
{
"type": "entry",
"published": "2019-07-13T16:01:10.99211-07:00",
"url": "https://v2.jacky.wtf/post/c2dc557f-0ea1-400b-899f-a375428bce07",
"content": {
"text": "No lie, I can\u2019t remember any of the Men in Black films.",
"html": "<p>No lie, I can\u2019t remember any of the Men in Black films.</p>"
},
"author": {
"type": "card",
"name": "Jacky Alcin\u00e9",
"url": "https://v2.jacky.wtf",
"photo": "https://aperture-proxy.p3k.io/9f6c6c125a7640abc3c67f876753b4bf233d06d6/68747470733a2f2f76322e6a61636b792e7774662f6d656469612f70726f66696c652d696d616765"
},
"post-type": "note",
"_id": "4448697",
"_source": "1886"
}
Better for the environment, body and super easy to make! https://t.co/ABnbSwKqVm (v2.jacky.wtf/post/3e13ffc7-…)
Homemade cashew milk.
Made it in under an hour by soaking 1 cup of raw cashews in hot water & proceeding to blend them with 4 cups of fresh water. 💚
{
"type": "entry",
"published": "2019-07-13T22:07:57+00:00",
"url": "https://twitter.com/jackyalcine/status/1150164989279383552",
"quotation-of": "https://twitter.com/bkjuni/status/1150149562050461697",
"content": {
"text": "Better for the environment, body and super easy to make! https://t.co/ABnbSwKqVm (v2.jacky.wtf/post/3e13ffc7-\u2026)",
"html": "Better for the environment, body and super easy to make! https://t.co/ABnbSwKqVm (<a href=\"https://v2.jacky.wtf/post/3e13ffc7-0b6d-458e-bfc4-0e01f4a7e1fb\">v2.jacky.wtf/post/3e13ffc7-\u2026</a>)"
},
"author": {
"type": "card",
"name": "Jacky's Static Shock for SDCC 2020",
"url": "https://twitter.com/jackyalcine",
"photo": "https://aperture-proxy.p3k.io/7fb55150034c2f355fd9230425bf3f93ac570133/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313134393037373139353736353130343634302f596b4b5f5276455f2e6a7067"
},
"post-type": "note",
"refs": {
"https://twitter.com/bkjuni/status/1150149562050461697": {
"type": "entry",
"published": "2019-07-13T21:06:38+00:00",
"url": "https://twitter.com/bkjuni/status/1150149562050461697",
"photo": [
"https://pbs.twimg.com/media/D_Ym7FSXkAAWzYj.jpg"
],
"content": {
"text": "Homemade cashew milk. \nMade it in under an hour by soaking 1 cup of raw cashews in hot water & proceeding to blend them with 4 cups of fresh water. \ud83d\udc9a",
"html": "Homemade cashew milk. \nMade it in under an hour by soaking 1 cup of raw cashews in hot water & proceeding to blend them with 4 cups of fresh water. \ud83d\udc9a"
},
"author": {
"type": "card",
"name": "Juni",
"url": "https://twitter.com/bkjuni",
"photo": "https://pbs.twimg.com/profile_images/1149067126793285632/J4eXpgyC.jpg"
},
"post-type": "photo"
}
},
"_id": "4448238",
"_source": "2773"
}
Better for the environment, body and super easy to make! https://twitter.com/bkjuni/status/1150149562050461697
{
"type": "entry",
"published": "2019-07-13T15:07:55.02045-07:00",
"url": "https://v2.jacky.wtf/post/3e13ffc7-0b6d-458e-bfc4-0e01f4a7e1fb",
"content": {
"text": "Better for the environment, body and super easy to make! https://twitter.com/bkjuni/status/1150149562050461697",
"html": "<p>Better for the environment, body and super easy to make! <a href=\"https://twitter.com/bkjuni/status/1150149562050461697\">https://twitter.com/bkjuni/status/1150149562050461697</a></p>"
},
"author": {
"type": "card",
"name": "Jacky Alcin\u00e9",
"url": "https://v2.jacky.wtf",
"photo": "https://aperture-proxy.p3k.io/9f6c6c125a7640abc3c67f876753b4bf233d06d6/68747470733a2f2f76322e6a61636b792e7774662f6d656469612f70726f66696c652d696d616765"
},
"post-type": "note",
"_id": "4448152",
"_source": "1886"
}
I wonder when the Chrome team will suggest the <ad> element and ship it immediately in Chrome. That’d help us block them more.
{
"type": "entry",
"published": "2019-07-13T15:03:26.75892-07:00",
"url": "https://v2.jacky.wtf/post/0be248ad-641f-4a42-97e7-6f6a605b394f",
"content": {
"text": "I wonder when the Chrome team will suggest the <ad> element and ship it immediately in Chrome. That\u2019d help us block them more.",
"html": "<p>I wonder when the Chrome team will suggest the <code><ad></code> element and ship it immediately in Chrome. That\u2019d help us block them more.</p>"
},
"author": {
"type": "card",
"name": "Jacky Alcin\u00e9",
"url": "https://v2.jacky.wtf",
"photo": "https://aperture-proxy.p3k.io/9f6c6c125a7640abc3c67f876753b4bf233d06d6/68747470733a2f2f76322e6a61636b792e7774662f6d656469612f70726f66696c652d696d616765"
},
"post-type": "note",
"_id": "4448139",
"_source": "1886"
}
I wonder when the Chrome team will suggest the `<ad>` element and ship it immediately in Chrome. That’d help us block them more. (v2.jacky.wtf/post/0be248ad-…)
{
"type": "entry",
"published": "2019-07-13T22:03:28+00:00",
"url": "https://twitter.com/jackyalcine/status/1150163863557627906",
"content": {
"text": "I wonder when the Chrome team will suggest the `<ad>` element and ship it immediately in Chrome. That\u2019d help us block them more. (v2.jacky.wtf/post/0be248ad-\u2026)",
"html": "I wonder when the Chrome team will suggest the `<ad>` element and ship it immediately in Chrome. That\u2019d help us block them more. (<a href=\"https://v2.jacky.wtf/post/0be248ad-641f-4a42-97e7-6f6a605b394f\">v2.jacky.wtf/post/0be248ad-\u2026</a>)"
},
"author": {
"type": "card",
"name": "Jacky's Static Shock for SDCC 2020",
"url": "https://twitter.com/jackyalcine",
"photo": "https://aperture-proxy.p3k.io/7fb55150034c2f355fd9230425bf3f93ac570133/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313134393037373139353736353130343634302f596b4b5f5276455f2e6a7067"
},
"post-type": "note",
"_id": "4448105",
"_source": "2773"
}
Photo for today’s IndieWeb Meetup NYC!
{
"type": "entry",
"published": "2019-07-13T14:37:41-0400",
"url": "https://martymcgui.re/2019/07/13/143741/",
"photo": [
"https://res.cloudinary.com/schmarty/image/fetch/w_960,c_fill/https://media.martymcgui.re/ac/37/b2/ca/01c1a984a103e95a12c4e3d3ff3b0e722e55e15edd65402696bb8175.jpg"
],
"content": {
"text": "Photo for today\u2019s IndieWeb Meetup NYC!",
"html": "<a href=\"https://media.martymcgui.re/ac/37/b2/ca/01c1a984a103e95a12c4e3d3ff3b0e722e55e15edd65402696bb8175.jpg\"></a>\n\n <p>Photo for today\u2019s IndieWeb Meetup NYC!</p>"
},
"author": {
"type": "card",
"name": "Marty McGuire",
"url": "https://martymcgui.re/",
"photo": "https://aperture-proxy.p3k.io/8275f85e3a389bd0ae69f209683436fc53d8bad9/68747470733a2f2f6d617274796d636775692e72652f696d616765732f6c6f676f2e6a7067"
},
"post-type": "photo",
"refs": {
"https://res.cloudinary.com/schmarty/image/fetch/w_960,c_fill/https://media.martymcgui.re/ac/37/b2/ca/01c1a984a103e95a12c4e3d3ff3b0e722e55e15edd65402696bb8175.jpg": {
"type": "image",
"ratio": 1.33,
"bytes": 134533
}
},
"_id": "4448093",
"_source": "175"
}
{
"type": "entry",
"published": "2019-07-13T15:05:44-0400",
"url": "https://martymcgui.re/2019/07/13/indieweb-meetup-nyc-2019-07-13-wrap-up/",
"category": [
"IndieWeb",
"meetup",
"NYC",
"HWC",
"wrap-up"
],
"name": "IndieWeb Meetup NYC 2019-07-13 Wrap-Up",
"content": {
"text": "NYC's first IndieWeb Meetup of July 2019 took place at Devo\u00e7ion Coffee in Brooklyn, NY. Here are some notes from the meeting!\nrasulkireev.com (new!) \u2014 New to the IndieWeb and attending his first meetup! Has been building his own websites for a while, learning a lot about web development. Currently working on a version of his site based on Django, and interested in adding IndieWeb building blocks, starting with rel=me.\n\n martymcgui.re \u2014 Working on his write-up(s) post-IndieWeb Summit. Made some small progress today. \ud83d\ude05 Also wanting to streamline his iOS Shortcuts-based workflows for posting to his site, taking personal notes, etc.\n \n\nOther discussion:\nWe should bring signs or other IndieWeb indicators to these meetups! I'm so used to a few regulars that I didn't expect new folks. Thankfully Rasul found me! \ud83d\ude2c\n We talked about soooo many building blocks! Webmention (and how to use them to RSVP), Micropub (and how iOS Shortcuts can post using it), backfeed (responses from Twitter), storing data, hosting sites and content, learning new languages, learning new libraries, how and why to learn new web dev skills, and much more.\n How did you get started building websites? Despite starting many years apart, we both had stories of building websites for groups we were part of or businesses we knew people from.\n \n Staying in touch with the IndieWeb community, from chat (very high attention if you're in there all the time to low attention with the help of Loqi the chat bot and !tell commands) to the weekly newsletters.\n \n\nLeft-to-right: martymcgui.re, rasulkireev.com\n Thanks to Rasul for coming out for his first IndieWeb Meetup! We missed Tiara, who was stuck on Long Island due to extreme train schedule changes. We also missed Matt G, who was at a wedding, but working on his website in spirit.\n \n\n\n We look forward to seeing folks at the next meeting! Watch the Events page for details about the next meetup!",
"html": "<p>NYC's first <a href=\"https://indieweb.org/events/2019-07-13-homebrew-website-club-nyc\">IndieWeb Meetup of July 2019</a> took place at <a href=\"https://www.devocion.com/pages/devocion-cafe-downtown-brooklyn-ny\">Devo\u00e7ion Coffee in Brooklyn, NY</a>. Here are some notes from the meeting!</p>\n<p>rasulkireev.com (new!) \u2014 New to the IndieWeb and attending his first meetup! Has been building his own websites for a while, learning a lot about web development. Currently working on a version of his site based on Django, and interested in adding IndieWeb building blocks, starting with <a href=\"https://indieweb.org/rel-me\">rel=me</a>.</p>\n<p>\n martymcgui.re \u2014 Working on his write-up(s) post-IndieWeb Summit. Made some small progress today. \ud83d\ude05 Also wanting to streamline his iOS Shortcuts-based workflows for posting to his site, taking personal notes, etc.\n <br /></p>\n<p>Other discussion:</p>\n<ul><li>We should bring signs or other IndieWeb indicators to these meetups! I'm so used to a few regulars that I didn't expect new folks. Thankfully Rasul found me! \ud83d\ude2c</li>\n <li>We talked about soooo many building blocks! <a href=\"https://indieweb.org/Webmention\">Webmention</a> (and how to use them to RSVP), <a href=\"https://indieweb.org/Micropub\">Micropub</a> (and how iOS Shortcuts can post using it), <a href=\"https://indieweb.org/backfeed\">backfeed</a> (responses from Twitter), storing data, hosting sites and content, learning new languages, learning new libraries, how and why to learn new web dev skills, and much more.</li>\n <li>How did you get started building websites? Despite starting many years apart, we both had stories of building websites for groups we were part of or businesses we knew people from.</li>\n <li>\n Staying in touch with the IndieWeb community, from chat (very high attention if you're in there all the time to low attention with the help of Loqi the chat bot and !tell commands) to the weekly newsletters.\n <br /></li>\n</ul><img src=\"https://aperture-proxy.p3k.io/90143ea04d941505016760afb878e401a0071901/68747470733a2f2f6d656469612e6d617274796d636775692e72652f34362f36612f39342f35302f37393938613833313736366537643335626638653137306337386233356262386437326531313736656239343736393362376534313861642e6a7067\" alt=\"\" />Left-to-right: martymcgui.re, rasulkireev.com<p>\n Thanks to Rasul for coming out for his first IndieWeb Meetup! We missed Tiara, who was stuck on Long Island due to extreme train schedule changes. We also missed Matt G, who was at a wedding, but working on his website in spirit.\n <br /></p>\n<p>\n We look forward to seeing folks at the next meeting! Watch the <a href=\"https://indieweb.org/events/\">Events page</a> for details about the next meetup!\n <br /></p>"
},
"author": {
"type": "card",
"name": "Marty McGuire",
"url": "https://martymcgui.re/",
"photo": "https://aperture-proxy.p3k.io/8275f85e3a389bd0ae69f209683436fc53d8bad9/68747470733a2f2f6d617274796d636775692e72652f696d616765732f6c6f676f2e6a7067"
},
"post-type": "article",
"_id": "4448092",
"_source": "175"
}
thanks @mckinleaf for this reinterpretation of a classic:
youtube.com/watch?v=voqCQS…
{
"type": "entry",
"published": "2019-07-13T21:40:37+00:00",
"url": "https://twitter.com/atmlutter/status/1150158112399220738",
"category": [
"https://twitter.com/mckinleaf"
],
"content": {
"text": "thanks @mckinleaf for this reinterpretation of a classic:\nyoutube.com/watch?v=voqCQS\u2026",
"html": "thanks <a href=\"https://twitter.com/mckinleaf\">@mckinleaf</a> for this reinterpretation of a classic:\n<a href=\"https://www.youtube.com/watch?v=voqCQSDAcn8\">youtube.com/watch?v=voqCQS\u2026</a>"
},
"author": {
"type": "card",
"name": "Ariana Lutterman",
"url": "https://twitter.com/atmlutter",
"photo": "https://aperture-proxy.p3k.io/37cf8db8be503700168b19d2eb965da202d0015c/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f3937393832303038353832383337343532382f5535586f536a58542e6a7067"
},
"post-type": "note",
"refs": {
"https://twitter.com/mckinleaf": {
"type": "card",
"name": "New Rat City",
"url": "https://twitter.com/mckinleaf",
"photo": null
}
},
"_id": "4447857",
"_source": "2773"
}
PDX is such a nice airport I sometimes want to head over there just to hang out and visit the shops. No flight required. Can't say that about…any other airport I've visited!
twitter.com/oregonian/stat…
PDX named top U.S. airport for 7th straight year by Travel + Leisure magagzine bit.ly/2NU9pLT
{
"type": "entry",
"published": "2019-07-13T20:53:37+00:00",
"url": "https://twitter.com/jaredcwhite/status/1150146284587642880",
"quotation-of": "https://twitter.com/Oregonian/status/1150144827587256320",
"content": {
"text": "PDX is such a nice airport I sometimes want to head over there just to hang out and visit the shops. No flight required. Can't say that about\u2026any other airport I've visited!\ntwitter.com/oregonian/stat\u2026",
"html": "PDX is such a nice airport I sometimes want to head over there just to hang out and visit the shops. No flight required. Can't say that about\u2026any other airport I've visited!\n<a href=\"https://twitter.com/oregonian/status/1150144827587256320\">twitter.com/oregonian/stat\u2026</a>"
},
"author": {
"type": "card",
"name": "JaredWhite.com",
"url": "https://twitter.com/jaredcwhite",
"photo": "https://aperture-proxy.p3k.io/b5acc85d6e3e37693d4c4221c1981a811f0c570e/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313030393830383331313632383133323335332f43396233623868362e6a7067"
},
"post-type": "note",
"refs": {
"https://twitter.com/Oregonian/status/1150144827587256320": {
"type": "entry",
"published": "2019-07-13T20:47:50+00:00",
"url": "https://twitter.com/Oregonian/status/1150144827587256320",
"photo": [
"https://pbs.twimg.com/media/D_YioCfXYAAteBR.jpg"
],
"content": {
"text": "PDX named top U.S. airport for 7th straight year by Travel + Leisure magagzine bit.ly/2NU9pLT",
"html": "PDX named top U.S. airport for 7th straight year by Travel + Leisure magagzine <a href=\"http://bit.ly/2NU9pLT\">bit.ly/2NU9pLT</a>"
},
"author": {
"type": "card",
"name": "The Oregonian",
"url": "https://twitter.com/Oregonian",
"photo": "https://pbs.twimg.com/profile_images/902629136916557824/O7l_oqTE.jpg"
},
"post-type": "photo"
}
},
"_id": "4447379",
"_source": "2773"
}
What godforsaken hellhole of a country is this happening in?
Oh right. 'Murica.
If this keeps up, *I'll end up becoming a refugee in some other part of the world…*
twitter.com/nbcnews/status…
New video shows severe overcrowding of men in cages at Texas detainment facility during VP Pence's visit Friday.
A group of men detained behind chain link fencing shout...
{
"type": "entry",
"published": "2019-07-13T20:50:43+00:00",
"url": "https://twitter.com/jaredcwhite/status/1150145553872777216",
"quotation-of": "https://twitter.com/NBCNews/status/1149871065365016579",
"content": {
"text": "What godforsaken hellhole of a country is this happening in?\n\nOh right. 'Murica.\n\nIf this keeps up, *I'll end up becoming a refugee in some other part of the world\u2026*\ntwitter.com/nbcnews/status\u2026",
"html": "What godforsaken hellhole of a country is this happening in?\n\nOh right. 'Murica.\n\nIf this keeps up, *I'll end up becoming a refugee in some other part of the world\u2026*\n<a href=\"https://twitter.com/nbcnews/status/1149871065365016579\">twitter.com/nbcnews/status\u2026</a>"
},
"author": {
"type": "card",
"name": "JaredWhite.com",
"url": "https://twitter.com/jaredcwhite",
"photo": "https://aperture-proxy.p3k.io/b5acc85d6e3e37693d4c4221c1981a811f0c570e/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313030393830383331313632383133323335332f43396233623868362e6a7067"
},
"post-type": "note",
"refs": {
"https://twitter.com/NBCNews/status/1149871065365016579": {
"type": "entry",
"published": "2019-07-13T02:40:00+00:00",
"url": "https://twitter.com/NBCNews/status/1149871065365016579",
"video": [
"https://video.twimg.com/amplify_video/1149839318212472832/vid/1280x720/WM2djbPu2r4lur4G.mp4?tag=13"
],
"content": {
"text": "New video shows severe overcrowding of men in cages at Texas detainment facility during VP Pence's visit Friday. \n\nA group of men detained behind chain link fencing shouted to news cameras, \"No shower, no shower!\" nbcnews.to/2GaAowu",
"html": "New video shows severe overcrowding of men in cages at Texas detainment facility during VP Pence's visit Friday. \n\nA group of men detained behind chain link fencing shouted to news cameras, \"No shower, no shower!\" <a href=\"https://nbcnews.to/2GaAowu\">nbcnews.to/2GaAowu</a>"
},
"author": {
"type": "card",
"name": "NBC News",
"url": "https://twitter.com/NBCNews",
"photo": "https://pbs.twimg.com/profile_images/1108426393287868423/CyLn5GVQ.png"
},
"post-type": "video"
}
},
"_id": "4447380",
"_source": "2773"
}
For me it would be synthesizers.
Feeling real sad today? Time to buy a Moog! 😆
Therapist: and what do we do when we feel sad?
Me: buy mechanical keyboards
Therapist: no
{
"type": "entry",
"published": "2019-07-13T20:43:57+00:00",
"url": "https://twitter.com/jaredcwhite/status/1150143852675682304",
"quotation-of": "https://twitter.com/isabelacmor/status/1149705260048367618",
"content": {
"text": "For me it would be synthesizers.\n\nFeeling real sad today? Time to buy a Moog! \ud83d\ude06"
},
"author": {
"type": "card",
"name": "JaredWhite.com",
"url": "https://twitter.com/jaredcwhite",
"photo": "https://aperture-proxy.p3k.io/b5acc85d6e3e37693d4c4221c1981a811f0c570e/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313030393830383331313632383133323335332f43396233623868362e6a7067"
},
"post-type": "note",
"refs": {
"https://twitter.com/isabelacmor/status/1149705260048367618": {
"type": "entry",
"published": "2019-07-12T15:41:09+00:00",
"url": "https://twitter.com/isabelacmor/status/1149705260048367618",
"content": {
"text": "Therapist: and what do we do when we feel sad?\n\nMe: buy mechanical keyboards\n\nTherapist: no"
},
"author": {
"type": "card",
"name": "Isabela Moreira",
"url": "https://twitter.com/isabelacmor",
"photo": "https://pbs.twimg.com/profile_images/1143624018509074433/BhOzH_yl.jpg"
},
"post-type": "note"
}
},
"_id": "4447381",
"_source": "2773"
}
Wondering if JS engines optimize Array.prototype.includes() in cases of short, constant-length non-changing arrays like this 🤔 it certainly makes more sense to leave this to the JIT... /cc @bmeurer @evilpies
(code via @MarijnJH's lezer github.com/lezer-parser/j… )
{
"type": "entry",
"published": "2019-07-13T20:43:46+00:00",
"url": "https://twitter.com/slsoftworks/status/1150143805837852672",
"category": [
"https://twitter.com/bmeurer",
"https://twitter.com/evilpies",
"https://twitter.com/MarijnJH"
],
"photo": [
"https://aperture-proxy.p3k.io/09d2d8cc74acb22950f7485515a426a98205004b/68747470733a2f2f7062732e7477696d672e636f6d2f6d656469612f445f596739363455344145366f2d432e6a7067"
],
"content": {
"text": "Wondering if JS engines optimize Array.prototype.includes() in cases of short, constant-length non-changing arrays like this \ud83e\udd14 it certainly makes more sense to leave this to the JIT... /cc @bmeurer @evilpies\n\n(code via @MarijnJH's lezer github.com/lezer-parser/j\u2026 )",
"html": "Wondering if JS engines optimize Array.prototype.includes() in cases of short, constant-length non-changing arrays like this \ud83e\udd14 it certainly makes more sense to leave this to the JIT... /cc <a href=\"https://twitter.com/bmeurer\">@bmeurer</a> <a href=\"https://twitter.com/evilpies\">@evilpies</a>\n\n(code via <a href=\"https://twitter.com/MarijnJH\">@MarijnJH</a>'s lezer <a href=\"https://github.com/lezer-parser/javascript/blob/master/src/tokens.js#L7\">github.com/lezer-parser/j\u2026</a> )"
},
"author": {
"type": "card",
"name": "flaki",
"url": "https://twitter.com/slsoftworks",
"photo": "https://aperture-proxy.p3k.io/6285144b4ec9009aa695015b76d5cdc404cd8fb6/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f3734393637383638333531343839363338352f37677849526e6f432e6a7067"
},
"post-type": "photo",
"refs": {
"https://twitter.com/bmeurer": {
"type": "card",
"name": "Benedikt Meurer",
"url": "https://twitter.com/bmeurer",
"photo": null
},
"https://twitter.com/evilpies": {
"type": "card",
"name": "Tom Schuster",
"url": "https://twitter.com/evilpies",
"photo": null
},
"https://twitter.com/MarijnJH": {
"type": "card",
"name": "Marijn Haverbeke",
"url": "https://twitter.com/MarijnJH",
"photo": null
},
"https://aperture-proxy.p3k.io/09d2d8cc74acb22950f7485515a426a98205004b/68747470733a2f2f7062732e7477696d672e636f6d2f6d656469612f445f596739363455344145366f2d432e6a7067": {
"type": "image",
"ratio": 2.15,
"bytes": 52400
}
},
"_id": "4447382",
"_source": "2773"
}
{
"type": "entry",
"published": "2019-07-13T20:41:46+00:00",
"url": "https://twitter.com/mapkyca/status/1150143302227959811",
"content": {
"text": "OAuth2 Server Improvements marcus-povey.co.uk/2019/07/13/oau\u2026",
"html": "OAuth2 Server Improvements <a href=\"https://www.marcus-povey.co.uk/2019/07/13/oauth2-server-improvements/\">marcus-povey.co.uk/2019/07/13/oau\u2026</a>"
},
"author": {
"type": "card",
"name": "Marcus Povey",
"url": "https://twitter.com/mapkyca",
"photo": "https://aperture-proxy.p3k.io/7f496e7d44799a4cbe7792084a43cc66ae9fb0b3/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f313039393939393830352f343837393332323634355f336230323930643262325f6f2e6a7067"
},
"post-type": "note",
"_id": "4447257",
"_source": "2773"
}
"So if integrity is defined by what you do when no one is looking, then perhaps political principle is somewhat of a practical opposite, meaning, it is what you stick to when everyone is looking"
— @ChrisCuomo m.youtube.com/watch?v=3V8L-z…
{
"type": "entry",
"published": "2019-07-13T20:28:23+00:00",
"url": "https://twitter.com/sandeepshetty/status/1150139935971672064",
"category": [
"https://twitter.com/ChrisCuomo"
],
"content": {
"text": "\"So if integrity is defined by what you do when no one is looking, then perhaps political principle is somewhat of a practical opposite, meaning, it is what you stick to when everyone is looking\"\n\u2014 @ChrisCuomo m.youtube.com/watch?v=3V8L-z\u2026",
"html": "\"So if integrity is defined by what you do when no one is looking, then perhaps political principle is somewhat of a practical opposite, meaning, it is what you stick to when everyone is looking\"\n\u2014 <a href=\"https://twitter.com/ChrisCuomo\">@ChrisCuomo</a> <a href=\"https://m.youtube.com/watch?v=3V8L-zfhR5Y\">m.youtube.com/watch?v=3V8L-z\u2026</a>"
},
"author": {
"type": "card",
"name": "Sandeep Shetty",
"url": "https://twitter.com/sandeepshetty",
"photo": "https://aperture-proxy.p3k.io/f25fb60f832faaf348a01ea71ba1a15f67992877/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f3938353933303938303535313732353035362f2d775270337963482e6a7067"
},
"post-type": "note",
"refs": {
"https://twitter.com/ChrisCuomo": {
"type": "card",
"name": "Christopher C. Cuomo",
"url": "https://twitter.com/ChrisCuomo",
"photo": null
}
},
"_id": "4447103",
"_source": "2773"
}
I joined this last night and it was powerful. Heard an 82-year-old Holocaust survivor speak and a variety of activists.
Stand up, show up, connect with organizations doing the work. #CloseTheCamps
#LightsforLiberty San Diego
sandiegouniontribune.com/news/public-sa…
{
"type": "entry",
"published": "2019-07-13T20:25:50+00:00",
"url": "https://twitter.com/gRegorLove/status/1150139292380909568",
"quotation-of": "https://twitter.com/ruicarsa/status/1149925195404042242",
"content": {
"text": "I joined this last night and it was powerful. Heard an 82-year-old Holocaust survivor speak and a variety of activists.\n\nStand up, show up, connect with organizations doing the work. #CloseTheCamps",
"html": "I joined this last night and it was powerful. Heard an 82-year-old Holocaust survivor speak and a variety of activists.\n\nStand up, show up, connect with organizations doing the work. <a href=\"https://twitter.com/search?q=%23CloseTheCamps\">#CloseTheCamps</a>"
},
"author": {
"type": "card",
"name": "gRegor Morrill",
"url": "https://twitter.com/gRegorLove",
"photo": "https://aperture-proxy.p3k.io/3c20392d3f87b49f616d832ee2d5c2771256e0ab/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f3731343439303639373736343731363534352f6a65375643794c432e6a7067"
},
"post-type": "note",
"refs": {
"https://twitter.com/ruicarsa/status/1149925195404042242": {
"type": "entry",
"published": "2019-07-13T06:15:05+00:00",
"url": "https://twitter.com/ruicarsa/status/1149925195404042242",
"content": {
"text": "#LightsforLiberty San Diego\n sandiegouniontribune.com/news/public-sa\u2026",
"html": "<a href=\"https://twitter.com/search?q=%23LightsforLiberty\">#LightsforLiberty</a> San Diego\n <a href=\"https://www.sandiegouniontribune.com/news/public-safety/story/2019-07-12/thousands-march-in-san-ysidro-to-protest-ice-immigrant-detention-centers\">sandiegouniontribune.com/news/public-sa\u2026</a>"
},
"author": {
"type": "card",
"name": "\u24c7\u24e4\u24d8",
"url": "https://twitter.com/ruicarsa",
"photo": "https://pbs.twimg.com/profile_images/3412534529/c5027118b165265eb4cbdea48b5b9c53.jpeg"
},
"post-type": "note"
}
},
"_id": "4447104",
"_source": "2773"
}
TIL: github.com/rustodon/rusto… “A Mastodon-compatible, ActivityPub-speaking server in Rust” 👀
{
"type": "entry",
"published": "2019-07-13T20:21:00+00:00",
"url": "https://twitter.com/slsoftworks/status/1150138077974630401",
"content": {
"text": "TIL: github.com/rustodon/rusto\u2026 \u201cA Mastodon-compatible, ActivityPub-speaking server in Rust\u201d \ud83d\udc40",
"html": "TIL: <a href=\"https://github.com/rustodon/rustodon\">github.com/rustodon/rusto\u2026</a> \u201cA Mastodon-compatible, ActivityPub-speaking server in Rust\u201d \ud83d\udc40"
},
"author": {
"type": "card",
"name": "flaki",
"url": "https://twitter.com/slsoftworks",
"photo": "https://aperture-proxy.p3k.io/6285144b4ec9009aa695015b76d5cdc404cd8fb6/68747470733a2f2f7062732e7477696d672e636f6d2f70726f66696c655f696d616765732f3734393637383638333531343839363338352f37677849526e6f432e6a7067"
},
"post-type": "note",
"_id": "4447105",
"_source": "2773"
}