Browse Source

update for 2022 more frequent posting (??)

Colin McMillen 1 year ago
  1. 28
  2. 35
  3. 38
  4. 25


@ -204,6 +204,33 @@ def make_atom_feed():
def make_blog_index():
blog_entries.sort(key=operator.itemgetter('date'), reverse=True)
markdown_text = "# mcmillen's blog\n\n"
markdown_text += "Don't forget to follow with your favorite "
markdown_text += "[RSS reader](!\n\n"
for blog_entry in blog_entries:
if blog_entry['date'].startswith('2007'):
url = blog_entry['url'].replace('', '')
markdown_text += '### [%s](%s) (%s)\n\n%s\n\n' % (
blog_entry['title'], url, blog_entry['date'], blog_entry['summary'])
html_content = markdown.markdown(
markdown_text, extensions=md_extensions, output_format='html5')
template = open('template.html').read()
output = template.format(
title="Colin McMillen's Blog",
summary="Colin McMillen's Blog")
index_filename = os.path.join(output_directory, 'blog', 'index.html')
index_file = open(index_filename, 'w')
def copy_site():
os.system('cp -r output/* %s' % deploy_directory)
@ -242,6 +269,7 @@ def main():
if args.copy and not args.deploy:


@ -0,0 +1,35 @@
# Goodbye Twitter, Hello Blog!
*Posted 2022-11-07.*
It's quickly become clear that the acquisition of Twitter by Elon Musk means the end of the site as I've known it since 2008. Instead I'm going to collect all the stuff I *would* have tweeted about & post it to this blog roughly once a week. If you have an RSS reader you can [follow along there]( I've also created a [subreddit]( where I'll link to each post, so that folks can follow via Reddit if they prefer, and also comment on what I've written. I'd also appreciate comments over [email](!
My goal is to post **fewer things, more thoughtfully, to a smaller audience** for a while, and see how that goes.
## Deleting your Twitter responsibly
I'd figured Elon Musk's "free speech idealism" was code for a slow regression back to a Nazi-sympathetic swamp of toxicity, but I hadn't quite expected him to *immediately* light user trust on fire. Musk seems to be determined to squeeze every drop of revenue from the site in order to make up for his foolhardy acquisition, so I think it's only a matter of time before he starts selling user data to third-party companies.
So instead of just deleting my Twitter account wholesale, I've [downloaded my Twitter archive]( and set up [TweetDeleter]( to delete almost all my data, including Tweets, Retweets, and Likes. Right now I have it set up to automatically delete anything older than 2 days old. I expect that after a month passes I'll be posting to Twitter a lot less (if at all) and will just manually remove old content then.
I'm intending to keep my Twitter account registered and to occasionally log in, rather than deleting it entirely. That way I can maintain a pointer to this blog in my bio, and not have to worry about someone impersonating me if Twitter someday decides to reap & reissue old usernames.
For a more nuanced approach to deleting your Twitter content than "burning all of it as quickly as possible", consider [this 2021 thread from Ryan North](
## How's your blog work?
This site is authored with Markdown. I have a short Python script that converts the entire thing to static HTML, so I can still author posts in my favorite text editor ([Sublime Text 3]( or even draft things on-the-go with a Markdown app like [Joplin]( This means I'm not reliant on anyone else's fancy GUI editor, and also means it's pretty future-proof in case I ever *do* want to move my content to another site for some reason.
## Why not Substack / Medium (etc)?
Many people have moved to tools like Substack & Medium for writing longer-form articles. I've definitely considered those sites as well, but it's hard to be sure that they won't *also* go "boom" due to reasons entirely outside my control sometime in the next few years. There's already something like a 15-year-long gap in my online presence due to Google+ and Twitter melting down in various ways. I'd feel like a bit of a sucker to be relying on anyone other than myself to host my content, at this point.
## Why not Mastodon?
[Mastodon]( seems like the most obvious choice as a Twitter replacement, but I'm not actually sure that I *want* a Twitter replacement. As I said up top, I'm gonna try posting fewer things, more thoughtfully. A new app that lets me rapidly tap out hot takes isn't exactly a good way of supporting that.
I might eventually make a Mastodon account to *follow* other folks who've departed Twitter, so I'm not counting out the idea entirely. :)
## Comments?
Chime in on [this article's Reddit thread]() or send me an [email](


@ -9,33 +9,16 @@ Previously at Google, reCAPTCHA, & Carnegie Mellon.
[![email](/img/email.svg)]( [colin at mcmillen dot dev](
[![Git](/img/git.svg)]( [](
For more details, check my [resumé](resume.html) & [publications](publications.html).
const mailtoArray = [
'm', 'a', 'i', 'l', 't', 'o', ':',
'c', 'o', 'l', 'i', 'n', '@',
'm', 'c', 'm', 'i', 'l', 'l', 'e', 'n',
'.', 'd', 'e', 'v'];
const mailtoLink = mailtoArray.join('');
const anchors = document.getElementsByTagName('a');
for (let i = 0; i < anchors.length; i++) {
const anchor = anchors[i];
if (anchor.href == '') {
anchor.href = mailtoLink;
if (anchor.innerText == 'colin at mcmillen dot dev') {
anchor.innerText = mailtoLink.substring(7);
<!-- [![Git](/img/git.svg)]( []( -->
Check out my [blog](blog/), [resumé](resume.html), & [publications](publications.html).
## Latest Updates
Sign up for updates via my [email newsletter]( or your favorite [RSS reader](/feed.atom).
Sign up for updates via your favorite [RSS reader](/feed.atom).
* [Goodbye Twitter, Hello Blog!](blog/20221107-goodbye-twitter.html), 2022-11-07.
Why I'm deleting my Tweets and moving elsewhere.
* [Downvotes & Dislikes Considered Harmful](blog/20210721-downvotes-considered-harmful.html), 2021-07-21.
If you're letting users rank content, you probably don't need and don't want downvotes. Here's why.
@ -55,7 +38,7 @@ Sign up for updates via my [email newsletter]( o
## Videogames
Currently playing: **Persona 5**, **Monster Hunter Rise**, & **Slipways**.
Currently playing: **Death Stranding**, **Triangle Strategy**, and **Divinity: Original Sin 2**.
Sometimes I stream on Twitch!
[![Twitch](/img/twitch.svg)]( [FamiColin](
@ -74,13 +57,6 @@ Sometimes I stream on Twitch!
* I proposed to my spouse in [obfuscated Perl](, which got illustrated in [PHD Comics](
## Recent Photo
![Park At Dusk](
Park at dusk, 2021-06-05 from my [#dailyphoto]( thread on Twitter.
## News Articles
A selection of news articles & books in which I've been featured or quoted:


@ -22,7 +22,28 @@
<meta name="twitter:description" content="{summary}">
function fixEmails() {
const mailtoArray = [
'm', 'a', 'i', 'l', 't', 'o', ':',
'c', 'o', 'l', 'i', 'n', '@',
'm', 'c', 'm', 'i', 'l', 'l', 'e', 'n',
'.', 'd', 'e', 'v'];
const mailtoLink = mailtoArray.join('');
const anchors = document.getElementsByTagName('a');
for (let i = 0; i < anchors.length; i++) {
const anchor = anchors[i];
if (anchor.href == '') {
anchor.href = mailtoLink;
if (anchor.innerText == 'colin at mcmillen dot dev') {
anchor.innerText = mailtoLink.substring(7);
<body onload="fixEmails()">
<div id="page-container">
<div id="content-wrap">
@ -41,7 +62,7 @@
<div id="footer">
<div class="content">
&copy; 2021 <a href="/" class="undecorated">Colin McMillen</a>. No cookies, no tracking.
&copy; 2022 <a href="/" class="undecorated">Colin McMillen</a>. No cookies, no tracking.