Aleksandr HovhannisyanDev tutorials, thoughts on software development, and the occasional essay.2024-03-15T00:00:00.000Zhttps://www.aleksandrhovhannisyan.com/Aleksandr Hovhannisyanaleksandrhovhannisyan@gmail.comhttps://www.aleksandrhovhannisyan.com/blog/laptop-upgrade/My First DIY Laptop Upgrade2024-02-24T00:00:00.000Z2024-02-24T00:00:00.000ZA post-mortem of my first attempt at upgrading a laptop.https://www.aleksandrhovhannisyan.com/blog/dont-fear-mutation/(Don't Fear) Mutation2024-02-10T00:00:00.000Z2024-02-10T00:00:00.000ZThe irrational fear of mutation in programming can sometimes do more harm than good.https://www.aleksandrhovhannisyan.com/blog/2023-in-review/2023 in Review2024-01-13T00:00:00.000Z2024-01-13T00:00:00.000ZReflecting on an unusually eventful year in my life.https://www.aleksandrhovhannisyan.com/blog/the-perfect-theme-switch/The Perfect Theme Switch Component2023-11-21T00:00:00.000Z2023-11-21T00:00:00.000ZLearn how to implement a progressively enhanced theme switch component using HTML, CSS, and JavaScript.https://www.aleksandrhovhannisyan.com/blog/naturalized/Naturalized2023-08-25T00:00:00.000Z2023-08-25T00:00:00.000ZAfter nearly two decades of living in the United States, I'm proud to say that I'm now officially a U.S. citizen.https://www.aleksandrhovhannisyan.com/blog/eleventy-code-demos/Interactive HTML Code Demos in Eleventy2023-07-30T00:00:00.000Z2023-07-30T00:00:00.000ZWith eleventy-plugin-code-demo, you can easily add interactive HTML, CSS, and JavaScript code demos to your Eleventy site using Markdown.https://www.aleksandrhovhannisyan.com/blog/javascript-fields-vs-methods/Class Fields vs. Methods in JavaScript2023-07-16T00:00:00.000Z2023-07-16T00:00:00.000ZIn 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.https://www.aleksandrhovhannisyan.com/blog/key-sequences-in-javascript/Listening for Key Sequences in JavaScript2023-05-12T00:00:00.000Z2023-05-12T00:00:00.000ZLearn how to implement a simple algorithm that listens for a specific sequence of keystrokes in JavaScript, with an optional delay between keys.https://www.aleksandrhovhannisyan.com/blog/react-context-nested-components/Detecting Nested Components in React with the Context API2023-02-05T00:00:00.000Z2023-02-05T00:00:00.000ZThe 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.https://www.aleksandrhovhannisyan.com/blog/interactive-guide-to-javascript-events/An Interactive Guide to JavaScript Events2022-12-10T00:00:00.000Z2023-02-04T00:00:00.000ZLearn how event capturing, targeting, and bubbling work in JavaScript; how to prevent an event's default behavior; how to stop event propagation; and more.https://www.aleksandrhovhannisyan.com/blog/font-face-faux-pas/A Font-Face Faux Pas2022-11-26T00:00:00.000Z2022-11-26T00:00:00.000ZWhen 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.https://www.aleksandrhovhannisyan.com/blog/writing-better-documentation/Writing Better Documentation2022-11-05T00:00:00.000Z2022-11-05T00:00:00.000ZDocumentation 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.https://www.aleksandrhovhannisyan.com/blog/serializing-html-form-data-with-javascript/Serializing HTML Form Data with JavaScript2022-10-22T00:00:00.000Z2022-10-22T00:00:00.000ZLearn how to use JavaScript's FormData, URLSearchParams, and URL constructors to serialize an HTML form's data into a well-formatted and encoded URL.https://www.aleksandrhovhannisyan.com/blog/the-cost-of-tech-debt/The Cost of Tech Debt2022-09-27T00:00:00.000Z2022-09-27T00:00:00.000ZThe longer you leave tech debt unresolved, the more problems it will create for your team, until one day it becomes unbearable.https://www.aleksandrhovhannisyan.com/blog/11ty-serverless-object-permalinks/11ty Serverless and Object Permalinks: Hybrid Rendering2022-09-05T00:00:00.000Z2022-09-05T00:00:00.000ZLearn how to reuse a single source template in 11ty Serverless to generate both a static and server-rendered page.https://www.aleksandrhovhannisyan.com/blog/modular-arithmetic-and-diffie-hellman/Modular Arithmetic and the Diffie-Hellman Algorithm2022-09-03T00:00:00.000Z2022-12-01T00:00:00.000ZUsing 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.https://www.aleksandrhovhannisyan.com/blog/password-composition-rules/Password Composition Rules Are Counter­productive2022-08-28T00:00:00.000Z2022-09-01T00:00:00.000ZRegistration systems often require that passwords contain certain characters. But this is counterproductive and encourages bad habits that can weaken users' passwords.https://www.aleksandrhovhannisyan.com/blog/tech-twitter-burnout/Tech Twitter Burnout2022-07-10T00:00:00.000Z2022-07-10T00:00:00.000ZTwitter 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.https://www.aleksandrhovhannisyan.com/blog/image-carousel-tutorial/Creating an Accessible Image Carousel2022-06-21T00:00:00.000Z2022-10-12T00:00:00.000ZLearn how to build an accessible image carousel that supports multiple input modes and is progressively enhanced with CSS scroll snap and JavaScript.https://www.aleksandrhovhannisyan.com/blog/limiting-memory-usage-in-wsl-2/Limiting Memory Usage in WSL22022-06-05T00:00:00.000Z2022-08-07T00:00:00.000ZBy default, WSL 2 may reserve a significant chunk of your host RAM. Thankfully, we can limit its memory usage with a .wslconfig file.https://www.aleksandrhovhannisyan.com/blog/a-typeof-typo/A typeof Typo2022-06-04T00:00:00.000Z2022-06-04T00:00:00.000ZWhen a pair of quotes makes a world of difference.https://www.aleksandrhovhannisyan.com/blog/eleventy-build-info/Add Build Info to an 11ty Site2022-05-31T00:00:00.000Z2022-07-21T00:00:00.000ZExpose 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.https://www.aleksandrhovhannisyan.com/blog/16-shades-of-gray/16 Shades of Gray2022-05-31T00:00:00.000Z2024-01-12T00:00:00.000ZThe one where I create my first generative artwork and still refuse to use any color on my site.https://www.aleksandrhovhannisyan.com/blog/useful-11ty-filters/A Set of Useful 11ty Filters2022-05-15T00:00:00.000Z2022-05-15T00:00:00.000ZOne 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.https://www.aleksandrhovhannisyan.com/blog/use-rems-for-font-size/Use Rems for Font Size to Respect User Preferences2022-05-10T00:00:00.000Z2023-06-14T00:00:00.000ZOf 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.https://www.aleksandrhovhannisyan.com/blog/caesar-cipher/Implementing the Caesar Cipher in JavaScript2022-05-07T00:00:00.000Z2022-05-07T00:00:00.000ZThe Caesar cipher is named after Roman emperor Julius Caesar, who used the technique to encrypt his military and political communication. Learn how to implement both a simple and keyed Caesar cipher in JavaScript.https://www.aleksandrhovhannisyan.com/blog/design-mode-in-11ty/Design Mode in 11ty2022-05-05T00:00:00.000Z2022-05-05T00:00:00.000ZSometimes, I prefer to compose text right in my browser and copy it over to my source files. In 11ty, we can enable this behind a keyboard shortcut in our development environment using environment variables.https://www.aleksandrhovhannisyan.com/blog/overzealous-destructuring/Overzealous Destructuring2022-04-10T00:00:00.000Z2022-04-17T00:00:00.000ZDestructuring in JavaScript has many clever uses that can make your code more expressive and compact. But overusing it can make your code harder to read, trickier to debug, and more error prone.https://www.aleksandrhovhannisyan.com/blog/changing-locale-in-chrome-with-dev-tools/Changing the Locale in Chrome with Dev Tools2022-03-09T00:00:00.000Z2022-03-09T00:00:00.000ZModern browsers have developer tools that allow us to simulate user preferences, vision impairments, device resolutions, and various other scenarios. Chromium browsers in particular allow us to also simulate loading the page in a different locale.https://www.aleksandrhovhannisyan.com/blog/gated-content/Gated Content, Broken Locks2022-03-05T00:00:00.000Z2022-03-05T00:00:00.000ZSome 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.https://www.aleksandrhovhannisyan.com/blog/flexbox-holy-albatross-with-variable-width-columns/Flexbox Holy Albatross with Variable-Width Columns2022-02-15T00:00:00.000Z2022-02-15T00:00:00.000ZThe Holy Albatross technique allows a flex container to auto-wrap from multiple columns to a single column at a target container width. Let's modify the original code to control the number and widths of columns.https://www.aleksandrhovhannisyan.com/blog/downloading-and-optimizing-google-fonts/How to Download and Optimize Google Fonts2022-02-13T00:00:00.000Z2024-03-03T00:00:00.000ZSelf-hosting fonts can improve your site's performance and help you remain compliant with privacy regulations like the GDPR. Learn how to download, subset, and optimize any Google Font for your projects.https://www.aleksandrhovhannisyan.com/blog/custom-markdown-components-in-11ty/Custom Markdown Components in 11ty2022-02-03T00:00:00.000Z2022-02-03T00:00:00.000ZEver wanted to nest Markdown in HTML? In 11ty, you can easily do this with paired shortcodes and a custom Markdown library parser.https://www.aleksandrhovhannisyan.com/blog/html-input-validation-without-a-form/HTML Input Validation with JavaScript2022-01-16T00:00:00.000Z2022-08-11T00:00:00.000ZIf 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.https://www.aleksandrhovhannisyan.com/blog/fluid-type-scale-with-css-clamp/Creating a Fluid Type Scale with CSS Clamp2021-12-27T00:00:00.000Z2023-01-30T00:00:00.000ZFluid 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.https://www.aleksandrhovhannisyan.com/blog/writing-better-css/Modern Techniques for Writing Better CSS2021-12-08T00:00:00.000Z2022-10-28T00:00:00.000ZCSS 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.https://www.aleksandrhovhannisyan.com/blog/load-more-button-focus/Managing Keyboard Focus for Load-More Buttons2021-12-03T00:00:00.000Z2022-03-24T00:00:00.000ZLoad-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.https://www.aleksandrhovhannisyan.com/blog/configuring-web-fonts-in-11ty-with-global-data/Configuring Web Fonts in 11ty with Global Data2021-11-14T00:00:00.000Z2021-11-14T00:00:00.000ZRather 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.https://www.aleksandrhovhannisyan.com/blog/eleventy-image-plugin/Optimizing Images with the 11ty Image Plugin2021-10-31T00:00:00.000Z2022-06-10T00:00:00.000ZWhile 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.https://www.aleksandrhovhannisyan.com/blog/static-site-comments-github-issues/Add Comments to a Static Site with Netlify Functions and the GitHub API2021-10-20T00:00:00.000Z2024-02-22T00:00:00.000ZComment 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.https://www.aleksandrhovhannisyan.com/blog/managing-complex-state-react-usereducer/Managing Complex State in React with useReducer2021-10-10T00:00:00.000Z2021-10-10T00:00:00.000ZReact'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.https://www.aleksandrhovhannisyan.com/blog/nfts-are-a-problem/NFTs Are a Problem2021-09-28T00:00:00.000Z2021-12-18T00:00:00.000ZWhile 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.https://www.aleksandrhovhannisyan.com/blog/accommodating-the-longest-text-in-a-label/Accommodating the Longest Text in a Label with CSS Grid2021-09-18T00:00:00.000Z2021-09-18T00:00:00.000ZSuppose a label renders strings of different lengths, but you want it to always reserve space for the longest text to prevent layout shifts. You can do this using a CSS grid trick.https://www.aleksandrhovhannisyan.com/blog/represent-state-with-html-attributes-not-class-names/Represent State with HTML Attributes, Not Class Names2021-09-14T00:00:00.000Z2022-07-17T00:00:00.000ZDevelopers often use class names to represent a change in a component's state, but this leads to redundant (and sometimes inaccessible) markup. Instead, we should use native HTML attributes to represent state and style those discrete states with the CSS attribute selector.https://www.aleksandrhovhannisyan.com/blog/passing-object-arguments-to-liquid-shortcodes-in-11ty/Passing Object Arguments to Liquid Shortcodes in 11ty2021-09-03T00:00:00.000Z2022-03-17T00:00:00.000ZCurrently, 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.https://www.aleksandrhovhannisyan.com/blog/react-lazy-dynamic-imports/Dynamically Importing Components with React.lazy2021-08-24T00:00:00.000Z2022-06-10T00:00:00.000ZNot 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.https://www.aleksandrhovhannisyan.com/blog/eleventy-netlify-redirects/Automate Netlify Redirects in 11ty2021-08-08T00:00:00.000Z2021-08-08T00:00:00.000ZTired of listing all of your Netlify redirects by hand? Generate them programmatically with a bit of 11ty templating magic!https://www.aleksandrhovhannisyan.com/blog/javascript-promise-all/Awaiting Multiple Promises with Promise.all2021-08-01T00:00:00.000Z2024-03-07T00:00:00.000ZLearn how to use JavaScript's Promise.all method to await multiple async operations, as well as how to write a custom implementation of Promise.all.https://www.aleksandrhovhannisyan.com/blog/cleaner-type-predicates-with-derived-types/Cleaner Type Predicates with Derived Types2021-07-18T00:00:00.000Z2021-07-18T00:00:00.000ZIn 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.https://www.aleksandrhovhannisyan.com/blog/62-5-percent-font-size-trick/The 62.5% Font Size Trick2021-07-11T00:00:00.000Z2024-03-15T00:00:00.000ZOnce 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.https://www.aleksandrhovhannisyan.com/blog/dont-use-a-fixed-line-height/Don't Use a Fixed Line Height2021-07-10T00:00:00.000Z2021-08-17T00:00:00.000ZIn typography, the ideal line height for text depends on a variety of factors, including font size, line length, and font family.https://www.aleksandrhovhannisyan.com/blog/eleventy-the-good-the-bad-and-the-possum/11ty: The Good, the Bad, and the... Possum?2021-07-03T00:00:00.000Z2024-01-16T00:00:00.000ZAn in-depth review of 11ty, an extensible static site generator written in Node that supports a variety of template languages.https://www.aleksandrhovhannisyan.com/blog/react-iframes-back-navigation-bug/React, Iframes, and a Back-Navigation Bug2021-05-22T00:00:00.000Z2021-05-22T00:00:00.000ZIf 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.https://www.aleksandrhovhannisyan.com/blog/atomic-git-commits/Make Atomic Git Commits2021-05-15T00:00:00.000Z2022-06-08T00:00:00.000ZIt 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.https://www.aleksandrhovhannisyan.com/blog/format-code-on-save-vs-code-eslint/How to Format Code on Save in VS Code with ESlint2021-04-25T00:00:00.000Z2021-10-29T00:00:00.000ZNever worry about manually formatting your code again. Improve your developer experience by setting up ESLint to format code on save in VS Code.https://www.aleksandrhovhannisyan.com/blog/crlf-vs-lf-normalizing-line-endings-in-git/CRLF vs. LF: Normalizing Line Endings in Git2021-04-18T00:00:00.000Z2022-07-23T00:00:00.000ZLine 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.https://www.aleksandrhovhannisyan.com/blog/why-devs-should-write/Why Developers Should Write2021-04-07T00:00:00.000Z2021-04-07T00:00:00.000ZWriting 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.https://www.aleksandrhovhannisyan.com/blog/setting-width-and-height-on-images/Set a Width and Height on Images to Reduce Layout Shifts2021-03-07T00:00:00.000Z2022-09-26T00:00:00.000ZDimensionless images can cause layout shifts as they load, hurting your page's performance. By setting a width and height on images, you allow the browser to initialize an aspect ratio for those images and minimize layout shifts.https://www.aleksandrhovhannisyan.com/blog/why-you-no-longer-enjoy-reading/Why You No Longer Enjoy Reading2021-02-21T00:00:00.000Z2021-02-21T00:00:00.000ZReading 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.https://www.aleksandrhovhannisyan.com/blog/why-i-dont-like-tailwind-css/Why I Don't Like Tailwind CSS2021-01-31T00:00:00.000Z2021-12-18T00:00:00.000ZOn paper, Tailwind CSS sounds like a great idea. In reality, it suffers from the same problems that it tries to solve.https://www.aleksandrhovhannisyan.com/blog/svg-tutorial-how-to-code-svg-icons-by-hand/SVG Tutorial: How to Code SVG Icons by Hand2021-01-18T00:00:00.000Z2022-10-28T00:00:00.000ZFollow along with the examples in this in-depth guide to learn how to draw SVG icons and simple shapes by hand.https://www.aleksandrhovhannisyan.com/blog/vertical-rhythm-with-css-grid/Creating a Vertical Rhythm with CSS Grid2021-01-07T00:00:00.000Z2021-11-15T00:00:00.000ZMargins 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.https://www.aleksandrhovhannisyan.com/blog/rest-in-peace-flash/Rest in Peace, Flash2020-12-31T00:00:00.000Z2020-12-31T00:00:00.000ZIf 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.https://www.aleksandrhovhannisyan.com/blog/subtle-web-accessibility-issues/Subtle Accessibility Failures (And How to Fix Them)2020-11-28T00:00:00.000Z2020-11-28T00:00:00.000ZYou've scored 100 on Lighthouse's accessibility audit. But is your site actually accessible, or have you overlooked more subtle accessibility failures?https://www.aleksandrhovhannisyan.com/blog/async-functions-that-return-booleans/Be Careful with Async Functions that Return Booleans2020-11-25T00:00:00.000Z2020-11-25T00:00:00.000ZSuppose an async function returns a boolean. What happens if you check the return value without awaiting it?https://www.aleksandrhovhannisyan.com/blog/dynamic-tag-name-props-in-react/Dynamic Tag Name Props in React (with TypeScript)2020-11-01T00:00:00.000Z2022-01-02T00:00:00.000ZSometimes, a React component needs to allow users to render a custom tag. Here's how you can pass dynamic tag names as props.https://www.aleksandrhovhannisyan.com/blog/higher-order-components/Higher-Order Components in React2020-10-18T00:00:00.000Z2020-11-10T00:00:00.000ZHigher-order components are an old but popular design in React prior to the introduction of hooks, allowing you to define reusable stateful logic.https://www.aleksandrhovhannisyan.com/blog/undoing-changes-in-git/6 Ways to Undo Changes in Git2020-10-11T00:00:00.000Z2020-10-11T00:00:00.000ZIf 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.https://www.aleksandrhovhannisyan.com/blog/does-web-performance-matter/Does Web Performance Matter? It Depends.2020-09-30T00:00:00.000Z2020-09-30T00:00:00.000ZSome big brands have a slow page load speed, but they still rank well on Google. So does web performance even matter?https://www.aleksandrhovhannisyan.com/blog/css-aspect-ratio/Creating Aspect Ratios in CSS2020-09-21T00:00:00.000Z2021-06-12T00:00:00.000ZLearn how to give any element an aspect ratio in CSS, using the modern aspect-ratio property or a trick with percentage padding.https://www.aleksandrhovhannisyan.com/blog/hesitation-is-defeat/Hesitation Is Defeat2020-09-17T00:00:00.000Z2020-09-17T00:00:00.000ZAfter a one-year hiatius from Sekiro, I returned to face the final boss—and, through painful persistence, triumphed.https://www.aleksandrhovhannisyan.com/blog/javascript-promise-tricks/JavaScript Promises: Practical Use Cases and Examples2020-09-12T00:00:00.000Z2020-09-12T00:00:00.000ZPromises are a powerful tool for writing asynchronous code in JavaScript. Here are a few interesting use cases.https://www.aleksandrhovhannisyan.com/blog/optimizing-images-for-the-web/Optimizing Images with WebP and Lazy Loading2020-09-01T00:00:00.000Z2021-12-14T00:00:00.000ZImages 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.https://www.aleksandrhovhannisyan.com/blog/blue-people-illustrations/Blue People Illustrations, or How to Kill a Brand2020-08-29T00:00:00.000Z2020-08-29T00:00:00.000ZThere's a recent trend in web design of using illustrations of blue, generic, faceless people. And it's killing brands.https://www.aleksandrhovhannisyan.com/blog/the-leetcode-grind/Don't Mind the Leetcode Grind2020-08-19T00:00:00.000Z2021-10-11T00:00:00.000ZLeetcode is a polarizing topic when it comes to technical interviews. But what exactly is it? And does it deserve your attention?https://www.aleksandrhovhannisyan.com/blog/sorting-ant-design-tables/Easily Sort Ant Design Tables2020-08-09T00:00:00.000Z2020-08-09T00:00:00.000ZThe 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!https://www.aleksandrhovhannisyan.com/blog/http-cookies/An Introduction to HTTP Cookies2020-07-26T00:00:00.000Z2022-12-01T00:00:00.000ZLearn 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.https://www.aleksandrhovhannisyan.com/blog/semantic-html-accessibility/Semantic HTML: Building a More Accessible Web2020-07-19T00:00:00.000Z2021-07-10T00:00:00.000ZAccessibility 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.https://www.aleksandrhovhannisyan.com/blog/test-localhost-on-mobile/How to Test Localhost on Mobile (with ngrok)2020-07-12T00:00:00.000Z2020-07-12T00:00:00.000ZLearn how to easily test localhost on mobile using ngrok, without deploying a single line of code.https://www.aleksandrhovhannisyan.com/blog/jekyll-comment-system-github-issues/Add Comments to Jekyll with the GitHub Issues API2020-07-09T00:00:00.000Z2021-10-20T00:00:00.000ZAdd comments to your Jekyll blog with the GitHub issues API and lazily load them for improved performance.https://www.aleksandrhovhannisyan.com/blog/simple-webpack-config/A Simple Webpack Config2020-07-01T00:00:00.000Z2020-07-01T00:00:00.000ZWebpack is one of the most popular code bundlers available. Here's a simple webpack config to bundle your JavaScript.https://www.aleksandrhovhannisyan.com/blog/binary-for-beginners/Binary for Beginners: The ABCs of 0s and 1s2020-06-06T00:00:00.000Z2022-07-23T00:00:00.000ZThe binary number system underlies everything in computation and software. But what's the deal with all those 0s and 1s?https://www.aleksandrhovhannisyan.com/blog/github-pages-vs-netlify/Goodbye, GitHub Pages—Hello, Netlify2020-06-01T00:00:00.000Z2021-07-31T00:00:00.000ZGitHub Pages is a good option for hosting simple static sites, but it doesn't scale well for more complex use cases. Netlify offers the best of both worlds: simple hosting and plenty of advanced features.https://www.aleksandrhovhannisyan.com/blog/responsive-navbar-tutorial/Creating a Responsive Navbar with HTML, CSS, and JavaScript2020-05-10T00:00:00.000Z2021-09-18T00:00:00.000ZLearn how to create a responsive navbar that arranges links horizontally on desktop devices and collapses to a hamburger menu on mobile.https://www.aleksandrhovhannisyan.com/blog/how-to-escape-tutorial-purgatory/Stuck in Tutorial Purgatory?2020-05-06T00:00:00.000Z2020-05-06T00:00:00.000ZTutorials can help you grow as a developer. But they can also hold you back. Stuck in tutorial purgatory? Here's how to get out.https://www.aleksandrhovhannisyan.com/blog/javascript-pass-by-reference/Is JavaScript Pass by Reference?2020-04-20T00:00:00.000Z2022-07-23T00:00:00.000ZDevelopers are often taught that JavaScript passes objects by reference. In reality, JavaScript is a pass-by-value language.https://www.aleksandrhovhannisyan.com/blog/seo-blogging-tips/How to Get More Traffic with SEO2020-04-04T00:00:00.000Z2020-04-04T00:00:00.000ZSEO is the art of making strategic improvements to a site in order to rank higher in search results and gain more traffic. Learn how to use tried-and-true SEO strategies to drive more visitors to your site.https://www.aleksandrhovhannisyan.com/blog/how-to-add-a-copy-to-clipboard-button-to-your-jekyll-blog/How to Add a Copy-to-Clipboard Button to Jekyll2020-03-11T00:00:00.000Z2022-03-26T00:00:00.000ZAdd a copy-to-clipboard button to your Jekyll blog with a simple include and a few lines of JavaScript.https://www.aleksandrhovhannisyan.com/blog/getting-started-with-jekyll-and-github-pages/Getting Started with Jekyll and GitHub Pages2020-02-19T00:00:00.000Z2020-10-02T00:00:00.000ZJekyll is a static site generator that makes it easy for you to create a website. Learn how to get started with Jekyll and GitHub Pages.https://www.aleksandrhovhannisyan.com/blog/implementing-a-finite-state-machine-in-cpp/Implementing a Finite State Machine in C++2020-02-08T00:00:00.000Z2023-08-14T00:00:00.000ZFinite 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++.https://www.aleksandrhovhannisyan.com/blog/invulnerability-frames-in-unity/Invulnerability Frames in Unity2020-01-09T00:00:00.000Z2020-03-25T00:00:00.000ZLearn how to implement invulnerability frames in Unity using coroutines. This popular game mechanic exists in many modern and retro games.https://www.aleksandrhovhannisyan.com/blog/improve-page-load-speed-in-jekyll-using-the-webp-image-format/Using WebP Images in Jekyll2020-01-05T00:00:00.000Z2020-01-05T00:00:00.000ZDo your blog posts suffer from slow load speeds because of all those images you've been using? In this post, we'll look at how you can improve your page load speed in Jekyll using the WebP image format and just a single useful include.https://www.aleksandrhovhannisyan.com/blog/least-squares-fitting/Least Squares Fitting: How to Fit a Curve to Data2019-12-28T00:00:00.000Z2021-06-28T00:00:00.000ZA review of the theory behind the least squares method, as well as a look at how to perform straight-line and polynomial least squares fitting, both by hand and with Python.https://www.aleksandrhovhannisyan.com/blog/the-method-of-least-squares/The Method of Least Squares2019-12-26T00:00:00.000Z2021-06-28T00:00:00.000ZSome systems of equations do not have a unique solution, but we can find an approximate solution using the method of least squares. Applications of this method include linear and polynomial regression.https://www.aleksandrhovhannisyan.com/blog/outer-wilds-stop-and-smell-the-pine-trees/Outer Wilds: Stop and Smell the Pine Trees2019-08-30T00:00:00.000Z2021-10-24T00:00:00.000ZOn the surface, Outer Wilds is a space exploration game. But peel back the layers, and it's a captivating and philosophical story about life and our universe.https://www.aleksandrhovhannisyan.com/blog/trie-data-structure-implementation-in-python/Implementing a Trie in Python2019-08-18T00:00:00.000Z2019-08-18T00:00:00.000ZPrefix trees (also known as tries) can be used to efficiently search for a string in a dictionary of known words using just a prefix. Learn how to implement a custom trie in Python.https://www.aleksandrhovhannisyan.com/blog/operating-system-scheduling-algorithms/Operating System Scheduling Algorithms2019-08-13T00:00:00.000Z2021-08-14T00:00:00.000ZOnly one process can run at a time on a single CPU. Operating system scheduling algorithms are what allow these processes to take turns running.https://www.aleksandrhovhannisyan.com/blog/hard-links-vs-soft-links/Hard Links and Soft Links2019-08-12T00:00:00.000Z2021-08-14T00:00:00.000ZLinking is how UNIX file systems keep track of files. There are two distinct types of links: soft (symbolic) links and hard links. One sticks around for good, while the other one rots.https://www.aleksandrhovhannisyan.com/blog/learn-to-code-without-wasting-time-and-money/Learn to Code Without Wasting Time & Money2019-08-04T00:00:00.000Z2021-08-14T00:00:00.000ZA discussion of the things that beginner programmers tend to get wrong, as well as concrete suggestions for what they should be doing instead.