@ -99,7 +99,7 @@ Android's UI is a weird hybrid that uses style #1 for its Importance menu, with
**Orthogonality** means you can change one thing without changing anything else. The badge switch is on or off, and doesn't affect any other behaviors. It gets an orthogonal seal of approval and a handshake from the governor of Orthogon. The Importance menu has certain behaviors implying others, and makes some combinations of behaviors impossible. It gets a disappointed frown.
According to Google Trends, the term [cancel culture](https://trends.google.com/trends/explore?date=today%205-y&geo=US&q=cancel%20culture) started to appear in late 2019 and had its big heyday in mid-2020, so in internet years I'm rather late. I think the concept of cancel culture is plain stupid: a bunch of people who have willingly centralized themselves under a privately-owned social media site whose primary / only source of revenue is advertisements act surprised and indignant when they're kicked out because they're harming the company's image.
For the past couple of months, every time I've seen an article about cancel culture or someone getting "cancelled", I've gotten a spur of inspiration to write something about it, but I've always decided against it because my conclusion is just so trivial. Stupid games. Stupid prizes. That's about it. Maybe someday people will learn to stop investing their lives into social media giants. Right after they learn that fire is hot.
@ -19,7 +19,7 @@ Let's use an analogy: if you go inside someone else's house, and say something t
If, by chance, your web host does decide to stop hosting your pages, all you have to do is pick a different one and restore from a backup, because of course you're making regular backups of the things you care about and not just expecting the internet to keep everything for you forever. With the standardization of web protocols, every web host is functionally the same! It's totally commoditized, dudes!
For the videographically inclined among you, I'm sure you're thinking "But how would I ever host my videos without Youtube? I can't afford to do it myself!". Congratulations on discovering that hosting and distributing video is stinking expensive! People don't seem to have any trouble understanding that mansions are expensive, and that getting kicked out of one doesn't automatically grant you access to another. Sorry you got comfortable.
@ -43,7 +43,7 @@ The difference is that the baskets of today are different from the baskets of a
It's okay to have a Twitter account, and a Youtube account, and a reddit account. Some may even say it's okay to have a Facebook account! But if you don't have a contingency plan for when you lose that account, for a good reason or bad, you're simply not prepared!
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/quiterss_feeds_db1.png "QuiteRSS db containing feeds.")
!(quiterss_feeds_db1.png "QuiteRSS db containing feeds.")
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/quiterss_feeds_db2.png "QuiteRSS db sql query to isolate dates and urls.")
!(quiterss_feeds_db2.png "QuiteRSS db sql query to isolate dates and urls.")
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/quiterss_feeds_db3.png "QuiteRSS db copying results of query.")
!(quiterss_feeds_db3.png "QuiteRSS db copying results of query.")
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/quiterss_feeds_db4.png "QuiteRSS db pasting results into text editor for further manipulation.")
!(quiterss_feeds_db4.png "QuiteRSS db pasting results into text editor for further manipulation.")
To be clear, I only do this for the initial download of the historical posts. After that, when new episodes are released, I just right-click & save file.
@ -42,13 +42,13 @@ However, you'll find that many or most RSS feeds don't contain the entire histor
One thing you can try is searching the [Wayback machine](https://web.archive.org/) for the RSS url. If you're lucky, it will have been scraped in the past often enough so as to contain the entire history, though perhaps in piecemeal. You could download the snapshots, combine them into a single xml file, serve it out of a [webserver](https://github.com/voussoir/else/tree/master/SimpleServer), and temporarily point your RSS client at localhost so it ingests all those historical posts before pointing it back at the real url. Convoluted, perhaps, but I'd rather do this than inject the posts into the db myself. Then, you can pull the enclosures out of QuiteRSS's database (or from the xml file you just made).
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/wayback_archives.png "Finding archived RSS feeds on Wayback")
!(wayback_archives.png "Finding archived RSS feeds on Wayback")
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/wayback_crossreference.png "Cross-referencing the last item on the web feed (right) with more items on the wayback archive (left) to construct a single xml file with all items.")
!(wayback_crossreference.png "Cross-referencing the last item on the web feed (right) with more items on the wayback archive (left) to construct a single xml file with all items.")
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/wayback_timetravel1.png "Serving the xml file out of a local webserver and configuring QuiteRSS to pull the localhost url.")
!(wayback_timetravel1.png "Serving the xml file out of a local webserver and configuring QuiteRSS to pull the localhost url.")
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/wayback_timetravel2.png "QuiteRSS pulled the local xml file and now has 149 items instead of 100.")
!(wayback_timetravel2.png "QuiteRSS pulled the local xml file and now has 149 items instead of 100.")
But, in the worst case scenario, you'll find that Wayback doesn't have archives of the feed you want. At this point I write a web scraper in Python to find all the episode dates and links, or I just hit the CTRL+C, CTRL+V gym for twenty minutes, copying each link from the website manually. You may also try [Xenu's Link Sleuth](http://home.snafu.de/tilman/xenulink.html) or [HTTrack](https://www.httrack.com/) to see if they can find all of the MP3 urls automatically. I figure it's an effort I'll only have to do once as long as RSS keeps getting new posts after that.
@ -64,11 +64,11 @@ Tagging podcasts is a little different than tagging music. Firstly, podcasters s
If the mp3 files don't have the `ALBUM` or `YEAR` field set, you can use MP3Tag's "filename to tag" feature to fix that.
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/filename_to_tag.png "filename to tag: album - year")
!(filename_to_tag.png "filename to tag: album - year")
MP3Tag is great for batch renaming. In your MP3Tag actions, create a `Format value` action with the parameters Field=`_FILENAME`, Format string=`%album% - %year%`.
Clean up all the files' tags to your heart's content, then select them and run your rename action.
@ -78,7 +78,7 @@ I don't listen to ads. I recommend [mp3DirectCut](https://mpesch3.de/) for cutti
It is important to use a tool that does lossless copying, which means it doesn't re-encode the audio when saving the new file. If you use Audacity, for example, you are loading the mp3 into a wave in memory at the beginning, then encoding that wave back to mp3 at the end. Re-encoding will cause a slight loss in quality, though I admit it will not usually be noticeable. mp3DC copies the mp3 data directly. This comes with the limitation that you can only cut at frame boundaries, but that's ok because mp3 frames are usually [~26ms](https://stackoverflow.com/a/12650386) long, unlike video formats where keyframes might be many seconds apart.
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/mp3dc_demo.png "Turning the clock back to 2006 with this expertly annotated MSPaint job demonstrating the key features of mp3dc.")
!(mp3dc_demo.png "Turning the clock back to 2006 with this expertly annotated MSPaint job demonstrating the key features of mp3dc.")
@ -78,9 +78,9 @@ When I download a new version of a program, I just delete that junction and make
I don't like filling up my desktop or start menu with shortcuts, so I wrote [PGUI](https://github.com/voussoir/cmd/blob/master/PGUI.pyw) which acts as a launcher for any .lnk files located inside my PGUI folder. Each of these shortcuts actually point to the `__latest\program.exe` path. As a bonus, my PGUI folder is one of the few folders to enjoy the honor of being on my PATH, which means I can just start them from the command line or Win+R -- that's all possible without a gui launcher of course, but it's a great symbiosis.
I'm not satisfied with the new tab page on Android Chrome. So, I put together an html file that I can use as my own homepage. Here's a comparison:
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/mobile_homepage_html/comparison.png "left: new tab page; right: my home page")
!(comparison.png "left: new tab page; right: my home page")
I don't like the new tab page because:
@ -79,4 +79,4 @@ Here's what I did:
Alternatively, I was able to bypass the scoped storage system altogether with this [ADB](https://developer.android.com/studio/command-line/adb) command: `adb shell sm set-isolated-storage off` which **rebooted the phone immediately** and may have other consequences. I am not sure how it fares on Android 11.
Recently, I have been trying to use Android Firefox more, since it has extension support and thus uBlock. Astonishingly, Mozilla has [removed the ability to set a homepage](https://old.reddit.com/r/firefox/comments/i5nom6/how_to_edit_homepage_on_android/), which I believe occurred as part of the [2020-08-25 update](https://blog.mozilla.org/blog/2020/08/25/introducing-a-new-firefox-for-android-experience/). And [their new tab page](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/mobile_homepage_html/firefox_ntp.png) has an even bigger thing that I won't ever ever ever click on. I'm not sure what's going on over there.
Recently, I have been trying to use Android Firefox more, since it has extension support and thus uBlock. Astonishingly, Mozilla has [removed the ability to set a homepage](https://old.reddit.com/r/firefox/comments/i5nom6/how_to_edit_homepage_on_android/), which I believe occurred as part of the [2020-08-25 update](https://blog.mozilla.org/blog/2020/08/25/introducing-a-new-firefox-for-android-experience/). And [their new tab page](firefox_ntp.png) has an even bigger thing that I won't ever ever ever click on. I'm not sure what's going on over there.
@ -41,9 +41,9 @@ Many of the articles I write here are things that I would like to make videos ab
**Minecraft otherwise**: My first real programming experience beyond .bat files was in Java, which I had to learn in order to make mods for Minecraft. I made my own ores, tools, plants, and trees. About 30% of the items I made had some semblance of legitimate purpose, the rest were because I had come up with some pixel art that I liked and wanted to make an item for it. If you want to see some python projects that spawned out of my Minecraft interest, see [VoxelSphereGenerator](https://github.com/voussoir/else/tree/master/VoxelSphereGenerator) and [Minecraft3DVector](https://github.com/voussoir/else/tree/master/Minecraft3DVector).
**TF2**: I have 1700 hours in TF2. Some hundreds of those are from idling to get refined metal back when it was 2.33 per key. Out of the active play hours, I'd say at least 90%+ were spent on cp\_orange\_x3 or variant maps. There was a server with a 100% crits mod that I played on regularly, and when I made my own orange map cp\_orange\_Skyward they were kind enough to host it and I became a moderator on the server. Here are some screenshots of Skyward ([one](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/motivations_for_writing/tf2_skyward1.jpg), [two](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/motivations_for_writing/tf2_skyward2.jpg), [three](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/motivations_for_writing/tf2_skyward3.jpg), [four](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/motivations_for_writing/tf2_skyward4.jpg)) and I will see about cleaning up the messy vmf and uploading that.
**TF2**: I have 1700 hours in TF2. Some hundreds of those are from idling to get refined metal back when it was 2.33 per key. Out of the active play hours, I'd say at least 90%+ were spent on cp\_orange\_x3 or variant maps. There was a server with a 100% crits mod that I played on regularly, and when I made my own orange map cp\_orange\_Skyward they were kind enough to host it and I became a moderator on the server. Here are some screenshots of Skyward ([one](tf2_skyward1.jpg), [two](tf2_skyward2.jpg), [three](tf2_skyward3.jpg), [four](tf2_skyward4.jpg)) and I will see about cleaning up the messy vmf and uploading that.
Making texture replacement skins for TF2 is pretty easy, but for a bigger challenge I tried Blender to make a hat. I only got so far ([one](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/motivations_for_writing/tf2_hat1.jpg), [two](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/motivations_for_writing/tf2_hat2.jpg)) before giving up, but at least I can say I've used Blender.
Making texture replacement skins for TF2 is pretty easy, but for a bigger challenge I tried Blender to make a hat. I only got so far ([one](tf2_hat1.jpg), [two](tf2_hat2.jpg)) before giving up, but at least I can say I've used Blender.
!(https://voussoir-net.s3-us-west-1.amazonaws.com/writing/professionally_written_article/hero.jpg "I was told I needed a hero")
!(hero.jpg "I was told I needed a hero")
A professionally written article
@ -78,7 +78,7 @@ But our anonymous sources tell us otherwise.
Just before the end of the debate, the CEO of YouTube was awarded the world's first "Free Expression Award" after a unanimous decision by a committe consisting of just the CEO.
<center><ahref="https://voussoir-net.s3-us-west-1.amazonaws.com/writing/professionally_written_article/photo_large.jpg"><imgsrc="https://voussoir-net.s3-us-west-1.amazonaws.com/writing/professionally_written_article/photo_small.jpg"/></a><br/>Click to see full-size image.</center>
[!(photo_small.jpg)](photo_large.jpg "Click to see full-size image")
The rest of the interview was not very interesting so don't worry about it.
@ -89,4 +89,4 @@ See also:
- [Drinking coffee every morning is good for your health](#)
- [Drinking coffee every morning is bad for your health](#)
9. Congratulations! Try running a command like `ls`.
@ -59,9 +59,9 @@ At this point I am following the official Termux Wiki page on [Remote Access](ht
11. Enter the phone's hostname/IP and port. When I typed 8022 into the port field, WinSCP automatically changed the protocol selection from SFTP to WebDAV, so change it back to SFTP. You may enter anything you want for the username, but if you leave it blank then WinSCP will prompt you during the login process, so maybe you'd like to make something up. Also enter your password, then log in.
3. You may give the keypair a password, but you'll have to type this password every time you log in with Putty/WinSCP, which you may not want to do. So you can leave it blank. In a 'real-life' SSH situation, you can use a passworded keyfile to double your security; someone would have to steal your keyfile and know your password to log into your servers.
@ -81,17 +81,17 @@ I assume you won't be leaving your phone's server on very long, or giving it an
5. We need to teach the server to trust the public key we've created. In Putty, use vim to create a file called `~/.ssh/authorized_keys`.
6. In the puttygen UI, the text box at the top has the text that needs to go into this file. You'll notice that the format of this text is `<key type> <base64> <comment>` where the key type is `ssh-rsa`, the base64 is the content of the publickey file you saved, and the comment is what you wrote earlier. To paste into vim over putty you may need to press Shift+Insert.