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", "blurhash": "toot:blurhash", "focalPoint": { "@container": "@list", "@id": "toot:focalPoint" }, "Hashtag": "as:Hashtag" } ], "id": "https://fosstodon.org/users/derekkraan/outbox?page=true", "type": "OrderedCollectionPage", "next": "https://fosstodon.org/users/derekkraan/outbox?max_id=111861075339633171&page=true", "prev": "https://fosstodon.org/users/derekkraan/outbox?min_id=113476079809583223&page=true", "partOf": "https://fosstodon.org/users/derekkraan/outbox", "orderedItems": [ { "id": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-11-13T14:19:25Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-13T14:19:25Z", "url": "https://fosstodon.org/@derekkraan/113476079809583223", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-11-13:objectId=260474713:objectType=Conversation", "content": "<p>๐Ÿฅณ HighlanderPG 1.0.6 is out! This adds support for the `:repo` option, allowing easier than ever setup.</p><p>HighlanderPG helps you run a singleton process in your cluster, and is available for $100 a year at <a href=\"https://hex.codecodeship.com/package/highlander_pg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">hex.codecodeship.com/package/h</span><span class=\"invisible\">ighlander_pg</span></a></p><p><a href=\"https://fosstodon.org/tags/elixirlang\" class=\"mention hashtag\" rel=\"tag\">#<span>elixirlang</span></a> <a href=\"https://fosstodon.org/tags/myelixirstatus\" class=\"mention hashtag\" rel=\"tag\">#<span>myelixirstatus</span></a></p>", "contentMap": { "en": "<p>๐Ÿฅณ HighlanderPG 1.0.6 is out! This adds support for the `:repo` option, allowing easier than ever setup.</p><p>HighlanderPG helps you run a singleton process in your cluster, and is available for $100 a year at <a href=\"https://hex.codecodeship.com/package/highlander_pg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">hex.codecodeship.com/package/h</span><span class=\"invisible\">ighlander_pg</span></a></p><p><a href=\"https://fosstodon.org/tags/elixirlang\" class=\"mention hashtag\" rel=\"tag\">#<span>elixirlang</span></a> <a href=\"https://fosstodon.org/tags/myelixirstatus\" class=\"mention hashtag\" rel=\"tag\">#<span>myelixirstatus</span></a></p>" }, "updated": "2024-11-13T14:20:11Z", "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://cdn.fosstodon.org/media_attachments/files/113/476/077/723/776/019/original/cd796c30bb8f03e5.png", "name": "code: # lib/application.ex\n\nchildren = [\n ...\n {HighlanderPG, [child: MyChild, repo: MyApp.Repo]},\n ...\n]\n\nSupervisor.init(children, strategy: :one_for_one)", "blurhash": "Up5%W=j[p1j[fkjtj[fQtpfkaJfRkCfQfQfQ", "focalPoint": [ -0.6, 0.05 ], "width": 1190, "height": 732 } ], "tag": [ { "type": "Hashtag", "href": "https://fosstodon.org/tags/elixirlang", "name": "#elixirlang" }, { "type": "Hashtag", "href": "https://fosstodon.org/tags/myelixirstatus", "name": "#myelixirstatus" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/113476079809583223/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-06-03T16:35:25Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-06-03T16:35:25Z", "url": "https://fosstodon.org/@derekkraan/112553657964573654", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-06-03:objectId=214179247:objectType=Conversation", "content": "<p>Long form announcement of CurlReq, which became a kind of love letter to Elixir&#39;s sigils:</p><p><a href=\"https://codecodeship.com/blog/2024-06-03-curl_req\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">codecodeship.com/blog/2024-06-</span><span class=\"invisible\">03-curl_req</span></a></p>", "contentMap": { "en": "<p>Long form announcement of CurlReq, which became a kind of love letter to Elixir&#39;s sigils:</p><p><a href=\"https://codecodeship.com/blog/2024-06-03-curl_req\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">codecodeship.com/blog/2024-06-</span><span class=\"invisible\">03-curl_req</span></a></p>" }, "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112553657964573654/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-06-03T12:46:10Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466", "type": "Note", "summary": null, "inReplyTo": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476", "published": "2024-06-03T12:46:10Z", "url": "https://fosstodon.org/@derekkraan/112552756574587466", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466", "inReplyToAtomUri": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476", "conversation": "tag:fosstodon.org,2024-06-03:objectId=214120869:objectType=Conversation", "content": "<p>For the non-Elixir people, a sigil is a language feature of Elixir (sugar) that allows easy access to macros. This makes it an attractive target for translating literals into Elixir data structures.</p><p>Examples:</p><p>UTC DateTime Sigil:</p><p>~U(2024-06-03T14:43:00Z)</p><p>Regex sigil:</p><p>~r/[0-9]*/</p><p>And now, curl sigil (translates to %Req.Request{}):</p><p>~CURL(curl <a href=\"https://catfact.ninja/fact\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">catfact.ninja/fact</span><span class=\"invisible\"></span></a>)</p><p>--</p><p>NB You could also write</p><p>&quot;curl <a href=\"https://catfact.ninja/fact\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">catfact.ninja/fact</span><span class=\"invisible\"></span></a>&quot; |&gt; CurlReq.from_curl()</p><p>But this doesn&#39;t have the same impact imo.</p>", "contentMap": { "en": "<p>For the non-Elixir people, a sigil is a language feature of Elixir (sugar) that allows easy access to macros. This makes it an attractive target for translating literals into Elixir data structures.</p><p>Examples:</p><p>UTC DateTime Sigil:</p><p>~U(2024-06-03T14:43:00Z)</p><p>Regex sigil:</p><p>~r/[0-9]*/</p><p>And now, curl sigil (translates to %Req.Request{}):</p><p>~CURL(curl <a href=\"https://catfact.ninja/fact\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">catfact.ninja/fact</span><span class=\"invisible\"></span></a>)</p><p>--</p><p>NB You could also write</p><p>&quot;curl <a href=\"https://catfact.ninja/fact\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">catfact.ninja/fact</span><span class=\"invisible\"></span></a>&quot; |&gt; CurlReq.from_curl()</p><p>But this doesn&#39;t have the same impact imo.</p>" }, "updated": "2024-06-03T12:46:33Z", "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552756574587466/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-06-03T12:42:01Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-06-03T12:42:01Z", "url": "https://fosstodon.org/@derekkraan/112552740216981476", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-06-03:objectId=214120869:objectType=Conversation", "content": "<p>๐Ÿค” We need more sigils in Elixir</p><p>So I built one!</p><p>๐Ÿ“ข๐Ÿ“ข Announcing curl_req!</p><p>It implements the ~CURL sigil!</p><p>๐ŸŽ Available on Hex as curl_req</p><p>This lib provides 2 functions and a macro:<br />- to_curl/1<br />- inspect/2<br />- sigil_CURL/2</p><p>So you can go from req &lt;=&gt; curl and back.</p><p>โฌ Download it and give it a try! Star on GitHub! Submit a PR if you find a missing feature that you need!</p><p>๐Ÿ’—/๐Ÿ” so others can find this too.</p>", "contentMap": { "en": "<p>๐Ÿค” We need more sigils in Elixir</p><p>So I built one!</p><p>๐Ÿ“ข๐Ÿ“ข Announcing curl_req!</p><p>It implements the ~CURL sigil!</p><p>๐ŸŽ Available on Hex as curl_req</p><p>This lib provides 2 functions and a macro:<br />- to_curl/1<br />- inspect/2<br />- sigil_CURL/2</p><p>So you can go from req &lt;=&gt; curl and back.</p><p>โฌ Download it and give it a try! Star on GitHub! Submit a PR if you find a missing feature that you need!</p><p>๐Ÿ’—/๐Ÿ” so others can find this too.</p>" }, "attachment": [ { "type": "Document", "mediaType": "video/mp4", "url": "https://cdn.fosstodon.org/media_attachments/files/112/552/735/773/040/021/original/83a90207e0eab39a.mp4", "name": null, "blurhash": "UYO;bray0wj[o}ayaefj0cayt7j[o}ayaefj", "width": 1280, "height": 720 } ], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476/replies?min_id=112552756574587466&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476/replies", "items": [ "https://fosstodon.org/users/derekkraan/statuses/112552756574587466" ] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476/likes", "type": "Collection", "totalItems": 2 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112552740216981476/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T11:22:02Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers", "https://mstdn.social/users/calmeilles" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787", "type": "Note", "summary": null, "inReplyTo": "https://mstdn.social/users/calmeilles/statuses/112478084136071302", "published": "2024-05-21T11:22:02Z", "url": "https://fosstodon.org/@derekkraan/112478815710438787", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers", "https://mstdn.social/users/calmeilles" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787", "inReplyToAtomUri": "https://mstdn.social/users/calmeilles/statuses/112478084136071302", "conversation": "tag:mstdn.social,2024-05-21:objectId=381108277:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://mstdn.social/@calmeilles\" class=\"u-url mention\">@<span>calmeilles</span></a></span> I heard someone say this once:</p><p>FOMO is a powerful drug</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://mstdn.social/@calmeilles\" class=\"u-url mention\">@<span>calmeilles</span></a></span> I heard someone say this once:</p><p>FOMO is a powerful drug</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://mstdn.social/users/calmeilles", "name": "@calmeilles@mstdn.social" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787/likes", "type": "Collection", "totalItems": 3 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478815710438787/shares", "type": "Collection", "totalItems": 4 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T08:19:08Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157", "type": "Note", "summary": null, "inReplyTo": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934", "published": "2024-05-21T08:19:08Z", "url": "https://fosstodon.org/@derekkraan/112478096458081157", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157", "inReplyToAtomUri": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934", "conversation": "tag:fosstodon.org,2024-05-21:objectId=210523424:objectType=Conversation", "content": "<p>๐ŸŽŠ The problem has been fixed in HighlanderPG 1.0.3!</p><p>Now HighlanderPG will poll for the lock, using SELECT pg_try_advisory_lock(x, y); which always returns immediately.</p><p>Benefit from this battle testing, get the library at the link below!</p><p><a href=\"https://hex.codecodeship.com/package/highlander_pg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">hex.codecodeship.com/package/h</span><span class=\"invisible\">ighlander_pg</span></a> </p><p>๐Ÿ”š/๐Ÿงต</p>", "contentMap": { "en": "<p>๐ŸŽŠ The problem has been fixed in HighlanderPG 1.0.3!</p><p>Now HighlanderPG will poll for the lock, using SELECT pg_try_advisory_lock(x, y); which always returns immediately.</p><p>Benefit from this battle testing, get the library at the link below!</p><p><a href=\"https://hex.codecodeship.com/package/highlander_pg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">hex.codecodeship.com/package/h</span><span class=\"invisible\">ighlander_pg</span></a> </p><p>๐Ÿ”š/๐Ÿงต</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157/likes", "type": "Collection", "totalItems": 3 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478096458081157/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T08:18:55Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934", "type": "Note", "summary": null, "inReplyTo": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982", "published": "2024-05-21T08:18:55Z", "url": "https://fosstodon.org/@derekkraan/112478095646309934", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934", "inReplyToAtomUri": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982", "conversation": "tag:fosstodon.org,2024-05-21:objectId=210523424:objectType=Conversation", "content": "<p>And so by running SELECT pg_advisory_lock(x, y); and simply waiting to get the lock, I was causing a transaction to run indefinitely. We all know the BEAM&#39;s legendary reliability; this transaction could be waiting for WEEKS if you aren&#39;t regularly deploying.</p><p>6/๐Ÿงต</p>", "contentMap": { "en": "<p>And so by running SELECT pg_advisory_lock(x, y); and simply waiting to get the lock, I was causing a transaction to run indefinitely. We all know the BEAM&#39;s legendary reliability; this transaction could be waiting for WEEKS if you aren&#39;t regularly deploying.</p><p>6/๐Ÿงต</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934/replies?min_id=112478096458081157&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934/replies", "items": [ "https://fosstodon.org/users/derekkraan/statuses/112478096458081157" ] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478095646309934/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T08:18:37Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982", "type": "Note", "summary": null, "inReplyTo": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509", "published": "2024-05-21T08:18:37Z", "url": "https://fosstodon.org/@derekkraan/112478094490042982", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982", "inReplyToAtomUri": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509", "conversation": "tag:fosstodon.org,2024-05-21:objectId=210523424:objectType=Conversation", "content": "<p>So back to HighlanderPG. How does a single SELECT query cause all this to happen? What I neglected to remember (it happens) is that EVERY statement in Postgres gets executed in a transaction. If you don&#39;t run BEGIN... END, Postgres does it for you.</p><p>5/๐Ÿงต</p>", "contentMap": { "en": "<p>So back to HighlanderPG. How does a single SELECT query cause all this to happen? What I neglected to remember (it happens) is that EVERY statement in Postgres gets executed in a transaction. If you don&#39;t run BEGIN... END, Postgres does it for you.</p><p>5/๐Ÿงต</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982/replies?min_id=112478095646309934&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982/replies", "items": [ "https://fosstodon.org/users/derekkraan/statuses/112478095646309934" ] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478094490042982/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T08:18:11Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509", "type": "Note", "summary": null, "inReplyTo": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118", "published": "2024-05-21T08:18:11Z", "url": "https://fosstodon.org/@derekkraan/112478092727004509", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509", "inReplyToAtomUri": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118", "conversation": "tag:fosstodon.org,2024-05-21:objectId=210523424:objectType=Conversation", "content": "<p>Because a long-running transaction then causes dead rows to accumulate! And THIS is a problem because when you do a SELECT query, Postgres has to read all the rows (also dead ones) to know which rows you need. Indexes can&#39;t save you since they also point to dead rows.</p><p>Now your database has to do way more work to process the same queries. And this trend continues until the transaction ends, meaning that a crash is inevitable if the transaction continues indefinitely.</p><p>4/๐Ÿงต</p>", "contentMap": { "en": "<p>Because a long-running transaction then causes dead rows to accumulate! And THIS is a problem because when you do a SELECT query, Postgres has to read all the rows (also dead ones) to know which rows you need. Indexes can&#39;t save you since they also point to dead rows.</p><p>Now your database has to do way more work to process the same queries. And this trend continues until the transaction ends, meaning that a crash is inevitable if the transaction continues indefinitely.</p><p>4/๐Ÿงต</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509/replies?min_id=112478094490042982&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509/replies", "items": [ "https://fosstodon.org/users/derekkraan/statuses/112478094490042982" ] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478092727004509/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T08:17:48Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118", "type": "Note", "summary": null, "inReplyTo": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575", "published": "2024-05-21T08:17:48Z", "url": "https://fosstodon.org/@derekkraan/112478091225839118", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118", "inReplyToAtomUri": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575", "conversation": "tag:fosstodon.org,2024-05-21:objectId=210523424:objectType=Conversation", "content": "<p>What are dead rows anyways? Postgres runs on MVCC - Multi Version Concurrency Control. Basically, an UPDATE does not change a row in-place.</p><p>Instead, a new row is written, and the old row becomes &quot;dead&quot;. Dead rows can&#39;t be deleted right away, because they might still be visible to another transaction!</p><p>So VACUUM comes along later and cleans them up. But, VACUUM is smart, it doesn&#39;t delete any dead rows that a running transaction might be able to see! This is a problem, ...</p><p>3/๐Ÿงต</p>", "contentMap": { "en": "<p>What are dead rows anyways? Postgres runs on MVCC - Multi Version Concurrency Control. Basically, an UPDATE does not change a row in-place.</p><p>Instead, a new row is written, and the old row becomes &quot;dead&quot;. Dead rows can&#39;t be deleted right away, because they might still be visible to another transaction!</p><p>So VACUUM comes along later and cleans them up. But, VACUUM is smart, it doesn&#39;t delete any dead rows that a running transaction might be able to see! This is a problem, ...</p><p>3/๐Ÿงต</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118/replies?min_id=112478092727004509&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118/replies", "items": [ "https://fosstodon.org/users/derekkraan/statuses/112478092727004509" ] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478091225839118/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T08:17:09Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575", "type": "Note", "summary": null, "inReplyTo": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138", "published": "2024-05-21T08:17:09Z", "url": "https://fosstodon.org/@derekkraan/112478088689962575", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575", "inReplyToAtomUri": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138", "conversation": "tag:fosstodon.org,2024-05-21:objectId=210523424:objectType=Conversation", "content": "<p>HighlanderPG runs this query, and simply waits to get the lock. When it has the lock, it starts your child process. When the child process shuts down or dies, the lock is released and the cycle repeats, with another instance of HighlanderPG getting the lock.</p><p>HighlanderPG only runs this query, no &quot;BEGIN&quot;, nothing like that. And simply holding an advisory lock (on session level) is not sufficient to cause dead rows to start accumulating. I was at a loss. But I was able to reproduce.</p><p>2/๐Ÿงต</p>", "contentMap": { "en": "<p>HighlanderPG runs this query, and simply waits to get the lock. When it has the lock, it starts your child process. When the child process shuts down or dies, the lock is released and the cycle repeats, with another instance of HighlanderPG getting the lock.</p><p>HighlanderPG only runs this query, no &quot;BEGIN&quot;, nothing like that. And simply holding an advisory lock (on session level) is not sufficient to cause dead rows to start accumulating. I was at a loss. But I was able to reproduce.</p><p>2/๐Ÿงต</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575/replies?min_id=112478091225839118&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575/replies", "items": [ "https://fosstodon.org/users/derekkraan/statuses/112478091225839118" ] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478088689962575/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-05-21T08:16:33Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-05-21T08:16:33Z", "url": "https://fosstodon.org/@derekkraan/112478086306467138", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-05-21:objectId=210523424:objectType=Conversation", "content": "<p>๐Ÿ’ฅPG advisory locks considered dangerous. The following query can crash your DB.๐Ÿ’ฅ</p><p>HighlanderPG uses these locks to ensure that your process (data syncer, email sender, cron job runner, etc) is running on just one of your nodes.</p><p>Last week a customer called to say that their DB was getting crushed under the load when running HighlanderPG. The # of dead rows was getting very high, indicating some issue with VACUUM.</p><p>I quickly realized that something was causing a long-running transaction.</p><p>1/๐Ÿงต</p>", "contentMap": { "en": "<p>๐Ÿ’ฅPG advisory locks considered dangerous. The following query can crash your DB.๐Ÿ’ฅ</p><p>HighlanderPG uses these locks to ensure that your process (data syncer, email sender, cron job runner, etc) is running on just one of your nodes.</p><p>Last week a customer called to say that their DB was getting crushed under the load when running HighlanderPG. The # of dead rows was getting very high, indicating some issue with VACUUM.</p><p>I quickly realized that something was causing a long-running transaction.</p><p>1/๐Ÿงต</p>" }, "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://cdn.fosstodon.org/media_attachments/files/112/478/083/868/663/434/original/e9cb9d13654b8750.png", "name": null, "blurhash": "Uo7z4bj[p0a#azjtj[fQpMazaIj@kCazayj@", "width": 794, "height": 390 } ], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138/replies?min_id=112478088689962575&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138/replies", "items": [ "https://fosstodon.org/users/derekkraan/statuses/112478088689962575" ] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138/likes", "type": "Collection", "totalItems": 3 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112478086306467138/shares", "type": "Collection", "totalItems": 3 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-04-23T08:53:29Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-04-23T08:53:29Z", "url": "https://fosstodon.org/@derekkraan/112319686901304765", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-04-23:objectId=203054306:objectType=Conversation", "content": "<p>๐Ÿค“ Elixir Pro Tip</p><p>If the latest version of a package is broken, and you want to pin it to a version that works, it is nice to specify that you do want the next version after that.</p><p>Saves wondering later why that version is pinned.</p><p><a href=\"https://fosstodon.org/tags/elixir\" class=\"mention hashtag\" rel=\"tag\">#<span>elixir</span></a></p>", "contentMap": { "en": "<p>๐Ÿค“ Elixir Pro Tip</p><p>If the latest version of a package is broken, and you want to pin it to a version that works, it is nice to specify that you do want the next version after that.</p><p>Saves wondering later why that version is pinned.</p><p><a href=\"https://fosstodon.org/tags/elixir\" class=\"mention hashtag\" rel=\"tag\">#<span>elixir</span></a></p>" }, "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://cdn.fosstodon.org/media_attachments/files/112/319/683/157/330/491/original/5badbd12f9db8f25.png", "name": "defp deps do\n [\n # version 2.38.0 is broken\n {:ex_cldr, \"== 2.37.5 or ~> 2.38.1 or ~> 2.39\"}\n ]\nend", "blurhash": "Us6J#3j[p0fPjuj@fQfQtpa{aJfRbHazazfQ", "focalPoint": [ 0, 0 ], "width": 1154, "height": 604 } ], "tag": [ { "type": "Hashtag", "href": "https://fosstodon.org/tags/elixir", "name": "#elixir" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765/likes", "type": "Collection", "totalItems": 8 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112319686901304765/shares", "type": "Collection", "totalItems": 1 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-04-15T10:02:34Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-04-15T10:02:34Z", "url": "https://fosstodon.org/@derekkraan/112274660013638438", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-04-15:objectId=200966018:objectType=Conversation", "content": "<p>๐Ÿšจ I released a new library for <a href=\"https://fosstodon.org/tags/Elixir\" class=\"mention hashtag\" rel=\"tag\">#<span>Elixir</span></a> today, called HighlanderPG.</p><p>It&#39;s a sequel to the Highlander lib I released 4 years ago, which lets you make a single process into a singleton in your cluster (so it only runs on one node). HighlanderPG solves a bunch of problems with the original.</p><p>I am doing something new with this library -- I am putting it up for sale. It&#39;s not a huge library, so the price is also quite reasonable -- $100 per year.</p><p>Read about it here: <a href=\"https://codecodeship.com/blog/2024-04-11-introducing-highlander-pg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">codecodeship.com/blog/2024-04-</span><span class=\"invisible\">11-introducing-highlander-pg</span></a></p>", "contentMap": { "en": "<p>๐Ÿšจ I released a new library for <a href=\"https://fosstodon.org/tags/Elixir\" class=\"mention hashtag\" rel=\"tag\">#<span>Elixir</span></a> today, called HighlanderPG.</p><p>It&#39;s a sequel to the Highlander lib I released 4 years ago, which lets you make a single process into a singleton in your cluster (so it only runs on one node). HighlanderPG solves a bunch of problems with the original.</p><p>I am doing something new with this library -- I am putting it up for sale. It&#39;s not a huge library, so the price is also quite reasonable -- $100 per year.</p><p>Read about it here: <a href=\"https://codecodeship.com/blog/2024-04-11-introducing-highlander-pg\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">codecodeship.com/blog/2024-04-</span><span class=\"invisible\">11-introducing-highlander-pg</span></a></p>" }, "attachment": [], "tag": [ { "type": "Hashtag", "href": "https://fosstodon.org/tags/elixir", "name": "#elixir" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112274660013638438/shares", "type": "Collection", "totalItems": 1 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-03-28T09:57:06Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers", "https://social.shadowfacts.net/users/shadowfacts" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956", "type": "Note", "summary": null, "inReplyTo": "https://social.shadowfacts.net/objects/a98cb3aa-9c37-4028-8a09-4ceba44737a8", "published": "2024-03-28T09:57:06Z", "url": "https://fosstodon.org/@derekkraan/112172716979043956", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers", "https://social.shadowfacts.net/users/shadowfacts" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956", "inReplyToAtomUri": "https://social.shadowfacts.net/objects/a98cb3aa-9c37-4028-8a09-4ceba44737a8", "conversation": "tag:digipres.club,2024-03-23:objectId=21815622:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://social.shadowfacts.net/users/shadowfacts\" class=\"u-url mention\">@<span>shadowfacts</span></a></span> Previously they were hiring for Elixir (points to Pleroma) but now their only posting asks for Ruby (points to Mastodon). <a href=\"https://careers.tmtgcorp.com/p/c0f962feea30-open-source-engineer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">careers.tmtgcorp.com/p/c0f962f</span><span class=\"invisible\">eea30-open-source-engineer</span></a></p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://social.shadowfacts.net/users/shadowfacts\" class=\"u-url mention\">@<span>shadowfacts</span></a></span> Previously they were hiring for Elixir (points to Pleroma) but now their only posting asks for Ruby (points to Mastodon). <a href=\"https://careers.tmtgcorp.com/p/c0f962feea30-open-source-engineer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">careers.tmtgcorp.com/p/c0f962f</span><span class=\"invisible\">eea30-open-source-engineer</span></a></p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://social.shadowfacts.net/users/shadowfacts", "name": "@shadowfacts@social.shadowfacts.net" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112172716979043956/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-03-25T17:02:42Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-03-25T17:02:42Z", "url": "https://fosstodon.org/@derekkraan/112157403513703633", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-03-25:objectId=195498672:objectType=Conversation", "content": "<p>โ‚ฌ8 logic analyzer from china came in, time to reverse engineer my ventilation system!</p>", "contentMap": { "en": "<p>โ‚ฌ8 logic analyzer from china came in, time to reverse engineer my ventilation system!</p>" }, "attachment": [ { "type": "Document", "mediaType": "image/jpeg", "url": "https://cdn.fosstodon.org/media_attachments/files/112/157/401/488/979/111/original/3a24c85a80a0c3ef.jpeg", "name": null, "blurhash": "UKEL$$9tVYs,^iSOROxZ0exuI;xtEg$#I]R+", "width": 2494, "height": 3325 } ], "tag": [], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112157403513703633/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-03-18T08:59:05Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers", "https://mastodon.social/users/danluu" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539", "type": "Note", "summary": null, "inReplyTo": "https://mastodon.social/users/danluu/statuses/112107129233149155", "published": "2024-03-18T08:59:05Z", "url": "https://fosstodon.org/@derekkraan/112115865700350539", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers", "https://mastodon.social/users/danluu" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539", "inReplyToAtomUri": "https://mastodon.social/users/danluu/statuses/112107129233149155", "conversation": "tag:mastodon.social,2024-03-16:objectId=665257908:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@danluu\" class=\"u-url mention\">@<span>danluu</span></a></span> I am once again very happy I went with Phoenix Liveview for my project. ~50kb compressed for a fully dynamic experience is pretty good.</p><p>No truly free cake though, you have to give up having a first-class offline experience. I don&#39;t get the idea that this is a concern for 99% of JS webapps though.</p><p>(I have also moved everything I could from JS to running on the server, including markdown parsing and syntax highlighting using Rust FFI)</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@danluu\" class=\"u-url mention\">@<span>danluu</span></a></span> I am once again very happy I went with Phoenix Liveview for my project. ~50kb compressed for a fully dynamic experience is pretty good.</p><p>No truly free cake though, you have to give up having a first-class offline experience. I don&#39;t get the idea that this is a concern for 99% of JS webapps though.</p><p>(I have also moved everything I could from JS to running on the server, including markdown parsing and syntax highlighting using Rust FFI)</p>" }, "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://cdn.fosstodon.org/media_attachments/files/112/115/850/254/296/641/original/037ed810443fe482.png", "name": null, "blurhash": "U05OQqM{RjD%4-xvNGt700t7RPt7%MWBWBay", "width": 280, "height": 108 } ], "tag": [ { "type": "Mention", "href": "https://mastodon.social/users/danluu", "name": "@danluu@mastodon.social" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/112115865700350539/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-02-19T09:24:36Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-02-19T09:24:36Z", "url": "https://fosstodon.org/@derekkraan/111957421380777123", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-02-19:objectId=186027599:objectType=Conversation", "content": "<p>I love building front-ends on top of Oban. Oban&#39;s jobs table is easy to query, it has indexes in all the right places. And if you sprinkle in a little bit of Phoenix.PubSub in there, you can make a very nice UI in LiveView for your users showing the progress of batch jobs for instance.</p><p>I think it is a less-explored but really powerful way to use Oban.</p><p><a href=\"https://fosstodon.org/tags/myelixirstatus\" class=\"mention hashtag\" rel=\"tag\">#<span>myelixirstatus</span></a></p>", "contentMap": { "en": "<p>I love building front-ends on top of Oban. Oban&#39;s jobs table is easy to query, it has indexes in all the right places. And if you sprinkle in a little bit of Phoenix.PubSub in there, you can make a very nice UI in LiveView for your users showing the progress of batch jobs for instance.</p><p>I think it is a less-explored but really powerful way to use Oban.</p><p><a href=\"https://fosstodon.org/tags/myelixirstatus\" class=\"mention hashtag\" rel=\"tag\">#<span>myelixirstatus</span></a></p>" }, "attachment": [], "tag": [ { "type": "Hashtag", "href": "https://fosstodon.org/tags/myelixirstatus", "name": "#myelixirstatus" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123/likes", "type": "Collection", "totalItems": 5 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/111957421380777123/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://fosstodon.org/users/derekkraan/statuses/111929951287171757/activity", "type": "Announce", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-02-14T12:58:36Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/WillA763", "https://fosstodon.org/users/derekkraan/followers" ], "object": "https://mastodon.social/users/WillA763/statuses/111927243488684907" }, { "id": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171/activity", "type": "Create", "actor": "https://fosstodon.org/users/derekkraan", "published": "2024-02-02T09:02:32Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "object": { "id": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-02-02T09:02:32Z", "url": "https://fosstodon.org/@derekkraan/111861075339633171", "attributedTo": "https://fosstodon.org/users/derekkraan", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://fosstodon.org/users/derekkraan/followers" ], "sensitive": false, "atomUri": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171", "inReplyToAtomUri": null, "conversation": "tag:fosstodon.org,2024-02-02:objectId=181510933:objectType=Conversation", "content": "<p>Heading out to Brussels this evening to attend <a href=\"https://fosstodon.org/tags/FOSDEM\" class=\"mention hashtag\" rel=\"tag\">#<span>FOSDEM</span></a> tomorrow! Who else?</p>", "contentMap": { "en": "<p>Heading out to Brussels this evening to attend <a href=\"https://fosstodon.org/tags/FOSDEM\" class=\"mention hashtag\" rel=\"tag\">#<span>FOSDEM</span></a> tomorrow! Who else?</p>" }, "attachment": [], "tag": [ { "type": "Hashtag", "href": "https://fosstodon.org/tags/fosdem", "name": "#fosdem" } ], "replies": { "id": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171/replies?only_other_accounts=true&page=true", "partOf": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171/replies", "items": [] } }, "likes": { "id": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://fosstodon.org/users/derekkraan/statuses/111861075339633171/shares", "type": "Collection", "totalItems": 0 } } } ] }