PyTennessee was last weekend and it was amazing! I was privileged to meet so many incredibly bright, kind people, hear great talks, and was honored to give a talk of my own. Below I share highlights from the weekend and a round-up of all the conference resources I’ve collected thus far: links to talks, slides, video, etc. Hope you enjoy and find this useful!

First things first:


The venue was gorgeous. The food was delicious. The hotel was cozy, clean, and convenient. Conference check-in was easy and quick. The “red shirts” volunteers were helpful and kind and always there when you needed ’em. Organizer Jason, his delightful wife Denise, and his lead volunteer coordinator William put together an incredible event. Thank you.


Friday night EventBrite treated the PyLadies to dinner and conversation at their Nashville HQ. Lynn Root gave an inspiring, heartfelt version of this talk entitled “I’m faking it.” If you didn’t get to hear her speak, I highly recommend reading the post.

Probably the funniest slide from PyTennesee weekend. From Ian‘s “Cutting Off the Internet: Testing Applications that Use Requests” Saturday afternoon.

Also hilarious (and fascinating, informative, and generally fun): Kyle Kelley’s keynote on Docker for Ephemeral Workloads. His slides are here.


Chris and Ashwini gave a thoroughly engaging, beginner-friendly talk: Introduction to HTTPS: A Comedy of Errors. Love how expressive Chris is! Here are the slides.

Folks really loved Chris‘ talk “Purely Functional programming in Python“, but I was at Becky‘s so I missed it. Thankfully he shared slides. Hopefully someone will eventually see fit to record him giving this one – looks like a lot of fun!

Bill Israel
gave a thoughtful, accessible talk entitled “Function Decorators: How Do You Even“. His slides are here.

It was a privilege to hear Becky talk about her passion for languages as she persuaded us all “Why Your Next API Should Be Designed By a Linguist“. I love it when people bring their whole selves to Python. Her talk was recorded, but has not been posted… yet!

Photo (and creation!) by Kevin Cox, @VintageBinary

Photo (and creation!) by Kevin Cox, @VintageBinary

Legos all weekend with Lamp Post Group! Lamp Post was PyTennessee’s champion sponsor, not only providing funds to make the conference happen, but making an additional donation of $500 to PyLadies! I’m certain I’m not the only person who got goosebumps when Lucky made the announcement before Lynn’s keynote Sunday evening. It was a total treat to spend time building and chatting with Lamp Post Group’s Lucky and Ben.


Dear Ian, thank you for your long arms, Sincerely, me & my love of selfies. With Ian and the loveliest lovely Anna.


Anna’s talk Django Girls: A Success Story! She has inspired me to host a Django Girls workshop in Atlanta! She shared her slides here. And you’re already following her on Twitter, right?

I’m sure you’ve already heard about my adoration for Anna, but I’ll share again, here: she was a huge inspiration for my talk and has been instrumental in my Python learning journey. She is inspiring, kind, and an amazing mentor. I’m so glad she’s in my life!

Photo by Aubrey Howell (@simplyaubs)

Photo by Aubrey Howell (@simplyaubs)

Ed Finkler’s talk “Stronger Than Fear: Mental Health in the Developer Community“. I’m so thrilled to share that you can watch it here! The slides are here. Ed’s talk is particularly meaningful to me because, as I shared during my talk, I also struggle with depression and anxiety. I am glad PyTennessee was the kind of conference where we could bring our very real struggles into the room in a tender, compassionate, and constructive way.

Meeting James Dozier and learning that my talk was an inspiration for his new blogging project, Think Code Make! He was also inspired by Aubrey Howell’s (hilarious/amazing) talk “Shitty Code Leads to Pretty Code: Reconciling Development with Reality“. I was SO BUMMED to miss it, but thankfully they were able to record. I’ll post the link here when it is ready! It’ll be one to watch, y’all, for sure.

Meeting Elizabeth Wickes and learning about her Guided Self-Study Lesson Plan for Python. She has put a LOT of thought and effort into teaching Python to folks from non-technical backgrounds and would make a great future speaker (hint hint, conference organizers!).


Lynn‘s keynote Sunday evening. It was great to hear more about her journey and how Spotify uses Python and open-source tools. Plus, she keeps us smilin’.

PyTennessee resource round-up

Since I wasn’t able to attend every talk, I made a list of resources gathered from Twitter for future reference. Let me know if there are others, and I’ll add them!

Resources for fellow Atlantan Daniel Rocco‘s talk “Clean and Green: Pragmatic Architecture Patterns” are here! Includes links to the screecast, slides, and clean architecture resources. I’m glad I got to hear his talk at PyATL, cuz he was up against me at PyTN!

How to really get git” by Susan Tan: slides here!

A. Jesse Jiryu Davis gave an inspiring talk called “Dodge Disasters and March to Triumph as a Mentor“. I’m so glad he shared a written version of his talk here!

Analyzing Data with Python” / “Twitter Network Analysis with NetworkX” by Sarah Guido!

Slides and a post for Michael Herman‘s talk “Docker In Action: fitter, happier and more productive“. Oh, and while we’re at it, some helpful resources and tutorials from the RealPython.com team.

Matt O’Donnell‘s slides for “Behavior Driven Development with PyQT“.

A little bit of video of the intensely charming K Lars Lohn during his talk “The Well Tempered API”: Baroque Cooperative Multitasking

Here’s a great blog post from Jamie Phillips about his PyTennessee weekend.

I also made a Twitter list of some of the folks I heard/saw/met at PyTennessee. I’m sure it’s incomplete, though – please let me know if there are others who should be added!

Finally, I had a great time sharing my own story – and cookies! – Sunday afternoon.

Thanks to everybody who came out to listen, eat cookies, ask questions, and just generally be supportive. I enjoyed connecting with all of you!

For those who are curious, my next post to Coding with Knives will be a written version of my talk. Stay tuned!


LPTHW: Exercise 4: Variables and Names and Knives

And we’re back!

I had to take a couple weeks’ break from Coding with Knives and other creative projects because I’ve been dealing with some things in my personal life that have demanded just about all of my available energy. Awesome friends and deliberate self-care means I’m slowly getting back to a place of relative normalcy, but like all things, it’s a process… and there are bumps in the road, plenty of ’em. The key is to stay present and keep moving forward.

LPTHW’s exercise four introduces variables. In this exercise, we print simple phrases with variables inserted:


Zed also has us run Python from the terminal as a calculator, using variable names to do calculations.


Really just not a big deal at all.

So what else is not a big deal – at least, once you have the right stuff? Chopping things. That’s right, today I’m talking my namesake: cutting boards and knives.

First, cutting boards. What are you currently using? The countertop? Decorative glass? The plate you intend to serve your food on?

Over the years, I’ve seen all of the above – and each time, I shuddered. If YOU answered YES to any of the above, you should not feel ashamed or judged, but you should stop cutting things immediately, run to a store with a home goods department, and purchase a set of bamboo cutting boards.

I love bamboo because it’s renewable, cheap, sturdy, and easy to clean. Bamboo is also incredibly strong! I have been using the same suite of bamboo cutting boards for years with a very sharp chef’s knife and they are in fantastic condition. As an added bonus, I’ve found that bamboo does not seem to retain as valiantly as my solid wood cutting board the odorousness of things like garlic, onion, and ginger. This is helpful when you use these ingredients frequently.

Please note that while my cutting boards have seen all manner of plant matter, from kohlrabi to wakame, I do not handle raw meat in my kitchen (or ever) so I can’t speak to that experience.

Moving onto knives!

There’s a reason you see the same knife in all of my pictures:

Chiffonading collard greens

Chiffonading collard greens

Slicing into spaghetti squash

Slicing into spaghetti squash

Dicing roasted peppers

Dicing roasted peppers

This is because for 98% of tasks – cutting, slicing, dicing, and mincing – I use the same high-quality chef’s knife: a 185mm Super Series MAC SA-70 Utility Knife.

MAC Knife SA-70, Utility Knife, 185mm blade

A chef’s knife is by nature a multi-purpose tool, intended to help you accomplish a variety of tasks in the kitchen. It’s absolutely worth investing in one and paying to have a professional sharpen it. (Yes, I’m in the camp that suggests you don’t sharpen your own knives – deal.) I use MAC knives because once upon a time my friend Matt let me borrow his to prepare multi-course meals for two hundred people and I fell in love. I received my own as a gift in 2010 and have been using it almost daily since. Here’s a link to see the series and another to consider purchasing.

The MAC Knife is not inexpensive, and I’m convinced that anyone who cooks regularly should make the sacrifice of $100 or so for a decent tool. But if, for whatever reason, you are not able to spend that kind of money right now, I suggest a suitable alternative: the IKEA 365+ GNISTRA Vegetable Knife.

IKEA Gnistra Vegetable KnifeCompared to my svelte MAC knife, it is a bit heavier and clunkier, but make no mistake: this $15 bargain is a versatile knife that takes well to professional sharpening. And it’s better made than you might expect. The first time I had a professional sharpen my knives, he of course oohed and aahed over the MAC. But when I pulled out the IKEA knife, he admitted that it was much better quality than he anticipated.

So there you have it! Cutting boards and knives: essential. Make it happen!


LPTHW: Exercise 1: A good first program and roasting vegetables

Howdy folks. Today I’m writing to you from Dr. Bombay’s Underwater Tea Party (real name) where I just finished Exercise 1: A good first program.

To be honest, this is the fourth time I’ve worked through this exercise. I started in early 2012 and have had several stops and starts with LPTHW since. (But this time it’s stickin’.)

I was surprised when I actually made some mistakes! I realised I’d used the GUI to create a “Learn-Python” folder in my home directory but I hadn’t cd’ed into it before trying to run my “good first program”. But when I tried to cd into it, it wouldn’t let me! A-ha: “cd learn-python” won’t work, because Python is case-sensitive. Little slip-ups, but important to the learning process.


It feels weird to call ex1.py a “program” because all I’m doing is printing some lines. In the extra credit Zed has us comment out our working using #, but that’s really the extent of this chapter. I feel like a “program” should do something more exciting.

While we’re here, let’s chat about something similarly basic in the kitchen: roasting vegetables.* It’s easy and something you should feel empowered to do.


You can roast eggplant.


You can roast peppers.


You can even roast whole pans of stuff.

There are too many blog posts on the internet about roasting red peppers, heads of garlic, acorn squash, etc. I don’t intend to add to the bulk by making a simple concept fussy, or insisting that every vegetable deserves its own special treatment. Sure, you can do that if you’d like — and sometimes it’s appropriate. (Feel free to Google if you’re curious.) But for your average just-got-home-from-work, wanna-be-doing-something-else, need-vegetables eater, what I am about to explain is more than sufficient.

Roasting is not complicated. The most you’ll have to think about, really, is how long you want to roast a given food. By this I mean: tender foods (like eggplant, summer squash, very young fennel) will need less roasting time. Firmer foods (potatoes, winter squashes) will need a little more. If you’re just roasting a sheet pan of acorn squash, it’s going to take somewhat longer than a sheet of asparagus. Acorn squash takes about an hour. Asparagus takes about 25 minutes.

But here’s the thing! You can actually roast firmer foods with more tender ones, as long as you cut them into smaller pieces so they’ll cook faster. See the example above: those are fairly small potato pieces (they’re also an especially tender variety, hence my choice).

Cutting pieces of food uniformly is a basic cooking skill you should practice. Chefs don’t just do it because it looks good. It also ensures that your food cooks more evenly.

So! Roasting!

Here’s how I do it:

  1. Prep vegetables. (Clean, core, chop uniformly, etc.)
  2. Pre-heat oven to 400 degrees Fahrenheit.
  3. Gather all vegetables in your largest bowl. Drizzle generously with olive oil and sprinkle with salt and pepper.
  4. Spread the vegetables out onto a heavy-duty rimmed baking sheet (jellyroll pan).
    1. Note: you will not need to grease your pan because you have already generous coated all of the veggies with oil.
  5. Roast for 35 – 45 minutes total, removing them from the oven every 15 minutes to stir (or in the case of large pieces, turn over).
    1. I recommend using the thinnest metal spatula you have to scrape up all the roasty goodness.
    2. Larger pieces (like halves of peppers) can be negotiated with tongs.
    3. Tender foods will take less time.
    4. Firmer foods will take more. Adjust as needed.

I like to play around with a combination of olive oil, soy sauce, maple syrup, and dijon mustard for potato-and-onion-based roasts. Try it!

*We are not having a conversation about how eggplants and peppers are technically fruits.


Free libraries and free software

Today’s post doesn’t have anything to do with Learn Python The Hard Way, but I thought it was worth sharing all the same.

It’s about my love for free software.

Today I got an itch to make some beats. I’ve been spending a lot of time in the gym lately and I’m never without my MDR-V6s. I know, I know — it’s terribly uncool to be dancing on the treadmill with giant headphones on. (But they’re the best, y’all!) My gym mix is ever-changing and all about energy. This morning I enjoyed some new Trust, old Skrillex, way too much Nikki Minaj, a few songs I heard on RuPaul’s Drag Race, and always, my girl Speakerfoxxx. I love a heavy, driving beat to keep my moving forward and push myself to the limit. (Go girl, go girl, go girl.)

So, I thought — why not try my hand at it? It’s probably really hard, I thought — but I might have some fun.

Because I’m all about free software, all I had to do was open up my terminal and issue one simple command:

get-itOh, apt-get. You are so very delightful.

In about a minute, it appeared. My heart fluttered and my face broke out into an irrepressible smile. At the risk of sounding silly, I shared on Twitter: “gosh, i love free software. sudo apt-get install x gives me the same feeling as walking into the library as a kid: the world is mine.”


But that was exactly it. When I was a kid, the library was my favorite place. I exhausted the school’s collection and begged for trips to local branches. I was a little local library connoisseur, calling them by their full, proper names, and even noting the county system — yes, I was a nerdy kid!

I craved the promise that the library held: the world could be mine. Who knows what I might find in the stacks, between the pages?

That feeling rushed me when I installed LMMS. And it could have been anything. The other night, I couldn’t figure out how to do something, so I googled and found that I needed to install something very small. Though it didn’t work and I had to make another choice, it felt profoundly empowering to be able to even try. It’s thrilling to know that the work of some of the world’s brightest, most generous and principled developers is always out there for me to discover when I need it, just like the great works of literature that lined the shelves of my childhood libraries.

And LMMS? Well, I’m now the proud creator of a fifteen-second track that is actually pretty enjoyable, perfect for a first attempt.

Thanks, FOSS.


Bash for beginners / most common conversions

Recently I took off to Chattanooga to spend the day drinking coffee, playing cards, eating good food, and… learning Bash? Yep. Turns out craft coffeehouse Brash provides the perfect backdrop for making flashcards (henceforward known as bashcards) and gettin’ down the basics.

Featuring Android: Netrunner. I slay as Andromeda.

a few of the bashcards

I’d already worked through the Command Line Crash Course‘s terminal-based exercises, but I wanted some practice drilling. Thankfully my beau was willing on the long, slow drive back from Chattanooga. I didn’t have too much trouble, since I recognized many of the terms from my first attempt at Learning Python the Hard Way. Only xargs made me go argh! I definitely feel like I have a good enough handle on the basics to move on to the first chapter, so I’ll cover it in my next post.

For today’s cooking tip, I want to share a few cooking conversions and measurements that I use all the time. Like Bash above, just memorizing these will make your life so much easier. Say you’re making a salad dressing and it calls for all kinds of “tablespoon this”, “teaspoon that”… and you want to triple the recipe for a party. Are you really gonna stand there and carefully measure out 9 tablespoons of sticky tahini, when you could just do a generous 1/2 cup* and call it a day?

Here are the measurements I use all the time:

Dash = 1/16 of a teaspoon. This is nothin’. This like a dustin’. When you see a dash of something, consider that it’s basically an optional ingredient. …Just kidding. …sorta.

Pinch = 1/8 of a teaspoon. This is quite a bit more than nothin’, so don’t discount it. It’s okay to literally pinch a bit of the spice and toss it in (to your mise en place, remember?), but if you want to measure it out, that’s okay too. (If you’re working with cayenne or another pungent spice you might actually prefer to measure it.)

One teaspoon = 1/3 of a tablespoon.
Two teaspoons = 2/3s of a tablespoon.
Three teaspoons = 1 tablespoon.

It’s so helpful to know the above when you’re reading a recipe that says “5 teaspoons” (seriously, I hate that). If you see “5 teaspoons”, just think 1 tablespoon plus 2 teaspoons (or, if you’ve got some experience at eyeballing, a 2/3s-filled tablespoon).

Two tablespoons = 1/8 cup.
Four tablespoons = 1/4 cup.
Eight tablespoons = 1/2 cup.
Sixteen tablespoons = 1 cup.

When I see a recipe that calls for four tablespoons I know they need an editor. Quarter cup y’all!

Your 1/3 cup measure go missing? No big deal. Just measure out 1/4 cup plus 4 teaspoons (or 1/4 cup plus 1 tablespoon plus 1 teaspoon). Note: the internet believes that 1/3 cup equals five tablespoons. This is not true, but it works for most purposes. 1/3 cup is actually slightly over five tablespoons (hence the +1 tsp above).

Doubling a soup? Memorize these:

Pint = two cups
Quart = two pints (4 cups)
Gallon = four quarts (16 cups)

So there you have it: a beginner’s guide to some of the most common and helpful cooking conversions. While I highly recommend that you memorize the above, you can use Google if necessary. Just specify what you’re looking to convert (i.e., “How many ounces in a pint”) and Google will help you out.

googleGoogling: not just for learning Python!

*technically 9 tablespoons = 1/2 cup + 1 tablespoon, but I’ve been in this gig long enough that I’m lazy. I do “scant” for just under a given amount and “generous” for just over.