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" } } ], "id": "https://mastodon.social/users/nateberkopec/outbox?min_id=113442267461294808&page=true", "type": "OrderedCollectionPage", "next": "https://mastodon.social/users/nateberkopec/outbox?max_id=113447928215657041&page=true", "prev": "https://mastodon.social/users/nateberkopec/outbox?min_id=113529316342483530&page=true", "partOf": "https://mastodon.social/users/nateberkopec/outbox", "orderedItems": [ { "id": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-22T23:58:10Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-22T23:58:10Z", "url": "https://mastodon.social/@nateberkopec/113529316342483530", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-22:objectId=854995857:objectType=Conversation", "content": "<p>Puma 6.5.0 is out!</p><p><a href=\"https://github.com/puma/puma/releases/tag/v6.5.0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/puma/puma/releases/</span><span class=\"invisible\">tag/v6.5.0</span></a></p>", "contentMap": { "en": "<p>Puma 6.5.0 is out!</p><p><a href=\"https://github.com/puma/puma/releases/tag/v6.5.0\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/puma/puma/releases/</span><span class=\"invisible\">tag/v6.5.0</span></a></p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530/likes", "type": "Collection", "totalItems": 11 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113529316342483530/shares", "type": "Collection", "totalItems": 7 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-22T15:00:03Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-22T15:00:03Z", "url": "https://mastodon.social/@nateberkopec/113527200372355350", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-22:objectId=854660717:objectType=Conversation", "content": "<p>If you&#39;ve got *1 million* concurrent users, saving $2 million/year in infra is hopefully not the most important thing for that business.</p>", "contentMap": { "en": "<p>If you&#39;ve got *1 million* concurrent users, saving $2 million/year in infra is hopefully not the most important thing for that business.</p>" }, "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://files.mastodon.social/media_attachments/files/113/527/200/262/844/124/original/1198a87d41908e14.png", "name": null, "blurhash": "UOPjGXIU%MfQt7t7ayay%Mt7Rjj[~qWBj[j[", "width": 513, "height": 87 } ], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350/likes", "type": "Collection", "totalItems": 11 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113527200372355350/shares", "type": "Collection", "totalItems": 5 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-22T00:30:03Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-22T00:30:03Z", "url": "https://mastodon.social/@nateberkopec/113523779403331332", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-22:objectId=854164473:objectType=Conversation", "content": "<p>Had a little “lost my yubikey” scare. Now I’ve done what I should have done in the first place: made it hard to misplace and have two to begin with!</p>", "contentMap": { "en": "<p>Had a little “lost my yubikey” scare. Now I’ve done what I should have done in the first place: made it hard to misplace and have two to begin with!</p>" }, "attachment": [ { "type": "Document", "mediaType": "image/jpeg", "url": "https://files.mastodon.social/media_attachments/files/113/523/779/295/894/703/original/fa95f1c9338eaee0.jpeg", "name": null, "blurhash": "UaI}37~AtlWYyDE1nOjZx]RjV[jsx]tSX9kB", "width": 2494, "height": 3325 } ], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332/likes", "type": "Collection", "totalItems": 5 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523779403331332/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-21T21:14:42Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://status.pointless.one/users/pointlessone", "https://ruby.social/users/getajobmike" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071", "type": "Note", "summary": null, "inReplyTo": "https://status.pointless.one/users/pointlessone/statuses/113521173178098949", "published": "2024-11-21T21:14:42Z", "url": "https://mastodon.social/@nateberkopec/113523011270736071", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://status.pointless.one/users/pointlessone", "https://ruby.social/users/getajobmike" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071", "inReplyToAtomUri": "https://status.pointless.one/users/pointlessone/statuses/113521173178098949", "conversation": "tag:mastodon.social,2024-11-21:objectId=853319673:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://status.pointless.one/@pointlessone\" class=\"u-url mention\">@<span>pointlessone</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> no, but they haven&#39;t accepted jemalloc as default for largely the same reason</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://status.pointless.one/@pointlessone\" class=\"u-url mention\">@<span>pointlessone</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> no, but they haven&#39;t accepted jemalloc as default for largely the same reason</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://status.pointless.one/users/pointlessone", "name": "@pointlessone@status.pointless.one" }, { "type": "Mention", "href": "https://ruby.social/users/getajobmike", "name": "@getajobmike@ruby.social" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113523011270736071/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-21T15:00:14Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-21T15:00:14Z", "url": "https://mastodon.social/@nateberkopec/113521538793330361", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-21:objectId=853794996:objectType=Conversation", "content": "<p>The easiest way to spout bullshit about performance is to talk in relative terms only (this is 3x faster than before!) without reference to the absolute.</p><p>Great, your new code is 3x faster. But it runs 3 million iter/sec and we only call it once.</p>", "contentMap": { "en": "<p>The easiest way to spout bullshit about performance is to talk in relative terms only (this is 3x faster than before!) without reference to the absolute.</p><p>Great, your new code is 3x faster. But it runs 3 million iter/sec and we only call it once.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361/likes", "type": "Collection", "totalItems": 4 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113521538793330361/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-21T05:22:18Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/getajobmike" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664", "type": "Note", "summary": null, "inReplyTo": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653", "published": "2024-11-21T05:22:18Z", "url": "https://mastodon.social/@nateberkopec/113519266284834664", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/getajobmike" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664", "inReplyToAtomUri": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653", "conversation": "tag:mastodon.social,2024-11-21:objectId=853319673:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> I&#39;m thinking it would be useful (maybe I&#39;ll write a gem?) for a Rails app to blow up in dev if yjit is not on. Simply fail to start and say &quot;yjit isn&#39;t enabled because a) you didnt call yjit.enable or b) ruby wasn&#39;t compiled w/yjit support.</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> I&#39;m thinking it would be useful (maybe I&#39;ll write a gem?) for a Rails app to blow up in dev if yjit is not on. Simply fail to start and say &quot;yjit isn&#39;t enabled because a) you didnt call yjit.enable or b) ruby wasn&#39;t compiled w/yjit support.</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/getajobmike", "name": "@getajobmike@ruby.social" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519266284834664/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-21T05:21:02Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/getajobmike" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/getajobmike/statuses/113518673998069337", "published": "2024-11-21T05:21:02Z", "url": "https://mastodon.social/@nateberkopec/113519261277682653", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/getajobmike" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653", "inReplyToAtomUri": "https://ruby.social/users/getajobmike/statuses/113518673998069337", "conversation": "tag:mastodon.social,2024-11-21:objectId=853319673:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> No. It will never be a default because core will never accept a dependency on Rust.</p><p>I&#39;m thinking in dev, all of the build tools aren&#39;t compiling w/yjit on by default.</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> No. It will never be a default because core will never accept a dependency on Rust.</p><p>I&#39;m thinking in dev, all of the build tools aren&#39;t compiling w/yjit on by default.</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/getajobmike", "name": "@getajobmike@ruby.social" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653/replies?min_id=113519266284834664&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653/replies", "items": [ "https://mastodon.social/users/nateberkopec/statuses/113519266284834664" ] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113519261277682653/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-21T01:08:10Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-21T01:08:10Z", "url": "https://mastodon.social/@nateberkopec/113518266982080880", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-21:objectId=853319673:objectType=Conversation", "content": "<p>Is there a compelling argument for _not_ always using YJIT locally/in development?</p><p>I think most people aren&#39;t.</p>", "contentMap": { "en": "<p>Is there a compelling argument for _not_ always using YJIT locally/in development?</p><p>I think most people aren&#39;t.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113518266982080880/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-19T15:00:07Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-19T15:00:07Z", "url": "https://mastodon.social/@nateberkopec/113510213698630645", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-19:objectId=852074891:objectType=Conversation", "content": "<p>Imagine that one of the DBs for your app suddenly had 100ms added to every call. You need to access this DB currently 1 to 30 times per transaction. </p><p>What would you do to compensate for this added latency?</p>", "contentMap": { "en": "<p>Imagine that one of the DBs for your app suddenly had 100ms added to every call. You need to access this DB currently 1 to 30 times per transaction. </p><p>What would you do to compensate for this added latency?</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113510213698630645/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-18T15:00:13Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-18T15:00:13Z", "url": "https://mastodon.social/@nateberkopec/113504551817685664", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-18:objectId=851216486:objectType=Conversation", "content": "<p>I&#39;ve written a ~500 line web application load simulator in Ruby. You give it the number of servers, processes, threads, p50 and p95 response times, # of db VCPU, and I/O wait %, and it Monte Carlo simulates your maximum possible req/sec. </p><p>Deploying as a tool for retainer clients soon.</p>", "contentMap": { "en": "<p>I&#39;ve written a ~500 line web application load simulator in Ruby. You give it the number of servers, processes, threads, p50 and p95 response times, # of db VCPU, and I/O wait %, and it Monte Carlo simulates your maximum possible req/sec. </p><p>Deploying as a tool for retainer clients soon.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664/likes", "type": "Collection", "totalItems": 9 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113504551817685664/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-16T05:42:15Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://hachyderm.io/users/irvingreid" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160", "type": "Note", "summary": null, "inReplyTo": "https://hachyderm.io/users/irvingreid/statuses/113484749776253224", "published": "2024-11-16T05:42:15Z", "url": "https://mastodon.social/@nateberkopec/113491033191291160", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://hachyderm.io/users/irvingreid" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160", "inReplyToAtomUri": "https://hachyderm.io/users/irvingreid/statuses/113484749776253224", "conversation": "tag:mastodon.social,2024-11-14:objectId=848180943:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://hachyderm.io/@irvingreid\" class=\"u-url mention\">@<span>irvingreid</span></a></span> definitely, but you can control this with an actual db pooler (i.e. pgbouncer) and throttling concurrency (reducing puma threadpool). Controlling it via ActiveRecord pool just increases latency.</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://hachyderm.io/@irvingreid\" class=\"u-url mention\">@<span>irvingreid</span></a></span> definitely, but you can control this with an actual db pooler (i.e. pgbouncer) and throttling concurrency (reducing puma threadpool). Controlling it via ActiveRecord pool just increases latency.</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://hachyderm.io/users/irvingreid", "name": "@irvingreid@hachyderm.io" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113491033191291160/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-15T15:00:08Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-15T15:00:08Z", "url": "https://mastodon.social/@nateberkopec/113487564527096577", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-15:objectId=848865436:objectType=Conversation", "content": "<p>Underrated/missed change from Dima Fatko to basecamp/marginalia:</p><p><a href=\"https://github.com/basecamp/marginalia/commit/226f93234b0ca58f548c5af23e229bdf3bf15ad5\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/basecamp/marginalia</span><span class=\"invisible\">/commit/226f93234b0ca58f548c5af23e229bdf3bf15ad5</span></a> </p><p>I&#39;ve profiled the previous version using caller and felt that capturing line numbers were too expensive as a result. caller_locations is a new-ish API and this change would make a big difference!</p>", "contentMap": { "en": "<p>Underrated/missed change from Dima Fatko to basecamp/marginalia:</p><p><a href=\"https://github.com/basecamp/marginalia/commit/226f93234b0ca58f548c5af23e229bdf3bf15ad5\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/basecamp/marginalia</span><span class=\"invisible\">/commit/226f93234b0ca58f548c5af23e229bdf3bf15ad5</span></a> </p><p>I&#39;ve profiled the previous version using caller and felt that capturing line numbers were too expensive as a result. caller_locations is a new-ish API and this change would make a big difference!</p>" }, "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://files.mastodon.social/media_attachments/files/113/487/564/387/643/739/original/1dbe16a687b4ec11.png", "name": null, "blurhash": "UQRp5yRjRj%M?bxuRja{aKxuRjRj~qRjofof", "width": 1024, "height": 512 } ], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577/likes", "type": "Collection", "totalItems": 2 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113487564527096577/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-14T21:46:19Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455", "type": "Note", "summary": null, "inReplyTo": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960", "published": "2024-11-14T21:46:19Z", "url": "https://mastodon.social/@nateberkopec/113483499408569455", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455", "inReplyToAtomUri": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960", "conversation": "tag:mastodon.social,2024-11-14:objectId=848180943:objectType=Conversation", "content": "<p>The costs of setting pools too low is obvious - high latency caused by concurrent threads blocking on checking out a connection.</p><p>Pool &quot;too high&quot; cost is you don&#39;t catch leaks. But leaks have been far less of an issue in recent years, and there&#39;s probably better ways to detect.</p>", "contentMap": { "en": "<p>The costs of setting pools too low is obvious - high latency caused by concurrent threads blocking on checking out a connection.</p><p>Pool &quot;too high&quot; cost is you don&#39;t catch leaks. But leaks have been far less of an issue in recent years, and there&#39;s probably better ways to detect.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113483499408569455/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-14T19:37:25Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003", "type": "Note", "summary": null, "inReplyTo": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960", "published": "2024-11-14T19:37:25Z", "url": "https://mastodon.social/@nateberkopec/113482992529006003", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003", "inReplyToAtomUri": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960", "conversation": "tag:mastodon.social,2024-11-14:objectId=848180943:objectType=Conversation", "content": "<p>sorry, RMT = RAILS_MAX_THREADS or whatever you use to set your puma/sidekiq concurrency</p>", "contentMap": { "en": "<p>sorry, RMT = RAILS_MAX_THREADS or whatever you use to set your puma/sidekiq concurrency</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482992529006003/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-14T19:30:59Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-14T19:30:59Z", "url": "https://mastodon.social/@nateberkopec/113482967269383960", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-14:objectId=848180943:objectType=Conversation", "content": "<p>I&#39;m wondering if database pools should always be set to 25 conns.</p><p>Puma/Sidekiq is not the only source of concurrency. load_async, Parallel, Thread.new, fibers, etc. So RMT + 5 doesn&#39;t make sense. </p><p>25 is low enough to catch leaks, high enough to allow concurrency</p>", "contentMap": { "en": "<p>I&#39;m wondering if database pools should always be set to 25 conns.</p><p>Puma/Sidekiq is not the only source of concurrency. load_async, Parallel, Thread.new, fibers, etc. So RMT + 5 doesn&#39;t make sense. </p><p>25 is low enough to catch leaks, high enough to allow concurrency</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960/replies?min_id=113483499408569455&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960/replies", "items": [ "https://mastodon.social/users/nateberkopec/statuses/113482992529006003", "https://mastodon.social/users/nateberkopec/statuses/113483499408569455" ] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960/likes", "type": "Collection", "totalItems": 6 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113482967269383960/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-14T15:00:04Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-14T15:00:04Z", "url": "https://mastodon.social/@nateberkopec/113481901951155767", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-14:objectId=847988767:objectType=Conversation", "content": "<p>Check out this before/after shot of our retainer client deploying a bunch of missing foreign key indexes identified by ids_must_be_indexed.</p><p><a href=\"https://github.com/speedshop/ids_must_be_indexed\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/speedshop/ids_must_</span><span class=\"invisible\">be_indexed</span></a></p>", "contentMap": { "en": "<p>Check out this before/after shot of our retainer client deploying a bunch of missing foreign key indexes identified by ids_must_be_indexed.</p><p><a href=\"https://github.com/speedshop/ids_must_be_indexed\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/speedshop/ids_must_</span><span class=\"invisible\">be_indexed</span></a></p>" }, "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://files.mastodon.social/media_attachments/files/113/481/901/757/274/172/original/9c432e120e84b03b.png", "name": null, "blurhash": "UYQmF;xaM{t7?HV@oeodVFs-W.a#~Ut7R+WW", "width": 1024, "height": 214 } ], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767/likes", "type": "Collection", "totalItems": 13 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113481901951155767/shares", "type": "Collection", "totalItems": 3 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-12T22:16:46Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://vkl.world/users/spectral" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964", "type": "Note", "summary": null, "inReplyTo": "https://vkl.world/users/spectral/statuses/113466800322996077", "published": "2024-11-12T22:16:46Z", "url": "https://mastodon.social/@nateberkopec/113472294533133964", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://vkl.world/users/spectral" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964", "inReplyToAtomUri": "https://vkl.world/users/spectral/statuses/113466800322996077", "conversation": "tag:mastodon.social,2024-11-11:objectId=845421783:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://vkl.world/@spectral\" class=\"u-url mention\">@<span>spectral</span></a></span> sleep until timeout is up is dangerous as it greatly increases the concurrency of the system when the lock is hit. better to just fail fast and re-enqueue</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://vkl.world/@spectral\" class=\"u-url mention\">@<span>spectral</span></a></span> sleep until timeout is up is dangerous as it greatly increases the concurrency of the system when the lock is hit. better to just fail fast and re-enqueue</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://vkl.world/users/spectral", "name": "@spectral@vkl.world" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113472294533133964/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-12T15:00:15Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-12T15:00:15Z", "url": "https://mastodon.social/@nateberkopec/113470578059666331", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-12:objectId=846253767:objectType=Conversation", "content": "<p>mosh --predict=experimental is CRAZY good for removing latency on SSH connections. I will probably never use ssh again.</p>", "contentMap": { "en": "<p>mosh --predict=experimental is CRAZY good for removing latency on SSH connections. I will probably never use ssh again.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331/likes", "type": "Collection", "totalItems": 2 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113470578059666331/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-11T15:00:09Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-11T15:00:09Z", "url": "https://mastodon.social/@nateberkopec/113464915379407973", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-11:objectId=845421783:objectType=Conversation", "content": "<p>If you want to limit concurrency to an external HTTP API, create a remote gateway class and put the limiter THERE, not on background jobs that access the API.</p><p>It&#39;s really common for teams to end up with a spaghetti of locks on jobs that end up over or under throttling the API calls. Have one lock, in one place, not on the job.</p>", "contentMap": { "en": "<p>If you want to limit concurrency to an external HTTP API, create a remote gateway class and put the limiter THERE, not on background jobs that access the API.</p><p>It&#39;s really common for teams to end up with a spaghetti of locks on jobs that end up over or under throttling the API calls. Have one lock, in one place, not on the job.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973/likes", "type": "Collection", "totalItems": 11 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113464915379407973/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-08T15:00:06Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-08T15:00:06Z", "url": "https://mastodon.social/@nateberkopec/113447928215657041", "attributedTo": "https://mastodon.social/users/nateberkopec", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-08:objectId=843074968:objectType=Conversation", "content": "<p>You should know about hyperfine:</p><p><a href=\"https://github.com/sharkdp/hyperfine\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">github.com/sharkdp/hyperfine</span><span class=\"invisible\"></span></a></p>", "contentMap": { "en": "<p>You should know about hyperfine:</p><p><a href=\"https://github.com/sharkdp/hyperfine\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">github.com/sharkdp/hyperfine</span><span class=\"invisible\"></span></a></p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041/likes", "type": "Collection", "totalItems": 10 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113447928215657041/shares", "type": "Collection", "totalItems": 7 } } } ] }