Some AI agents can execute code or connect to services. If you're not careful, you could be the victim of prompt injection and RCE attacks.| www.aleksandrhovhannisyan.com
Notes to self and short tutorials.| www.aleksandrhovhannisyan.com
Generate a sourcemap and add it to Eleventy's global data.| www.aleksandrhovhannisyan.com
Dev tutorials, thoughts on software development, and the occasional essay.| www.aleksandrhovhannisyan.com
Finite state machines (FSMs) are a useful tool for representing stateful entities in code. In this tutorial, we'll learn how to implement the finite state design pattern in C++.| www.aleksandrhovhannisyan.com
A very serious epitaph that is meant to be taken literally.| Aleksandr Hovhannisyan
Improperly routed cables can cause the Framework 13 bezel to pop back out.| Aleksandr Hovhannisyan
Safely wipe a drive using a bootable USB and diskpart.| Aleksandr Hovhannisyan
Back up your entire WSL distribution and import it on a different machine.| Aleksandr Hovhannisyan
A reference for downloading, splitting, and optimizing videos with CLI tools.| Aleksandr Hovhannisyan
Bash aliases I use to speed up my workflows.| Aleksandr Hovhannisyan
Move files between Windows and WSL using the wslpath command-line utility.| Aleksandr Hovhannisyan
Programmatically read your machine's IPv4 address on Linux.| www.aleksandrhovhannisyan.com
Settings to disable, apps to remove, and steps to take to completely purge OneDrive.| www.aleksandrhovhannisyan.com
Learn how to use the show(), showModal(), and close() methods to toggle an HTML dialog's visibility.| Aleksandr Hovhannisyan
There's a challenge going around where folks tag each other with questions about their blogs. Here are my responses.| www.aleksandrhovhannisyan.com
Why does JavaScript's parseInt treat keycap emoji as integers? Is it a bug, a feature, or perhaps both?| www.aleksandrhovhannisyan.com
Learn how to add line numbers, file names, and copy-to-clipboard buttons to your code blocks.| Aleksandr Hovhannisyan
Looking back on everything I learned and tried in 2024.| www.aleksandrhovhannisyan.com
Poorly designed API routes and an account creation loophole cause route collisions on Twitter.| www.aleksandrhovhannisyan.com
A look at some best practices for creating performant game animations in JavaScript.| www.aleksandrhovhannisyan.com
Use this trick with CSS Grid to prevent layout shifts when swapping text in status indicators.| www.aleksandrhovhannisyan.com
You might not need another CSS class. Use HTML attributes for state and style those states with the CSS attribute selector.| Aleksandr Hovhannisyan
After some recent incidents involving Netlify and Vercel, I decided to play it safe and move my website and another side project to Cloudflare.| Aleksandr Hovhannisyan
Eleventy 3.0 adds a new API to optimize images anywhere on your site, without shortcodes.| www.aleksandrhovhannisyan.com
The one where I create my first generative artwork and still refuse to use any color on my site.| www.aleksandrhovhannisyan.com
Set up ESLint to format on save in two popular code editors: VS Code and neovim.| www.aleksandrhovhannisyan.com
In this deep dive, you'll learn about the Unicode character set and how it's encoded and decoded with UTF.| www.aleksandrhovhannisyan.com
In Eleventy 3.0, virtual templates enable plugin authors to publish and share dynamic templates.| www.aleksandrhovhannisyan.com
Learn how to use three CSS properties to override font metrics and minimize layout shifts during font load.| www.aleksandrhovhannisyan.com
Subtitles can capture essential dialogue and sounds, but what about the quiet parts?| www.aleksandrhovhannisyan.com
Follow along with the examples in this in-depth guide to learn how to draw SVG icons and simple shapes by hand.| Aleksandr Hovhannisyan
Add a copy-to-clipboard button to your Jekyll blog with a simple include and a few lines of JavaScript.| Aleksandr Hovhannisyan
A post-mortem of my first attempt at upgrading a laptop.| www.aleksandrhovhannisyan.com
The irrational fear of mutation in programming can sometimes do more harm than good.| www.aleksandrhovhannisyan.com
Reflecting on an unusually eventful year in my life.| www.aleksandrhovhannisyan.com
Learn how to implement a progressively enhanced theme switch component using HTML, CSS, and JavaScript.| www.aleksandrhovhannisyan.com
After nearly two decades of living in the United States, I'm proud to say that I'm now officially a U.S. citizen.| www.aleksandrhovhannisyan.com
With eleventy-plugin-code-demo, you can easily add interactive HTML, CSS, and JavaScript code demos to your Eleventy site using Markdown.| www.aleksandrhovhannisyan.com
In JavaScript, class fields allow you to define properties on a class instance outside the constructor. In the case of function properties, it's important to understand how fields differ from methods and their potential tradeoffs.| www.aleksandrhovhannisyan.com
Learn how to implement a simple algorithm that listens for a specific sequence of keystrokes in JavaScript, with an optional delay between keys.| www.aleksandrhovhannisyan.com
The React Context API is normally used to avoid prop drilling. But it can also be used to detect if a component is nested within another instance of itself or as a child of a particular component.| www.aleksandrhovhannisyan.com
Learn how event capturing, targeting, and bubbling work in JavaScript; how to prevent an event's default behavior; how to stop event propagation; and more.| www.aleksandrhovhannisyan.com
When using the font-face local() function to load fonts installed on a user's system, double-check that sure you're requesting the right font family.| www.aleksandrhovhannisyan.com
Learn how to use JavaScript's FormData, URLSearchParams, and URL constructors to serialize an HTML form's data into a well-formatted and encoded URL.| www.aleksandrhovhannisyan.com
Learn why HTTP cookies are needed, how they're used on the client and server side, where they're stored, and how they impact security and privacy on the web.| www.aleksandrhovhannisyan.com
Documentation is one of those things that you don't appreciate until you have to work without it. Good documentation should go beyond the code itself and also cover your team, the product, your work process, areas of specialization, and many other key areas.| www.aleksandrhovhannisyan.com
The longer you leave tech debt unresolved, the more problems it will create for your team, until one day it becomes unbearable.| www.aleksandrhovhannisyan.com
Using the properties of congruence modulo, Alice and Bob can generate a shared private key and communicate publicly, while Eve will struggle to decipher their messages.| www.aleksandrhovhannisyan.com
Registration systems often require that passwords contain certain characters. But this is counterproductive and encourages bad habits that can weaken users' passwords.| www.aleksandrhovhannisyan.com
Twitter can be a great way to network with other people and learn new things if it's used in moderation. But there's the rub.| www.aleksandrhovhannisyan.com
Learn how to build an accessible image carousel that supports multiple input modes and is progressively enhanced with CSS scroll snap and JavaScript.| www.aleksandrhovhannisyan.com
By default, WSL 2 may reserve a significant chunk of your host RAM. Thankfully, we can limit its memory usage with a .wslconfig file.| www.aleksandrhovhannisyan.com
When a pair of quotes makes a world of difference.| www.aleksandrhovhannisyan.com
Expose information about your 11ty site at build time to all templates using global data. Among other things, this can be used to show your site's build time, package version, and the latest Git commit hash.| www.aleksandrhovhannisyan.com
One of my favorite things about 11ty is its flexibility and how easily you can customize your chosen template language without having to leave the familiar comfort of the Node ecosystem.| www.aleksandrhovhannisyan.com
Of all the CSS units, rems are the most accessible for font sizing, allowing you to scale text responsively when users change their preferred font size settings.| www.aleksandrhovhannisyan.com
Learn how to use Chrome developer tools to simulate loading a page in a different locale.| www.aleksandrhovhannisyan.com
Some sites gate their content by hiding it with CSS. Whether you open the site incognito or normally, the full content appears to be beyond reach. But it's not—anyone can swing open the gate.| www.aleksandrhovhannisyan.com
Self-hosting fonts can improve your site's performance while also respecting your users' privacy in the era of the GDPR. Learn how to download, subset, and optimize any Google Font for your projects.| www.aleksandrhovhannisyan.com
Ever wanted to nest Markdown in HTML? In 11ty, you can easily do this with paired shortcodes and a custom Markdown library parser.| www.aleksandrhovhannisyan.com
If you want to use a standalone HTML input to accept user input and store it locally in your app's state, you can use the checkValidity, reportValidity, and setCustomValidity methods to validate the user's input and provide feedback.| www.aleksandrhovhannisyan.com
Fluid typography allows each font size in a modular scale to vary responsively between a min and max. Learn the math behind fluid typography and how to programmatically generate a fluid type scale with CSS clamp and Sass.| www.aleksandrhovhannisyan.com
CSS has come a long way since the early days of web development. Learn how to write better CSS using modern strategies like the :is and :where pseudo-class functions, logical properties and values, clamp, gaps, and aspect-ratio.| www.aleksandrhovhannisyan.com
Load-more buttons are more accessible than infinite scrolling, but they also steal keyboard focus when new content loads in. We can fix this problem by manually focusing the first newly inserted result.| www.aleksandrhovhannisyan.com
Rather than using static font-face declarations for web fonts, you can take advantage of global data in 11ty to create a single source of truth for fonts and reuse those values in your templates and CSS.| www.aleksandrhovhannisyan.com
While imagery can enrich your content, it can also slow down your site if it's not used responsibly. Learn how to use the official 11ty image plugin to create optimized and responsive images.| www.aleksandrhovhannisyan.com
Comment systems can be a pain to set up, but they don't have to be. Learn how to use the GitHub Issues API to create a custom comment system powered by Netlify functions.| www.aleksandrhovhannisyan.com
React's useState hook works well for managing simple state. But once your component starts to grow, useReducer may be a better fit for managing state.| www.aleksandrhovhannisyan.com
While NFTs are being hailed as the future of digital ownership, they're also the source of many problems. NFTs are artificially scarce, make it easier to commit fraud, undermine the intellectual property rights of content creators, and encourage consumptive mining practices.| www.aleksandrhovhannisyan.com
Currently, 11ty doesn't allow you to pass object arguments to shortcodes in Liquid. As a temporary workaround, you can assemble and parse a JSON string to pass along to the shortcode as an argument.| www.aleksandrhovhannisyan.com
Not all static imports are immediately needed, and unnecessary imports can be costly. With React.lazy, you can dynamically import components at run time to reduce the size of your static bundle.| www.aleksandrhovhannisyan.com
Tired of listing all of your Netlify redirects by hand? Generate them programmatically with a bit of 11ty templating magic!| www.aleksandrhovhannisyan.com
Often, you need to wait for multiple independent async tasks to finish before resuming where your code left off. Learn how to use JavaScript's Promise.all method to await multiple async operations, such as batch file uploads.| www.aleksandrhovhannisyan.com
In TypeScript, type predicates allow you to narrow down an abstract type to a more concrete type with a simple assertion. Together with derived types, they can greatly reduce repetition in your code.| www.aleksandrhovhannisyan.com
Once you get used to thinking in rems for font sizing, you'll find that it's easy to express familiar powers of two. But for other values, you may find it helpful to use the 62.5% font size trick.| www.aleksandrhovhannisyan.com
In typography, the ideal line height for text depends on a variety of factors, including font size, line length, and font family.| www.aleksandrhovhannisyan.com
An in-depth review of 11ty, an extensible static site generator written in Node that supports a variety of template languages.| www.aleksandrhovhannisyan.com
If an iframe re-renders in React, it can interfere with back navigation in your browser. The solution? Force the iframe to unmount with a unique key.| www.aleksandrhovhannisyan.com
It can be tempting to lump unrelated code changes into a single commit, but this makes it difficult to debug and time travel in Git. Prefer to write atomic commits that have a single responsibility.| www.aleksandrhovhannisyan.com
Line endings can differ from one OS to another. Learn the history behind CRLF and LF line endings and how to enforce line endings in Git.| www.aleksandrhovhannisyan.com
Writing is likely one of the last skills you associate with software development. But it plays a key role in everything that we do and can help you build a more successful career.| www.aleksandrhovhannisyan.com
When you set a width and height on image tags, browsers are able to reserve the correct amount of space ahead of time to minimize layout shifts as the images are downloaded.| www.aleksandrhovhannisyan.com
Reading books isn't something that everyone enjoys. But if you used to like reading but can no longer get past the first chapter of a new book, there may be a few reasons why.| www.aleksandrhovhannisyan.com
On paper, Tailwind CSS sounds like a great idea. In reality, it suffers from the same problems that it tries to solve.| www.aleksandrhovhannisyan.com
Margins are commonly used to space paragraphs in an article, but CSS Grid offers a more intuitive alternative that defines the spacing at the layout level.| www.aleksandrhovhannisyan.com
If it were up to me, things wouldn't end this way. We had some great times together, but now it's time to say goodbye.| www.aleksandrhovhannisyan.com
You've scored 100 on Lighthouse's accessibility audit. But is your site actually accessible, or have you overlooked more subtle accessibility failures?| www.aleksandrhovhannisyan.com
Suppose an async function returns a boolean. What happens if you check the return value without awaiting it?| www.aleksandrhovhannisyan.com
Sometimes, a React component needs to allow users to render a custom tag. Here's how you can pass dynamic tag names as props.| www.aleksandrhovhannisyan.com
If you ever find yourself in a sticky situation with git, don't panic. Here are some simple ways you can undo changes in git and clean up your commit history.| www.aleksandrhovhannisyan.com
Some big brands have a slow page load speed, but they still rank well on Google. So does web performance even matter?| www.aleksandrhovhannisyan.com
Learn how to give any element an aspect ratio in CSS, using the modern aspect-ratio property or a trick with percentage padding.| www.aleksandrhovhannisyan.com
After a one-year hiatius from Sekiro, I returned to face the final boss—and, through painful persistence, triumphed.| www.aleksandrhovhannisyan.com
Promises are a powerful tool for writing asynchronous code in JavaScript. Here are a few interesting use cases.| www.aleksandrhovhannisyan.com
Images make the web a more beautiful place, but this sometimes comes at a price. Learn how to optimize images for the web using the WebP image format and lazy loading with JavaScript.| www.aleksandrhovhannisyan.com
Leetcode is a polarizing topic when it comes to technical interviews. But what exactly is it? And does it deserve your attention?| www.aleksandrhovhannisyan.com
The Ant Design UI library lets you sort tables by one or more columns, using a sorter prop. But the syntax can get quite repetitive. Let's fix that!| www.aleksandrhovhannisyan.com
Accessibility is a hot topic, but it's not always executed correctly. Learn how to use semantic HTML to create an accessible user experience on the web.| www.aleksandrhovhannisyan.com
Learn how to easily test localhost on mobile using ngrok, without deploying a single line of code.| www.aleksandrhovhannisyan.com