Joe Attardi

Blog

More Articles

Coming soon: "Modern CSS, 2nd Edition"

An announcement about my next book from Apress.

4 years of "Modern CSS"

Looking back on my journey as a published author, from Apress to O'Reilly.

Beyond breakpoints: Leveraging user preference media queries in CSS

Learn how to use media queries to learn about certain device settings.

Using git bisect, the detective tool for debugging

Learn about git bisect, which helps you find when a bug was introduced by performing a binary search on the commit history.

Steps for installing a local AI copilot in Visual Studio Code

LLMs and AI coding assistants are all the rage. But what if you can't use tools like ChatGPT or GItHub Copilot at work? What if you have privacy concerns? For these situations, you can run LLMs locally on your computer.

Fun with arrays

In this article, we'll look at some weird quirks with JavaScript arrays to learn a little more about how they work under the hood.

Are Computer Science degrees still relevant?

The debate rages on about Computer Science degrees. Are they really a requirement for a career in software development? I share my experience and thoughts.

Understanding color contrast for accessibility

There are many aspects of accessibility that you need to keep in mind, one of which is color contrast. Proper color contrast not only looks good, but it's critical for users with low vision.

Understanding error handling in Promise chains

Learn about the nuances of handling errors in a chain of Promises.

Promise Tips: When do I need to create my own Promise instance?

Most of the time, you won't need to create a new Promise by calling the constructor - though there are some situations where it might be needed.

All about this in JavaScript

The this keyword in JavaScript can sometimes be a source of confusion. Let's look at what value it has in various situations.

In defense of the humble console.log

The debugger is powerful, but sometimes a console.log is still a useful debugging tool.