Switching to Pelican

Until today, my website was fragmented across a number of static pages and two WordPress instances. To simplify my life, I decided to unify them into one content management system instead of keeping that somewhat unwieldly mess around.

I had never really put a lot of thought into picking platforms before, hence the mess. For many years, my "homepage" was a single static page, which was easy enough since I've been writing HTML and CSS for about fifteen years. It later grew to five pages, but with some extremely simple scripting, it was just as easy to maintain my five static pages instead of just the one. My (modern) blog had always been a WordPress instance. I separated my food blog posts from my other posts for probably imprudent reasons a couple years ago, and I didn't think to do anything besides split it into two WordPress instances.

Eight years ago, I picked WordPress for a few reasons:

  • WordPress is a relatively simple system to operate.
  • Lots of people use WordPress, so you can usually find the answers to your questions with some quick internet searches. (Sadly, their own docs are, or at least were, kind of sad.)
  • The themes are highly customizable with HTML and CSS, and WordPress theme syntax isn't too hard to pick up.
  • I was hosting it on SIPB's scripts.mit.edu and installing WordPress was a breeze and free. As a SIPB member, I knew the maintainers well, so I felt like I could safely host my site there with less machine maintenance.
  • I wanted some fancy plugins at the time, and WordPress had them. (I don't use them anymore.)

But WordPress has a lot of drawbacks, too:

  • It's written primarily in PHP. (No amount of homebrew server-side include scripting done in high school to make your first self-hosted blog can make writing PHP exciting.[1])
  • It requires a database.
  • You create the site through an online system. I hate web interfaces. I hate clicking to create things.
  • You need to constantly update WordPress itself (and its plugins) to keep up with security issues.
  • Dynamic websites don't load quickly. I barely used the dynamic features: an unnecessary Twitter module and comments I never really wanted aren't enough to justify that cost.

Since I wasn't really using any WordPress specific features or any dynamic features, I decided to move to a static website system instead. I could still have good control over my theming through HTML and CSS, eliminate a source of security vulnerabilities, improve loading speed, and stop using PHP and MySQL. There were a lot of additional upsides for me, too:

  • It's easy to keep my website under version control - both the files to generate the site and the generated site.
  • It's easy to move my website around different hosting options.
  • Comment integration is significantly more complicated, so the completely misguided temptation to allow comments is basically removed.

There are many static site generators around; I chose Pelican. Some specific reasons include:

  • It's in Python, and I like writing Python.
  • It's fairly well documented.
  • It has an active and growing community.
  • While I can continue to directly use HTML like I have for years, I could opt to learn and use the simpler Markdown later.
  • I can organize my raw content conveniently - files can be put in whatever folder or subfolder I want, and it can generate my website's hierarchy according to other rules.
  • People have already written some convenient plugins, specifically the neighbors plugin I use to add chronological navigation between articles.
  • My best friend already uses Pelican for his site. (This was probably about 80% of my reasoning.[2])

But I can't say that Pelican is without flaws; I encountered some pretty big ones in my switch:

  • The Pelican dev team made a big mistake in choosing the AGPL for the project's license. Themes by the dev team may also fall under Pelican's AGPL, and if that's the case, sites generated with those themes - and thus their content - may also be covered by the AGPL. I learned a bunch of Jinja because I had to create this theme without looking at any existing Pelican themes so that my site would avoid these licensing issues. I am working on a less personalized Pelican theme to release under the MIT license so that others can also have a simple theme to use without having to worry that the Pelican dev team might enforce the AGPL over their content.
  • Pelican doesn't believe in multiple categories. I converted all of my categories to tags, but it doesn't feel quite right. At some point, I'm going to break down and fork the project to add this functionality.
  • Putting double quotes in article titles doesn't work. Even if you use " instead of ", Pelican will convert them to plain "s when inserted into link titles. This generates invalid HTML. I'll probably patch this when I get some time, but for now, I've just changed all the double quotes in my article titles to single quotes.
  • The WordPress importer didn't work so well for me. Maybe this had something to do with my having multiple categories for many of my posts? Honestly, I don't know because I wrote a hacky shell script instead of digging into it.

So yeah! My site's in Pelican now, so I'm just a line drawing away from knocking my website revamp off my list of 20 things for 2017. :)

[1] However, it was baby's first bash script and ushered in my decade long love of shell scripting. Still going strong. <3
[2] Thanks, Geoffrey, for letting me ping you with all the questions ever as I made this site.

20 things for 2017

I don't know how much I believe in New Year's resolutions, but I will happily use the buzz around them as inspiration to write down things I have started trying to do and things I recently decided I want to do. Given my philosophy that New Year's is a good excuse rather than motivation in and of itself, my list is likely to be updated throughout the year.

  1. Get up at 7 every day. I'm nearly there. (I'd really rather it be 6:30, but I've often found that goal bad for getting enough sleep since I have many friends who prefer to do social things into the night.)
  2. Matt and I just bought an elliptical. My basement is incredibly convenient, so I'd like to use that in my soon-to-be-reclaimed early mornings before work everyday.
  3. Become able to do the splits again. Maybe even oversplits like in middle school and high school.
  4. Sit down at the dining table for dinner when eating at home. Ideally I'd like to eat without being on my laptop. Fortunately, I think if I am on a laptop only occasionally, my brain will successfully form the habit around eating at the table without also forming one around eating while on my laptop.
  5. Drink more water. A year or so ago, I was on medication that caused me to be dehydrated more easily, and each day, I tallied how many pints of water I drank until I reached five pints. Coffee and tea could count towards only one pint. I hit that goal around the time I'd leave work and drank an amount of liquid without thinking after work that physically felt good. I also have suspicions that increased water consumption correlates to increased happiness for me.
  6. Don't buy coffee out unless it's for social or networking reasons. I don't do this a lot (haven't in a couple months, I think), but when I do, I always end up really unhappy with myself since I enjoy the process of making coffee and am lucky to not really need the caffeine to operate normally.
  7. Take photos of everything I buy that isn't a necessity. I'm not sure what exactly counts as a necessity yet! TBD, but so far, I think that there's no need to take photos of groceries and usual staple toiletries (helps that my routine conveniently isn't spendy), but photos will be required for things like takeout, meals out, and splurgy fancy soap. Replacing "bigger", longer-term-use household things like bath towels should be photographed, even if they're basically necessities, so that I can get a better feel for whether or not I'm properly balancing quality and price. I imagine what does and does not need to be photographed will make more sense as the year progresses. I don't think this will turn into a forever project, but I should stick to it for a whole year for the data mining.
  8. Do my various general finances maintenance more frequently. I basically have a good system, but I'd like to be doing the full set of things in that system once a month instead of when I happen to remember to.
  9. Try not to feel bad saying "no" to things. I don't know if I can hold myself accountable to this goal without spiraling downward if I spend lots of time reflecting on how well I'm doing. Maybe writing in a little (private) journal when I do say no and following up with notes about how it turned out okay would be reasonable?
  10. Put everything in the house away. Preferably this would have been done yesterday, but over all of 2017 is probably a goal that won't stress me out. Step one will be to figure out how to do this in increments that I can calendar well instead of freaking out that I will never have big enough blocks of time to make enough progress - and then punting because of that.
  11. Figure out a sustainable, meaningful way to engage with our government and do it. We are heading into dark times, and I am more privileged than most and need to leverage that to help those with less privilege. I already bother my representatives a bunch over the phone and email, but would like to spend more time crafting what I say to be concise and more effective. Living in New York City means my representatives generally agree with my views though, so probably some of the time I call to thank them can be better spent elsewhere. Unfortunately, protests, something I think I'd find rewarding as well as useful, are really risky for me. (A slight aside: Rebecca Solnit's Hope in the Dark is a comforting read right now.)
  12. Do the post-it goal planning Rachel Binx discussed in her XOXO talk.
  13. Practice singing at least three hours a week, preferably 30 minutes every day I don't have a lesson. Obviously this doesn't apply when I'm sick.
  14. Reformat the outline of that novel I want to write into a collection of shorter stories because this seems to be just as reasonable a way to say what I want to say. It's almost certainly more achievable to fit in with my unrelated full time job.
  15. Set up the LED lights for the digital piano already. The materials for this were birthday gifts all the way back in 2014.
  16. Tuesdays will be scheduled as project nights, for writing, drawing, composing, experimenting in the kitchen, or that LED piano situation I keep putting off. Routines are the sorts of things that give me the energy for optional things, which are often the things in my control that bring me the most joy. Don't schedule other things unless it's completely unavoidable, and definitely don't do that more than once a month. I've poked through my calendar for 2017, and I have only two things on Tuesdays! One is a book talk, and the other is traveling back from a wedding. This seems totally doable!
  17. Leave one weeknight a week unscheduled for friend emergencies. ("Emergencies" is definitely the wrong word, but I haven't been able to think of the right one today. Emergencies undoubtedly fall into the set of things I'd use this for, but probably I would drop other things, too.) Maybe can be used for friends who don't plan at least a week out like I do. Likely this will mostly be Mondays, but it doesn't need to be on the same day every week like scheduled project night. Maybe I will aim for Mondays because I have only two Mondays with things scheduled: D&D this Monday and a wedding in July. Downside is that if I want to use this for friends who don't plan in advance, Monday is a bad day because people I know don't seem to be geared up to do same day things then, which is even worse for the original goal of wanting to have time for friends in need. Hmm. Also, the failure mode of this is more time at home, which is always excellent.
  18. Finally finish the lizdenys.com overhaul: switch the blogs to a static site generator that also contains the rest of my site. Draw that line drawing self-portrait for the front page.
  19. Blog at least twice a month, preferably every week. I have so many things I've written the first draft for, but haven't polished or haven't uploaded because they're not in a great format out of the box (like my zine about riding the subway with anxiety and PTSD). Maybe I'm being a bit hard on myself for not getting to that in the past couple months given my travel schedule and how much time I've spent sick, but twice a month should be a sustainable default.
  20. Hold myself accountable on these things. I think I'm going to start by making a chart to mark off some metric of progress for the bigger things, but instead of having a cell for every week, I'll have it be 52 cells wide and the top row will be for surviving that week. In theory, this will be enough to track progress, and choosing not to link specific milestones directly to specific weeks will allow me to look at it without getting immediately stressed out by getting "behind" for not doing something for every category each week. I also want to summarize my progress in (monthly?) blog posts. Unclear if those would always count towards the goal to blog twice a month, especially if it's just progress without introspection. The ideal accountability post probably would count because I'd like to focus in how a couple changes have affected me in these posts. Also, posting vague posts is something I've wanted to get more comfortable with for a while, and this type of vague posting even comes with the additional tangible benefits of being held accountable!

Thanks to the fabulous Jeanna Kadlec for starting the Facebook thread that inspired this post earlier today!

Slack doesn't listen to its users.

In a rush of hubris, Slack published a full page ad taunting Microsoft Teams in the New York Times:

Part of their letter reads:

Communication is hard, yet it is the most fundamental thing we do as human beings. We’ve spent tens of thousands of hours talking to customers and adapting Slack to find the grooves that match all those human quirks.

Slack knows it is used in a lot of places, in a lot of different ways. Many users have been requesting the ability to mute or block other users:

Users have offered numerous reasons they might want this feature:

I found those tweets in a couple minutes, and you can easily find more. I'm not sure when Slack first heard users wanted blocking and muting, but they definitely did almost two years ago:

Despite hearing this request for two years, Slack's position now is that no one needs blocking and muting features:

That's not attentively listening to users like their ad claims.

Reasons to kick Peter Thiel off Facebook's board

There's a push to remove Peter Thiel from Facebook's board, and Mark Zuckerberg doesn't care about the threat he poses. Many of the arguments are centered around diversity, which is a tenet Facebook says it deeply values.

The ways Thiel fails to value diversity matter: his beliefs are not just a matter of intellectual debate but a very real threat to my safety. They are particularly transparent during the 2016 election season. I don't support the bigoted, sexist candidate that is Donald Trump like Thiel openly and aggressively does for a host of reasons. One of the most important is that I feel directly threatened by having someone who freely admits to committing sexual assault hold the highest office in my country - I feel especially, intimately endangered as a survivor of sexual assault myself. That's just one of the numerous reasons a Trump presidency would devastating be for women, people of color, LGBTQIA+, and other oppressed groups.

However, Thiel's harmful views on diversity and elections reach much farther than his open, aggressive support of Donald Trump in this election. Thiel believes that women like me should be stripped of their right to vote - not just because of the diversity concern regarding how he clearly doesn't care about women, but because women happen to disagree with his political views and actually hold the power to prevent the outcome he desires. The voter suppression he espouses directly eliminates free speech, something Facebook claims to be incredibly important.

Kick Peter Thiel off Facebook's board. Kick him off because he discourages diversity. Kick him off because people like me don't feel safe with him on it. Kick him off because he doesn't believe in free speech.

Liz rides the subway on October 4, 2016: social media, differing political views, and friendship

Liz rides the subway is a series containing thoughts I have on the subway. On the 3 and B trains home:

I came across this Good Guy Boss meme on Facebook yesterday:

Good Guy Boss: I will respect you regardless of who you support in this election. I don't unfriend people due to political views. That degrades democracy and free thinking.

I will respect you regardless of who you support in this election.

I don't unfriend people due to political views. That degrades democracy and free thinking.

There is a big difference between respecting someone as a person and being friends with them. Memes like this deceptively conflate those two things because it's reprehensible to not respect someone as a person. People post these memes because they want you to believe unfriending someone is the same reprehensible act.

But it's not. Friendship is more than respecting someone as a human being. Friendship requires trust. Friendship requires active effort.

Political views are not theoretical or arbitrary like what someone's favorite sports team is - they have meaningful consequences for my friends and me. Many political views that disagree with mine fundamentally imply their holder doesn’t see me or many of my friends and family as human beings intrinsically deserving of rights and respect. I just don't know how to trust people whose views fundamentally disrespect me as a human because I don't feel safe. I don't know how to put the effort into staying close with people I can't trust.

Unsurprisingly, most of the time I see these memes in my feed, they come from dudes, usually cishet white dudes. There's a great post on tumblr about how it's easier for cishet white dudes to be friends with people who disagree with their political ideas:

White dudes have this thing where they believe your best friend in the world can have opposing political ideas. You’re supposed to be able to have healthy debate and disagreeing shouldn’t harm your friendship. That’s gross and stupid. Its really easy to say that when all your disagreements are theoretical. Its easy to say when none of the laws passed actually effect your life. Fighting with your best friend about corporate regulations, school charters, educational funding, abortion, health care, voting restrictions, drug laws, taxes and all sorts of stuff is cool and lively because none of it is going to actually leave you in a bad spot. Its different for the rest of us.

If someone's opposing political views were truly, solely theoretical for everyone, maybe I'd be able to trust them enough to be friends with them.

Sometimes, when I tell people this, they bark back that friendship on social media and "in person, pre-social media friendship" aren't the same. I'm inclined to agree, but that still doesn't mean someone deserves to be my "friend" on social media. People I am "friends" with on social media and don't block take up space in my feeds and time in my day, and I have every right to curate this to take care of myself by keeping out hateful disrespect. I still read multiple, ideologically different, non-social media news sources, so the argument that I'm living in a bubble doesn't hold a lot of water in my mind.

Besides, comparing being friends or following on social media to in person friendships generally confuses me because it's not clear exactly what constitutes friendship. I casually call basically everyone I know a "friend" when talking about them with someone else I know, whether or not I spill my secrets to them, but if I don't share any of my private thoughts with them, I probably consider them an "acquaintance" in my mind. The word "friend" has become so overloaded that it's practically lost its value - it's no wonder that it's an even more complicated concept online.