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.
{
"@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'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'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'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'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'm thinking it would be useful (maybe I'll write a gem?) for a Rails app to blow up in dev if yjit is not on. Simply fail to start and say "yjit isn't enabled because a) you didnt call yjit.enable or b) ruby wasn'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'm thinking it would be useful (maybe I'll write a gem?) for a Rails app to blow up in dev if yjit is not on. Simply fail to start and say "yjit isn't enabled because a) you didnt call yjit.enable or b) ruby wasn'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'm thinking in dev, all of the build tools aren'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'm thinking in dev, all of the build tools aren'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'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'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'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'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'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'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 "too high" cost is you don't catch leaks. But leaks have been far less of an issue in recent years, and there'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 "too high" cost is you don't catch leaks. But leaks have been far less of an issue in recent years, and there'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'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't make sense. </p><p>25 is low enough to catch leaks, high enough to allow concurrency</p>",
"contentMap": {
"en": "<p>I'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'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'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'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
}
}
}
]
}