<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>GioCities - tech</title><link href="https://blog.giovanh.com/" rel="alternate"/><link href="https://blog.giovanh.com/feeds/category-tech.atom.xml" rel="self"/><id>https://blog.giovanh.com/</id><updated>2024-12-03T00:00:00-06:00</updated><entry><title>Verification on Bluesky is already perfect</title><link href="https://blog.giovanh.com/blog/2024/12/03/verification-on-bluesky-is-already-perfect/" rel="alternate"/><published>2024-12-03T00:00:00-06:00</published><updated>2024-12-03T00:00:00-06:00</updated><author><name>GiovanH</name></author><id>tag:blog.giovanh.com,2024-12-03:/blog/2024/12/03/verification-on-bluesky-is-already-perfect/</id><summary type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Bluesky has very quickly become a serious social media platform. This means it’s having to deal with all the problems social media platforms have to deal with, including impersonation. 
A lot of people flocked to Bluesky from Twitter, and so recreating something like Twitter’s verification system seems like a natural step. &lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;blockquote class="twitter-tweet" data-dnt="true" data-lang="en" data-nosnippet="true"&gt;&lt;div class="header"&gt;&lt;a href="https://bsky.app/profile/safety.bsky.app/"&gt;&lt;img onerror="(async () =&amp;gt; {this.onerror=null;this.src=`https://web.archive.org/web/0/${this.src}`;})();" src="https://cdn.bsky.app/img/avatar/plain/did:plc:eon2iu7v3x2ukgxkqaf7e5np/bafkreih7mgyv6dugcguewqnuev64i7jsljhtrr6olfadmxq2dasfb7woam@jpeg"/&gt;&lt;div class="vertical"&gt;&lt;span class="name"&gt;Bluesky Safety&lt;/span&gt;&lt;span class="at"&gt;@safety.bsky.app&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;6/ We also hear your feedback: users want more ways to verify their identity beyond domain verification. We’re exploring additional options to enhance account verification, and we hope to share more shortly.&lt;/p&gt;&lt;/div&gt;&lt;a href="https://bsky.app/profile/safety.bsky.app/post/3lc4h7p6jvt25" target="_blank"&gt;2024-11-29T20:46:33.430Z&lt;/a&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;But you don’t need to do that! Bluesky’s current verification system is actually very good and does what verification is supposed to do.&lt;/p&gt;
&lt;p&gt;In 2022 I wrote &lt;a href="https://blog.giovanh.com/blog/2022/11/01/the-failure-of-account-verification/"&gt;a retrospective essay about the “verified account” design pattern on Twitter&lt;/a&gt;, which tried to preempt this conversation a little bit, but unfortunately got bogged down a little with Elon breaking Twitter verification. 
This piece will talk about a lot of the same ideas, but applied more specifically to Bluesky’s ecosystem.&lt;/p&gt;
&lt;/body&gt;&lt;/html&gt;</summary><content type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Bluesky has very quickly become a serious social media platform. This means it&amp;rsquo;s having to deal with all the problems social media platforms have to deal with, including impersonation. 
A lot of people flocked to Bluesky from Twitter, and so recreating something like Twitter&amp;rsquo;s verification system seems like a natural step. &lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;blockquote class="twitter-tweet" data-dnt="true" data-lang="en" data-nosnippet="true"&gt;&lt;div class="header"&gt;&lt;a href="https://bsky.app/profile/safety.bsky.app/"&gt;&lt;img onerror="(async () =&amp;gt; {this.onerror=null;this.src=`https://web.archive.org/web/0/${this.src}`;})();" src="https://cdn.bsky.app/img/avatar/plain/did:plc:eon2iu7v3x2ukgxkqaf7e5np/bafkreih7mgyv6dugcguewqnuev64i7jsljhtrr6olfadmxq2dasfb7woam@jpeg"/&gt;&lt;div class="vertical"&gt;&lt;span class="name"&gt;Bluesky Safety&lt;/span&gt;&lt;span class="at"&gt;@safety.bsky.app&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;6/ We also hear your feedback: users want more ways to verify their identity beyond domain verification. We&amp;rsquo;re exploring additional options to enhance account verification, and we hope to share more shortly.&lt;/p&gt;&lt;/div&gt;&lt;a href="https://bsky.app/profile/safety.bsky.app/post/3lc4h7p6jvt25" target="_blank"&gt;2024-11-29T20:46:33.430Z&lt;/a&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;But you don&amp;rsquo;t need to do that! Bluesky&amp;rsquo;s current verification system is actually very good and does what verification is supposed to do.&lt;/p&gt;
&lt;p&gt;In 2022 I wrote &lt;a href="https://blog.giovanh.com/blog/2022/11/01/the-failure-of-account-verification/"&gt;a retrospective essay about the &amp;ldquo;verified account&amp;rdquo; design pattern on Twitter&lt;/a&gt;, which tried to preempt this conversation a little bit, but unfortunately got bogged down a little with Elon breaking Twitter verification. 
This piece will talk about a lot of the same ideas, but applied more specifically to Bluesky&amp;rsquo;s ecosystem.&lt;/p&gt;


&lt;section class="section2"&gt;&lt;h2 id="bluesky-handle-verification"&gt;Bluesky handle verification&lt;/h2&gt;
&lt;p&gt;Bluesky already has a very good self-verification system called &lt;a href="https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial"&gt;domain handles.&lt;/a&gt;
The idea is simple: if you have a website, your bluesky handle can &lt;em&gt;be that website&lt;/em&gt;, and that verifies that the bluesky account is also the person who manages the site. &lt;/p&gt;
&lt;p&gt;There are a number of ways to confirm your identity for this; if you own the DNS record you can verify yourself through DNS, but you can also verify yourself by putting code in the body of a page. This means any &amp;ldquo;real&amp;rdquo; website you administer, including things like neocities, can be used as verification.
These domains can also be provided by an employer, like &lt;code&gt;&amp;lt;name&amp;gt;.nytimes.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Other services, including mastodon, have a similar system for self-verifying based on web domains.
Bluesky&amp;rsquo;s verification stands out better though, since it uses your website for your handle. Any verification on the account will show up in every post, at the very top. You don&amp;rsquo;t need to dig through someone&amp;rsquo;s profile to confirm their identity, everyone wears it on their sleeve.&lt;/p&gt;
&lt;/section&gt;&lt;section class="section2"&gt;&lt;h2 id="dont-overload-verification"&gt;Don&amp;rsquo;t overload verification&lt;/h2&gt;
&lt;p&gt;One of my main points from &lt;a href="https://blog.giovanh.com/blog/2022/11/01/the-failure-of-account-verification/"&gt;The Failure of Account Verification&lt;/a&gt; was that the reason the blue check was ineffective was that it was &lt;strong&gt;semantically overloaded.&lt;/strong&gt; It wasn&amp;rsquo;t clear what it was supposed to mean, because it could mean so many things. Does it confirm you&amp;rsquo;re who you claim to be? Or does it confirm that you&amp;rsquo;re a celebrity? Or does it constitute endorsement by the platform? Or does it mean you&amp;rsquo;re a first-class citizen of Elon Musk&amp;rsquo;s X The Everything App?&lt;/p&gt;
&lt;p&gt;Bluesky has the perfect opportunity to short-circuit this problem, because verification is already explicitly defined. It means you control a specific web domain. &lt;/p&gt;
&lt;/section&gt;&lt;section class="section2"&gt;&lt;h2 id="web-domains"&gt;Web domains&lt;/h2&gt;
&lt;!-- the Trust chain is in the name --&gt;

&lt;p&gt;Web domains are a heirarchial system. The components of the domain name are separated by &lt;code&gt;.&lt;/code&gt;s, and each component is a &lt;em&gt;subdomain&lt;/em&gt; of the domain to its right. So &lt;code&gt;mail.google.com&lt;/code&gt; means &lt;code&gt;com&lt;/code&gt; has the subdomain &lt;code&gt;google&lt;/code&gt;, which has the subdomain &lt;code&gt;mail&lt;/code&gt;. &lt;code&gt;google&lt;/code&gt; controls &lt;code&gt;mail.google.com&lt;/code&gt;, and &lt;code&gt;com&lt;/code&gt; (an ICANN top-level domain) controls &lt;code&gt;google.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A really useful feature of this system is that the trust chain is visible in the domain name, and you can understand the hierarchical relationship a domain represents at a glance. This means you don&amp;rsquo;t have to memorize every domain that exists, &lt;a href="https://bsky.app/profile/malmer.com/post/3lcgnxuh4h22s"&gt;as some people have ludicrously argued.&lt;/a&gt;
You just have to be able to read a domain name, which is not much to ask. It&amp;rsquo;s not an esoteric skill, it&amp;rsquo;s basic literacy.&lt;/p&gt;
&lt;p&gt;This trust-chain-in-the-name feature is what lets verification work for domains like neocities or &lt;code&gt;senate.gov&lt;/code&gt;: If you have a neocities account, you control &lt;code&gt;&amp;lt;site&amp;gt;.neocities.com&lt;/code&gt;. You can&amp;rsquo;t pose as neocities itself, or a different neocities user, because you only have access to that one subdomain. &lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;blockquote class="twitter-tweet" data-dnt="true" data-lang="en" data-nosnippet="true"&gt;&lt;div class="header"&gt;&lt;a href="https://bsky.app/profile/dylanfreedman.nytimes.com/"&gt;&lt;img onerror="(async () =&amp;gt; {this.onerror=null;this.src=`https://web.archive.org/web/0/${this.src}`;})();" src="https://cdn.bsky.app/img/avatar/plain/did:plc:zeqq4z7aybrqg6go6vx6lzwt/bafkreibizj7boxxdwzh75a4tp6fskmdwth4ddhwidub3qy7mttt6zbaq3q@jpeg"/&gt;&lt;div class="vertical"&gt;&lt;span class="name"&gt;Dylan Freedman&lt;/span&gt;&lt;span class="at"&gt;@dylanfreedman.nytimes.com&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Update: I'm now @dylanfreedman.nytimes.com!&lt;/p&gt;&lt;/div&gt;&lt;div class="media" style="display: none;"&gt;&lt;/div&gt;&lt;a href="https://bsky.app/profile/dylanfreedman.nytimes.com/post/3lcdwkezyhs2i" target="_blank"&gt;2024-12-02T20:09:36.196Z&lt;/a&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Non-verified Bluesky handles conform to this system too. If you have a &lt;code&gt;&amp;lt;user&amp;gt;.bsky.social&lt;/code&gt; handle, that just means &lt;code&gt;bsky.social&lt;/code&gt; has you as a user. The hierarchy is still there and it&amp;rsquo;s still correct.&lt;/p&gt;
&lt;/section&gt;&lt;section class="section2"&gt;&lt;h2 id="what-do-you-want-verification-to-do"&gt;What do you want verification to do?&lt;/h2&gt;
&lt;p&gt;If you want a &amp;ldquo;pure&amp;rdquo; system of verification that verifies the authenticity &amp;mdash; and &lt;em&gt;only&lt;/em&gt; the authenticity &amp;mdash; of accounts, Bluesky already has exactly what you want: an unambiguous, purely technical verification system that isn&amp;rsquo;t dependent on value judgements from human moderators. 
&lt;a href="https://bsky.app/profile/malmer.com/post/3lcgnxuh4h22s"&gt;It doesn&amp;rsquo;t mean someone is &amp;ldquo;trustworthy&amp;rdquo;&lt;/a&gt;, it just means they are who they say they are. &lt;a href="https://bsky.app/profile/malmer.com/post/3lcgo6bnne22s"&gt;&amp;ldquo;Legit&amp;rdquo;&lt;/a&gt; is not an intrinsic property a person can have. Domain verification communicates one thing, and does it well: this person is the same person from this website.&lt;/p&gt;
&lt;p&gt;Trying to add an additional verification system (like a badge) that adds other connotations (like prestige) can only add confusion to this signal. &lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen lots of people on Bluesky complaining that domain verification is &amp;ldquo;insufficient&amp;rdquo; because people can make generic impersonation accounts under &lt;code&gt;bsky.social&lt;/code&gt;, or that there&amp;rsquo;s some need for a &amp;ldquo;real&amp;rdquo; verification system. But this logic doesn&amp;rsquo;t hold up. &lt;/p&gt;
&lt;p&gt;Having a blue checkmark in your name won&amp;rsquo;t stop people from making unverified accounts impersonating you on the generic &lt;code&gt;bsky.social&lt;/code&gt; domain, obviously. The blue check only helps in comparing a fake account to the real one, because the real one will have authenticating information in the handle. This is, of course, exactly the same thing domain verification does. &lt;/p&gt;
&lt;/section&gt;&lt;section class="section2"&gt;&lt;h2 id="problems-with-bluesky-verification"&gt;Problems with Bluesky verification&lt;/h2&gt;
&lt;p&gt;Just because the current system is &amp;ldquo;pure&amp;rdquo; and &amp;ldquo;unambiguous&amp;rdquo; doesn&amp;rsquo;t mean there aren&amp;rsquo;t issues. I don&amp;rsquo;t think any of these are helped by a badge system, but I do think they&amp;rsquo;re weaknesses it&amp;rsquo;s good to be aware of. &lt;/p&gt;
&lt;section class="section3"&gt;&lt;h3 id="revocation"&gt;Revocation&lt;/h3&gt;
&lt;p&gt;If your verified Bluesky handle is &lt;code&gt;&amp;lt;name&amp;gt;.&amp;lt;newsroom&amp;gt;.com&lt;/code&gt;, to verify that you&amp;rsquo;re currently employed by &lt;em&gt;newsroom&lt;/em&gt;, what happens when you quit? 
Assuming &lt;em&gt;newsroom&lt;/em&gt; correctly deactivates your page (hopefully leaving it up for historical purposes, but removing the verification code), what happens on Bluesky? &lt;/p&gt;
&lt;p&gt;There has to be a system to periodically re-check these verified handles to see if something has changed in the domain verification chain, like your company no longer authenticating you as an active member. 
If that happens, what happens to your Bluesky handle? Is there action required to fix it (i.e. the &amp;ldquo;invalid handle&amp;rdquo; state), or are you reassigned a generic name again? What happens to links to your old name; can you leave a redirection notice?&lt;/p&gt;
&lt;p&gt;Currently, in this case, Bluesky will revert the account to a &lt;code&gt;.bsky.social&lt;/code&gt; handle, but accounts will keep their history and followers.&lt;/p&gt;
&lt;/section&gt;&lt;section class="section3"&gt;&lt;h3 id="bad-actor-domains"&gt;Bad actor domains&lt;/h3&gt;
&lt;p&gt;Domains themselves can be fake. We already see this as part of phishing attack chains: you get an email from your bank with a link to &lt;code&gt;&amp;lt;bankname&amp;gt;.net&lt;/code&gt;, but you don&amp;rsquo;t realize &lt;em&gt;bankname&lt;/em&gt;&amp;rsquo;s real domain is &lt;code&gt;&amp;lt;bankname&amp;gt;.com&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;Now, imagine the same attack but with Bluesky handles. You&amp;rsquo;re contacted by &lt;code&gt;service.&amp;lt;bankname&amp;gt;.net&lt;/code&gt;, and it seems like they&amp;rsquo;ve verified themselves as authorized representatives of &lt;em&gt;bankname&lt;/em&gt;. But they&amp;rsquo;re not!&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;&lt;blockquote class="twitter-tweet" data-dnt="true" data-lang="en" data-nosnippet="true"&gt;&lt;div class="header"&gt;&lt;a href="https://bsky.app/profile/numb.comfortab.ly/"&gt;&lt;img onerror="(async () =&amp;gt; {this.onerror=null;this.src=`https://web.archive.org/web/0/${this.src}`;})();" src="https://cdn.bsky.app/img/avatar/plain/did:plc:pmyqirafcp3jqdhrl7crpq7t/bafkreib32um3lr4ttnh75znae6u7a7zbpnxwpmzrwugc2bhvw6yc6bnwqq@jpeg"/&gt;&lt;div class="vertical"&gt;&lt;span class="name"&gt;Comfortably Numb&lt;/span&gt;&lt;span class="at"&gt;@numb.comfortab.ly&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Speaking of verification via domain name handle. This is fake.&lt;/p&gt;&lt;/div&gt;&lt;div class="media" style="display: none;"&gt;&lt;a href="https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:pmyqirafcp3jqdhrl7crpq7t/bafkreia3bkfinsh6r7meqasv6idlqbffqfdteye7qjorn46vwkq325whwe@jpeg" target="_blank"&gt;&lt;img class="img count{media_count}" onerror="(async () =&amp;gt; {this.onerror=null;this.src=`https://web.archive.org/web/0/${this.src}`;})();" src="https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:pmyqirafcp3jqdhrl7crpq7t/bafkreia3bkfinsh6r7meqasv6idlqbffqfdteye7qjorn46vwkq325whwe@jpeg"/&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://bsky.app/profile/numb.comfortab.ly/post/3lcgzfgvvzs2q" target="_blank"&gt;2024-12-04T01:38:30.821Z&lt;/a&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;There are a few ways to handle this. Accounts that are engaged in malicious impersonation can still be banned by Bluesky moderation, regardless of their handle. 
But in this case, the top-level domain and ICANN can also exert pressure from the domain side. 
Web hosts do &lt;em&gt;not&lt;/em&gt; want to be responsible for phishing campaigns, and reputable top-level domains don&amp;rsquo;t want to implicitly approve fake subdomains. In the above example, &lt;code&gt;.net&lt;/code&gt; itself can moderate the fake site, and even remove it from the &lt;code&gt;.net&lt;/code&gt; domain. &lt;/p&gt;
&lt;/section&gt;&lt;section class="section3"&gt;&lt;h3 id="it-doesnt-mark-who-the-angels-are"&gt;It doesn&amp;rsquo;t mark who the angels are&lt;/h3&gt;
&lt;p&gt;This is what everybody wants, right? I think a lot boils down to this. &lt;/p&gt;
&lt;p&gt;People want a filter they can put over the world that tells them who they can trust and who they can&amp;rsquo;t, ingroup-outgroup membership signifies, friend-or-foe colors. People want shinigami eyes. But that&amp;rsquo;s just not how society works! It&amp;rsquo;s not how trust works, it&amp;rsquo;s not how &lt;em&gt;people&lt;/em&gt; work. And if you take this vague, impossible wish, and try to build a technical system to accomplish it, you end up making a confused, overloaded system that just injects more bad information.&lt;/p&gt;
&lt;/section&gt;&lt;/section&gt;&lt;section class="section2"&gt;&lt;h2 id="domain-verification-is-good"&gt;Domain verification is good&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s a good system! It does exactly what it says it does. 
Compared to domain handles, a human-approved badge system would add &lt;em&gt;more&lt;/em&gt; room for errors in judgement, not less.&lt;/p&gt;
&lt;/section&gt;&lt;section class="section1"&gt;&lt;h1&gt;Related Reading&lt;/h1&gt;
&lt;div class="container related-reading"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://internethandle.org"&gt;dan, &amp;ldquo;Internet Handle&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://shkspr.mobi/blog/2024/11/an-easy-guide-to-bluesky-verification/"&gt;Terence Eden, &amp;ldquo;An Easy Guide To BlueSky Verification&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dustycloud.org/blog/how-decentralized-is-bluesky/"&gt;Christine Lemmer-Webber, &amp;ldquo;How decentralized is Bluesky really?&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://themarkup.org/levelup/2022/12/22/how-we-verified-ourselves-on-mastodon-and-how-you-can-too"&gt;Dan Phiffer, &amp;ldquo;How We Verified Ourselves on Mastodon &amp;mdash; and How You Can Too&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!-- 
Blue sky is currently decentralized but only in the bad way.

https://shkspr.mobi/blog/2024/12/a-few-thoughts-on-domain-verification-for-social-media/

https://shkspr.mobi/blog/2024/11/an-easy-guide-to-bluesky-verification/

https://dustycloud.org/blog/how-decentralized-is-bluesky/
--&gt;

&lt;/section&gt;&lt;/body&gt;&lt;/html&gt;</content><category term="tech"/><category term="platforms"/><category term="design-patterns"/></entry><entry><title>My Pal Sorter</title><link href="https://blog.giovanh.com/blog/2023/07/10/my-pal-sorter/" rel="alternate"/><published>2023-07-10T00:00:00-05:00</published><updated>2023-07-10T00:00:00-05:00</updated><author><name>GiovanH</name></author><id>tag:blog.giovanh.com,2023-07-10:/blog/2023/07/10/my-pal-sorter/</id><summary type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;I’ve decided to do a short write-up on a tool I just call “&lt;a href="https://github.com/GiovanH/Sorter"&gt;Sorter&lt;/a&gt;”. Sorter is something I built for myself to help me organize my own files, and it looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="animated sort demo" src="https://blog.giovanh.com/blog/2023/07/10/my-pal-sorter/sortdemo.gif"/&gt;&lt;/p&gt;
&lt;p&gt;It’s designed to do exactly one thing: move files into subfolders, one file at a time. You look at a file, you decide where it goes, and you move it accordingly. It’s the same behavior you can do with Explorer, but at speed. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/GiovanH/Sorter"&gt;You can download it if you want&lt;/a&gt; (although it might not be easy to build; check the releases for binaries) but for now I just wanted to talk through some of the features, why I built it the way I did, and the specific features I needed that I couldn’t find in other software. &lt;/p&gt;
&lt;/body&gt;&lt;/html&gt;</summary><content type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;I&amp;rsquo;ve decided to do a short write-up on a tool I just call &amp;ldquo;&lt;a href="https://github.com/GiovanH/Sorter"&gt;Sorter&lt;/a&gt;&amp;rdquo;. Sorter is something I built for myself to help me organize my own files, and it looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="animated sort demo" src="https://blog.giovanh.com/blog/2023/07/10/my-pal-sorter/sortdemo.gif"/&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s designed to do exactly one thing: move files into subfolders, one file at a time. You look at a file, you decide where it goes, and you move it accordingly. It&amp;rsquo;s the same behavior you can do with Explorer, but at speed. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/GiovanH/Sorter"&gt;You can download it if you want&lt;/a&gt; (although it might not be easy to build; check the releases for binaries) but for now I just wanted to talk through some of the features, why I built it the way I did, and the specific features I needed that I couldn&amp;rsquo;t find in other software. &lt;/p&gt;


&lt;p&gt;I made Sorter with pure python and tkinter interface components. &lt;strong&gt;Do not make a GUI program with pure pythona and tkinter interface components.&lt;/strong&gt; It, and its relevant documentation, is ancient and abandoned. From what I&amp;rsquo;ve seen the modern GUI toolkit to use for a program like this is PyQT, although I haven&amp;rsquo;t worked with it yet.&lt;/p&gt;
&lt;p&gt;Sorter has a &amp;ldquo;current working directory&amp;rdquo; you open when you start the program. It expects all &amp;ldquo;loose&amp;rdquo; files to be loose in the root of the working directory, or in a folder titled &amp;ldquo;Unsorted&amp;rdquo;. Additionally, if there&amp;rsquo;s an &amp;ldquo;Unsorted&amp;rdquo; folder and loose files, it will offer to move them to Unsorted for you. &lt;/p&gt;
&lt;p&gt;It creates a list of those loose files and seeks through the list one file at a time. You can filter this list by fileglob; the current default is &lt;code&gt;*.png, *.jpg, *.bmp, *.jpeg, *.tif, *.jfif, *.tga, *.pdn, *.psd, *.gif, *.gifv, *.webm, *.mp4, *.mov, *.webp&lt;/code&gt; for images and image-like files.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;candidate folders&amp;rdquo; the current file can be moved into are on the list on the left. In the &amp;ldquo;Move to Folder ID&amp;rdquo; box, typing a string that matches one of the candidate folders moves the file to that folder. &lt;/p&gt;
&lt;p&gt;Crucially, this matching is done &lt;em&gt;aggressively&lt;/em&gt;. With only a few subfolders, you usually only need to type one letter to get an unambiguous match. &lt;/p&gt;
&lt;p&gt;&lt;img alt="Partial match demo" src="https://blog.giovanh.com/blog/2023/07/10/my-pal-sorter/sorter-match.png"/&gt;&lt;/p&gt;
&lt;p&gt;There are more sophisticated rules that kick in if the first few letters are frequently common. For example, &amp;ldquo;j e&amp;rdquo; matches &amp;ldquo;john ebgert&amp;rdquo; and not &amp;ldquo;john arbuckle&amp;rdquo;. You can even turn on extremely aggressive fuzzy matching that matches freely inside strings, so &amp;ldquo;u&amp;rdquo; matches even &amp;ldquo;qwertyuiop&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;The goal is to make the mechanical operation of moving the folder as fast as possible. For each file, you should be spending as close to 100% of your as possible making &lt;em&gt;decisions&lt;/em&gt; about filing, not doing the mechanical &lt;em&gt;act&lt;/em&gt; of filing. That&amp;rsquo;s what computers are for!&lt;/p&gt;
&lt;p&gt;Trying to do this with explorer is &lt;em&gt;miserable&lt;/em&gt;. The best way I found of doing it is drag-and-drop with two windows open, which means you&amp;rsquo;ll spend most of your time hunting for the folder in the list and dragging your mouse to the right place. That&amp;rsquo;s fine for general-purpose use, but it&amp;rsquo;s no good for bulk sorting. &lt;/p&gt;
&lt;p&gt;There are plenty of blazing-fast, efficient tools for moving and manipulating files, but they&amp;rsquo;re mostly command-line utilities that can&amp;rsquo;t inspect images. Sorter makes that operation almost instant, and does the moving operation itself in the background, so you can focus on decision making, which is the one thing the computer can&amp;rsquo;t do. &lt;/p&gt;
&lt;p&gt;There are other controls on the left, too. &amp;ldquo;Move to new folder&amp;rdquo; ignores the candidate folders and moves the file as-is to a new folder it creates. &amp;ldquo;Rename&amp;rdquo; changes the name of the file without moving it, and &amp;ldquo;Rename Prefix&amp;rdquo; adds the prefix you specify to the filename. (This is good for adding indexes or page numbers or anything you want to easily sort on!)&lt;/p&gt;
&lt;p&gt;Sorter mainly focused around quickly inspecting images, but there are also some fallbacks for other formats, like grabbing the first frame of a video, or getting a list of a zip file&amp;rsquo;s contents, or just reading the windows metainfo of the file.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</content><category term="tech"/><category term="technical"/><category term="archival"/></entry><entry><title>The Joy of RSS</title><link href="https://blog.giovanh.com/blog/2021/10/17/the-joy-of-rss/" rel="alternate"/><published>2021-10-17T00:00:00-05:00</published><updated>2021-10-17T00:00:00-05:00</updated><author><name>GiovanH</name></author><id>tag:blog.giovanh.com,2021-10-17:/blog/2021/10/17/the-joy-of-rss/</id><summary type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;During the years when Homestuck updated regularly, I usually had some sort of update notifier that pinged me when a new page was posted. But since Homestuck usually updated daily, I ended up just keeping a tab open and refreshing it. And that’s pretty much how I kept up with other serial media on the internet, for years. A writing blog that posts regular updates? Keep a dedicated tab open and refresh it occasionally. Comic? Tab. To this day, I have a “serial” browser window that’s just tabs of sites I check regularly. (Or imagine I might want to check regularly, at least.)&lt;/p&gt;
&lt;p&gt;&lt;img alt="a lot of tabs" src="https://blog.giovanh.com/blog/2021/10/17/the-joy-of-rss/RSS_tabhell.jpg"/&gt;
&lt;em&gt;please don’t tell anyone how I live&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Of course, this is terrible. The biggest problem is browser tabs are expensive. If you have a tab open, that takes up a dedicated chunk of memory, even when you’re not reading anything. CPU too, probably, if the site has JavaScript running on it (which is to say, is either decades out of date, or this one). Not to mention the clutter.&lt;/p&gt;
&lt;p&gt;Unfortunately, dedicated browser tabs fit specific use case of keeping up with serial media well. Social media feeds — all of them, Twitter, Facebook, Tumblr, Reddit, YouTube — are explicitly “media aggregators”, services that combine multiple media sources into one feed. This is no good for serial media. If you’re following multiple sources, they likely update on different schedules, and updates from the more active ones will bury updates from those slower. Even email updates have this problem. No, you need a dedicated space for each source (but not each update), which a dedicated browser tab will get you.&lt;/p&gt;
&lt;p&gt;There is a &lt;em&gt;good&lt;/em&gt; system for this, though: RSS.&lt;/p&gt;
&lt;p&gt;RSS (Really Simple Syndication) is a fantastic technology that has fallen out of favour in the mainstream lately. It works like this: the media source &lt;a href="https://blog.giovanh.com/feeds/atom.xml"&gt;puts up a small file somewhere&lt;/a&gt; that notes the dates, titles, and (optionally) content of posts. And that’s it. There’s no API, it’s just a file people can read if they want. It’s like traditional syndication, but instead of selling articles to multiple distributors (as with syndicated cartoons), you’re distributing articles to many consumers directly.&lt;/p&gt;
&lt;/body&gt;&lt;/html&gt;</summary><content type="html">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;During the years when Homestuck updated regularly, I usually had some sort of update notifier that pinged me when a new page was posted. But since Homestuck usually updated daily, I ended up just keeping a tab open and refreshing it. And that&amp;rsquo;s pretty much how I kept up with other serial media on the internet, for years. A writing blog that posts regular updates? Keep a dedicated tab open and refresh it occasionally. Comic? Tab. To this day, I have a &amp;ldquo;serial&amp;rdquo; browser window that&amp;rsquo;s just tabs of sites I check regularly. (Or imagine I might want to check regularly, at least.)&lt;/p&gt;
&lt;p&gt;&lt;img alt="a lot of tabs" src="https://blog.giovanh.com/blog/2021/10/17/the-joy-of-rss/RSS_tabhell.jpg"/&gt;
&lt;em&gt;please don&amp;rsquo;t tell anyone how I live&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Of course, this is terrible. The biggest problem is browser tabs are expensive. If you have a tab open, that takes up a dedicated chunk of memory, even when you&amp;rsquo;re not reading anything. CPU too, probably, if the site has JavaScript running on it (which is to say, is either decades out of date, or this one). Not to mention the clutter.&lt;/p&gt;
&lt;p&gt;Unfortunately, dedicated browser tabs fit specific use case of keeping up with serial media well. Social media feeds &amp;mdash; all of them, Twitter, Facebook, Tumblr, Reddit, YouTube &amp;mdash; are explicitly &amp;ldquo;media aggregators&amp;rdquo;, services that combine multiple media sources into one feed. This is no good for serial media. If you&amp;rsquo;re following multiple sources, they likely update on different schedules, and updates from the more active ones will bury updates from those slower. Even email updates have this problem. No, you need a dedicated space for each source (but not each update), which a dedicated browser tab will get you.&lt;/p&gt;
&lt;p&gt;There is a &lt;em&gt;good&lt;/em&gt; system for this, though: RSS.&lt;/p&gt;
&lt;p&gt;RSS (Really Simple Syndication) is a fantastic technology that has fallen out of favour in the mainstream lately. It works like this: the media source &lt;a href="https://blog.giovanh.com/feeds/atom.xml"&gt;puts up a small file somewhere&lt;/a&gt; that notes the dates, titles, and (optionally) content of posts. And that&amp;rsquo;s it. There&amp;rsquo;s no API, it&amp;rsquo;s just a file people can read if they want. It&amp;rsquo;s like traditional syndication, but instead of selling articles to multiple distributors (as with syndicated cartoons), you&amp;rsquo;re distributing articles to many consumers directly.&lt;/p&gt;


&lt;p&gt;I&amp;rsquo;m generally speaking in terms of articles and posts and written content here, but RSS is designed for a wide variety of media. Most notably, RSS is the backbone of podcasting. Podcasts are just RSS feeds: lists of links to audio files annotated with episode titles and descriptions&lt;sup id="fnref:sc"&gt;&lt;a class="footnote-ref" href="#fn:sc"&gt;1&lt;/a&gt;&lt;/sup&gt;. Podcast apps (&amp;ldquo;podcatchers&amp;rdquo;, as people who try to describe things accurately sometimes call them) just collect and display that information.&lt;/p&gt;
&lt;p&gt;RSS people will immediately jump to pining the loss of Google Reader. For years, Google Reader was the de facto RSS reader, but since it was a web application &amp;mdash; &lt;a href="https://killedbygoogle.com"&gt;and one run by Google, no less&lt;/a&gt; &amp;mdash; it was killed in 2013 with no viable alternative. For a while, anyway; people have since written some pretty nice RSS apps, but there was a huge hole for a long time.&lt;/p&gt;
&lt;p&gt;&lt;img alt="A browser-based RSS reader" src="https://addons-media.operacdn.com/media/CACHE/images/extensions/05/128005/2.2.1-rev1/images/40ef7e7b588d2c392dfbfe276854279d/8da8ef8b229c7a1cf595806c9c1a9af2.jpg"/&gt;
&lt;em&gt;A browser-based RSS reader&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Despite RSS being perfect, as I mentioned already, RSS isn&amp;rsquo;t popular anymore. Not popular among media &lt;em&gt;sources&lt;/em&gt;, anyway. A lot of sites do still have RSS feeds hidden away somewhere, although some require an additional tool like &lt;a href="https://github.com/RSS-Bridge/rss-bridge"&gt;RSS Bridge&lt;/a&gt; to act as a middleman. But, in general, there&amp;rsquo;s been a huge push over the past 20 years to move away from user-controlled content management and toward content vehicles like Twitter and Facebook, where Platforms&lt;sup id="fnref:platforms"&gt;&lt;a class="footnote-ref" href="#fn:platforms"&gt;2&lt;/a&gt;&lt;/sup&gt; can sell ads, direct you towards the content &lt;em&gt;they&lt;/em&gt; think you&amp;rsquo;ll be interested in, and generally &amp;ldquo;optimize engagement&amp;rdquo;. This can be good, of course in cases &amp;mdash; recommendations for related accounts and YouTube channels are a great discovery mechanism &amp;mdash; but it&amp;rsquo;s obviously not the right thing for all cases.&lt;/p&gt;
&lt;p&gt;And so, without RSS or an equivalent solution in the mainstream, most people are left with just a handful of bad options. &lt;/p&gt;
&lt;p&gt;Just a few months ago I broke down and got a dedicated desktop feed reader, &lt;a href="https://github.com/yang991178/fluent-reader"&gt;Fluent Reader&lt;/a&gt;. You can configure categories of sources, set up notifications, and configure when and how FR checks sources for updates. It&amp;rsquo;s still an application running in the background, but it&amp;rsquo;s leagues better than keeping tabs open.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;Hey, guess what you can subscribe to with RSS? This blog right here. That&amp;rsquo;s what this little guy is about:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.giovanh.com/feeds/atom.xml"&gt;&lt;img alt="Atom feed" src="/theme/images/icons/feed-icon-28x28.png" title="Atom feed"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also, even cooler, if you make a comment on a post and want to know if someone replies, you can subscribe to the RSS feed for the &lt;em&gt;comments&lt;/em&gt;. &lt;/p&gt;
&lt;section class="section2"&gt;&lt;h2 id="related-reading"&gt;Related reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aboutfeeds.com"&gt;Matt Webb, &amp;ldquo;What is a feed? (a.k.a. RSS)&amp;rdquo; | About Feeds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://www.theverge.com/2017/12/16/16780356/rss-reader-feedly-news-sources-poll"&gt;Adi Robertson, &lt;em&gt;Are you still using an RSS reader?&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://lukesmith.xyz/blog/a-guide-to-using-rss-to-replace-social-media"&gt;Luke Smith, &lt;em&gt;A Guide to Using RSS to Replace Social Media&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://flameeyes.blog/2021/01/19/newsblur-review/"&gt;Flameeyes, NewsBlur Review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://pluralistic.net/2023/01/27/enshittification-resistance/#ummauerter-garten-nein"&gt;Cory Doctorow, &lt;em&gt;Podcasts are hearteningly enshittification resistant&lt;/em&gt; (2023)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://clivethompson.medium.com/how-i-use-rss-to-rewild-my-attention-7731267a40d8"&gt;Clive Thompson, &amp;ldquo;How I Use RSS To &amp;ldquo;Rewild&amp;rdquo; My Attention&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://thetyee.ca/Analysis/2023/08/08/Use-Really-Simple-Syndication/?utm_source=mastodon&amp;amp;utm_medium=social&amp;amp;utm_content=080823-m&amp;amp;utm_campaign=editorial"&gt;Bryan Carney, &amp;ldquo;Who Needs Meta or Google for News? Use &amp;lsquo;Really Simple Syndication&amp;rsquo;&amp;rdquo; (2023)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- - [Flameeyes, Reader Is Dead, But What About Writers?](https://flameeyes.blog/2021/10/05/reader-is-dead-but-what-about-writers/){: .related-reading} --&gt;

&lt;p&gt;RSS reader options&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://github.com/yang991178/fluent-reader"&gt;Get Fluent Reader on github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://getrssfeed.com"&gt;https://getrssfeed.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://github.com/RSS-Bridge/rss-bridge"&gt;RSS Bridge on github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://www.newsblur.com"&gt;NewsBlur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="related-reading" href="https://feedly.com"&gt;Feedly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="twitter-tweet" data-dnt="true" data-lang="en" data-nosnippet="true" data-tweetid="1634705459008401413"&gt;&lt;div class="header"&gt;&lt;a href="https://twitter.com/AshleyLatke/" title="Enthusiastic dick sucker, laughably low effort transgirl 🤷🏻&amp;zwj;&amp;female;️ AshleyLake@fastmail.com 📸 I take pics too! https://t.co/CCg3Bvkviw"&gt;&lt;img onerror="(async () =&amp;gt; {this.onerror=null;const newsrc=`https://web.archive.org/web/0/${this.src}`;console.log(this, this.src, newsrc);this.src=newsrc;})();" src="data:image/.png;base64,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"/&gt;&lt;div class="vertical"&gt;&lt;span class="name"&gt;Ashley Lake&lt;/span&gt;&lt;span class="at"&gt;@AshleyLatke&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;kids these days literally have no idea that RSS existed&lt;/p&gt;&lt;p&gt;I had all my posts everywhere in one feed, chronological order. Twitter, LiveJournal, newspapers, newsgroups, forum posts&lt;/p&gt;&lt;p&gt;They&amp;rsquo;re like &amp;ldquo;that would be an amazing invention&amp;rdquo;&lt;/p&gt;&lt;p&gt;The internet was ruined for short term profit&lt;/p&gt;&lt;/div&gt;&lt;div class="media" style="display: none;"&gt;&lt;/div&gt;&lt;a href="https://twitter.com/AshleyLatke/status/1634705459008401413" target="_blank"&gt;Sat Mar 11 23:58:47 +0000 2023&lt;/a&gt;
&lt;/blockquote&gt;
&lt;div class="footnote"&gt;
&lt;hr/&gt;
&lt;ol&gt;
&lt;li id="fn:sc"&gt;
&lt;p&gt;Some horrible modern dedicated &amp;ldquo;podcasting&amp;rdquo; apps and non-podcasting-but-used-for-podcasting apps like SoundCloud don&amp;rsquo;t actually have RSS feeds backing them anymore, but I refuse to acknowledge those as podcasts. That&amp;rsquo;s not a podcast, that&amp;rsquo;s a mistake.&amp;nbsp;&lt;a class="footnote-backref" href="#fnref:sc" title="Jump back to footnote 1 in the text"&gt;&amp;larrhk;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:platforms"&gt;
&lt;p&gt;Also, non-platforms. &lt;a href="https://rsssite.blogspot.com/2007/09/reusing-content-from-blog-rss.html"&gt;There was a brief panic&lt;/a&gt; about people republishing the full content of articles that publishers included in their RSS feeds, from people who didn&amp;rsquo;t seem to understand that publishers didn&amp;rsquo;t actually have to do that to use RSS, and who didn&amp;rsquo;t understand that &amp;ldquo;making computers easier for everyone to use&amp;rdquo; meant the people who were already scraping websites for content could do so slightly more easily when sites were more accessible. Industrial-scale plagiarism for profit is, of course, &lt;a href="https://www.jdsupra.com/legalnews/subscription-to-rss-feed-doesn-t-8626520/"&gt;illegal, regardless of the technology used&lt;/a&gt;, and involving RSS in the conversation because it was the specific content delivery mechanism used is silly. &amp;ldquo;Accessibility is bad because it helps everybody, not just people I like&amp;rdquo; is a very foolish argument that unfortunately still persists, and people who still make it deserve to be ridiculed and kicked out of polite society.&amp;nbsp;&lt;a class="footnote-backref" href="#fnref:platforms" title="Jump back to footnote 2 in the text"&gt;&amp;larrhk;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/section&gt;&lt;/body&gt;&lt;/html&gt;</content><category term="tech"/><category term="platforms"/><category term="media-consumption"/><category term="gush"/><category term="big-tech"/><category term="plagiarism"/></entry></feed>