Posts

Pizza Taxonomy, Ann Arbor Edition

A question was asked in Workantile’s recommendation channel that resulted in slack telling notifying us that several people are typing:

What’s your favorite Ann Arbor pizza?

I was one of them because, dear reader, I have pizza opinions.

Pizza Contains Multitudes

There is no one Pizza. Instead, we have many many subclasses of food that look similar, yet are quite different, and can all be broadly defined (and recognized!) as pizza.

If you ask a child to draw a pizza they will draw you a shape that more or less looks like what the Teenage Mutant Ninja Turtles eat. Something that is circular, cheesy, and maybe some pepperoni on top. The child’s drawing won’t be able to capture a lot of, what I’d argue, are essential properties of the pizza though: speed of delivery to your mouth, toppings, crust, thickness, greasiness, price, etc.

No artist could, really, pizza is complicated and comes in many forms! And, because of it, pizza places cannot excel at all kinds of pizza. They will naturally do one (maybe two!) kinds of pizza well. Expecting them to do everything outlined below would result in them doing nothing correctly. Recognition that the rubric for “good pizza” is vast and circumstantial has the effect of reducing the stress of picking a pizza place. Rather than having only one favorite pizza place you can expand your palette and have many favorite places each tailored to what you are actually craving.

The Taxonomy of Pizza Places

Since we agree that pizza places suit different needs you can first choose the kind of pizza you are craving and then pick your place from there.

I contend that the categories below are more or less comprehensive of restaurant pizza options (we’re not getting into making your own or frozen). I’ve provided my favorite places in Ann Arbor for each category with the understanding that there will be quibbles. That is fine by me. You are always welcome to submit your own blog post to the internet:

Pizza! Now!

Hot and Ready from Little Caesar’s. You may optionally hate yourself later, but you will at least be full.

Greasy/Cheap/Delivered

Domino’s. It’s “local” and defines this category. Maybe Cottage Inn if you want exotic ingredients like “chicken”. I’m told that Marco’s Pizza is also good in this category.

“Fast” Casual

Blaze pizza. Although “fast” in this sense is highly dependent on how busy it is. Blaze is a nightmare if you are hungry because you feel like you’re very close to getting your pizza, but any line whatsoever is going to make it feel like an eternity. That said you get a ton of choices and can piece together a pretty good pizza. Neopapalis is another option here, although I haven’t been in years.

Not Your Daddy’s Pizza

Bigalora or Mani. If you crave interesting ingredients like brussel sprouts OR potatoes go to these places. Mani is loud though.

Sit Down and Wait a While

Anthony’s. Pizza House has a better ambiance. Anthony’s has much better pizza.

Regional Styles

Was told after publishing that I should really include a section on a few specific regional styles:

Chicago (read: Deep Dish)

Anthony’s. Although maybe just wait until the next time you’re in Chicago.

Detroit

I’m least familiar with this but am told that Buddy’s and/or Jet’s are where to go. As someone who grew up in Chicagoland Detroit style is scary and different.

New York

New York Pizza Depot. I’m unaware of any runner-ups here. Again, probably best to just wait until you’re in NY.

Notes

Thanks to Workantile for helping me take this from that thing I rant about from time to time to a written blog post I can now link to whenever someone mentions pizza.

Referencing directories in WordPress themes

I needed to enqueue a handful of scripts and stylesheets in a WordPress theme and ran into much confusion between which functions to use to return what paths from the parent theme vs. the child theme. To save myself later here is the breakdown of when to use what. Basic gist is that “stylesheet” will get the child theme. “template” will get the parent.

If you don’t have a child theme any of these will get the current theme.

Absolute Path

These functions get the absolute path on the server’s file system. Mostly useful for referencing other PHP files within your theme’s PHP files:

get_stylesheet_directory() – absolute path to the current theme. If you’re using a child theme it’ll get it. Documentation.

get_template_directory() – absolute path to the parent theme. Even if you’re using a child theme it’ll get the parent. Documentation.

Directory

These functions get the public URI for the theme directory. Useful when you’re trying to publicly display something on the site through your theme files:

get_stylesheet_directory_uri() – returns a properly formatted URI for the current theme. Use if you have a child theme that you want to return. Documentation.

get_template_directory_uri() – returns a properly formatted URI for the parent theme. Even if you’re using a child theme it’ll get the parent theme. Documentation.

Playing The Quiet Year in One (1) Hour

You should play The Quiet Year! If, at all possible though, you should not play The Quiet Year in only 1 hour.

I was running this as part of an event and only had one hour so the constraints forced my hand somewhat.

Here’s how I approached it:

  • Each turn encompassed 3 weeks instead of 1. This is where the game suffers the most because projects start less frequently and end more quickly.
  • Cut down each season drastically. 3 cards for Spring, 4 for Summer (make sure to remove the King of Diamonds), 4 for Autumn, and 4 plus the King of Spades for Winter. Put the King of Spades at the bottom of the deck. Draw all but the King of Spades randomly.
  • Keep an eye on the time. If it’s looking like you’ll go long you should remove one of the cards from winter.
  • Your goal is actually to hit around 55 minutes for the game so you have 5 minutes to decompress and make up an epilogue. This is extremely important because everyone will have questions.

A few other items of note. I started the setup for the game by telling folks that the following:

I do not know if this game is fun. It is fascinating though. Keep in mind that we are collectively role playing a community and as such you will sometimes be frustrated with the direction things are taking. There is no win or lose state either, we see what happens and then the Frost Shepherds come.

Saying that the game might not be fun has a weird effect of making the game quite a bit more fun since everyone can just relax and see what happens.

Thanks to Sam and Brendan for helping out with a playtest of this compressed version of the game!

From Hugo to WordPress

There are a million and one blog posts for “move from WordPress to Hugo!” out there. This is the opposite of that.

Hugo is good

I like Hugo a lot. If you need a static site generator I’d recommend it without reservation! Once I had it going it worked very well. I loved how fast Hugo could build the entire site and it required almost no server resources. Turns out, you don’t need that much raw computing power to serving static files to a handful of folks every day.

Posting though

But…posting was far more complex than I wanted it to be. In the end I was syncing a folder via dropbox, committing my code to a repo, pushing it to a repo on the server. From there a git hook would run to build the site and then move the files to a folder. Extremely cool and extremely obtuse. If I had just one computer it wouldn’t have been that big of a deal to continue on; however, because I’m a glutton for complication, I bounce between 5 different devices (3 macs, 2 iOS devices) within the course of a week.

Having a web interface to log into matches my mental model of “I am writing and publishing” much better. I also dearly appreciate having drag and drop image support as well as WYSIWYG formatting options. Hugo’s support for non-text media is lacking. That’s totally okay! But, I was finding that I was avoiding publishing certain kinds of posts because I was lacking easy tools to do so.

WordPress and Gutenberg

What finally pushed me to make this change was a recent experience building a new website for Workantile. During that redesign we relied on the Gutenberg editor for formatting our pages. I was impressed! You can create fairly complex pages quickly with blocks in a way that just wasn’t easily doable a few years ago without diving deep into theme files. We’re in a bit of a rough transition point going from the classic editor to Gutenberg (and more importantly the concept of Blocks). It’s getting better all the time though!

Problems

The move went pretty well for the most part. Some technical issues I ran into:

RSS Importer

The RSS importer that is built into wordpress needs some serious attention. The biggest issue is that it fails because it’s calling a deprecated PHP function. The fix for this for me was to comment out the offending line. This StackOverflow post was helpful:

php – Call to undefined function set_magic_quotes_runtime() – Stack Overflow

I just found line 72 in the importer and commented it out. I wouldn’t rely on this edit for an import where you didn’t control all of the content, or as an importer you run more than once. It’s a brittle fix to say the least. Here’s the error and stack trace:

An error of type E_ERROR was caused in line 72 of the file /var/www/beta.chrissalzman.com/wp-content/plugins/rss-importer/rss-importer.php. Error message: Uncaught Error: Call to undefined function set_magic_quotes_runtime() in /var/www/beta.chrissalzman.com/wp-content/plugins/rss-importer/rss-importer.php:72
Stack trace:
#0 /var/www/beta.chrissalzman.com/wp-content/plugins/rss-importer/rss-importer.php(178): RSS_Import->get_posts()
#1 /var/www/beta.chrissalzman.com/wp-content/plugins/rss-importer/rss-importer.php(204): RSS_Import->import()
#2 /var/www/beta.chrissalzman.com/wp-admin/admin.php(344): RSS_Import->dispatch()
#3 {main}
  thrown

Hugo’s RSS Implementation

And on the Hugo end of things: Hugo’s built-in RSS generator doesn’t include the full text of the posts. It also doesn’t include categories. I happen to be the sort of person who likes adding categories, so this was a problem! Here’s a gist of my RSS theme file that has the full text and categories:

Hugo RSS Implementation with Categories · GitHub

This looks for the categories set in the frontmatter of your markdown files. If there are none it skips it and nothing is added to the feed for that post.

RSS Redirect

I wanted to make sure anyone who subscribed to my old RSS feed continues to get the new one. To do so I set up a 301 redirect using this plugin:

Simple 301 Redirect

Keeping it around since it’s always nice to have this in a readily accessible place.

Images

Moving images over to the new site involved making sure they were uploaded appropriately to WordPress’ Media library. I toyed with the idea of doing one big import and going through and fixing individual images. Then I found this plugin that just did it for me. Installed it and then Edited all of my posts and resaved them. It ran through and copied everything over and updated the src tags for me:

Auto Upload Images – WordPress plugin | WordPress.org

Inserting images in Hugo was one of the reasons I wanted to get away from it so this was nice to have it just work. After I ran this I turned it off.

Conclusion

So far, so good. I’m happy with this and this post was fully written and edited in the WordPress editor. It’s nice to have “my website” compartmentalized to something I go to on the internet to edit, although I will miss how much posting a blog post made me look like I was attempting to hack the planet.