ActivityPub Viewer

A small tool to view real-world ActivityPub objects as JSON! Enter a URL or username from Mastodon or a similar service below, and we'll send a request with the right Accept header to the server to view the underlying object.

Open in browser →
{ "@context": [ "https://www.w3.org/ns/activitystreams", { "ostatus": "http://ostatus.org#", "atomUri": "ostatus:atomUri", "inReplyToAtomUri": "ostatus:inReplyToAtomUri", "conversation": "ostatus:conversation", "sensitive": "as:sensitive", "toot": "http://joinmastodon.org/ns#", "votersCount": "toot:votersCount", "litepub": "http://litepub.social/ns#", "directMessage": "litepub:directMessage", "Hashtag": "as:Hashtag" } ], "id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838", "type": "Note", "summary": null, "inReplyTo": null, "published": "2023-11-03T20:51:06Z", "url": "https://mastodon.thi.ng/@toxi/111348591236791838", "attributedTo": "https://mastodon.thi.ng/users/toxi", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.thi.ng/users/toxi/followers" ], "sensitive": false, "atomUri": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838", "inReplyToAtomUri": null, "conversation": "tag:mastodon.thi.ng,2023-11-03:objectId=383649:objectType=Conversation", "content": "<p><a href=\"https://mastodon.thi.ng/tags/HowToThing\" class=\"mention hashtag\" rel=\"tag\">#<span>HowToThing</span></a> <a href=\"https://mastodon.thi.ng/tags/Epilogue\" class=\"mention hashtag\" rel=\"tag\">#<span>Epilogue</span></a> <a href=\"https://mastodon.thi.ng/tags/LongRead\" class=\"mention hashtag\" rel=\"tag\">#<span>LongRead</span></a>: After 66 days of addressing 30 wildly varied use cases and building ~20 new example projects of varying complexity to illustrate how <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> libraries can be used &amp; combined, I&#39;m taking a break to concentrate on other important thi.ngs...</p><p>With this overall selection I tried shining a light on common architectural patterns, but also some underexposed, yet interesting niche topics. Since there were many different techniques involved, it&#39;s natural not everything resonated with everyone. That&#39;s fine! Though, my hope always is that readers take an interest in a wide range of topics, and so many of these new examples were purposefully multi-faceted and hopefully provided insights for at least some parts, plus (in)directly communicated a core essence of the larger project:</p><p>Only individual packages (or small clusters) are designed &amp; optimized for a set of particular use cases. At large, though, thi.ng explicitly does NOT offer any such guidance or even opinion. All I can offer are possibilities, nudges and cross-references, how these constructs &amp; techniques can be (and have been) useful and/or the theory underpinning them. For some topics, thi.ng libs provide multiple approaches to achieve certain goals. This again is by design (not lack of it!) and stems from hard-learned experience, showing that many (esp. larger) projects highly benefit from more nuanced (sometimes conflicting approaches) compared to popular defacto &quot;catch-all&quot; framework solutions. To avid users (incl. myself) this approach has become a somewhat unique offering and advantage, yet in itself seems to be the hardest and most confusing aspect of the entire project to communicate to newcomers.</p><p>So seeing this list of new projects together, to me really is a celebration (and confirmation/testament) of the overall <a href=\"https://mastodon.thi.ng/tags/BottomUpDesign\" class=\"mention hashtag\" rel=\"tag\">#<span>BottomUpDesign</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> approach (which I&#39;ve been building on since ~2006): From the wide spectrum/flexibility of use cases, the expressiveness, concision, the data-first approach, the undogmatic mix of complementary paradigms, the separation of concerns, no hidden magic state, only minimal build tooling requirements (a bundler is optional, but recommended for tree shaking, no more) — these are all aspects I think are key to building better (incl. more maintainable &amp; reason-able) software. IMO they are worth embracing &amp; exposing more people to and this is what I&#39;ve partially attempted to do with this series of posts...</p><p>ICYMI here&#39;s a summary of the 10 most recent posts (full list in the <a href=\"https://thi.ng/umbrella\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/umbrella</span><span class=\"invisible\"></span></a> readme). Many of those examples have more comments than code...</p><p>021: Iterative animated polygon subdivision &amp; heat map viz<br /><a href=\"https://mastodon.thi.ng/@toxi/111221943333023306\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11122194</span><span class=\"invisible\">3333023306</span></a></p><p>022: Quasi-random voronoi lattice generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111244412425832657\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11124441</span><span class=\"invisible\">2425832657</span></a></p><p>023: Tag-based Jaccard similarity ranking using bitfields<br /><a href=\"https://mastodon.thi.ng/@toxi/111256960928934577\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11125696</span><span class=\"invisible\">0928934577</span></a></p><p>024: 2.5D hidden line visualization of DEM files<br /><a href=\"https://mastodon.thi.ng/@toxi/111269505611983570\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11126950</span><span class=\"invisible\">5611983570</span></a></p><p>025: Transforming &amp; plotting 10k data points using SIMD<br /><a href=\"https://mastodon.thi.ng/@toxi/111283262419126958\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11128326</span><span class=\"invisible\">2419126958</span></a></p><p>026: Shader meta-programming to generate 16 animated function plots<br /><a href=\"https://mastodon.thi.ng/@toxi/111295842650216136\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11129584</span><span class=\"invisible\">2650216136</span></a></p><p>027: Flocking sim w/ neighborhood queries to visualize proximity<br /><a href=\"https://mastodon.thi.ng/@toxi/111308439597090930\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11130843</span><span class=\"invisible\">9597090930</span></a></p><p>028: Randomized, space-filling, nested 2D grid layout generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111324566926701431\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11132456</span><span class=\"invisible\">6926701431</span></a></p><p>029: Forth-like DSL &amp; livecoding playground for 2D geometry<br /><a href=\"https://mastodon.thi.ng/@toxi/111335025037332972\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11133502</span><span class=\"invisible\">5037332972</span></a></p><p>030: Procedural text generation via custom DSL &amp; parse grammar<br /><a href=\"https://mastodon.thi.ng/@toxi/111347074558293056\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11134707</span><span class=\"invisible\">4558293056</span></a></p><p><a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/OpenSource\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenSource</span></a> <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a> <a href=\"https://mastodon.thi.ng/tags/JavaScript\" class=\"mention hashtag\" rel=\"tag\">#<span>JavaScript</span></a> <a href=\"https://mastodon.thi.ng/tags/Tutorial\" class=\"mention hashtag\" rel=\"tag\">#<span>Tutorial</span></a></p>", "contentMap": { "en": "<p><a href=\"https://mastodon.thi.ng/tags/HowToThing\" class=\"mention hashtag\" rel=\"tag\">#<span>HowToThing</span></a> <a href=\"https://mastodon.thi.ng/tags/Epilogue\" class=\"mention hashtag\" rel=\"tag\">#<span>Epilogue</span></a> <a href=\"https://mastodon.thi.ng/tags/LongRead\" class=\"mention hashtag\" rel=\"tag\">#<span>LongRead</span></a>: After 66 days of addressing 30 wildly varied use cases and building ~20 new example projects of varying complexity to illustrate how <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> libraries can be used &amp; combined, I&#39;m taking a break to concentrate on other important thi.ngs...</p><p>With this overall selection I tried shining a light on common architectural patterns, but also some underexposed, yet interesting niche topics. Since there were many different techniques involved, it&#39;s natural not everything resonated with everyone. That&#39;s fine! Though, my hope always is that readers take an interest in a wide range of topics, and so many of these new examples were purposefully multi-faceted and hopefully provided insights for at least some parts, plus (in)directly communicated a core essence of the larger project:</p><p>Only individual packages (or small clusters) are designed &amp; optimized for a set of particular use cases. At large, though, thi.ng explicitly does NOT offer any such guidance or even opinion. All I can offer are possibilities, nudges and cross-references, how these constructs &amp; techniques can be (and have been) useful and/or the theory underpinning them. For some topics, thi.ng libs provide multiple approaches to achieve certain goals. This again is by design (not lack of it!) and stems from hard-learned experience, showing that many (esp. larger) projects highly benefit from more nuanced (sometimes conflicting approaches) compared to popular defacto &quot;catch-all&quot; framework solutions. To avid users (incl. myself) this approach has become a somewhat unique offering and advantage, yet in itself seems to be the hardest and most confusing aspect of the entire project to communicate to newcomers.</p><p>So seeing this list of new projects together, to me really is a celebration (and confirmation/testament) of the overall <a href=\"https://mastodon.thi.ng/tags/BottomUpDesign\" class=\"mention hashtag\" rel=\"tag\">#<span>BottomUpDesign</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> approach (which I&#39;ve been building on since ~2006): From the wide spectrum/flexibility of use cases, the expressiveness, concision, the data-first approach, the undogmatic mix of complementary paradigms, the separation of concerns, no hidden magic state, only minimal build tooling requirements (a bundler is optional, but recommended for tree shaking, no more) — these are all aspects I think are key to building better (incl. more maintainable &amp; reason-able) software. IMO they are worth embracing &amp; exposing more people to and this is what I&#39;ve partially attempted to do with this series of posts...</p><p>ICYMI here&#39;s a summary of the 10 most recent posts (full list in the <a href=\"https://thi.ng/umbrella\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/umbrella</span><span class=\"invisible\"></span></a> readme). Many of those examples have more comments than code...</p><p>021: Iterative animated polygon subdivision &amp; heat map viz<br /><a href=\"https://mastodon.thi.ng/@toxi/111221943333023306\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11122194</span><span class=\"invisible\">3333023306</span></a></p><p>022: Quasi-random voronoi lattice generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111244412425832657\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11124441</span><span class=\"invisible\">2425832657</span></a></p><p>023: Tag-based Jaccard similarity ranking using bitfields<br /><a href=\"https://mastodon.thi.ng/@toxi/111256960928934577\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11125696</span><span class=\"invisible\">0928934577</span></a></p><p>024: 2.5D hidden line visualization of DEM files<br /><a href=\"https://mastodon.thi.ng/@toxi/111269505611983570\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11126950</span><span class=\"invisible\">5611983570</span></a></p><p>025: Transforming &amp; plotting 10k data points using SIMD<br /><a href=\"https://mastodon.thi.ng/@toxi/111283262419126958\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11128326</span><span class=\"invisible\">2419126958</span></a></p><p>026: Shader meta-programming to generate 16 animated function plots<br /><a href=\"https://mastodon.thi.ng/@toxi/111295842650216136\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11129584</span><span class=\"invisible\">2650216136</span></a></p><p>027: Flocking sim w/ neighborhood queries to visualize proximity<br /><a href=\"https://mastodon.thi.ng/@toxi/111308439597090930\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11130843</span><span class=\"invisible\">9597090930</span></a></p><p>028: Randomized, space-filling, nested 2D grid layout generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111324566926701431\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11132456</span><span class=\"invisible\">6926701431</span></a></p><p>029: Forth-like DSL &amp; livecoding playground for 2D geometry<br /><a href=\"https://mastodon.thi.ng/@toxi/111335025037332972\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11133502</span><span class=\"invisible\">5037332972</span></a></p><p>030: Procedural text generation via custom DSL &amp; parse grammar<br /><a href=\"https://mastodon.thi.ng/@toxi/111347074558293056\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11134707</span><span class=\"invisible\">4558293056</span></a></p><p><a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/OpenSource\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenSource</span></a> <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a> <a href=\"https://mastodon.thi.ng/tags/JavaScript\" class=\"mention hashtag\" rel=\"tag\">#<span>JavaScript</span></a> <a href=\"https://mastodon.thi.ng/tags/Tutorial\" class=\"mention hashtag\" rel=\"tag\">#<span>Tutorial</span></a></p>" }, "attachment": [], "tag": [ { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/howtothing", "name": "#howtothing" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/epilogue", "name": "#epilogue" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/longread", "name": "#longread" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/thingumbrella", "name": "#thingumbrella" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/bottomupdesign", "name": "#bottomupdesign" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/opensource", "name": "#opensource" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/typescript", "name": "#typescript" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/javascript", "name": "#javascript" }, { "type": "Hashtag", "href": "https://mastodon.thi.ng/tags/tutorial", "name": "#tutorial" } ], "replies": { "id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/replies?min_id=111348701717467907&page=true", "partOf": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/replies", "items": [ "https://mastodon.thi.ng/users/toxi/statuses/111348701717467907" ] } }, "likes": { "id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/likes", "type": "Collection", "totalItems": 21 }, "shares": { "id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/shares", "type": "Collection", "totalItems": 11 } }