

{"id":13640,"date":"2022-11-11T10:29:16","date_gmt":"2022-11-11T15:29:16","guid":{"rendered":"https:\/\/rud.is\/b\/?p=13640"},"modified":"2022-11-11T10:29:16","modified_gmt":"2022-11-11T15:29:16","slug":"honk-if-you-like-the-fediverse","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/","title":{"rendered":"Honk If You Like The Fediverse!"},"content":{"rendered":"<blockquote><p>\n  <em>This is a re-post from <a href=\"https:\/\/dailyfinds.hrbrmstr.dev\/p\/drop-134-2022-11-11-weekend-project\">today&#8217;s newsletter<\/a>. I generally avoid doing this but the content here is def more &#8220;bloggy&#8221; than &#8220;newslettery&#8221;.<\/em>\n<\/p><\/blockquote>\n<div style=\"width:100%; border-bottom: 0.5px dotted; border-top: 0.5px dotted;\">You can now receive these blog posts in your activity stream. Just follow <code>@hrbrmstr@rud.is<\/code> and the new posts from here will slide right into your timeline.<\/div>\n<p>So, you&#8217;ve committed to abandoning the bird site, joined a ? instance, or three, and are now a citizen of the Fediverse. This is ??! But, what if you want to dig into this brave new universe a bit and see how it works? Or, perhaps you would like to engage with a specific set of other folks without committing to a particular <strike>BBS<\/strike>node?<\/p>\n<p>Running a full-on Mastodon instance means dealing with PostgreSQL, Redis, Ruby (ugh), and NodeJS. Sure, Docker is an option, but this is still a big project, and it&#8217;s <a href=\"https:\/\/www.tiobe.com\/tiobe-index\/ruby\/\">more than likely<\/a> that you&#8217;re not a Ruby programmer (which makes it difficult to poke at the code to bend it to your will).<\/p>\n<p>What if I told you there&#8217;s a way to run your own <a href=\"https:\/\/activitypub.rocks\">ActivityPub<\/a> (et al.) server that:<\/p>\n<ul>\n<li>is built with Golang (requires libsqlite3)<\/li>\n<li>uses SQLite for persistence<\/li>\n<li>compiles in seconds<\/li>\n<li>sets up in minutes<\/li>\n<li>takes almost no system resources<\/li>\n<li>supports custom emojis<\/li>\n<li>allows markdown in posts (including source code block syntax highlighting)<\/li>\n<li>features location check-ins (like Foursquare back in the old days)<\/li>\n<li>enables filtering and censorship (for abuse prevention)<\/li>\n<li>sports a tiny but quite useful API<\/li>\n<li>lets folks consume your activity stream as an RSS feed<\/li>\n<\/ul>\n<p>If that sounds more to your liking, let me introduce you to <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\">Honk<\/a> by Ted Unangst (&#64;tedu&commat;honk.tedunangst.com), and walk you through <a href=\"https:\/\/honk.hrbrmstr.de\">my Honk<\/a> (&commat;bob&commat;honk.hrbrmstr.de) setup.<\/p>\n<h3>Prepare To Honk<\/h3>\n<p>You can either use <a href=\"https:\/\/www.mercurial-scm.org\">Mercurial<\/a> and:<\/p>\n<pre><code class=\"language-bash\">$ hg clone https:\/\/humungus.tedunangst.com\/r\/honk\n<\/code><\/pre>\n<p>or <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/d\">grab a tarball<\/a> and expand it (do either of these things on the box you will be running Honk). Then, just:<\/p>\n<pre><code class=\"language-bash\">$ cd honk\n$ make\n<\/code><\/pre>\n<p>and in a few seconds you&#8217;ll have a <code>honk<\/code> server binary ready to use.<\/p>\n<p>Now, you&#8217;re also going to need a &#8220;TLS terminating reverse proxy&#8221;. We&#8217;ll be using <a href=\"http:\/\/nginx.org\">Nginx<\/a> since it is nigh ubiquitous and straightforward to setup. If you&#8217;ve never set up an HTTPS Nginx instance. Nginx <a href=\"https:\/\/www.nginx.com\/resources\/wiki\/start\/topics\/tutorials\/install\/\">drops in nicely<\/a> almost everywhere, and <a href=\"https:\/\/haydenjames.io\/how-to-set-up-an-nginx-certbot\/\">this isn&#8217;t a terrible certbot\/nginx &#8216;splainer<\/a>. The rest of this drop assumes you have an Nginx instance ready to configure for honking.<\/p>\n<p>I&#8217;m hosting my actual Honk instance on an overkill home data science server (you can use a Raspberry Pi to run Honk), which is exposed to one of my internet-facing Nginx reverse proxy servers via <a href=\"https:\/\/tailscale.com\">Tailscale<\/a>. Using a setup like this means you can go super-cheap ($5\/mo) on a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Virtual_private_server\">VPS<\/a>. You can also 100% just run Honk on the same internet-facing box as you do Nginx, just make sure to follow the specific guidance for that setup below, and mebbe spring for a slightly bigger server. FWIW I use <a href=\"https:\/\/www.ssdnodes.com\/manage\/aff.php?aff=415\">SSD Nodes<\/a> (full-disclosure: that is an affiliate link).<\/p>\n<p>Finally, you&#8217;ll need a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Fully_qualified_domain_name\">FQDN<\/a> configured that points to your reverse proxy. Mine is <code>honk.hrbrmstr.de<\/code> which has an <code>A<\/code> record pointing to my internet-facing VPS. Your ActivityPub handle will be <code>@user@ThisFQDNyouChose<\/code>, so pick one you can live with.<\/p>\n<p>Make sure all three of those things are ready for the remaining steps.<\/p>\n<h3>Configure + Run Honk<\/h3>\n<p>This part is pretty straightforward. Run:<\/p>\n<pre><code class=\"language-bash\">$ .\/honk init\n<\/code><\/pre>\n<p>on the box you&#8217;re running Honk from. It&#8217;s going to ask you for four pieces of information:<\/p>\n<ul>\n<li><code>username<\/code>: the username you want. Again, this will be your <code>@username@TheHonkFQDNyouChose<\/code> identity, so pick one you can live with.<\/li>\n<li><code>password<\/code>: the password you want; pick a long passphrase from a password manager generator that you&#8217;ll keep in said password manager. Honk does <em>not<\/em> support MFA. Attackers will find you. You cannot hide. Just make it hard for them.<\/li>\n<li><code>listenaddr<\/code>: host + port Honk will listen on. If running Honk on the same system as Nginx make it something like <code>127.0.0.1:31337<\/code> so Honk itself is only accessible locally. I used my VPS&#8217; Tailscale IP address.<\/li>\n<li><code>servername<\/code>: the FQDN you configured in the previous section.<\/li>\n<\/ul>\n<p>If you mess up, just remove the SQLite databases Honk just made and start over.<\/p>\n<p>Feel free to get all fancy with whatever system service runner you like, but I just run Honk from a custom application directory with:<\/p>\n<pre><code class=\"language-bash\">$ nohup .\/honk &amp;\n<\/code><\/pre>\n<p>You leave out the <code>nohup<\/code> and <code>&amp;<\/code>, or <code>tail -f nohup.out<\/code>, if you want to see the log as you configure Nginx in the next section.<\/p>\n<h3>Configure Nginx<\/h3>\n<p><em>Remember that this bit assumes you&#8217;ve installed Nginx and set it up with a <code>certbot<\/code> TLS certificate. See above for links to resources to help you do that.<\/em><\/p>\n<p>Now you need to tell Nginx where to serve up your honk instance. Modify your base config to look something like this:<\/p>\n<pre><code class=\"language-nginx\">server {\n\n  server_name honk.example.com;\n\n  location \/ {\n    proxy_pass http:\/\/127.0.0.1:31337;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme; \n  }\n\n  listen 443 ssl; # managed by Certbot\n\n  ssl_certificate \/etc\/letsencrypt\/live\/honk.example.com\/fullchain.pem; # managed by Certbot\n  ssl_certificate_key \/etc\/letsencrypt\/live\/honk.example.com\/privkey.pem; # managed by Certbot\n  include \/etc\/letsencrypt\/options-ssl-nginx.conf; # managed by Certbot\n  ssl_dhparam \/etc\/letsencrypt\/ssl-dhparams.pem; # managed by Certbot\n\n}\n\nserver {\n\n  if ($host = honk.example.com) {\n    return 301 https:\/\/$host$request_uri;\n  } # managed by Certbot\n\n  listen 80;\n\n  server_name honk.example.com;\n\n  return 404; # managed by Certbot\n\n}\n<\/code><\/pre>\n<p>Replace the <code>proxy_pass<\/code>, <code>honk.example.com<\/code>, and <code>127.0.0.1:31337<\/code> values with your specific config.<\/p>\n<p>Restart Nginx and go to <code>honk.example.com<\/code>. If you don&#8217;t see the Honk main page, check the Nginx logs and the Honk logs and give it a go again.<\/p>\n<h3>Go Honkin&#8217; Crazy<\/h3>\n<p>The <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/m\">Honk docs<\/a> are useful and quite fun reads.<\/p>\n<ul>\n<li>The <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/m\/honk.1\">user manual<\/a> should be required reading so, at the very least, you can grok the honking terminology.<\/li>\n<li>The <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/m\/honk.8\">server manual<\/a> shows you some options you can use when starting Honk, explains how to customize Honk&#8217;s (it supports some fun customizations), explains user management, and some additional care and feeding tips. Read this thoroughly.<\/li>\n<li>The <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/m\/honk.5\">composition manual<\/a> is a must-read since it shows off all the post composition features.<\/li>\n<li>The <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/m\/hfcs.1\">filtering and censorship system manual<\/a> will help you deal with any abuse.<\/li>\n<li>The <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/m\/activitypub.7\">ActivityPub manual<\/a> explains what Honk does and does not support in that protocol.<\/li>\n<li>The <a href=\"https:\/\/humungus.tedunangst.com\/r\/honk\/m\/honk.3\">API manual<\/a> has all the information you need to use your Honk instance via some programming language or just <code>curl<\/code>.<\/li>\n<\/ul>\n<h3>Stuff To Try!<\/h3>\n<ul>\n<li>Follow folks on other servers! Hit me up at <code>@hrbrmstr@mastodon.social<\/code> or <code>@bob@honk.hrbrmstr.de<\/code> if you want to test following out (and get a reply).<\/li>\n<li>Customize your site CSS! Make it <em>yours<\/em>. The manuals provide all the information you need to do this.<\/li>\n<li>Add custom emoji and other components (again, the manuals are great).<\/li>\n<li>Write an API wrapper package so you can use your instance programmatically (this is a good way to make an ActivityPub bot).<\/li>\n<li>Look at the <code>toys\/<\/code> subdirectory. It has some fine example programs you can riff from (or just use):\n<ul>\n<li><code>autobonker.go<\/code> &#8211; repeats mentioned posts<\/li>\n<li><code>gettoken.go<\/code> &#8211; obtains an authorization token<\/li>\n<li><code>saytheday.go<\/code> &#8211; posts a new honk that&#8217;s a date based look and say sequence<\/li>\n<li><code>sprayandpray.go<\/code> &#8211; send an activity with no error checking and hope it works<\/li>\n<li><code>youvegothonks.go<\/code> &#8211; polls for new messages<\/li>\n<\/ul>\n<\/li>\n<li>Import your toots or <em>Twitter archive<\/em><\/li>\n<li>Start a Honk instance for one of the communities you&#8217;re in. Honk really cannot support a large community, but small clubs can use Honk vs deal with a full-on Mastodon instance.<\/li>\n<li>Poke around the SQLite databases Honk uses.<\/li>\n<li>Help someone else setup a Honk instance<\/li>\n<li>Customize the Honk codebase and show off your additions<\/li>\n<\/ul>\n<h3>Get Familiar With The Protocols<\/h3>\n<p>WebFinger (mentioned yesterday) is the on-ramp to poking at things, and I prefer playing with instances I own vs annoy folks trying to run &#8220;real&#8221; Mastodon servers. Honk lets you play without being a bad netizen.<\/p>\n<pre><code class=\"language-bash\">$ webfinger acct:bob@honk.hrbrmstr.de\n<\/code><\/pre>\n<p>drops the following to the terminal:<\/p>\n<pre><code class=\"language-json\">{\n  \"aliases\": [\n    \"https:\/\/honk.hrbrmstr.de\/u\/bob\"\n  ],\n  \"links\": [\n    {\n      \"href\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\",\n      \"rel\": \"self\",\n      \"type\": \"application\/activity+json\"\n    }\n  ],\n  \"subject\": \"acct:bob@honk.hrbrmstr.de\"\n}\n<\/code><\/pre>\n<p>Visit the <code>aliases<\/code> in a private browser session (so no cookies\/etc are used and you see what the world sees) or just <code>curl<\/code> it from the terminal.<\/p>\n<p>Explore <code>links<\/code>:<\/p>\n<pre><code class=\"language-json\">$ curl --header \"Accept: application\/activity+json\" https:\/\/honk.hrbrmstr.de\/u\/bob\n<\/code><\/pre>\n<p>drops the following to the terminal (see what happens w\/o that custom <code>Accept<\/code> header, too):<\/p>\n<pre><code class=\"language-json\">{\n  \"@context\": \"https:\/\/www.w3.org\/ns\/activitystreams\",\n  \"followers\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\/followers\",\n  \"following\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\/following\",\n  \"icon\": {\n    \"mediaType\": \"image\/png\",\n    \"type\": \"Image\",\n    \"url\": \"https:\/\/honk.hrbrmstr.de\/a?a=https%3A%2F%2Fhonk.hrbrmstr.de%2Fu%2Fbob&hex=1\"\n  },\n  \"id\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\",\n  \"inbox\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\/inbox\",\n  \"name\": \"bob\",\n  \"outbox\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\/outbox\",\n  \"preferredUsername\": \"bob\",\n  \"publicKey\": {\n    \"id\": \"https:\/\/honk.hrbrmstr.de\/u\/bob#key\",\n    \"owner\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\",\n    \"publicKeyPem\": \"CLIPPED B\/C TOO BIG FOR SUBSTACK\"\n  },\n  \"summary\": \"BIO CLIPPED B\/C TOO BIG FOR SUBSTACK\",\n  \"tag\": [\n    {\n      \"href\": \"https:\/\/honk.hrbrmstr.de\/o\/rstats\",\n      \"name\": \"#rstats\",\n      \"type\": \"Hashtag\"\n    },\n    {\n      \"href\": \"https:\/\/honk.hrbrmstr.de\/o\/blm\",\n      \"name\": \"#blm\",\n      \"type\": \"Hashtag\"\n    }\n  ],\n  \"type\": \"Person\",\n  \"url\": \"https:\/\/honk.hrbrmstr.de\/u\/bob\"\n}\n<\/code><\/pre>\n<p>Try all those endpoints and see what they drop (feel free to hit my server)<\/p>\n<h3>FIN<\/h3>\n<p>Honk is a great way to explore the various components of the Fediverse and I encourage folks to use it to get more familiar\/comfortable with this tech. Drop comments if you run into any issues or have q&#8217;s (feel free to honk\/toot q&#8217;s as well). \u262e<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a re-post from today&#8217;s newsletter. I generally avoid doing this but the content here is def more &#8220;bloggy&#8221; than &#8220;newslettery&#8221;. You can now receive these blog posts in your activity stream. Just follow @hrbrmstr@rud.is and the new posts from here will slide right into your timeline. So, you&#8217;ve committed to abandoning the bird [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[861,840,841,863],"tags":[],"class_list":["post-13640","post","type-post","status-publish","format-standard","hentry","category-fediverse","category-go","category-golang","category-mastodon"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Honk If You Like The Fediverse! - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Honk If You Like The Fediverse! - rud.is\" \/>\n<meta property=\"og:description\" content=\"This is a re-post from today&#8217;s newsletter. I generally avoid doing this but the content here is def more &#8220;bloggy&#8221; than &#8220;newslettery&#8221;. You can now receive these blog posts in your activity stream. Just follow @hrbrmstr@rud.is and the new posts from here will slide right into your timeline. So, you&#8217;ve committed to abandoning the bird [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-11T15:29:16+00:00\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Honk If You Like The Fediverse!\",\"datePublished\":\"2022-11-11T15:29:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/\"},\"wordCount\":1299,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"articleSection\":[\"fediverse\",\"Go\",\"Golang\",\"mastodon\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/\",\"name\":\"Honk If You Like The Fediverse! - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"datePublished\":\"2022-11-11T15:29:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2022\\\/11\\\/11\\\/honk-if-you-like-the-fediverse\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Honk If You Like The Fediverse!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rud.is\\\/b\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\\\/\\\/rud.is\"],\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/author\\\/hrbrmstr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Honk If You Like The Fediverse! - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/","og_locale":"en_US","og_type":"article","og_title":"Honk If You Like The Fediverse! - rud.is","og_description":"This is a re-post from today&#8217;s newsletter. I generally avoid doing this but the content here is def more &#8220;bloggy&#8221; than &#8220;newslettery&#8221;. You can now receive these blog posts in your activity stream. Just follow @hrbrmstr@rud.is and the new posts from here will slide right into your timeline. So, you&#8217;ve committed to abandoning the bird [&hellip;]","og_url":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/","og_site_name":"rud.is","article_published_time":"2022-11-11T15:29:16+00:00","author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Honk If You Like The Fediverse!","datePublished":"2022-11-11T15:29:16+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/"},"wordCount":1299,"commentCount":0,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"articleSection":["fediverse","Go","Golang","mastodon"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/","url":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/","name":"Honk If You Like The Fediverse! - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"datePublished":"2022-11-11T15:29:16+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2022\/11\/11\/honk-if-you-like-the-fediverse\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Honk If You Like The Fediverse!"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-3y0","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":13631,"url":"https:\/\/rud.is\/b\/2022\/11\/08\/into-the-fediverse\/","url_meta":{"origin":13640,"position":0},"title":"Into The Fediverse!","author":"hrbrmstr","date":"2022-11-08","format":false,"excerpt":"This is more of a test post after enabling some new Fediverse features on the server. Said Fediverse got a bit more real-ish this week (with moderate apologies to the pioneers in this space who've languished for ~five years) You can find me at: @hrbrmstr@mastodon.social (general blathering\/primary masto-account) @hrbrmstr@infosec.exchange (reserved\u2026","rel":"","context":"In &quot;fediverse&quot;","block_context":{"text":"fediverse","link":"https:\/\/rud.is\/b\/category\/fediverse\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":17604,"url":"https:\/\/rud.is\/b\/2023\/12\/22\/something-for-the-fediverse-readers\/","url_meta":{"origin":13640,"position":1},"title":"Something For The Fediverse Readers","author":"hrbrmstr","date":"2023-12-22","format":false,"excerpt":"If you're on Fosstodon, please pop a note to the admins there to ban this blog as well (it's using the WordPress federation features). We would not want their sensitive sensibilities to be offended by equally \u201coffensive\u201d stuff I have and will post here, as I seem to have done\u2026","rel":"","context":"In &quot;Commentary&quot;","block_context":{"text":"Commentary","link":"https:\/\/rud.is\/b\/category\/commentary\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":19774,"url":"https:\/\/rud.is\/b\/2024\/05\/03\/cve-2024-27322-should-never-have-been-assigned-and-r-data-files-are-still-super-risky-even-in-r-4-4-0\/","url_meta":{"origin":13640,"position":2},"title":"CVE-2024-27322 Should Never Have Been Assigned And R Data Files Are Still Super Risky Even In R 4.4.0","author":"hrbrmstr","date":"2024-05-03","format":false,"excerpt":"I had not planned to blog this (this is an incredibly time-crunched week for me) but CERT\/CC and CISA made a big deal out of a non-vulnerability in R, and it's making the round on socmed, so here we are. A security vendor decided to try to get some hype\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":22211,"url":"https:\/\/rud.is\/b\/2024\/08\/26\/reading-pcap-files-directly-with-duckdb\/","url_meta":{"origin":13640,"position":3},"title":"Reading PCAP Files (Directly) With DuckDB","author":"hrbrmstr","date":"2024-08-26","format":false,"excerpt":"2024-08-30 UPDATE: Binary versions of this extension are available for amd64 Linux (linux_amd64 & linux_amd64_gcc4) and Apple Silicon. (osx_arm64). $ duckdb -unsigned v1.0.0 1f98600c2c Enter \".help\" for usage hints. Connected to a transient in-memory database. Use \".open FILENAME\" to reopen on a persistent database. D SET custom_extension_repository='https:\/\/w3c2.c20.e2-5.dev\/ppcap\/latest'; D INSTALL ppcap;\u2026","rel":"","context":"In &quot;duckdb&quot;","block_context":{"text":"duckdb","link":"https:\/\/rud.is\/b\/category\/duckdb\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2601,"url":"https:\/\/rud.is\/b\/2013\/08\/25\/use-fluid-on-macos-to-build-per-rstudio-server-dedicated-clients\/","url_meta":{"origin":13640,"position":4},"title":"Use Fluid On MacOS To Build Per-RStudio Server &#8220;Dedicated&#8221; Clients","author":"hrbrmstr","date":"2013-08-25","format":false,"excerpt":"I'm jumping around analytics environments these days and have to leave the comfort of my Mac's RStudio Desktop application to use various RStudio Server instances via browser. While I prefer to use Chrome, the need to have a \"dedicated\" RStudio Server client outweighs the utility of my favorite browser. This\u2026","rel":"","context":"In &quot;OS X&quot;","block_context":{"text":"OS X","link":"https:\/\/rud.is\/b\/category\/os-x\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11383,"url":"https:\/\/rud.is\/b\/2018\/08\/13\/in-brief-splashr-update-high-performance-scraping-with-splashr-furrr-teamhg-memexs-aquarium\/","url_meta":{"origin":13640,"position":5},"title":"In-brief: splashr update + High Performance Scraping with splashr, furrr &#038; TeamHG-Memex&#8217;s Aquarium","author":"hrbrmstr","date":"2018-08-13","format":false,"excerpt":"The development version of splashr now support authenticated connections to Splash API instances. Just specify user and pass on the initial splashr::splash() call to use your scraping setup a bit more safely. For those not familiar with splashr and\/or Splash: the latter is a lightweight alternative to tools like Selenium\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/13640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=13640"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/13640\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=13640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=13640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=13640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}