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 Blog

Recent posts...

End-to-end website testing with Playwright


July 20, 2022 / 26 min read / 902 , 2 , 0


Playwright logo

We all know testing our code is important, right? Automated tests can give peace of mind that our code is working as expected and that it continues to work as expected, even as it is refactored. Python has the pytest framework that offers great tools for testing our backend python code. You can check out my blog post, 9 pytest tips and tricks to take your tests to the next level, to get yourself jump-started testing in python. And javascript has several libraries to test front-end code. But in website testing, how can we write automated tests to ensure that our back-end code (be it python or something else) is working with our front-end code (javascript, HTML, and CSS)?

Introducing Playwright, a fast, easy-to-use, and powerful end-to-end browser automation framework. Similar to the Selenium framework, the Playwright framework has tools that allow us to write tests and scripts that act similar to an actual, human website user. And Playwright has API endpoints in javascript, java, .NET, and python! Sound useful? Read on as we use Playwright with python and pytest to write scripts and end-to-end tests for our Connect 4 game web page.

Read more...

How I built a Connect 4 AI


May 28, 2022 / 36 min read / 520 , 1 , 0


connect 4 with robot

I wrote the board game Connect 4 for my website! ๐Ÿ˜€ Here's a link to it if you want to check it out. The game can be played against another human or an AI opponent. It can even be played AI-vs-AI, which I find kind of fun to watch -- and which made testing the AI out much easier and more scientific (more on that later). This is the story of how I wrote the AI for the game intuitively, through some trial and error. This post was updated with a significantly enhanced AI version 6 a couple days after the initial release.

Read more...

How to use git pre-commit hooks, the hard way and the easy way


September 15, 2021 / 12 min read / 32647 , 21 , 0


pre-commit-with-text

If you've heard of git pre-commit hooks, but you aren't sure what they are or how to get started with them, you are in luck! In this guide, we'll talk about what git pre-commit hooks are and why you should consider using them. We'll then talk about how to write your own git pre-commit hooks, and then we'll talk about the pre-commit framework which can make setting up git pre-commit hooks easy.

Read more...

โ€œ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

Theodore 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. I plan to make a blog post about that journey and link to it here. 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. ๐Ÿ’ฌ