Move S3 images to my domain.

Previously I was running the site on AWS EC2 and was nervous that
someday the dynamic billing system might kill me for bandwidth.
I've switched to OVH which shouldn't have that issue.

[minor]
This commit is contained in:
voussoir 2021-06-07 19:08:19 -07:00
parent f3e518602f
commit 9cce9f9ef0
No known key found for this signature in database
GPG key ID: 5F7554F8C26DACCB
9 changed files with 45 additions and 46 deletions

View file

@ -7,23 +7,23 @@ On modern Android, applications can register multiple channels / categories thro
Here's what it looks like to configure an app's notification channel:
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/android_notification_orthogonality/ankidroid.png)
![](ankidroid.png)
For Medium and Low importance, notifications appear under a "Silent notifications" header on the dropdown:
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/android_notification_orthogonality/silenced_levels.png)
![](silenced_levels.png)
And although the channel menu has an on/off switch for badges, there is a totally separate menu for choosing whether badges are numbers or just dots, because this option applies system-wide:
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/android_notification_orthogonality/badges.png)
![](badges.png)
Similarly, if you want to disable status bar icons entirely, that's listed somewhere else:
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/android_notification_orthogonality/status_bar_toggle.png)
![](status_bar_toggle.png)
And finally, there is another option that only applies to incoming phone calls that gives you ringing and vibration together.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/android_notification_orthogonality/ring_with_vibrate.png)
![](ring_with_vibrate.png)
So, if you want to modify all of the available options related to notifications, you'll have to make a Vernian journey through the operating system and hope you get it done in less than eighty days:
@ -48,7 +48,7 @@ Additionally, I think some properties are controlled by the app itself, such as
My phone happens to be an LG, and their firmware has some bonus options that only apply to the lock screen, which is located in, you guessed it, a separate menu:
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/android_notification_orthogonality/lg_special.png)
![](lg_special.png)
## What a mess!
@ -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.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/android_notification_orthogonality/giveemwhattheywant.png)
![](giveemwhattheywant.png)
To me, it is clear that the UI should make much, much heavier use of checkboxes / toggle switches:

View file

@ -3,7 +3,7 @@ Cancel This Album!
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.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/cancel_this_album/pikachu.jpg)
![](pikachu.jpg)
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!
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/cancel_this_album/guitar.jpg "Most excellent!")
![](guitar.jpg "Most excellent!")
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/cancel_this_album/stonks.jpg)
![](stonks.jpg)
---

View file

@ -63,7 +63,6 @@ h3 {font-size: 1.5em;} h3 * {font-size: inherit;}
h4 {font-size: 1.2em;} h4 * {font-size: inherit;}
h5 {font-size: 1.0em;} h5 * {font-size: inherit;}
.header_anchor_link {display: none; font-size: 1.0em; text-decoration: none}
h1:hover > .header_anchor_link {display: initial;}
h2:hover > .header_anchor_link {display: initial;}
@ -165,7 +164,7 @@ pre,
}
/*
Thank yourichleland for pre-building this Monokai style.
Thank you richleland for pre-building this Monokai style.
https://github.com/richleland/pygments-css
*/
:root

View file

@ -28,13 +28,13 @@ https://example.com/episode4.mp3 Podcastname 2018-05-05.mp3
and calling `threaded_dl links.txt 3`.
![](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%`.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/download_podcasts/mp3tag_rename_action.png "MP3Tag rename action.")
![](mp3tag_rename_action.png "MP3Tag rename action.")
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.")
## Listen & enjoy

View file

@ -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.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/master_of_my_domain/latest_junction_1.png)
![](latest_junction_1.png)
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/master_of_my_domain/latest_junction_2.png)
![](latest_junction_2.png)
## Reserve PATH for nobility only

View file

@ -5,7 +5,7 @@ Mobile homepage.html
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.

View file

@ -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.
Future ideas:

View file

@ -1,4 +1,4 @@
![](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><a href="https://voussoir-net.s3-us-west-1.amazonaws.com/writing/professionally_written_article/photo_large.jpg"><img src="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](#)
<center><img src="https://voussoir-net.s3-us-west-1.amazonaws.com/writing/professionally_written_article/guilt.png"/> <img src="https://voussoir-net.s3-us-west-1.amazonaws.com/writing/professionally_written_article/guilt.png"/> <img src="https://voussoir-net.s3-us-west-1.amazonaws.com/writing/professionally_written_article/guilt.png"/></center>
<center><img src="guilt.png"/> <img src="guilt.png"/> <img src="guilt.png"/></center>

View file

@ -37,21 +37,21 @@ At this point I am following the official Termux Wiki page on [Remote Access](ht
4. You can run `ifconfig` within Termux to find your phone's local IP address, or, depending on your home router, you might be able to assign the phone a hostname from the admin panel.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/lan_ip.png)
![](lan_ip.png)
5. Open an SSH client on your PC. I'll be using [Putty](https://www.putty.org/).
6. Enter the phone's hostname or IP address, and choose 8022 for the port, and start the session.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/putty_session.png)
![](putty_session.png)
7. Putty may warn you that it has never seen the server's fingerprint before, which is expected and you can accept it.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/unfamiliar_fingerprint.png)
![](unfamiliar_fingerprint.png)
8. In Putty, the server will prompt you for a username. You may type anything your want, or even leave it blank and just hit Enter. Then it will ask you for the password you chose earlier.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/ssh_success.png)
![](ssh_success.png)
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.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/winscp_session.png)
![](winscp_session.png)
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/ftp_success.png)
![](ftp_success.png)
12. Congratulations! Try uploading some files to the phone.
@ -73,7 +73,7 @@ I assume you won't be leaving your phone's server on very long, or giving it an
2. Leave the key type as RSA and press the Generate button to make a public/private keypair. You can use the comment field to give it a memorable name.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/puttygen.png)
![](puttygen.png)
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`.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/authorized_keys1.png)
![](authorized_keys1.png)
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.
7. Save and quit with Esc + `:wq`.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/authorized_keys2.png)
![](authorized_keys2.png)
8. Also modify the `sshd_config` file to disable password authentication. `vim /data/data/com.termux/files/usr/etc/ssh/sshd_config`
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/sshd_config.png)
![](sshd_config.png)
9. Close Putty and WinSCP. Stop the server with `pkill sshd` and run it again with `sshd`.
@ -99,11 +99,11 @@ I assume you won't be leaving your phone's server on very long, or giving it an
11. On the left menu, choose Connection > Data and put something in the username box so you won't get prompted during login.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/putty_data.png)
![](putty_data.png)
12. Then choose Connection > SSH > Auth and browse for your private keyfile.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/putty_auth.png)
![](putty_auth.png)
13. Before pressing the Open button, you may want to go back to the main Session screen and click the Save button to store the configuration. Then click Open.
@ -113,7 +113,7 @@ I assume you won't be leaving your phone's server on very long, or giving it an
16. Click the Advanced button and select SSH > Authentication. Browse for your private keyfile.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/winscp_auth.png)
![](winscp_auth.png)
17. You may want to save the session configuration. Then click Login.
@ -139,6 +139,6 @@ Now we'll put a shortcut on the homescreen to launch the server in a single tap.
4. On your phone's homescreen, create a new shortcut widget from the Termux:Widget section. It will show you the files inside `~/.shortcuts`.
![](https://voussoir-net.s3-us-west-1.amazonaws.com/writing/termux_ftp/widget.png)
![](widget.png)
5. Congratulations!