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?max_id=113447928215657041&page=true", "type": "OrderedCollectionPage", "next": "https://mastodon.social/users/nateberkopec/outbox?max_id=113359423282977871&page=true", "prev": "https://mastodon.social/users/nateberkopec/outbox?min_id=113442267461294808&page=true", "partOf": "https://mastodon.social/users/nateberkopec/outbox", "orderedItems": [ { "id": "https://mastodon.social/users/nateberkopec/statuses/113442267461294808/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-07T15:00:29Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113442267461294808", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-07T15:00:29Z", "url": "https://mastodon.social/@nateberkopec/113442267461294808", "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/113442267461294808", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-07:objectId=842190178:objectType=Conversation", "content": "<p>VERY common error with newbies and profiling:</p><p>They don&#39;t check that the output/thing they&#39;re profiling actually does what they think it is. </p><p>You end up profiling a command or something and you accidentally are profiling an error pathway instead of the real thing. ALWAYS check the output!</p>", "contentMap": { "en": "<p>VERY common error with newbies and profiling:</p><p>They don&#39;t check that the output/thing they&#39;re profiling actually does what they think it is. </p><p>You end up profiling a command or something and you accidentally are profiling an error pathway instead of the real thing. ALWAYS check the output!</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113442267461294808/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113442267461294808/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113442267461294808/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113442267461294808/likes", "type": "Collection", "totalItems": 6 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113442267461294808/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113438144793754041/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-06T21:32:03Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113438144793754041", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-06T21:32:03Z", "url": "https://mastodon.social/@nateberkopec/113438144793754041", "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/113438144793754041", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-06:objectId=841563098:objectType=Conversation", "content": "<p>TIL: Bundler&#39;s job parallelization uses threads, not processes</p><p><a href=\"https://github.com/rubygems/rubygems/blob/d57d302cbb265f5164b0bc448191e9beec257c43/bundler/lib/bundler/worker.rb#L90\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/rubygems/rubygems/b</span><span class=\"invisible\">lob/d57d302cbb265f5164b0bc448191e9beec257c43/bundler/lib/bundler/worker.rb#L90</span></a> </p><p>The default is &quot;the number of available processors&quot;, but the number of processors has nothing to do with the optimal number here, only 1 processor will be used.</p>", "contentMap": { "en": "<p>TIL: Bundler&#39;s job parallelization uses threads, not processes</p><p><a href=\"https://github.com/rubygems/rubygems/blob/d57d302cbb265f5164b0bc448191e9beec257c43/bundler/lib/bundler/worker.rb#L90\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">github.com/rubygems/rubygems/b</span><span class=\"invisible\">lob/d57d302cbb265f5164b0bc448191e9beec257c43/bundler/lib/bundler/worker.rb#L90</span></a> </p><p>The default is &quot;the number of available processors&quot;, but the number of processors has nothing to do with the optimal number here, only 1 processor will be used.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113438144793754041/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113438144793754041/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113438144793754041/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113438144793754041/likes", "type": "Collection", "totalItems": 2 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113438144793754041/shares", "type": "Collection", "totalItems": 3 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-06T20:36:53Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/postmodern" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/postmodern/statuses/113437806911797865", "published": "2024-11-06T20:36:53Z", "url": "https://mastodon.social/@nateberkopec/113437927890449829", "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/postmodern" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829", "inReplyToAtomUri": "https://ruby.social/users/postmodern/statuses/113437806911797865", "conversation": "tag:ruby.social,2024-11-06:objectId=58288077:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@postmodern\" class=\"u-url mention\">@<span>postmodern</span></a></span> this kind of thing drives me crazy. I don&#39;t like the include Dep thing either.</p><p>I like where they went with Repositories but just don&#39;t like the integration of it.</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@postmodern\" class=\"u-url mention\">@<span>postmodern</span></a></span> this kind of thing drives me crazy. I don&#39;t like the include Dep thing either.</p><p>I like where they went with Repositories but just don&#39;t like the integration of it.</p>" }, "attachment": [ { "type": "Document", "mediaType": "image/png", "url": "https://files.mastodon.social/media_attachments/files/113/437/925/058/297/238/original/fa455076b8458fd9.png", "name": null, "blurhash": "UFRfkCD%~q_N~qRjDjWB^+tRM{M{?I%MoyIU", "width": 408, "height": 140 } ], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/postmodern", "name": "@postmodern@ruby.social" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113437927890449829/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113430942194519602/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-05T15:00:20Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113430942194519602", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-05T15:00:20Z", "url": "https://mastodon.social/@nateberkopec/113430942194519602", "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/113430942194519602", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-05:objectId=840265266:objectType=Conversation", "content": "<p>Most SRE teams get handed blank checks for infrastructure spend, and are not held accountable to resource utilization targets or quality of service targets (queue latencies), but instead to incident volume and 5-9s reliability targets.</p><p>Is it any wonder over-provisioning results?</p>", "contentMap": { "en": "<p>Most SRE teams get handed blank checks for infrastructure spend, and are not held accountable to resource utilization targets or quality of service targets (queue latencies), but instead to incident volume and 5-9s reliability targets.</p><p>Is it any wonder over-provisioning results?</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113430942194519602/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113430942194519602/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113430942194519602/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113430942194519602/likes", "type": "Collection", "totalItems": 2 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113430942194519602/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-04T20:50:52Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/zachfeldman", "https://ruby.social/users/getajobmike", "https://mastodon.social/users/tenderlove" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/zachfeldman/statuses/113426523897936935", "published": "2024-11-04T20:50:52Z", "url": "https://mastodon.social/@nateberkopec/113426658256388962", "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/zachfeldman", "https://ruby.social/users/getajobmike", "https://mastodon.social/users/tenderlove" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962", "inReplyToAtomUri": "https://ruby.social/users/zachfeldman/statuses/113426523897936935", "conversation": "tag:ruby.social,2024-11-04:objectId=58077003:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@zachfeldman\" class=\"u-url mention\">@<span>zachfeldman</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@tenderlove\" class=\"u-url mention\">@<span>tenderlove</span></a></span> LOL. It basically just says how often the current thread is allowed to be interrupted, if no I/O occurs.</p><p>Currently, if the executing thread does not do I/O or otherwise release GVL (c extension perhaps), it can be interrupted after 100ms.</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@zachfeldman\" class=\"u-url mention\">@<span>zachfeldman</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@getajobmike\" class=\"u-url mention\">@<span>getajobmike</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@tenderlove\" class=\"u-url mention\">@<span>tenderlove</span></a></span> LOL. It basically just says how often the current thread is allowed to be interrupted, if no I/O occurs.</p><p>Currently, if the executing thread does not do I/O or otherwise release GVL (c extension perhaps), it can be interrupted after 100ms.</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/zachfeldman", "name": "@zachfeldman@ruby.social" }, { "type": "Mention", "href": "https://ruby.social/users/getajobmike", "name": "@getajobmike@ruby.social" }, { "type": "Mention", "href": "https://mastodon.social/users/tenderlove", "name": "@tenderlove" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426658256388962/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-04T20:09:28Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/getajobmike", "https://mastodon.social/users/tenderlove" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007", "type": "Note", "summary": null, "inReplyTo": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221", "published": "2024-11-04T20:09:28Z", "url": "https://mastodon.social/@nateberkopec/113426495439206007", "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", "https://mastodon.social/users/tenderlove" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007", "inReplyToAtomUri": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221", "conversation": "tag:ruby.social,2024-11-04:objectId=58077003: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> <span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@tenderlove\" class=\"u-url mention\">@<span>tenderlove</span></a></span> poorly phrased: it&#39;s been on my mind for years but I didn&#39;t have the skills to get it over the line myself, and no one else seemed quite as interested as I was</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> <span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@tenderlove\" class=\"u-url mention\">@<span>tenderlove</span></a></span> poorly phrased: it&#39;s been on my mind for years but I didn&#39;t have the skills to get it over the line myself, and no one else seemed quite as interested as I was</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/getajobmike", "name": "@getajobmike@ruby.social" }, { "type": "Mention", "href": "https://mastodon.social/users/tenderlove", "name": "@tenderlove" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426495439206007/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-04T20:01:34Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/getajobmike", "https://mastodon.social/users/tenderlove" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/getajobmike/statuses/113426112161546310", "published": "2024-11-04T20:01:34Z", "url": "https://mastodon.social/@nateberkopec/113426464418231221", "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", "https://mastodon.social/users/tenderlove" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221", "inReplyToAtomUri": "https://ruby.social/users/getajobmike/statuses/113426112161546310", "conversation": "tag:ruby.social,2024-11-04:objectId=58077003: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> <span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@tenderlove\" class=\"u-url mention\">@<span>tenderlove</span></a></span> nice to see this finally get picked up by someone who can move it forward. I tried for years but couldn&#39;t get anyone to bite. <a href=\"https://github.com/ruby/ruby/pull/2081\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">github.com/ruby/ruby/pull/2081</span><span class=\"invisible\"></span></a></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> <span class=\"h-card\" translate=\"no\"><a href=\"https://mastodon.social/@tenderlove\" class=\"u-url mention\">@<span>tenderlove</span></a></span> nice to see this finally get picked up by someone who can move it forward. I tried for years but couldn&#39;t get anyone to bite. <a href=\"https://github.com/ruby/ruby/pull/2081\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">github.com/ruby/ruby/pull/2081</span><span class=\"invisible\"></span></a></p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/getajobmike", "name": "@getajobmike@ruby.social" }, { "type": "Mention", "href": "https://mastodon.social/users/tenderlove", "name": "@tenderlove" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221/replies?min_id=113426495439206007&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221/replies", "items": [ "https://mastodon.social/users/nateberkopec/statuses/113426495439206007" ] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221/likes", "type": "Collection", "totalItems": 2 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113426464418231221/shares", "type": "Collection", "totalItems": 1 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113425279859895281/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-04T15:00:19Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113425279859895281", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-04T15:00:19Z", "url": "https://mastodon.social/@nateberkopec/113425279859895281", "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/113425279859895281", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-04:objectId=839402839:objectType=Conversation", "content": "<p>The CPU:memory provisioning ratchet:</p><p>1. Incident occurs. Knee-jerk add more pods.<br />2. This lowers CPU% relative to memory use. <br />3. CPU:mem ratio is lowered. We need more mem per instance!<br />4. Never reduce pod count after incident passes.</p><p>Repeat until instance sizes exhausted. The solution was to run fewer pods, not get more mem.</p>", "contentMap": { "en": "<p>The CPU:memory provisioning ratchet:</p><p>1. Incident occurs. Knee-jerk add more pods.<br />2. This lowers CPU% relative to memory use. <br />3. CPU:mem ratio is lowered. We need more mem per instance!<br />4. Never reduce pod count after incident passes.</p><p>Repeat until instance sizes exhausted. The solution was to run fewer pods, not get more mem.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113425279859895281/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113425279859895281/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113425279859895281/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113425279859895281/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113425279859895281/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113408056070225007/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-01T14:00:05Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113408056070225007", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-11-01T14:00:05Z", "url": "https://mastodon.social/@nateberkopec/113408056070225007", "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/113408056070225007", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-11-01:objectId=837045766:objectType=Conversation", "content": "<p>If you&#39;re going to do a &quot;service layer&quot;:</p><p>The service layer should generally not be loading data (where/find/etc) if the service is working on 1 item. When you mix the data loading responsibility into a service (instead of in the controller or job), you get N+1s when someone inevitably calls your service over a collection.</p>", "contentMap": { "en": "<p>If you&#39;re going to do a &quot;service layer&quot;:</p><p>The service layer should generally not be loading data (where/find/etc) if the service is working on 1 item. When you mix the data loading responsibility into a service (instead of in the controller or job), you get N+1s when someone inevitably calls your service over a collection.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113408056070225007/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113408056070225007/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113408056070225007/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113408056070225007/likes", "type": "Collection", "totalItems": 7 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113408056070225007/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-01T10:31:47Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/hejsna" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/hejsna/statuses/113392022255824243", "published": "2024-11-01T10:31:47Z", "url": "https://mastodon.social/@nateberkopec/113407236985081491", "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/hejsna" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491", "inReplyToAtomUri": "https://ruby.social/users/hejsna/statuses/113392022255824243", "conversation": "tag:mastodon.social,2024-10-29:objectId=834456250:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@hejsna\" class=\"u-url mention\">@<span>hejsna</span></a></span> promote this man immediately</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@hejsna\" class=\"u-url mention\">@<span>hejsna</span></a></span> promote this man immediately</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/hejsna", "name": "@hejsna@ruby.social" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407236985081491/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-01T10:30:41Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/codefolio" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/codefolio/statuses/113397109292093296", "published": "2024-11-01T10:30:41Z", "url": "https://mastodon.social/@nateberkopec/113407232661068434", "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/codefolio" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434", "inReplyToAtomUri": "https://ruby.social/users/codefolio/statuses/113397109292093296", "conversation": "tag:mastodon.social,2024-10-30:objectId=835316192:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@codefolio\" class=\"u-url mention\">@<span>codefolio</span></a></span> true. it&#39;s actually the same as how long it takes to User.find(1) with a query cache hit, because ... that&#39;s all you&#39;re doing 😆 0.2 to 0.5ms IME.</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@codefolio\" class=\"u-url mention\">@<span>codefolio</span></a></span> true. it&#39;s actually the same as how long it takes to User.find(1) with a query cache hit, because ... that&#39;s all you&#39;re doing 😆 0.2 to 0.5ms IME.</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/codefolio", "name": "@codefolio@ruby.social" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407232661068434/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-01T10:29:32Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/soulcutter", "https://status.pointless.one/users/pointlessone" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/soulcutter/statuses/113397276428962275", "published": "2024-11-01T10:29:32Z", "url": "https://mastodon.social/@nateberkopec/113407228148632708", "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/soulcutter", "https://status.pointless.one/users/pointlessone" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708", "inReplyToAtomUri": "https://ruby.social/users/soulcutter/statuses/113397276428962275", "conversation": "tag:mastodon.social,2024-10-30:objectId=835316192:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@soulcutter\" class=\"u-url mention\">@<span>soulcutter</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://status.pointless.one/@pointlessone\" class=\"u-url mention\">@<span>pointlessone</span></a></span> good god man what are you parsing, the entire English wikipedia or something? that&#39;s impressively high</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@soulcutter\" class=\"u-url mention\">@<span>soulcutter</span></a></span> <span class=\"h-card\" translate=\"no\"><a href=\"https://status.pointless.one/@pointlessone\" class=\"u-url mention\">@<span>pointlessone</span></a></span> good god man what are you parsing, the entire English wikipedia or something? that&#39;s impressively high</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/soulcutter", "name": "@soulcutter@ruby.social" }, { "type": "Mention", "href": "https://status.pointless.one/users/pointlessone", "name": "@pointlessone@status.pointless.one" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708/likes", "type": "Collection", "totalItems": 1 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407228148632708/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-11-01T10:28:44Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers", "https://ruby.social/users/jamie" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679", "type": "Note", "summary": null, "inReplyTo": "https://ruby.social/users/jamie/statuses/113398470402142473", "published": "2024-11-01T10:28:44Z", "url": "https://mastodon.social/@nateberkopec/113407225014807679", "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/jamie" ], "sensitive": false, "atomUri": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679", "inReplyToAtomUri": "https://ruby.social/users/jamie/statuses/113398470402142473", "conversation": "tag:mastodon.social,2024-10-30:objectId=835316192:objectType=Conversation", "content": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@jamie\" class=\"u-url mention\">@<span>jamie</span></a></span> tough to put in a chart though because that&#39;s completely dependent on the resource I think</p>", "contentMap": { "en": "<p><span class=\"h-card\" translate=\"no\"><a href=\"https://ruby.social/@jamie\" class=\"u-url mention\">@<span>jamie</span></a></span> tough to put in a chart though because that&#39;s completely dependent on the resource I think</p>" }, "attachment": [], "tag": [ { "type": "Mention", "href": "https://ruby.social/users/jamie", "name": "@jamie@ruby.social" } ], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679/likes", "type": "Collection", "totalItems": 0 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113407225014807679/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113402393956586878/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-10-31T14: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/113402393956586878", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-10-31T14:00:08Z", "url": "https://mastodon.social/@nateberkopec/113402393956586878", "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/113402393956586878", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-10-31:objectId=836190508:objectType=Conversation", "content": "<p>Organizing job queues by SLO (within_6_hours, etc.) allows you to intelligently throttle concurrency to conserve system stability. If all jobs run at ~50x concurrency all the time, you&#39;re going to have jobs which don&#39;t even need to be run within the next 4-5 hours end up taking down your DB. </p><p>Fix the job too, but protect the entire system!</p>", "contentMap": { "en": "<p>Organizing job queues by SLO (within_6_hours, etc.) allows you to intelligently throttle concurrency to conserve system stability. If all jobs run at ~50x concurrency all the time, you&#39;re going to have jobs which don&#39;t even need to be run within the next 4-5 hours end up taking down your DB. </p><p>Fix the job too, but protect the entire system!</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113402393956586878/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113402393956586878/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113402393956586878/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113402393956586878/likes", "type": "Collection", "totalItems": 4 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113402393956586878/shares", "type": "Collection", "totalItems": 1 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113396731444795973/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-10-30T14:00:05Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113396731444795973", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-10-30T14:00:05Z", "url": "https://mastodon.social/@nateberkopec/113396731444795973", "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/113396731444795973", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-10-30:objectId=835316192:objectType=Conversation", "content": "<p>I&#39;m going to make one of those latency charts you see for things like memory access speed, but do it for a Rails app context.</p><p>What things do you think would be on the chart?</p><p>i.e.</p><p>local variable access<br />querycache access<br />User.find(1)<br />A typical response<br />Elasticsearch</p>", "contentMap": { "en": "<p>I&#39;m going to make one of those latency charts you see for things like memory access speed, but do it for a Rails app context.</p><p>What things do you think would be on the chart?</p><p>i.e.</p><p>local variable access<br />querycache access<br />User.find(1)<br />A typical response<br />Elasticsearch</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113396731444795973/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113396731444795973/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113396731444795973/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113396731444795973/likes", "type": "Collection", "totalItems": 4 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113396731444795973/shares", "type": "Collection", "totalItems": 0 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113391069137232109/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-10-29T14:00:05Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113391069137232109", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-10-29T14:00:05Z", "url": "https://mastodon.social/@nateberkopec/113391069137232109", "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/113391069137232109", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-10-29:objectId=834456250:objectType=Conversation", "content": "<p>Rule that still hasn&#39;t steered me wrong: 10k lines of non-test code in the codebase, per Ruby developer. Going significantly over this ratio creates a high risk of accumulating technical debt.</p>", "contentMap": { "en": "<p>Rule that still hasn&#39;t steered me wrong: 10k lines of non-test code in the codebase, per Ruby developer. Going significantly over this ratio creates a high risk of accumulating technical debt.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113391069137232109/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113391069137232109/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113391069137232109/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113391069137232109/likes", "type": "Collection", "totalItems": 4 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113391069137232109/shares", "type": "Collection", "totalItems": 3 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113385406838268648/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-10-28T14:00:05Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113385406838268648", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-10-28T14:00:05Z", "url": "https://mastodon.social/@nateberkopec/113385406838268648", "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/113385406838268648", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-10-28:objectId=833613685:objectType=Conversation", "content": "<p>I&#39;m as excited as everyone else about Kamal 2, but for all of our clients:</p><p>1. They&#39;re spending &lt;10% of gross revenue on infra<br />2. Moving to non-managed DB is scary<br />3. Having &quot;infinite scale up&quot; capability helps them sleep at night</p>", "contentMap": { "en": "<p>I&#39;m as excited as everyone else about Kamal 2, but for all of our clients:</p><p>1. They&#39;re spending &lt;10% of gross revenue on infra<br />2. Moving to non-managed DB is scary<br />3. Having &quot;infinite scale up&quot; capability helps them sleep at night</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113385406838268648/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113385406838268648/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113385406838268648/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113385406838268648/likes", "type": "Collection", "totalItems": 6 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113385406838268648/shares", "type": "Collection", "totalItems": 4 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113368420833593683/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-10-25T14:00:19Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113368420833593683", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-10-25T14:00:19Z", "url": "https://mastodon.social/@nateberkopec/113368420833593683", "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/113368420833593683", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-10-25:objectId=831282744:objectType=Conversation", "content": "<p>Human beings are not compilers.</p><p>Any perf process which relies on human beings manually applying a series of &quot;optimization steps&quot; (don&#39;t do this, do that, changes this to that...) inevitably will never work. </p><p>You have to enforce this automatically with code.</p>", "contentMap": { "en": "<p>Human beings are not compilers.</p><p>Any perf process which relies on human beings manually applying a series of &quot;optimization steps&quot; (don&#39;t do this, do that, changes this to that...) inevitably will never work. </p><p>You have to enforce this automatically with code.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113368420833593683/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113368420833593683/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113368420833593683/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113368420833593683/likes", "type": "Collection", "totalItems": 5 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113368420833593683/shares", "type": "Collection", "totalItems": 3 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113362757974611366/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-10-24T14:00:11Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113362757974611366", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-10-24T14:00:11Z", "url": "https://mastodon.social/@nateberkopec/113362757974611366", "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/113362757974611366", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-10-24:objectId=830437477:objectType=Conversation", "content": "<p>If you&#39;re a junior dev and you aren&#39;t working directly alongside a senior with ~10+ years experience, you need to switch gigs or start working on OSS.</p><p>It&#39;s easy to stop growing w/no one to push you, no one to teach you every day, to show you what&#39;s possible.</p>", "contentMap": { "en": "<p>If you&#39;re a junior dev and you aren&#39;t working directly alongside a senior with ~10+ years experience, you need to switch gigs or start working on OSS.</p><p>It&#39;s easy to stop growing w/no one to push you, no one to teach you every day, to show you what&#39;s possible.</p>" }, "attachment": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113362757974611366/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113362757974611366/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113362757974611366/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113362757974611366/likes", "type": "Collection", "totalItems": 11 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113362757974611366/shares", "type": "Collection", "totalItems": 5 } } }, { "id": "https://mastodon.social/users/nateberkopec/statuses/113359423282977871/activity", "type": "Create", "actor": "https://mastodon.social/users/nateberkopec", "published": "2024-10-23T23:52:08Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://mastodon.social/users/nateberkopec/followers" ], "object": { "id": "https://mastodon.social/users/nateberkopec/statuses/113359423282977871", "type": "Note", "summary": null, "inReplyTo": null, "published": "2024-10-23T23:52:08Z", "url": "https://mastodon.social/@nateberkopec/113359423282977871", "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/113359423282977871", "inReplyToAtomUri": null, "conversation": "tag:mastodon.social,2024-10-23:objectId=829972295:objectType=Conversation", "content": "<p>Introducing: ids_must_be_indexed, a Github Action for Rails apps that fails your PR if you change or add a column ending in _id without a corresponding index.</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>Introducing: ids_must_be_indexed, a Github Action for Rails apps that fails your PR if you change or add a column ending in _id without a corresponding index.</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": [], "tag": [], "replies": { "id": "https://mastodon.social/users/nateberkopec/statuses/113359423282977871/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://mastodon.social/users/nateberkopec/statuses/113359423282977871/replies?only_other_accounts=true&page=true", "partOf": "https://mastodon.social/users/nateberkopec/statuses/113359423282977871/replies", "items": [] } }, "likes": { "id": "https://mastodon.social/users/nateberkopec/statuses/113359423282977871/likes", "type": "Collection", "totalItems": 20 }, "shares": { "id": "https://mastodon.social/users/nateberkopec/statuses/113359423282977871/shares", "type": "Collection", "totalItems": 12 } } } ] }