Teddy Williams
Welcome to Verdant Fox, my green-fox-themed portfolio app! My name is Theodore Fox 🦊 Williams, but you can call me Teddy. First up on this page, you can find my blog. In it, I talk about programming concepts aimed at beginner and intermediate developers. Then, I put together a couple of interactive projects I created while learning new programming skills.
Below the project descriptions, you can find some of the more important (in my opinion) skills I learned while studying software development and that I use every day in my career as a software developer. And finally, I describe myself and include updates on my software development studies and career. Thanks for taking a look. Enjoy! 🎉
“You can always edit a bad page. You can’t edit a blank page.”
― Jodi Picoult
“You can always edit a bad page.
You can’t edit a blank page.”
― Jodi Picoult
My blog
I'm pretty new to blogging, but I like the idea of it, so here it goes. Here are some of my most recent blog posts. I plan to write posts somewhat regularly about programming topics related to things I've learned and found interesting -- a mish-mash of tutorials and discussions of tools and concepts that I've learned in my work and personal projects that I think could be valuable to someone else interested in learning about those topics. The intended audience here is generally novice to intermediate programmers. To see a list of -- and to search on -- all of my blog posts click the button below. 👇
Go to BlogRecent posts...
Concurrent Python programming with async, threading, and multiprocessing
February 07, 2024 / 48 min read / 9,079 , 3 , 4
One of the best ways to achieve significant speed improvements in Python code is through concurrency: doing several tasks simultaneously. In this article, I describe concurrency in Python and give some examples of running Python code concurrently with “async” functions, “threading,” and “multiprocessing.”
How to hot reload FastAPI and Flask apps on HTML, CSS, and Javascript changes
November 16, 2023 / 5 min read / 7,725 , 1 , 1
In this tutorial, I'll show you how to automatically hot-reload your FastAPI and Flask projects that use template engines like Jinja with web servers like uvicorn or gunicorn. After reading, you will be able to automatically restart your server and refresh your browser when Python, HTML, CSS, and other files change—no manual intervention required.
Better parameterized pytests with dataclasses
September 14, 2023 / 23 min read / 5,757 , 7 , 0
Parameterization is a powerful tool in pytest (the most popular Python testing framework). It allows us to write a single, simple test that can dynamically expand to become many similar tests with minor input differences. In this blog post, I will describe how to write parameterized pytests and why they are such a powerful tool. And then, I'll show you how to re-write parameterized tests more effectively using dataclasses.
“Whatever good things we build end up building us.”
― Jim Rohn
“Whatever good things we build
end up building us.”
― Jim Rohn
Projects
This section highlights a few personal projects I've created that I thought were fun or interesting. I've broken up the projects into a few broad categories.
Finance
Check out my finance-related web pages to get your finances in order. 💸 With the budget app, you can create and edit budgets, complete with interactive graphs to get a sense of where your money is going so you can make changes as necessary. With the loan calculator, you can calculate loan payments and interest paid throughout a loan. With the compound interest calculator, you can visualize how your investments can grow over time. With the net worth calculator, you can find out your net worth, and compare how you match up with others in your demographic.
Explore your finances with these interactive apps and calculators. 📊 Share your findings with your family and friends. Bookmark pages to come back later to see how your finances have changed over time.
Check out Finance!Games
Games are fun! 🎮🎲 They are fun to build and fun to play. They can be an exciting conduit to learning new programming languages or new programming techniques. Here are some of the games I've built while learning to program that have allowed me to learn interesting new concepts.
In this section, I have 3 games for display. First, we have Twisted Towers, a tower defense game built with Pygame, a python library. Build towers to fend off the horde of enemies trying to take your castle. 🏰 Then, there's Connect 4, the classic board game where you try to connect 4 of your chips in a row. 🔴🔵🔴🔵 You can play human-vs-human, human-vs-AI, or AI-vs-AI. Then, Batty's Moth Hunt is a game built with MIT's Scratch, a learning language. Play as a bat, hunting down moths in the night while running from the scary owl. 🦇🦉 Good luck! More games coming soon!
Check out Games!Miscellaneous Apps
This section highlights some miscellaneous applications that don't fit nicely into other categories.
In this section, so far I just have one GUI application to highlight. The File Renamer GUI is built with the Kivy GUI framework. It's a pretty simple app that takes in a few inputs (a prefix, a list of file extensions, and a folder) which it uses to rename all affected files (prefix_1.ext, prefix_2.ext, ...). 🗃 More to come in this section in the future.
Check out Miscellaneous Apps!"Learning how to learn is life's most important skill."
-Tony Buzan
"Learning how to learn is life's most important skill."
-Tony Buzan
"Growth is the only evidence of life."
-John Henry Newman
"Growth is the only evidence of life."
-John Henry Newman
About
Theodore Fox Williams
Software Developer
Python | Front-End | Back-End
Hello! I go by Teddy and I live in sunny Denver, Colorado with my girlfriend, 2 cats, and a bunch of fish and house plants. 👩🐱😸🐠🐟🌱🌿🌴 When I'm not coding or blogging about coding, I love to travel, SCUBA dive, hike, swing dance, play soccer, read, snuggle with my cats, work on my home aquariums, and play games (board, video, lawn, you name it). I love plants and animal wildlife, especially my namesake -- 🦊 foxes -- if you couldn't tell by now. 😉 But this is a coding portfolio, so what about my coding life?
I love to code! 🙌 Before I was a software developer, I was a research scientist and studied diseases like cancer, HIV, and diabetes. Science is fascinating to me, but I wanted to try my hand at programming. I took a free coding course in 2017 and I was hooked. So I decided to become a software developer! I taught myself with the abundance of resources that exist online. If you are interested in the details of how I made the transition into coding, check out my blog post "How I went from no coding experience to coding for a living in one year (a guide)". I continue to learn new things about software development every day, and I am loving every minute of it. My professional software development career began a year later in 2018. Currently, I am a Senior Software Development Engineer for ShopKick. I work primarily on the back-end, creating and maintaining APIs, supporting tools, and web apps.
My primary languages of focus right now are Python and Bash for backend development and scripting, and HTML, CSS, and Javascript for front-end web development. I enjoy problem-solving and figuring out how I can use new techniques and technologies to build useful applications. I'm also really into building applications that use best coding practices, supported by proper version control practices, continuous integration, and automated testing.
I love learning and I love using what I've learned in my everyday coding practices. I spend a lot of time listening to coding podcasts, watching coding YouTube videos, and reading coding blog posts about new technologies that I can then try to fit into my own projects. And then -- I use what I've learned to write awesome code, both at work and in personal projects. I really enjoy collaborating with others. Code reviews are awesome! 🎉 I love learning how others code and how they think my code can be improved. I enjoy teaching new coding concepts to those interested. At my work, we have weekly code walkthroughs where one of us (frequently myself) will share how some new bit of coding tech fits into our work. I've benefited from some great mentors in my life and as such I'm looking to mentor individuals new to programming. Please feel free to reach out to me if you'd like to talk about a project, a problem, getting started in software development, or anything else on your mind. 💬