Jacob Padilla

Advanced Web Scraping With Python: Extract Data From Any Site

In this article, I cover how to get and manage cookies and custom headers, avoid TLS fingerprinting, recognize important HTTP headers to send in requests, and how to implement exponential-backoff HTTP request retrying. Read More...

Handling Tasks in Asyncio Like a Pro

There are so many ways to handle Asyncio tasks that it isn't always clear which is best for a given scenario. In this article, I first go over the basics of a task object and then talk about all of the various ways to handle them and the pros and cons of each. Read More...

Hidden Gems in Chrome DevTools: 9 Tips and Tricks

Dive into Chrome DevTools' lesser-known features, from CSS insights and code coverage to performance optimization, network settings, and request introspection. Chrome offers a tool for every type of developer. Read More...

The Most Underused CSS Media Queries: Hover & Any-Hover

Besides width-based media queries, the hover media queries are by far the most useful. In this article, I will go over how they work and show you two extremely useful ways that I use them to make my website more user-friendly! Read More...

How to Set Up Free Monitoring and Alerting for Your Website

Learn how to deploy Uptime Kuma on Google Cloud's free Virtual Machines with Docker, monitor websites, and configure instant Slack alerts for site issues. Read More...

A Deep Dive Into Python's functools.wraps Decorator

Wrapping one object over another can result in the loss of valuable metadata; that's why using the wraps decorator from the functool module is crucial when developing your own Python decorators. In this article, explore the intricacies of functools.wraps and how it works under the hood. Read More...

Efficiently Debug Your Code With Git Bisect

Have you ever been coding along, only to realize there's a bug in your code, and you can't determine what's causing it!? Figuring out exactly what the issue is can be a huge pain. If only there were a way to quickly find the commit where the problem started... Then, you could look at the code you committed and see exactly what's causing the bug! Read More...

Create a Secure Flask Login System Using Argon2 Hashing

Create a Flask-based user authentication system with this hands-on guide. Learn how to use Argon2 hashing for password security, store user data in an SQLite database, and manage sessions effectively with signed cookies. Follow along with a fully working example website on GitHub. Read More...

Simple Responsive Text Sizing in CSS

Using the min, max, and clamp functions in CSS is a great way to implement fluid typography that works on all screen sizes! In this article, I discuss the use cases for each function and how they can circumvent the typical challenges associated with other responsive font sizing techniques. Read More...

Python Custom Exceptions: How to Create and Organize Them

Python has many built-in exceptions, such as ValueError, TypeError, IndexError, and about 64 others, but they are all very general. Many times, it can be much better to make tailored exceptions for specific scenarios in your projects. Read More...

A Step-By-Step Guide To Web Scraping

Web scraping might seem daunting initially, but there's a method to the madness. By understanding the underlying structure of websites and how APIs work, you can boil scraping most websites down into just a few simple steps! In this article, I've taken the mental model I use when scraping data from websites and laid it out in a step-by-step guide. Read More...

Time Travel with Git: How to View, Undo, and Go Back To Commits

If you want to view, go back, or remove an old commit, there are three Git commands that are essential to know. First, I’ll cover how to easily view an old commit with the Git checkout command, then how to gracefully go back to an old commit while maintaining the current branch history with Git revert, and finally, the different ways to use the Git reset command in Git, which deletes branch history. Read More...