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...

Better parameterized pytests with dataclasses


September 14, 2023 / 23 min read / 113 views, 1 likes, 0 comments


pytest_dataclasses

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.

Read more...

Python web scraping with Playwright


December 14, 2022 / 22 min read / 2,397 views, 1 likes, 0 comments


01_playwright_webscraping

Web scraping is the concept of programmatically collecting data from a website. This article will discuss using Playwright for python web scraping. The most popular web-scraping packages for python are requests and Beautiful Soup used together. This combination is potent and straightforward to use for most web pages. However, the use case has limitations because the combination relies on making server requests and reading the static HTML returned. It can be challenging to scrape single-page applications (SPAs) or websites where the objects to scrape are only available after some javascript interactions. Playwright circumvents these limitations by interacting with web pages like humans to find the data that needs scraping.

Read more...

Cookies with the Flask web framework


October 18, 2022 / 12 min read / 1,011 views, 1 likes, 0 comments


flask plus cookies

Cookies! ๐Ÿช๐Ÿช Tasty snack or valuable web development tool? ๐Ÿคทโ€โ™‚๏ธ For our context today, cookies are small pieces of data sent from the server to the client. The client's browser stores cookies locally and then sends the cookies back to the server with every request. Cookies are used for a variety of purposes, including session management (who's logged in?), keeping track of user settings (use dark mode?), and tracking user behavior (website analytics, ad targeting). In this tutorial, we'll talk about how to manage cookies with the Flask web framework. We'll go over setting, updating, retrieving, and deleting cookies in Flask routes.

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. 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. ๐Ÿ’ฌ