GioCities - techhttps://blog.giovanh.com/2023-07-10T00:00:00-05:00My Pal Sorter2023-07-10T00:00:00-05:002023-07-10T00:00:00-05:00Giotag:blog.giovanh.com,2023-07-10:/blog/2023/07/10/my-pal-sorter/<p>I’ve decided to do a short write-up on a tool I just call “<a href="https://github.com/GiovanH/Sorter">Sorter</a>”. Sorter is something I built for myself to help me organize my own files, and it looks like this:</p>
<p><img alt="animated sort demo" src="https://blog.giovanh.com/blog/2023/07/10/my-pal-sorter/sortdemo.gif"/></p>
<p>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. </p>
<p><a href="https://github.com/GiovanH/Sorter">You can download it if you want</a> (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. </p>
<p>I’ve decided to do a short write-up on a tool I just call “<a href="https://github.com/GiovanH/Sorter">Sorter</a>”. Sorter is something I built for myself to help me organize my own files, and it looks like this:</p>
<p><img alt="animated sort demo" src="https://blog.giovanh.com/blog/2023/07/10/my-pal-sorter/sortdemo.gif"></p>
<p>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. </p>
<p><a href="https://github.com/GiovanH/Sorter">You can download it if you want</a> (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. </p>
<p>I made Sorter with pure python and tkinter interface components. <strong>Do not make a GUI program with pure pythona and tkinter interface components.</strong> It, and its relevant documentation, is ancient and abandoned. From what I’ve seen the modern GUI toolkit to use for a program like this is PyQT, although I haven’t worked with it yet.</p>
<p>Sorter has a “current working directory” you open when you start the program. It expects all “loose” files to be loose in the root of the working directory, or in a folder titled “Unsorted”. Additionally, if there’s an “Unsorted” folder and loose files, it will offer to move them to Unsorted for you. </p>
<p>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 <code>*.png, *.jpg, *.bmp, *.jpeg, *.tif, *.jfif, *.tga, *.pdn, *.psd, *.gif, *.gifv, *.webm, *.mp4, *.mov, *.webp</code> for images and image-like files.</p>
<p>The “candidate folders” the current file can be moved into are on the list on the left. In the “Move to Folder ID” box, typing a string that matches one of the candidate folders moves the file to that folder. </p>
<p>Crucially, this matching is done <em>aggressively</em>. With only a few subfolders, you usually only need to type one letter to get an unambiguous match. </p>
<p><img alt="Partial match demo" src="https://blog.giovanh.com/blog/2023/07/10/my-pal-sorter/sorter-match.png"></p>
<p>There are more sophisticated rules that kick in if the first few letters are frequently common. For example, “j e” matches “john ebgert” and not “john arbuckle”. You can even turn on extremely aggressive fuzzy matching that matches freely inside strings, so “u” matches even “qwertyuiop”. </p>
<p>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 <em>decisions</em> about filing, not doing the mechanical <em>act</em> of filing. That’s what computers are for!</p>
<p>Trying to do this with explorer is <em>miserable</em>. The best way I found of doing it is drag-and-drop with two windows open, which means you’ll spend most of your time hunting for the folder in the list and dragging your mouse to the right place. That’s fine for general-purpose use, but it’s no good for bulk sorting. </p>
<p>There are plenty of blazing-fast, efficient tools for moving and manipulating files, but they’re mostly command-line utilities that can’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’t do. </p>
<p>There are other controls on the left, too. “Move to new folder” ignores the candidate folders and moves the file as-is to a new folder it creates. “Rename” changes the name of the file without moving it, and “Rename Prefix” 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!)</p>
<p>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’s contents, or just reading the windows metainfo of the file.</p>The Joy of RSS2021-10-17T00:00:00-05:002021-10-17T00:00:00-05:00Giotag:blog.giovanh.com,2021-10-17:/blog/2021/10/17/the-joy-of-rss/<p>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.)</p>
<p><img alt="a lot of tabs" src="https://blog.giovanh.com/blog/2021/10/17/the-joy-of-rss/RSS_tabhell.jpg"/>
<em>please don’t tell anyone how I live</em></p>
<p>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.</p>
<p>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.</p>
<p>There is a <em>good</em> system for this, though: RSS.</p>
<p>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 <a href="https://blog.giovanh.com/feeds/atom.xml">puts up a small file somewhere</a> 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.</p>
<p>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.)</p>
<p><img alt="a lot of tabs" src="https://blog.giovanh.com/blog/2021/10/17/the-joy-of-rss/RSS_tabhell.jpg">
<em>please don’t tell anyone how I live</em></p>
<p>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.</p>
<p>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.</p>
<p>There is a <em>good</em> system for this, though: RSS.</p>
<p>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 <a href="https://blog.giovanh.com/feeds/atom.xml">puts up a small file somewhere</a> 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.</p>
<p>I’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<sup id="fnref:sc"><a class="footnote-ref" href="#fn:sc">1</a></sup>. Podcast apps (“podcatchers”, as people who try to describe things accurately sometimes call them) just collect and display that information.</p>
<p>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 — <a href="https://killedbygoogle.com">and one run by Google, no less</a> — 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.</p>
<p><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">
<em>A browser-based RSS reader</em></p>
<p>Despite RSS being perfect, as I mentioned already, RSS isn’t popular anymore. Not popular among media <em>sources</em>, anyway. A lot of sites do still have RSS feeds hidden away somewhere, although some require an additional tool like <a href="https://github.com/RSS-Bridge/rss-bridge">RSS Bridge</a> to act as a middleman. But, in general, there’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<sup id="fnref:platforms"><a class="footnote-ref" href="#fn:platforms">2</a></sup> can sell ads, direct you towards the content <em>they</em> think you’ll be interested in, and generally “optimize engagement”. This can be good, of course in cases — recommendations for related accounts and YouTube channels are a great discovery mechanism — but it’s obviously not the right thing for all cases.</p>
<p>And so, without RSS or an equivalent solution in the mainstream, most people are left with just a handful of bad options. </p>
<p>Just a few months ago I broke down and got a dedicated desktop feed reader, <a href="https://github.com/yang991178/fluent-reader">Fluent Reader</a>. You can configure categories of sources, set up notifications, and configure when and how FR checks sources for updates. It’s still an application running in the background, but it’s leagues better than keeping tabs open.</p>
<hr>
<p>Hey, guess what you can subscribe to with RSS? This blog right here. That’s what this little guy is about:</p>
<p><a href="https://blog.giovanh.com/feeds/atom.xml"><img src="/theme/images/icons/feed-icon-28x28.png" alt="Atom feed" title="Atom feed"></a></p>
<p>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 <em>comments</em>. </p>
<section class="section2">
<h2 id="related-reading">Related reading<a class="headerlink" href="#related-reading" title="Permanent link">🔗</a></h2>
<ul>
<li><a class="related-reading" href="https://www.theverge.com/2017/12/16/16780356/rss-reader-feedly-news-sources-poll">Adi Robertson, <em>Are you still using an RSS reader?</em></a></li>
<li><a class="related-reading" href="https://lukesmith.xyz/blog/a-guide-to-using-rss-to-replace-social-media">Luke Smith, <em>A Guide to Using RSS to Replace Social Media</em></a></li>
<li><a class="related-reading" href="https://flameeyes.blog/2021/01/19/newsblur-review/">Flameeyes, NewsBlur Review</a></li>
<li><a class="related-reading" href="https://pluralistic.net/2023/01/27/enshittification-resistance/#ummauerter-garten-nein">Cory Doctorow, <em>Podcasts are hearteningly enshittification resistant</em> (2023)</a></li>
<li><a class="related-reading" href="https://clivethompson.medium.com/how-i-use-rss-to-rewild-my-attention-7731267a40d8">Clive Thompson, “How I Use RSS To “Rewild” My Attention”</a></li>
<li><a class="related-reading" href="https://thetyee.ca/Analysis/2023/08/08/Use-Really-Simple-Syndication/?utm_source=mastodon&utm_medium=social&utm_content=080823-m&utm_campaign=editorial">Bryan Carney, “Who Needs Meta or Google for News? Use ‘Really Simple Syndication’” (2023)</a></li>
</ul>
<!-- - [Flameeyes, Reader Is Dead, But What About Writers?](https://flameeyes.blog/2021/10/05/reader-is-dead-but-what-about-writers/){: .related-reading} -->
<p>RSS reader options</p>
<ul>
<li><a class="related-reading" href="https://github.com/yang991178/fluent-reader">Get Fluent Reader on github</a></li>
<li><a class="related-reading" href="https://getrssfeed.com">https://getrssfeed.com</a></li>
<li><a class="related-reading" href="https://github.com/RSS-Bridge/rss-bridge">RSS Bridge on github</a></li>
<li><a class="related-reading" href="https://www.newsblur.com">NewsBlur</a></li>
<li><a class="related-reading" href="https://feedly.com">Feedly</a></li>
</ul>
<blockquote class="twitter-tweet" data-tweetid="1634705459008401413" data-lang="en" data-dnt="true" data-nosnippet="true" ><div class="header"><a href="https://twitter.com/AshleyLatke/" title="Enthusiastic dick sucker, laughably low effort transgirl 🤷🏻♀️ AshleyLake@fastmail.com 📸 I take pics too! https://t.co/CCg3Bvkviw"><img src="https://pbs.twimg.com/profile_images/1119638730107707392/yYUTJTu-_normal.png"onerror="(async () => {this.onerror=null;const newsrc=`https://web.archive.org/web/0/${this.src}`;console.log(this, this.src, newsrc);this.src=newsrc;})();"></img><div class="vertical"><span class="name">Ashley Lake</span><span class="at">@AshleyLatke</span></div></a></div><div><p>kids these days literally have no idea that RSS existed</p><p>I had all my posts everywhere in one feed, chronological order. Twitter, LiveJournal, newspapers, newsgroups, forum posts</p><p>They’re like “that would be an amazing invention”</p><p>The internet was ruined for short term profit</p></div><div class="media" style="display: none;"></div><a href="https://twitter.com/AshleyLatke/status/1634705459008401413" target="_blank">Sat Mar 11 23:58:47 +0000 2023</a>
</blockquote>
</section>
<div class="footnote">
<hr>
<ol>
<li id="fn:sc">
<p>Some horrible modern dedicated “podcasting” apps and non-podcasting-but-used-for-podcasting apps like SoundCloud don’t actually have RSS feeds backing them anymore, but I refuse to acknowledge those as podcasts. That’s not a podcast, that’s a mistake. <a class="footnote-backref" href="#fnref:sc" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:platforms">
<p>Also, non-platforms. <a href="https://rsssite.blogspot.com/2007/09/reusing-content-from-blog-rss.html">There was a brief panic</a> about people republishing the full content of articles that publishers included in their RSS feeds, from people who didn’t seem to understand that publishers didn’t actually have to do that to use RSS, and who didn’t understand that “making computers easier for everyone to use” 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, <a href="https://www.jdsupra.com/legalnews/subscription-to-rss-feed-doesn-t-8626520/">illegal, regardless of the technology used</a>, and involving RSS in the conversation because it was the specific content delivery mechanism used is silly. “Accessibility is bad because it helps everybody, not just people I like” 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. <a class="footnote-backref" href="#fnref:platforms" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>