CINXE.COM

<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:site" content="@appsignal" data-next-head=""/><meta name="twitter:creator" content="@appsignal" data-next-head=""/><meta content="AppSignal" name="publisher" data-next-head=""/><meta content="2021 AppSignal" name="copyright" data-next-head=""/><meta content="https://blog.appsignal.com" name="host" data-next-head=""/><meta content="Middleman App" name="generator" data-next-head=""/><title data-next-head="">The latest on everything AppSignal | AppSignal Blog</title><meta name="robots" content="index,follow" data-next-head=""/><meta name="description" content="Product updates and things we&#x27;ve learned while building AppSignal" data-next-head=""/><meta property="og:title" content="The latest on everything AppSignal" data-next-head=""/><meta property="og:description" content="Product updates and things we&#x27;ve learned while building AppSignal" data-next-head=""/><meta property="og:url" content="https://blog.appsignal.com" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta property="og:image" content="https://blog.appsignal.com/api/og?title=The latest on everything AppSignal" data-next-head=""/><meta property="og:image:alt" content="The latest on everything AppSignal" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="628" data-next-head=""/><meta property="og:locale" content="en" data-next-head=""/><meta property="og:site_name" content="AppSignal Blog" data-next-head=""/><link rel="canonical" href="https://blog.appsignal.com" data-next-head=""/><link rel="alternate" type="application/rss+xml" title="The AppSignal blog. Product updates, Ruby Magic, Elixir Alchemy, AppSignal Academy and more." href="https://blog.appsignal.com//feed.xml" data-next-head=""/><link rel="icon" href="/favicon/favicon.svg" type="image/svg+xml"/><link rel="mask-icon" href="/favicon/favicon.svg" color="#29A575"/><link rel="apple-touch-icon" href="/favicon/apple-touch-icon.png"/><link rel="manifest" href="/favicon/manifest.webmanifest"/><link rel="preload" href="/fonts/rubik-v12-latin-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"/><link rel="preload" href="/fonts/rubik-v12-latin-500.woff2" as="font" type="font/woff2" crossorigin="anonymous"/><meta name="ahrefs-site-verification" content="eaeabe5fcccf5783b1b0c574c52a3306af55ea1ab27e5eed6405393ed63feae6"/><link rel="preload" href="/_next/static/css/a392a56cf9246d26.css" as="style"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.11/dist/katex.min.css" integrity="sha384-Um5gpz1odJg5Z4HAmzPtgZKdTBHZdw8S29IecapCSB31ligYPhHQZMIlWLYQGVoc" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/a392a56cf9246d26.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8c6213fdb13c68bb.js" defer=""></script><script src="/_next/static/chunks/framework-09d0adfeb2fe406a.js" defer=""></script><script src="/_next/static/chunks/main-b20d2c8c60474cbf.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3d303ccdab66c074.js" defer=""></script><script src="/_next/static/chunks/965-2551e136cd282557.js" defer=""></script><script src="/_next/static/chunks/513-c2cee196170b0fca.js" defer=""></script><script src="/_next/static/chunks/pages/index-05a55e0235ccd795.js" defer=""></script><script src="/_next/static/4VD4GTi1vs_NVN2Wl-Jyb/_buildManifest.js" defer=""></script><script src="/_next/static/4VD4GTi1vs_NVN2Wl-Jyb/_ssgManifest.js" defer=""></script></head><body class="font-rubik"><div id="__next"><!--$--><!--/$--><header class="sticky z-40 top-0 w-full xl:overflow-y-visible bg-gray-900 text-white border-b border-b-gray-800 border-b border-b-gray-800"><div class="c-container flex justify-between items-center py-4 false"><a href="https://www.appsignal.com" class="flex"><div class="w-[130px] h-[24px]"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350.92 64.54"><g fill="#fff"><path d="M341.56 12.58c-5.46 0-9.37 4.82-13.39 10.18C325.68 11.38 322.9 0 314.07 0S302.46 11.38 300 22.76c-4-5.36-7.93-10.18-13.39-10.18-3.47 0-9.35 2.37-9.35 11.22v16.11c0 8.69 4.64 10.82 7.42 11.54 4.8 1.25 16.36 2.4 29.37 2.4s24.57-1.15 29.36-2.4c2.79-.72 7.43-2.85 7.43-11.54V23.8c0-8.85-5.88-11.22-9.36-11.22M314.07 5c5.29 0 7.3 10.44 10.12 23-3.09 3.79-6.36 6.86-10.12 6.86S307 31.78 304 28c2.63-11.72 4.65-23 10.12-23m-31.84 34.91V23.8c0-5.59 3-6.2 4.33-6.2 3.85 0 8 6.43 11.94 11.59-2.83 11.71-5.78 18.81-12.75 17.37-1.82-.5-3.52-1.65-3.52-6.65M296 48.05c3-3.35 5-8.58 6.5-14.12 3.23 3.38 6.95 5.93 11.57 5.93s8.33-2.55 11.56-5.93c1.5 5.54 3.47 10.77 6.55 14.12-5.39.5-11.88.79-18.11.79s-12.73-.29-18.12-.79m49.91-8.14c0 5-1.71 6.15-3.52 6.65-7 1.48-9.93-5.66-12.72-17.37 3.95-5.16 8.09-11.59 11.94-11.59 1.3 0 4.34.61 4.34 6.2ZM1.13 52.07a1.12 1.12 0 0 1-.79-.34 1.16 1.16 0 0 1-.34-.85 1.52 1.52 0 0 1 .11-.52L14 13.74a2 2 0 0 1 .62-1 1.81 1.81 0 0 1 1.25-.4h5a1.81 1.81 0 0 1 1.25.4 2.44 2.44 0 0 1 .68 1l13.82 36.62a2.52 2.52 0 0 1 .06.52 1.16 1.16 0 0 1-.34.85 1.12 1.12 0 0 1-.79.34h-3.92a1.4 1.4 0 0 1-1.07-.37 2.41 2.41 0 0 1-.46-.7l-2.89-7.48H9.47L6.63 51a2 2 0 0 1-.48.66 1.5 1.5 0 0 1-1.1.37Zm10.15-14.18H25.4l-7.09-18.82ZM42.52 62.84a1.25 1.25 0 0 1-1.3-1.31V23.89a1.24 1.24 0 0 1 1.3-1.3h3.57a1.25 1.25 0 0 1 1.31 1.3v2.38a11.6 11.6 0 0 1 3.62-3A11.35 11.35 0 0 1 56.58 22a12.67 12.67 0 0 1 5.33 1 10.13 10.13 0 0 1 3.68 2.83 12.56 12.56 0 0 1 2.24 4.26 19.79 19.79 0 0 1 .88 5.21c0 .64.06 1.31.06 2s0 1.34-.06 2a18.1 18.1 0 0 1-.82 5.16 13.14 13.14 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.56 12.56 0 0 1-5.36 1.05 11.36 11.36 0 0 1-5.36-1.16 10.55 10.55 0 0 1-3.54-3v13a1.27 1.27 0 0 1-.37.94 1.38 1.38 0 0 1-1 .37ZM55 47.3a6.63 6.63 0 0 0 4.17-1.16 6.53 6.53 0 0 0 2.18-3 14.43 14.43 0 0 0 .8-4.14 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.8-4.14 6.58 6.58 0 0 0-2.18-3A6.69 6.69 0 0 0 55 27.35a6.44 6.44 0 0 0-6.49 4.22 12.43 12.43 0 0 0-.82 3.77q-.06 1-.06 2.16c0 .79 0 1.53.06 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86A6.83 6.83 0 0 0 55 47.3ZM75.71 62.84a1.27 1.27 0 0 1-1.3-1.31V23.89a1.25 1.25 0 0 1 1.3-1.3h3.58a1.29 1.29 0 0 1 .93.36 1.27 1.27 0 0 1 .37.94v2.38a11.53 11.53 0 0 1 3.63-3A11.29 11.29 0 0 1 89.77 22a12.64 12.64 0 0 1 5.33 1 10.16 10.16 0 0 1 3.69 2.83 12.74 12.74 0 0 1 2.21 4.3 20.21 20.21 0 0 1 .88 5.21v4a18.1 18.1 0 0 1-.83 5.16 12.94 12.94 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.53 12.53 0 0 1-5.36 1.05 11.31 11.31 0 0 1-5.35-1.16 10.49 10.49 0 0 1-3.55-3v13a1.27 1.27 0 0 1-.37.94 1.34 1.34 0 0 1-1 .37ZM88.19 47.3a6.1 6.1 0 0 0 6.35-4.19 14.43 14.43 0 0 0 .79-4.11 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.79-4.14 6.1 6.1 0 0 0-6.35-4.19 6.44 6.44 0 0 0-6.5 4.22 12.74 12.74 0 0 0-.82 3.77c0 .64-.05 1.36-.05 2.16s0 1.53.05 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86 6.84 6.84 0 0 0 4.09 1.1ZM122.17 52.63a21.18 21.18 0 0 1-8.56-1.53 12.82 12.82 0 0 1-5.27-4 9.44 9.44 0 0 1-1.93-5.25 1.1 1.1 0 0 1 .34-.79 1.15 1.15 0 0 1 .85-.34h4a1.47 1.47 0 0 1 1 .31 2.75 2.75 0 0 1 .57.76 6.36 6.36 0 0 0 1.36 2.39 7.72 7.72 0 0 0 2.86 2 12.06 12.06 0 0 0 4.73.79q4.48 0 6.61-1.53a4.88 4.88 0 0 0 2.12-4.19 3.83 3.83 0 0 0-1.13-2.87 10.56 10.56 0 0 0-3.52-2c-1.58-.6-3.64-1.25-6.17-1.93a36.52 36.52 0 0 1-7-2.55 10.29 10.29 0 0 1-4.19-3.57 9.81 9.81 0 0 1-1.39-5.44 9.72 9.72 0 0 1 1.73-5.67 11.66 11.66 0 0 1 4.93-3.94 18.66 18.66 0 0 1 7.68-1.45 19 19 0 0 1 6.35 1 14 14 0 0 1 4.57 2.55 11.53 11.53 0 0 1 2.77 3.4 8.31 8.31 0 0 1 1 3.57 1.18 1.18 0 0 1-.32.77 1.09 1.09 0 0 1-.87.37h-4.14a1.83 1.83 0 0 1-.88-.23 1.5 1.5 0 0 1-.65-.85 5.22 5.22 0 0 0-2.44-3.46 9.49 9.49 0 0 0-5.39-1.42 10.19 10.19 0 0 0-5.41 1.28 4.35 4.35 0 0 0-2.07 4 4.24 4.24 0 0 0 1 2.89 8.38 8.38 0 0 0 3.18 2 58.53 58.53 0 0 0 5.75 1.9 43.26 43.26 0 0 1 7.76 2.54 10.38 10.38 0 0 1 4.4 3.51 9.64 9.64 0 0 1 1.41 5.42 10 10 0 0 1-1.95 6.2 12.32 12.32 0 0 1-5.44 4 22 22 0 0 1-8.25 1.36ZM143.77 17.37a1.34 1.34 0 0 1-1-.37 1.24 1.24 0 0 1-.37-.93v-3.58a1.34 1.34 0 0 1 .37-1 1.32 1.32 0 0 1 1-.4h4.31a1.39 1.39 0 0 1 1 .4 1.29 1.29 0 0 1 .4 1v3.58a1.2 1.2 0 0 1-.4.93 1.41 1.41 0 0 1-1 .37Zm.34 34.7a1.38 1.38 0 0 1-1-.37 1.27 1.27 0 0 1-.37-.94V23.89a1.27 1.27 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.69a1.25 1.25 0 0 1 1.3 1.3v26.87a1.27 1.27 0 0 1-.37.94 1.28 1.28 0 0 1-.93.37ZM168.5 64.54a17.5 17.5 0 0 1-6.58-1.05 12.16 12.16 0 0 1-4-2.52 9.27 9.27 0 0 1-2.09-2.97 8.1 8.1 0 0 1-.65-2.38 1.13 1.13 0 0 1 .34-1 1.3 1.3 0 0 1 1-.39h3.86a1.51 1.51 0 0 1 .85.22 1.8 1.8 0 0 1 .56 1 11.19 11.19 0 0 0 1 1.73 5 5 0 0 0 1.93 1.61 7.69 7.69 0 0 0 3.57.68 11 11 0 0 0 4.05-.65 4.82 4.82 0 0 0 2.5-2.3 9.59 9.59 0 0 0 .87-4.47v-3.84a10.93 10.93 0 0 1-3.64 2.79 11.93 11.93 0 0 1-5.38 1.08 12.69 12.69 0 0 1-5.36-1 9.78 9.78 0 0 1-3.69-2.86 13.36 13.36 0 0 1-2.21-4.28 18.82 18.82 0 0 1-.82-5.27q-.06-1.53 0-3.12a18.94 18.94 0 0 1 .8-5.16 12.85 12.85 0 0 1 2.21-4.39 10.34 10.34 0 0 1 3.71-2.94 12.23 12.23 0 0 1 5.36-1.06 11.1 11.1 0 0 1 5.52 1.25 11.77 11.77 0 0 1 3.66 3.06V24a1.37 1.37 0 0 1 .37-1 1.31 1.31 0 0 1 1-.39h3.57a1.33 1.33 0 0 1 1.35 1.39v27.39a16.14 16.14 0 0 1-1.38 6.91 10 10 0 0 1-4.4 4.59 16.32 16.32 0 0 1-7.88 1.65Zm-.17-17.69a6.62 6.62 0 0 0 4.11-1.19 7.39 7.39 0 0 0 2.33-3 10.87 10.87 0 0 0 .87-3.71c0-.49.06-1.12.06-1.9s0-1.39-.06-1.84a11.09 11.09 0 0 0-.87-3.74 7.13 7.13 0 0 0-2.33-3 6.74 6.74 0 0 0-4.11-1.16 6.85 6.85 0 0 0-4.17 1.16 6.49 6.49 0 0 0-2.24 3 14.43 14.43 0 0 0-.79 4.14v2.84a14.62 14.62 0 0 0 .79 4.11 6.52 6.52 0 0 0 2.24 3.06 6.85 6.85 0 0 0 4.17 1.23ZM190.13 52.07a1.38 1.38 0 0 1-1-.37 1.31 1.31 0 0 1-.37-.94V23.89a1.31 1.31 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.63a1.25 1.25 0 0 1 1.31 1.3v2.44a12.29 12.29 0 0 1 3.8-3.09 11.91 11.91 0 0 1 5.72-1.24 11.34 11.34 0 0 1 6.12 1.59 10.28 10.28 0 0 1 3.92 4.41 15.55 15.55 0 0 1 1.37 6.77v16a1.25 1.25 0 0 1-.4.94 1.39 1.39 0 0 1-1 .37h-3.92a1.28 1.28 0 0 1-.93-.37 1.27 1.27 0 0 1-.37-.94V35.06a8.33 8.33 0 0 0-1.79-5.67 6.45 6.45 0 0 0-5.13-2 6.84 6.84 0 0 0-5.18 2 7.83 7.83 0 0 0-2 5.67v15.7a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37ZM230.92 52.63a11.76 11.76 0 0 1-5.25-1.16 9.93 9.93 0 0 1-3.74-3.09 7.31 7.31 0 0 1-1.39-4.38 7.42 7.42 0 0 1 3.18-6.27 18.1 18.1 0 0 1 8.39-3.09l8-1.19v-1.4a5.5 5.5 0 0 0-1.36-4c-.91-.94-2.42-1.41-4.54-1.41a6.9 6.9 0 0 0-3.74.9 5.22 5.22 0 0 0-2 2.44 1.32 1.32 0 0 1-1.25.74h-3.51a1.2 1.2 0 0 1-.94-.34 1.34 1.34 0 0 1-.31-.91 5.88 5.88 0 0 1 .71-2.12 8.28 8.28 0 0 1 2.07-2.5 11.76 11.76 0 0 1 3.66-2 15.47 15.47 0 0 1 5.35-.82 17.06 17.06 0 0 1 5.9.88 9.93 9.93 0 0 1 3.8 2.35 9.17 9.17 0 0 1 2.07 3.4 12.46 12.46 0 0 1 .65 4v18.1a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37h-3.63a1.25 1.25 0 0 1-1.3-1.31v-2.38a9.3 9.3 0 0 1-2 2 10.74 10.74 0 0 1-3 1.62 13.85 13.85 0 0 1-4.42.63Zm1.59-4.82a8.24 8.24 0 0 0 3.91-.93A6.74 6.74 0 0 0 239.2 44a10.38 10.38 0 0 0 1-4.88v-1.4l-6.13 1a13.25 13.25 0 0 0-5.52 1.75 3.66 3.66 0 0 0-1.85 3.06 3.46 3.46 0 0 0 .85 2.41 5.33 5.33 0 0 0 2.16 1.42 8 8 0 0 0 2.8.45ZM254.47 52.07a1.25 1.25 0 0 1-1.3-1.31V13.12a1.25 1.25 0 0 1 1.3-1.31h3.74a1.25 1.25 0 0 1 1.3 1.31v37.64a1.25 1.25 0 0 1-1.3 1.31Z"></path></g></svg></div></a><div class="hidden xl:block"><ul class="flex"><li><div class="block py-2 px-2 xl:px-3 no-underline cursor-pointer select-none text-gray-200 hover:text-white"><span>Features</span><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="angle-down" class="svg-inline--fa fa-angle-down inline-block pb-0.5 ml-2 text-gray-400 text-xxs" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"></path></svg><div class="absolute mt-0 pt-2.5 z-10 w-72 hidden"><div class="w-72 px-3 py-4 bg-white shadow rounded-lg text-left"><h3 class="px-2 c_h-heading c_h-heading--caps text-sm tracking-wider text-gray-600 pb-2">Monitoring features</h3><ul><li><a href="https://www.appsignal.com/tour/errors/" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-orange-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bug" class="svg-inline--fa fa-bug fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Error tracking</span></a></li><li><a href="https://www.appsignal.com/tour/performance" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-green-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rabbit-running" class="svg-inline--fa fa-rabbit-running fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M460.7 39.3l-2.2-2.1c-4.7-4.6-11.5-6.4-17.9-4.7s-11.4 6.6-13.1 13l-.8 2.9c-3.3 11.8-5.1 23.7-5.5 35.6c24.3 20.6 42.9 47.8 53.3 78.8c-8.2-1.9-16.5-2.9-25-2.9c-.6 0-1.1 0-1.7 0c-18.4-44-56.5-77.4-103.6-89.3l-3.4-.9c-6.2-1.6-12.9-.6-18.5 2.6c-10.8 6.2-15.6 19.5-11.2 31.1c14.9 39.5 44.3 71.4 81.4 89.7c-3.7 6.6-6.4 14-7.6 21.8L279.7 154.9C248.8 137.3 213.8 128 178.2 128c-32.3 0-62.2 16.8-78.9 44.4C89 159.9 73.4 152 56 152c-30.9 0-56 25.1-56 56s25.1 56 56 56c11.3 0 21.8-3.3 30.6-9.1c4.9 17.2 14.5 33.1 28.4 45.9L257.2 431.2C269 442 284.4 448 300.4 448H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352 335.2 320V340.5c0-42.9-28.4-80.5-69.6-92.3l-30.8-8.8c-8.5-2.4-13.4-11.3-11-19.8s11.3-13.4 19.8-11l30.8 8.8c55 15.7 92.8 65.9 92.8 123.1v15.7l56-32.4 6.4-3.7H515.7c33.3 0 60.3-27 60.3-60.3c0-18.1-8.2-35.3-22.2-46.7l-34.6-28.2c-4.6-3.7-9.4-7.1-14.5-10c8.4-49.3-7.8-100-43.9-135.5zm-318.5 382c-14.7 9.8-18.7 29.7-8.9 44.4s29.7 18.7 44.4 8.9l46-30.7-48.6-44.5-32.9 22zM480 240a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Performance monitoring</span></a></li><li><a href="https://www.appsignal.com/tour/hosts" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-teal-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="server" class="svg-inline--fa fa-server fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Host monitoring</span></a></li><li><a href="https://www.appsignal.com/tour/anomaly-detection" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-red-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="siren-on" class="svg-inline--fa fa-siren-on fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M69.3 36l48 32c11 7.4 14 22.3 6.7 33.3s-22.3 14-33.3 6.7l-48-32c-11-7.4-14-22.3-6.7-33.3s22.3-14 33.3-6.7zM597.3 76l-48 32c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l48-32c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3zM24 192H88c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm528 0h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552c-13.3 0-24-10.7-24-24s10.7-24 24-24zM144 352l25-199.9c4-32 31.2-56.1 63.5-56.1h175c32.3 0 59.5 24 63.5 56.1L496 352H234.1l21.8-174c1.1-8.8-5.1-16.8-13.9-17.9s-16.8 5.1-17.9 13.9L201.9 352H144zM96 416c0-17.7 14.3-32 32-32H512c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Anomaly detection</span></a></li><li><a href="https://www.appsignal.com/tour/uptime-monitoring" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-yellow-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="traffic-light" class="svg-inline--fa fa-traffic-light fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Uptime monitoring</span></a></li><li><a href="https://www.appsignal.com/tour/metrics" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-purple-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Metric dashboards</span></a></li><li><a href="https://www.appsignal.com/tour/workflow" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-blue-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="users" class="svg-inline--fa fa-users fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Workflow</span></a></li><li><a href="https://www.appsignal.com/tour/log-management" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-hot-pink-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="line-columns" class="svg-inline--fa fa-line-columns fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M224 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H192c17.7 0 32-14.3 32-32zm0 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM0 320c0 17.7 14.3 32 32 32H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM224 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM288 64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 192c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32zM288 320c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 448c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Log management</span></a></li><li><a href="https://www.appsignal.com/tour/automated-dashboards" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-purple-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Automated Dashboards</span></a></li><li><a href="https://www.appsignal.com/tour/check-ins" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-blue-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-check" class="svg-inline--fa fa-square-check fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Check-ins</span></a></li><li><a href="https://www.appsignal.com/tour/time-detective" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-azure-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"></div><span class="text-gray-700 group-hover:text-gray-800">Time Detective</span></a></li></ul></div></div></div></li><li><div class="block py-2 px-2 xl:px-3 no-underline cursor-pointer select-none text-gray-200 hover:text-white"><span>Languages</span><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="angle-down" class="svg-inline--fa fa-angle-down inline-block pb-0.5 ml-2 text-gray-400 text-xxs" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M201.4 374.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 306.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z"></path></svg><div class="absolute mt-0 pt-2.5 z-10 w-72 hidden"><div class="w-72 px-3 py-4 bg-white shadow rounded-lg text-left"><h3 class="px-2 c_h-heading c_h-heading--caps text-sm tracking-wider text-gray-600 pb-2">Supported Languages</h3><ul><li><a href="https://www.appsignal.com/ruby" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-red-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gem" class="svg-inline--fa fa-gem fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Ruby (on Rails) APM</span></a></li><li><a href="https://www.appsignal.com/elixir" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-purple-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="droplet" class="svg-inline--fa fa-droplet fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Elixir APM</span></a></li><li><a href="https://www.appsignal.com/nodejs" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-green-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="node-js" class="svg-inline--fa fa-node-js fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Node.js APM</span></a></li><li><a href="https://www.appsignal.com/javascript" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-yellow-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="square-js" class="svg-inline--fa fa-square-js fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">JavaScript Error Tracking</span></a></li><li><a href="https://www.appsignal.com/python" class="flex items-center space-x-3 px-2 py-1 no-underline rounded transition-colors group"><div class="text-blue-500 flex justify-center items-center h-7 w-7 border border-gray-200 bg-white shadow-sm rounded-md group-hover:shadow transition-all"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="python" class="svg-inline--fa fa-python fa-xs " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"></path></svg></div><span class="text-gray-700 group-hover:text-gray-800">Python APM</span></a></li></ul></div></div></div></li><li><a href="https://www.appsignal.com/learning-center" class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white ">Learn</a></li><li><a href="https://docs.appsignal.com" class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white ">Docs</a></li><li><a class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white " href="/">Blog</a></li><li><a href="https://www.appsignal.com/plans" class="block py-2 px-2 xl:px-3 no-underline text-gray-200 hover:text-white ">Pricing</a></li></ul></div><ul class="hidden xl:flex justify-end space-x-4 dark"><li><a href="https://appsignal.com/users/sign_in" class="c-button c-button--sm text-white border-gray-700 bg-blue-800 hover:bg-gray-700">Login</a></li><li><a href="https://appsignal.com/users/sign_up" class="c-button c-button--sm c-button--green">Start free trial</a></li></ul><div class="xl:hidden dark"><a href="#menu" class="c-button c-button--sm c-button--white dark:c-button--gray"><div class="flex item-center space-x-2 pr-0.5"><div>Menu</div><div class="inline-block w-2 pt-0.25"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"></path></svg></div></div></a></div></div><nav class="hidden border-t border-gray-700"><div class="dark c-container h-screen overflow-y-auto pt-7 pb-40"><div><h3 class="c_h-heading c_h-heading--caps text-sm text-gray-200 pb-3 mb-3 border-b border-gray-700">Monitoring features</h3><ul class="pb-8 space-y-1"><li><a href="https://www.appsignal.com/tour/errors/" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bug" class="svg-inline--fa fa-bug " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"></path></svg></figure><span>Error tracking</span></a></li><li><a href="https://www.appsignal.com/tour/performance" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rabbit-running" class="svg-inline--fa fa-rabbit-running " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M460.7 39.3l-2.2-2.1c-4.7-4.6-11.5-6.4-17.9-4.7s-11.4 6.6-13.1 13l-.8 2.9c-3.3 11.8-5.1 23.7-5.5 35.6c24.3 20.6 42.9 47.8 53.3 78.8c-8.2-1.9-16.5-2.9-25-2.9c-.6 0-1.1 0-1.7 0c-18.4-44-56.5-77.4-103.6-89.3l-3.4-.9c-6.2-1.6-12.9-.6-18.5 2.6c-10.8 6.2-15.6 19.5-11.2 31.1c14.9 39.5 44.3 71.4 81.4 89.7c-3.7 6.6-6.4 14-7.6 21.8L279.7 154.9C248.8 137.3 213.8 128 178.2 128c-32.3 0-62.2 16.8-78.9 44.4C89 159.9 73.4 152 56 152c-30.9 0-56 25.1-56 56s25.1 56 56 56c11.3 0 21.8-3.3 30.6-9.1c4.9 17.2 14.5 33.1 28.4 45.9L257.2 431.2C269 442 284.4 448 300.4 448H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352 335.2 320V340.5c0-42.9-28.4-80.5-69.6-92.3l-30.8-8.8c-8.5-2.4-13.4-11.3-11-19.8s11.3-13.4 19.8-11l30.8 8.8c55 15.7 92.8 65.9 92.8 123.1v15.7l56-32.4 6.4-3.7H515.7c33.3 0 60.3-27 60.3-60.3c0-18.1-8.2-35.3-22.2-46.7l-34.6-28.2c-4.6-3.7-9.4-7.1-14.5-10c8.4-49.3-7.8-100-43.9-135.5zm-318.5 382c-14.7 9.8-18.7 29.7-8.9 44.4s29.7 18.7 44.4 8.9l46-30.7-48.6-44.5-32.9 22zM480 240a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z"></path></svg></figure><span>Performance monitoring</span></a></li><li><a href="https://www.appsignal.com/tour/hosts" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="server" class="svg-inline--fa fa-server " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"></path></svg></figure><span>Host monitoring</span></a></li><li><a href="https://www.appsignal.com/tour/anomaly-detection" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="siren-on" class="svg-inline--fa fa-siren-on " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M69.3 36l48 32c11 7.4 14 22.3 6.7 33.3s-22.3 14-33.3 6.7l-48-32c-11-7.4-14-22.3-6.7-33.3s22.3-14 33.3-6.7zM597.3 76l-48 32c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l48-32c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3zM24 192H88c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm528 0h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552c-13.3 0-24-10.7-24-24s10.7-24 24-24zM144 352l25-199.9c4-32 31.2-56.1 63.5-56.1h175c32.3 0 59.5 24 63.5 56.1L496 352H234.1l21.8-174c1.1-8.8-5.1-16.8-13.9-17.9s-16.8 5.1-17.9 13.9L201.9 352H144zM96 416c0-17.7 14.3-32 32-32H512c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416z"></path></svg></figure><span>Anomaly detection</span></a></li><li><a href="https://www.appsignal.com/tour/uptime-monitoring" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="traffic-light" class="svg-inline--fa fa-traffic-light " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z"></path></svg></figure><span>Uptime monitoring</span></a></li><li><a href="https://www.appsignal.com/tour/metrics" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></figure><span>Metric dashboards</span></a></li><li><a href="https://www.appsignal.com/tour/workflow" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="users" class="svg-inline--fa fa-users " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z"></path></svg></figure><span>Workflow</span></a></li><li><a href="https://www.appsignal.com/tour/log-management" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="line-columns" class="svg-inline--fa fa-line-columns " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M224 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H192c17.7 0 32-14.3 32-32zm0 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM0 320c0 17.7 14.3 32 32 32H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM224 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM288 64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 192c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32zM288 320c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 448c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32z"></path></svg></figure><span>Log management</span></a></li><li><a href="https://www.appsignal.com/tour/automated-dashboards" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></figure><span>Automated Dashboards</span></a></li><li><a href="https://www.appsignal.com/tour/check-ins" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-check" class="svg-inline--fa fa-square-check " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"></path></svg></figure><span>Check-ins</span></a></li><li><a href="https://www.appsignal.com/tour/time-detective" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"></figure><span>Time Detective</span></a></li></ul></div><div><h3 class="c_h-heading c_h-heading--caps text-sm text-gray-200 pb-3 mb-3 border-b border-gray-700">Supported Languages</h3><ul class="pb-8 space-y-1"><li><a href="https://www.appsignal.com/ruby" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gem" class="svg-inline--fa fa-gem " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z"></path></svg></figure><span>Ruby (on Rails) APM</span></a></li><li><a href="https://www.appsignal.com/elixir" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="droplet" class="svg-inline--fa fa-droplet " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"></path></svg></figure><span>Elixir APM</span></a></li><li><a href="https://www.appsignal.com/nodejs" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="node-js" class="svg-inline--fa fa-node-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"></path></svg></figure><span>Node.js APM</span></a></li><li><a href="https://www.appsignal.com/javascript" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="square-js" class="svg-inline--fa fa-square-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z"></path></svg></figure><span>JavaScript Error Tracking</span></a></li><li><a href="https://www.appsignal.com/python" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="python" class="svg-inline--fa fa-python " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"></path></svg></figure><span>Python APM</span></a></li></ul></div><div></div><div></div><div></div><div></div><div><ul><li><a href="https://www.appsignal.com/learning-center" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="book-open" class="svg-inline--fa fa-book-open " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M249.6 471.5c10.8 3.8 22.4-4.1 22.4-15.5V78.6c0-4.2-1.6-8.4-5-11C247.4 52 202.4 32 144 32C93.5 32 46.3 45.3 18.1 56.1C6.8 60.5 0 71.7 0 83.8V454.1c0 11.9 12.8 20.2 24.1 16.5C55.6 460.1 105.5 448 144 448c33.9 0 79 14 105.6 23.5zm76.8 0C353 462 398.1 448 432 448c38.5 0 88.4 12.1 119.9 22.6c11.3 3.8 24.1-4.6 24.1-16.5V83.8c0-12.1-6.8-23.3-18.1-27.6C529.7 45.3 482.5 32 432 32c-58.4 0-103.4 20-123 35.6c-3.3 2.6-5 6.8-5 11V456c0 11.4 11.7 19.3 22.4 15.5z"></path></svg></figure><span>Learn</span></a></li><li><a href="https://docs.appsignal.com" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="book" class="svg-inline--fa fa-book " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16zm16 48H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z"></path></svg></figure><span>Docs</span></a></li><li><a class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base" href="/"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rss" class="svg-inline--fa fa-rss " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg></figure><span>Blog</span></a></li><li><a href="https://www.appsignal.com/plans" class="flex items-center space-x-3 py-1 no-underline text-sm sm:text-base"><figure class="c_h-icon-box undefined c_h-icon-box--sm undefined"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="dollar-sign" class="svg-inline--fa fa-dollar-sign " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M160 0c17.7 0 32 14.3 32 32V67.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.1c-.4-.1-.9-.1-1.3-.2l-.2 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11V32c0-17.7 14.3-32 32-32z"></path></svg></figure><span>Pricing</span></a></li><li><a href="https://appsignal.com/users/sign_in" class="block mt-4 text-center c-button c-button--sm c-button--gray">Login</a></li><li><a href="https://appsignal.com/users/sign_up" class="block mt-4 text-center c-button c-button--sm">Start free trial</a></li></ul></div></div></nav></header><section class="bg-gradient-to-b from-gray-900 to-gray-800 py-12 sm:py-16"><div class="c-container space-y-5 sm:space-y-6"><div class="max-w-4xl mx-auto space-y-5 sm:space-y-6 text-center"><h1 class="c_h-heading c_h-heading--4xl sm:c_h-heading--5xl md:c_h-heading--6xl lg:c_h-heading--7xl text-white">AppSignal Blog</h1><p class="max-w-3xl mx-auto text-lg lg:text-xl text-gray-200">AppSignal APM combines<!-- --> <a href="https://www.appsignal.com/tour/performance" class="hover:text-white">performance monitoring</a> <!-- -->and<!-- --> <a href="https://www.appsignal.com/tour/errors" class="hover:text-white">error tracking</a> <!-- -->in one clear interface. For<!-- --> <a href="https://www.appsignal.com/ruby" class="hover:text-white">Ruby (on Rails)</a>,<!-- --> <a href="https://www.appsignal.com/elixir" class="hover:text-white">Elixir</a> <!-- -->and<!-- --> <a href="https://www.appsignal.com/nodejs" class="hover:text-white">Node.js</a>.</p></div></div></section><nav class="relative flex bg-gray-100"><div class="absolute h-1/2 inset-x-0 inset-y-0 bg-gray-800"></div><ul class="z-10 c_h-tabs mb-0 max-w-5xl p-4 md:py-5 lg:px-12 mx-4 sm:mx-auto bg-white rounded-lg shadow-sm"><li><a class="c_h-tabs__tab text-base sm:text-lg sm:mb-0 c_h-tabs__tab--active c_h-tabs__tab--blue" href="/">All</a></li><li><a class="c_h-tabs__tab text-base sm:text-lg sm:mb-0 " href="/category/appsignal.html">AppSignal Updates</a></li><li><a class="c_h-tabs__tab text-base sm:text-lg sm:mb-0 " href="/category/ruby.html">Ruby</a></li><li><a class="c_h-tabs__tab text-base sm:text-lg sm:mb-0 " href="/category/elixir.html">Elixir</a></li><li><a class="c_h-tabs__tab text-base sm:text-lg sm:mb-0 " href="/category/javascript.html">JavaScript</a></li><li><a class="c_h-tabs__tab text-base sm:text-lg sm:mb-0 " href="/category/python.html">Python</a></li><li><a class="c_h-tabs__tab text-base sm:text-lg sm:mb-0 " href="/category/academy.html">APM Academy</a></li></ul></nav><main class="bg-gray-100"><section><div class="c-container py-12 sm:py-16"><div class="max-w-7xl mx-auto grid sm:grid-cols-2 lg:grid-cols-3 gap-6 lg:gap-12"><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/12/17/appsignals-top-5-elixir-posts-in-2024.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="AppSignal’s Top 5 Elixir Posts in 2024" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-elixir.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-purple-500 block mb-2 text-sm font-medium uppercase tracking-wide">Elixir</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">AppSignal’s Top 5 Elixir Posts in 2024</h1><p class="text-lg text-gray-700">It&#x27;s time for our yearly rundown of our top 5 best-performing Elixir posts.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Ana Malinović<!-- --> on <time dateTime="2024-12-17">Dec 17</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/12/17/appsignals-top-5-javascript-posts-in-2024.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="AppSignal’s Top 5 JavaScript Posts in 2024" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-node.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-green-500 block mb-2 text-sm font-medium uppercase tracking-wide">JavaScript</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">AppSignal’s Top 5 JavaScript Posts in 2024</h1><p class="text-lg text-gray-700">Check out the 5 JavaScript posts that really stood out on our blog in 2024.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Ana Malinović<!-- --> on <time dateTime="2024-12-17">Dec 17</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/12/17/appsignals-top-5-ruby-posts-in-2024.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="AppSignal’s Top 5 Ruby Posts in 2024" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Ftop-5-ruby.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-red-500 block mb-2 text-sm font-medium uppercase tracking-wide">Ruby</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">AppSignal’s Top 5 Ruby Posts in 2024</h1><p class="text-lg text-gray-700">Let&#x27;s look back at our top 5 Ruby posts this year.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Ana Malinović<!-- --> on <time dateTime="2024-12-17">Dec 17</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/12/12/the-top-five-new-relic-alternatives.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="The Top 5 New Relic Alternatives" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnew-relic.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-blue-500 block mb-2 text-sm font-medium uppercase tracking-wide">AppSignal</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">The Top 5 New Relic Alternatives</h1><p class="text-lg text-gray-700">Exploring alternatives to New Relic? In this post, we&#x27;ll compare New Relic to its top competitors to help you choose the best monitoring tool for you.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Connor James<!-- --> on <time dateTime="2024-12-12">Dec 12</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/12/11/a-deep-dive-into-commonjs-and-es-modules-in-nodejs.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="A Deep Dive Into CommonJS and ES Modules in Node.js" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fcommon-js-es.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-green-500 block mb-2 text-sm font-medium uppercase tracking-wide">JavaScript</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">A Deep Dive Into CommonJS and ES Modules in Node.js</h1><p class="text-lg text-gray-700">While CommonJS has served the Node community well, ES modules are rapidly gaining traction. Let&#x27;s take a deep dive into both.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Damilola Olatunji<!-- --> on <time dateTime="2024-12-11">Dec 11</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/12/10/distributed-phoenix-deployment-and-scaling.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="Distributed Phoenix: Deployment and Scaling" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fp2-dist-phoenix.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-purple-500 block mb-2 text-sm font-medium uppercase tracking-wide">Elixir</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">Distributed Phoenix: Deployment and Scaling</h1><p class="text-lg text-gray-700">In part one of this series, we managed distributed state using GenServers. In this part, we&#x27;ll explore deployment and scaling strategies.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Pulkit Goyal<!-- --> on <time dateTime="2024-12-10">Dec 10</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/12/04/find-and-fix-n-plus-one-queries-in-django-using-appsignal.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="Find and Fix N+1 Queries in Django Using AppSignal" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-12%2Fnplus1-queries-django.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-blue-500 block mb-2 text-sm font-medium uppercase tracking-wide">Python</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">Find and Fix N+1 Queries in Django Using AppSignal</h1><p class="text-lg text-gray-700">We&#x27;ll track the N+1 query problem in a Django app and fix it using AppSignal.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Nik Tomazic<!-- --> on <time dateTime="2024-12-04">Dec 4</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/11/27/server-sent-events-and-websockets-in-rack-for-ruby.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="Server-sent Events and WebSockets in Rack for Ruby" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp3-rack.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-red-500 block mb-2 text-sm font-medium uppercase tracking-wide">Ruby</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">Server-sent Events and WebSockets in Rack for Ruby</h1><p class="text-lg text-gray-700">In the final part of our three-part series, we&#x27;ll use server-sent events (SSEs) and WebSockets to establish a persistent connection in a Rack app.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Ayush Newatia<!-- --> on <time dateTime="2024-11-27">Nov 27</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/11/27/unit-testing-in-nodejs-with-jest.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="Unit Testing in Node.js With Jest" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fjest-unit-tests.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-green-500 block mb-2 text-sm font-medium uppercase tracking-wide">JavaScript</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">Unit Testing in Node.js With Jest</h1><p class="text-lg text-gray-700">Jest has become one of the most popular solutions when unit testing in Node: let&#x27;s see why.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Antonello Zanini<!-- --> on <time dateTime="2024-11-27">Nov 27</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/11/21/the-top-5-sentry-alternatives.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="The Top 5 Sentry Alternatives" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-09%2Falternatives-to-sentry.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-blue-500 block mb-2 text-sm font-medium uppercase tracking-wide">AppSignal</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">The Top 5 Sentry Alternatives</h1><p class="text-lg text-gray-700">Let&#x27;s compare Sentry to five competitors to help you find the best application performance monitoring solution.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Connor James<!-- --> on <time dateTime="2024-11-21">Nov 21</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/11/20/avoiding-false-positives-in-nodejs-tests.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="Avoiding False Positives in Node.js Tests" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Ffalse-postives-node.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-green-500 block mb-2 text-sm font-medium uppercase tracking-wide">JavaScript</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">Avoiding False Positives in Node.js Tests</h1><p class="text-lg text-gray-700">Let&#x27;s examine several common false positive patterns that can crop up in Node.js test suites.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Greg Gorlen<!-- --> on <time dateTime="2024-11-20">Nov 20</time></p></footer></article></a><a class="no-underline overflow-hidden bg-white rounded-lg transition shadow-sm hover:shadow-lg" href="/2024/11/20/rack-for-ruby-socket-hijacking.html"><article class="flex flex-wrap content-between h-full space-y-4"><div class="w-full"><figure class="relative h-40 sm:h-48 bg-gray-200"><img alt="Rack for Ruby: Socket Hijacking" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 640px) 340px, (min-width: 768px) 394px, 100vw" srcSet="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=640&amp;q=60 640w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=750&amp;q=60 750w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=828&amp;q=60 828w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=1080&amp;q=60 1080w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=1200&amp;q=60 1200w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=1920&amp;q=60 1920w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=2048&amp;q=60 2048w, /_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=3840&amp;q=60 3840w" src="/_next/image?url=%2Fimages%2Fblog%2F2024-11%2Fp2-rack.jpg&amp;w=3840&amp;q=60"/></figure><div class="pt-5 px-4"><div><span class="text-red-500 block mb-2 text-sm font-medium uppercase tracking-wide">Ruby</span><h1 class="c_h-heading c_h-heading--2xl leading-tight hover:underline mb-3">Rack for Ruby: Socket Hijacking</h1><p class="text-lg text-gray-700">Rack is the foundation for every popular Ruby web framework in existence. In part two of this three-part series, we&#x27;ll run through socket hijacking.</p></div></div></div><footer class="pb-5 px-4"><p class="text-gray-700">By <!-- -->Ayush Newatia<!-- --> on <time dateTime="2024-11-20">Nov 20</time></p></footer></article></a></div></div></section><section class="bg-white || content-visibility-auto"><div class="c-container max-w-4xl mx-auto py-12 sm:py-24 space-y-12 text-gray-800"><h1 class="c_h-heading c_h-heading--4xl">More articles</h1><ul class="space-y-6 sm:space-y-2"><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-11-14">Nov 14, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/11/14/manage-your-pino-logs-with-appsignal.html">Manage Your Pino Logs with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-11-13">Nov 13, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/11/13/streamlined-contract-testing-in-nodejs-a-simple-and-achievable-approach.html">Streamlined Contract Testing in Node.js: A Simple and Achievable Approach</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-11-12">Nov 12, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/11/12/how-to-track-errors-in-oban-for-elixir-using-appsignal.html">How to Track Errors in Oban for Elixir Using AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-11-07">Nov 07, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/11/07/the-top-5-honeybadger-alternatives-in-2024.html">The Top 5 Honeybadger Alternatives in 2024</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-30">Oct 30, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/30/advanced-open-edx-monitoring-with-appsignal-for-python.html">Advanced Open edX Monitoring with AppSignal for Python</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-30">Oct 30, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/30/optimize-database-performance-in-ruby-on-rails-and-activerecord.html">Optimize Database Performance in Ruby on Rails and ActiveRecord</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-30">Oct 30, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/30/the-basics-of-rack-for-ruby.html">The Basics of Rack for Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-29">Oct 29, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/29/managing-distributed-state-with-genservers-in-phoenix-and-elixir.html">Managing Distributed State with GenServers in Phoenix and Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-16">Oct 16, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/16/best-testing-practices-in-nodejs.html">Best Testing Practices in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-16">Oct 16, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/16/how-to-use-lambda-functions-in-python.html">How to Use Lambda Functions in Python</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-10">Oct 10, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/10/rails-community-survey-2024-appsignal-ranks-in-top-5.html">Rails Community Survey 2024: AppSignal Ranks in Top 5</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-08">Oct 08, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/08/find-and-fix-n-plus-1-queries-using-appsignal-for-a-phoenix-app-in-elixir.html">Find and Fix N+1 Queries Using AppSignal for a Phoenix App in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-08">Oct 08, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/08/weve-redesigned-our-charts-at-appsignal-6-new-features.html">We&#x27;ve Redesigned Our Charts at AppSignal: 6 New Features</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-07">Oct 07, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/07/whats-new-in-ruby-on-rails-8.html">What&#x27;s New in Ruby on Rails 8</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-02">Oct 02, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/02/integrating-open-edx-with-appsignal.html">Integrating Open edX with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-10-02">Oct 02, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/10/02/measuring-the-impact-of-feature-flags-in-ruby-on-rails-with-appsignal.html">Measuring the Impact of Feature Flags in Ruby on Rails with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-26">Sep 26, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/26/introducing-check-ins-for-scheduled-job-and-continuous-process-monitoring.html">Introducing Check-ins for Scheduled Job and Continuous Process Monitoring</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-18">Sep 18, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/18/dynamodb-single-table-design-with-typescript.html">DynamoDB Single-Table Design with TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-18">Sep 18, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/18/rubys-hidden-gems-sorbet.html">Ruby’s hidden gems: Sorbet</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-17">Sep 17, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/17/a-complete-guide-to-phoenix-for-elixir-monitoring-with-appsignal.html">A Complete Guide to Phoenix for Elixir Monitoring with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-11">Sep 11, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/11/ruby-on-rails-7-1-partial-strict-locals-and-their-gotchas.html">Ruby on Rails 7.1: Partial Strict Locals and Their Gotchas</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-11">Sep 11, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/11/top-5-http-request-libraries-for-nodejs.html">Top 5 HTTP Request Libraries for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-04">Sep 04, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/04/integrating-stripe-into-a-one-product-django-python-shop.html">Integrating Stripe Into A One-Product Django Python Shop</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-09-03">Sep 03, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/09/03/scaling-your-phoenix-app-in-elixir-with-flame.html">Scaling Your Phoenix App in Elixir with FLAME</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-28">Aug 28, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/28/build-a-one-product-shop-with-the-python-django-framework-and-htmx.html">Build a One-Product Shop With the Python Django Framework and Htmx</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-28">Aug 28, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/28/how-to-handle-errors-in-nextjs-for-node-with-the-app-router.html">How to Handle Errors in Next.js for Node With the App Router</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-23">Aug 23, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/23/appsignal-for-ruby-version-4-0.html">AppSignal for Ruby Version 4.0</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-21">Aug 21, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/21/monitor-nodejs-amqp-brokers-with-appsignal.html">Monitor Node.js AMQP Brokers with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-21">Aug 21, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/21/squash-your-ruby-and-rails-bugs-faster.html">Squash Your Ruby and Rails Bugs Faster</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-20">Aug 20, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/20/livestate-for-elixir-an-overview-and-how-to-build-embeddable-web-apps.html">LiveState for Elixir: An Overview and How to Build Embeddable Web Apps</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-14">Aug 14, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/14/an-introduction-to-http-caching-in-ruby-on-rails.html">An Introduction to HTTP Caching in Ruby On Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-14">Aug 14, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/14/an-introduction-to-unit-testing-in-nodejs.html">An Introduction to Unit Testing in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-07">Aug 07, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/07/advanced-use-cases-of-the-nodejs-native-test-runner.html">Advanced Use Cases of the Node.js Native Test Runner</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-07">Aug 07, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/07/an-introduction-to-nix-for-ruby-developers.html">An Introduction to Nix for Ruby Developers</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-08-06">Aug 06, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/08/06/custom-instrumentation-for-a-phoenix-app-in-elixir-with-appsignal.html">Custom Instrumentation for a Phoenix App in Elixir with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-31">Jul 31, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/31/monitor-the-performance-of-your-python-django-app-with-appsignal.html">Monitor the Performance of Your Python Django App with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-31">Jul 31, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/31/setting-up-custom-metrics-with-effective-alerts-for-a-ruby-app-in-appsignal.html">Setting Up Custom Metrics with Effective Alerts for a Ruby App in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-30">Jul 30, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/30/monitor-bullmq-background-jobs-with-appsignal.html">Monitor BullMQ Background Jobs with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-24">Jul 24, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/24/grokking-dynamodb-with-typescript.html">Grokking DynamoDB with TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-24">Jul 24, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/24/whats-coming-in-ruby-on-rails-7-2-database-features-in-active-record.html">What&#x27;s Coming in Ruby on Rails 7.2: Database Features in Active Record</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-23">Jul 23, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/23/enhancing-your-elixir-codebase-with-gleam.html">Enhancing Your Elixir Codebase with Gleam</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-17">Jul 17, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/17/an-introduction-to-auth0-for-ruby-on-rails.html">An Introduction to Auth0 for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-17">Jul 17, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/17/exploring-the-nodejs-native-test-runner.html">Exploring the Node.js Native Test Runner</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-10">Jul 10, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/10/monitor-the-performance-of-your-fastapi-for-python-app-with-appsignal.html">Monitor the Performance of your Python FastAPI App with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-09">Jul 09, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/09/track-errors-in-phoenix-for-elixir-with-appsignal.html">Track Errors in Phoenix for Elixir with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-03">Jul 03, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/03/debugging-in-ruby-with-debug.html">Debugging in Ruby with Debug</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-07-03">Jul 03, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/07/03/security-best-practices-for-your-nodejs-application.html">Security Best Practices for Your Node.js Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-26">Jun 26, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/26/deploy-a-python-fastapi-application-to-render.html">Deploy a Python FastAPI Application to Render</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-25">Jun 25, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/25/leverage-concurrency-efficiently-when-managing-multiple-tasks-in-elixir.html">Leverage Concurrency Efficiently When Managing Multiple Tasks in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-19">Jun 19, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/19/how-to-perform-data-validation-in-nodejs.html">How to Perform Data Validation in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-12">Jun 12, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/12/monitor-the-performance-of-your-ruby-on-rails-application-using-appsignal.html">Monitor the Performance of Your Ruby on Rails Application Using AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-11">Jun 11, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/11/advanced-dependency-injection-in-elixir-with-rewire.html">Advanced Dependency Injection in Elixir with Rewire</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-06">Jun 06, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/06/the-top-5-datadog-alternatives-in-2024.html">The Top 5 Datadog Alternatives in 2024</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-05">Jun 05, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/05/develop-a-serverless-typescript-api-on-aws-ecs-with-fargate.html">Develop a Serverless TypeScript API on AWS ECS with Fargate</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-06-05">Jun 05, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/06/05/how-to-use-tailwind-css-for-your-ruby-on-rails-project.html">How to Use Tailwind CSS for Your Ruby On Rails Project</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-29">May 29, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/29/getting-started-your-ruby-on-rails-app-hosted-on-digitalocean-with-appsignal.html">Getting Started: Your Ruby On Rails App Hosted On DigitalOcean With AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-29">May 29, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/29/track-errors-in-your-python-flask-application-with-appsignal.html">Track Errors in Your Python Flask Application with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-23">May 23, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/23/appsignal-is-a-rails-world-2024-platinum-sponsor.html">AppSignal Is A Rails World 2024 Platinum Sponsor</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-22">May 22, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/22/cypress-vs-playwright-for-node-a-head-to-head-comparison.html">Cypress vs. Playwright for Node: A Head-to-Head Comparison</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-22">May 22, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/22/five-things-to-avoid-in-ruby.html">Five Things to Avoid in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-21">May 21, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/21/using-dependency-injection-in-elixir.html">Using Dependency Injection in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-15">May 15, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/15/creating-forms-in-ruby-on-rails-with-simple-form.html">Creating Forms in Ruby on Rails with Simple Form</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-15">May 15, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/15/understanding-offset-and-cursor-based-pagination-in-nodejs.html">Understanding Offset and Cursor-Based Pagination in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-08">May 08, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/08/debugging-in-ruby-with-pry-byebug.html">Debugging in Ruby with pry-byebug</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-08">May 08, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/08/effective-testing-in-javascript.html">Effective Testing in JavaScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-07">May 07, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/07/whats-new-in-nodejs-22.html">What&#x27;s New in Node.js 22</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-01">May 01, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/01/anycable-for-ruby-on-rails-how-does-it-improve-over-action-cable.html">AnyCable for Ruby on Rails: How Does it Improve over Action Cable?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-05-01">May 01, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/05/01/when-to-use-bun-instead-of-nodejs.html">When to Use Bun Instead of Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-04-24">Apr 24, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/04/24/should-you-use-ruby-on-rails-or-hanami.html">Should You Use Ruby on Rails or Hanami?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-04-23">Apr 23, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/04/23/deep-diving-into-the-erlang-scheduler.html">Deep Diving Into the Erlang Scheduler</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-04-18">Apr 18, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/04/18/introducing-support-for-apollo-gateway.html">Introducing Support for Apollo Gateway</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-04-17">Apr 17, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/04/17/handling-exceptions-in-grape-for-ruby.html">Handling Exceptions in Grape for Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-04-17">Apr 17, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/04/17/measuring-nodejs-performance-in-production-with-performance-hooks.html">Measuring Node.js Performance in Production with Performance Hooks</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-04-03">Apr 03, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/04/03/how-to-implement-rate-limiting-in-express-for-nodejs.html">How to Implement Rate Limiting in Express for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-04-02">Apr 02, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/04/02/how-to-use-flume-in-your-elixir-app.html">How to Use Flume in your Elixir Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-28">Mar 28, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/28/tracking-custom-metrics-in-python-with-appsignal.html">Tracking Custom Metrics in Python with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-27">Mar 27, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/27/building-serverless-apps-with-the-aws-cdk-using-typescript.html">Building Serverless Apps with the AWS CDK Using TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-27">Mar 27, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/27/track-errors-in-fastapi-for-python-with-appsignal.html">Track Errors in FastAPI for Python with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-20">Mar 20, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/20/good-database-migration-practices-for-your-ruby-on-rails-app-using-strong-migrations.html">Good Database Migration Practices for Your Ruby on Rails App using Strong Migrations</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-19">Mar 19, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/19/direct-file-uploads-to-amazon-s3-with-phoenix-liveview.html">Direct File Uploads to Amazon S3 with Phoenix LiveView</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-14">Mar 14, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/14/appsignals-2024-ruby-event-sponsorships.html">AppSignal&#x27;s 2024 Ruby Event Sponsorships</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-13">Mar 13, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/13/nodejs-performance-apis-an-introduction.html">Node.js Performance APIs: An Introduction</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-13">Mar 13, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/13/turbo-streaming-modals-in-ruby-on-rails.html">Turbo Streaming Modals in Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-07">Mar 07, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/07/two-factor-authentication-enforcement-is-now-available-on-all-appsignal-plans.html">Two-Factor Authentication Enforcement Now Available On All AppSignal Plans</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-06">Mar 06, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/06/active-record-or-sequel-which-best-fits-the-needs-of-your-ruby-app.html">Active Record or Sequel: Which Best Fits The Needs of Your Ruby App?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-03-05">Mar 05, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/03/05/powerful-caching-in-elixir-with-cachex.html">Powerful Caching in Elixir with Cachex</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-28">Feb 28, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/28/top-8-recent-v8-in-node-updates.html">Top 8 Recent V8 in Node Updates</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-28">Feb 28, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/28/track-errors-in-your-python-django-application-with-appsignal.html">Track Errors in Your Python Django Application with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-21">Feb 21, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/21/hotwire-modals-in-ruby-on-rails-with-stimulus-and-turbo-frames.html">Hotwire Modals in Ruby on Rails with Stimulus and Turbo Frames</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-20">Feb 20, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/20/creating-custom-exceptions-in-elixir.html">Creating Custom Exceptions in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-14">Feb 14, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/14/build-an-idempotent-api-in-nodejs.html">Build an Idempotent API in Node.js with Redis</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-14">Feb 14, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/14/full-text-search-for-ruby-on-rails-with-litesearch.html">Full-Text Search for Ruby on Rails with Litesearch</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-13">Feb 13, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/13/introducing-appsignal-business-add-ons.html">Introducing AppSignal Business Add-Ons</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-07">Feb 07, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/07/a-deep-dive-into-rspec-tests-in-ruby-on-rails.html">A Deep Dive Into RSpec Tests in Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-02-06">Feb 06, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/02/06/how-to-build-a-memory-efficient-elixir-app-with-streams.html">How to Build a Memory-efficient Elixir App with Streams</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-01-31">Jan 31, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/01/31/an-introduction-to-testing-with-django-for-python.html">An Introduction to Testing with Django for Python</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-01-31">Jan 31, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/01/31/throttling-a-kafka-queue-in-nodejs.html">Throttling a Kafka Queue in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-01-24">Jan 24, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/01/24/behaviour-driven-development-in-ruby-with-rspec.html">Behaviour Driven Development in Ruby with RSpec</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-01-23">Jan 23, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/01/23/build-a-simple-tracing-system-in-elixir.html">Build A Simple Tracing System in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-01-17">Jan 17, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/01/17/dealing-with-cpu-bound-tasks-in-nodejs.html">Dealing with CPU-bound Tasks in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-01-17">Jan 17, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/01/17/speed-up-your-ruby-on-rails-application-with-litecache.html">Speed Up Your Ruby on Rails Application with LiteCache</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2024-01-10">Jan 10, 2024</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2024/01/10/keep-your-ruby-code-maintainable-with-draper.html">Keep your Ruby Code Maintainable with Draper</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-20">Dec 20, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/20/appsignals-top-5-elixir-posts-in-2023.html">AppSignal’s Top 5 Elixir Posts in 2023</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-20">Dec 20, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/20/appsignals-top-5-javascript-posts-in-2023.html">AppSignal’s Top 5 JavaScript Posts in 2023</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-20">Dec 20, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/20/appsignals-top-5-ruby-posts-in-2023.html">AppSignal’s Top 5 Ruby Posts in 2023</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-19">Dec 19, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/19/whats-new-in-elixir-1-16.html">What&#x27;s New in Elixir 1.16</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-18">Dec 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/18/connecting-react-and-stimulusjs-with-javascript-events.html">Connecting React.js and StimulusJS with JavaScript Events</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-13">Dec 13, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/13/appsignal-expands-monitoring-capabilities-with-vector.html">AppSignal Expands Monitoring Capabilities with Vector</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-13">Dec 13, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/13/server-side-rendering-with-nextjs-react-and-typescript.html">Server-side Rendering with Next.js, React, and TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-13">Dec 13, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/13/stream-updates-to-your-users-with-litecable-for-ruby-on-rails.html">Stream Updates to Your Users with LiteCable for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-06">Dec 06, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/06/how-to-deploy-a-python-flask-app-with-heroku.html">How to Deploy a Python Flask app with Heroku</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-06">Dec 06, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/06/how-to-use-shoulda-matchers-with-rspec-for-ruby-on-rails.html">How to Use Shoulda Matchers with RSpec for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-12-05">Dec 05, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/12/05/advanced-multi-tenancy-for-elixir-applications-using-ecto.html">Advanced Multi-tenancy for Elixir Applications Using Ecto</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-29">Nov 29, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/29/an-introduction-to-profiling-in-nodejs.html">An Introduction to Profiling in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-29">Nov 29, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/29/keep-your-ruby-code-maintainable-with-money-rails.html">Keep Your Ruby Code Maintainable with Money-Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-29">Nov 29, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/29/monitor-solid-cache-with-appsignal.html">Monitor Solid Cache in Rails with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-22">Nov 22, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/22/shaping-the-future-of-ruby-and-kafka-together-with-rdkafka-ruby.html">Shaping the Future of Ruby and Kafka Together with rdkafka-ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-21">Nov 21, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/21/setting-up-a-multi-tenant-phoenix-app-for-elixir.html">Setting Up a Multi-tenant Phoenix App for Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-16">Nov 16, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/16/how-we-handle-upgrades-at-appsignal.html">How We Handle Upgrades at AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-15">Nov 15, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/15/handle-incoming-webhooks-with-litejob-for-ruby-on-rails.html">Handle Incoming Webhooks with LiteJob for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-15">Nov 15, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/15/how-to-optimize-mongodb-performance-for-nodejs.html">How to Optimize MongoDB Performance for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-08">Nov 08, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/08/how-to-use-timeouts-in-nodejs.html">How to Use Timeouts in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-07">Nov 07, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/07/validating-data-in-elixir-using-ecto-and-nimbleoptions.html">Validating Data in Elixir: Using Ecto and NimbleOptions</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-06">Nov 06, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/06/how-appsignal-got-its-domain-name.html">How AppSignal Got Its (Domain) Name</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-06">Nov 06, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/06/we-have-levelled-up-our-top-monitoring-features.html">We&#x27;ve Levelled up Our Top Monitoring Features</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-01">Nov 01, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/01/a-deep-dive-into-litedb-for-ruby%20on-rails.html">A Deep Dive Into LiteDB for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-11-01">Nov 01, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/11/01/what-do-deno-and-bun-bring-to-the-table.html">What Do Deno and Bun Bring to the Table?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-31">Oct 31, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/31/appsignal-monitoring-available-for-python-applications.html">AppSignal Monitoring Available for Python Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-30">Oct 30, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/30/sponsoring-rails-world-what-did-it-cost-and-was-it-worth-it.html">Sponsoring Rails World: What Did It Cost, and Was It Worth It?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-25">Oct 25, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/25/whats-new-in-nodejs-21.html">What&#x27;s New in Node.js 21</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-24">Oct 24, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/24/how-to-use-zig-for-elixir-nifs.html">How To Use Zig for Elixir NIFs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-18">Oct 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/18/advanced-usages-of-action-policy-for-ruby-on-rails.html">Advanced Usages of Action Policy for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-18">Oct 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/18/aws-step-functions-with-nodejs-build-an-api.html">AWS Step Functions with Node.js: Build an API</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-17">Oct 17, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/17/monitor-your-node-and-remix-application-with-appsignal.html">Monitor Your Node.js and Remix Application with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-11">Oct 11, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/11/expressive-ruby-and-rails-communicate-effectively-with-your-code.html">Expressive Ruby and Rails: Communicate Effectively With Your Code</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-10">Oct 10, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/10/validate-data-in-a-phoenix-application-for-elixir.html">Validate Data in a Phoenix Application for Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-04">Oct 04, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/04/deploy-and-test-aws-step-functions-with-nodejs.html">Deploy and Test AWS Step Functions with Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-10-04">Oct 04, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/10/04/using-action-policy-for-a-ruby-on-rails-app-the-basics.html">Using Action Policy for a Ruby on Rails App: The Basics</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-28">Sep 28, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/28/how-to-reduce-reductions-in-elixir.html">How To Reduce Reductions in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-27">Sep 27, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/27/an-introduction-to-litestack-for-ruby-on-rails.html">An Introduction to LiteStack for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-26">Sep 26, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/26/an-introduction-to-exceptions-in-elixir.html">An Introduction to Exceptions in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-20">Sep 20, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/20/an-introduction-to-sidekiq-for-ruby-on-rails.html">An Introduction to Sidekiq for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-20">Sep 20, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/20/when-to-use-playwright-over-puppeteer-in-nodejs.html">When to Use Playwright Over Puppeteer in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-12">Sep 12, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/12/phoenix-1-7-for-elixir-edit-a-form-in-a-modal.html">Phoenix 1.7 for Elixir: Edit a Form in a Modal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-06">Sep 06, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/06/an-introduction-to-rubocop-for-ruby-on-rails.html">An Introduction to RuboCop for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-09-06">Sep 06, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/09/06/job-schedulers-for-node-bull-or-agenda.html">Job Schedulers for Node: Bull or Agenda?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-30">Aug 30, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/30/tracking-errors-in-a-nodejs-application.html">Tracking Errors in a Node.js Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-29">Aug 29, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/29/writing-a-custom-credo-check-in-elixir.html">Writing a Custom Credo Check in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-23">Aug 23, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/23/secure-your-ruby-app-with-json-web-tokens.html">Secure Your Ruby App with JSON Web Tokens</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-16">Aug 16, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/16/pitfalls-to-avoid-in-playwright-for-nodejs.html">Pitfalls to Avoid in Playwright for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-09">Aug 09, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/09/how-to-use-mongodb-and-mongoose-for-nodejs.html">How to Use MongoDB and Mongoose with Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-08">Aug 08, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/08/a-deep-dive-into-subscriptions-with-absinthe.html">A Deep Dive into Subscriptions with Absinthe</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-02">Aug 02, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/02/advanced-usages-of-devise-for-rails.html">Advanced Usages of Devise for Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-08-01">Aug 01, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/08/01/add-a-form-to-a-modal-in-phoenix-1-7.html">Add a Form to a Modal in Phoenix 1.7</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-26">Jul 26, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/26/an-introduction-to-metaprogramming-in-ruby.html">An Introduction to Metaprogramming in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-26">Jul 26, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/26/track-errors-in-fastify-with-appsignal.html">Track Errors in Fastify with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-19">Jul 19, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/19/how-to-delegate-methods-in-ruby.html">How to Delegate Methods in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-18">Jul 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/18/observe-your-phoenix-app-with-structured-logging.html">Observe Your Phoenix App with Structured Logging</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-12">Jul 12, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/12/an-introduction-to-devise-for-ruby-on-rails.html">An Introduction to Devise for Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-12">Jul 12, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/12/an-introduction-to-playwright-for-nodejs.html">An Introduction to Playwright for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-11">Jul 11, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/11/boost-http-client-monitoring-in-elixir-with-appsignal-and-tesla-templates.html">Boost HTTP Client Monitoring in Elixir with AppSignal and Tesla Templates</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-05">Jul 05, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/05/multithreading-with-worker-threads-in-nodejs.html">Multithreading with Worker Threads in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-04">Jul 04, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/04/a-deep-dive-into-mutations-with-absinthe.html">A Deep Dive into Mutations with Absinthe</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-07-04">Jul 04, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/07/04/monitoring-your-elixir-graphql-api-with-appsignal.html">Monitoring Your Elixir GraphQL API with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-28">Jun 28, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/28/keep-your-ruby-app-secure-with-bundler.html">Keep Your Ruby App Secure with Bundler</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-28">Jun 28, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/28/migrate-your-express-application-to-fastify.html">Migrate Your Express Application to Fastify</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-27">Jun 27, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/27/expand-your-monitoring-capabilities-with-appsignal-standalone-agent-docker-image.html">Expand Your Monitoring Capabilities with AppSignal&#x27;s Standalone Agent Docker Image</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-21">Jun 21, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/21/an-introduction-to-lambdas-in-ruby.html">An Introduction to Lambdas in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-20">Jun 20, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/20/create-and-open-a-modal-in-phoenix-1-7.html">Create and Open a Modal in Phoenix 1.7</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-20">Jun 20, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/20/exceptional-error-reporting-for-rails-exceptions.html">Exceptional Error Reporting for Rails Exceptions</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-14">Jun 14, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/14/puppeteer-in-nodejs-more-antipatterns-to-avoid.html">Puppeteer in Node.js: More Antipatterns to Avoid</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-14">Jun 14, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/14/setting-up-business-logic-with-dci-in-rails.html">Setting Up Business Logic with DCI in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-07">Jun 07, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/07/designing-a-scalable-backend-in-nodejs.html">Designing a Scalable Backend in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-06-06">Jun 06, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/06/06/absinthe-for-large-elixir-applications.html">Absinthe for Large Elixir Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-31">May 31, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/31/how-to-use-sinatra-to-build-a-ruby-application.html">How to Use Sinatra to Build a Ruby Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-31">May 31, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/31/set-up-tracing-for-a-nodejs-application-on-appsignal.html">Set Up Tracing for a Node.js Application on AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-24">May 24, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/24/advanced-fastify-hooks-middleware-and-decorators.html">Advanced Fastify: Hooks, Middleware, and Decorators</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-23">May 23, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/23/tackling-performance-issues-in-ecto-applications.html">Tackling Performance Issues in Ecto Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-18">May 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/18/transport-your-logs-with-winston-to-appsignal.html">Transport Your Logs to AppSignal with Winston</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-17">May 17, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/17/an-introduction-to-async-stack-traces-in-nodejs.html">An Introduction to Async Stack Traces in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-17">May 17, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/17/manage-your-ruby-logs-like-a-pro.html">Manage Your Ruby Logs Like a Pro</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-16">May 16, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/16/an-introduction-to-absinthe-for-elixir.html">An Introduction to Absinthe</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-10">May 10, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/10/organize-business-logic-in-your-ruby-on-rails-application.html">Organize Business Logic in Your Ruby on Rails Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-03">May 03, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/03/a-guide-to-handling-errors-in-preact.html">A Guide to Handling Errors in Preact</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-05-03">May 03, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/05/03/integrate-and-troubleshoot-inbound-emails-with-action-mailbox-in-rails.html">Integrate and Troubleshoot Inbound Emails with Action Mailbox in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-26">Apr 26, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/26/getting-started-with-fastify-for-nodejs.html">Getting Started with Fastify for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-26">Apr 26, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/26/how-to-monitor-custom-metrics-with-appsignal.html">How to Monitor Custom Metrics with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-25">Apr 25, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/25/test-data-libraries-for-elixir.html">Test Data Libraries for Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-19">Apr 19, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/19/how-to-load-code-in-ruby.html">How to Load Code in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-19">Apr 19, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/19/nodejs-pitfalls-to-avoid.html">Node.js Pitfalls to Avoid</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-18">Apr 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/18/optimize-your-prisma-queries-with-appsignal-and-opentelemetry.html">Optimize Your Prisma Queries with AppSignal and OpenTelemetry</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-12">Apr 12, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/12/audit-logging-in-ruby-and-rails.html">Audit Logging in Ruby and Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-11">Apr 11, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/11/an-introduction-to-mocking-tools-for-elixir.html">An Introduction to Mocking Tools for Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-05">Apr 05, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/05/how-to-use-the-rodauth-omniauth-gem-in-ruby.html">How to Use the rodauth-omniauth Gem in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-05">Apr 05, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/05/monitor-the-health-of-your-nodejs-application.html">Monitor the Health of Your Node.js Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-04-04">Apr 04, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/04/04/monitor-nginx-performance-automatically-with-appsignal.html">Monitor NGINX Performance Automatically with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-29">Mar 29, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/29/diving-into-custom-exceptions-in-ruby.html">Diving into Custom Exceptions in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-28">Mar 28, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/28/debugging-phoenix-liveview-with-open-browser2.html">Debugging Phoenix LiveView with open_browser/2</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-22">Mar 22, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/22/authorization-gems-in-ruby-pundit-and-cancancan.html">Authorization Gems in Ruby: Pundit and CanCanCan</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-22">Mar 22, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/22/introducing-appsignal-log-management.html">Introducing AppSignal Logging</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-21">Mar 21, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/21/generating-data-functions-in-your-elixir-app.html">Generating Data Functions in Your Elixir App</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-15">Mar 15, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/15/a-generalized-user-local-container-for-ui-state-in-kredis.html">A Generalized User-local Container for UI State in Kredis</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-15">Mar 15, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/15/how-to-build-an-error-handling-layer-in-nodejs.html">How to Build an Error Handling Layer in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-03-01">Mar 01, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/03/01/making-the-most-of-your-logs-in-rails.html">Making the Most of Your Logs in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-28">Feb 28, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/28/an-introduction-to-test-factories-and-fixtures-for-elixir.html">An Introduction to Test Factories and Fixtures for Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-22">Feb 22, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/22/storing-ephemeral-ui-state-with-kredis-for-rails.html">Storing Ephemeral UI State with Kredis for Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-22">Feb 22, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/22/track-errors-in-your-nestjs-application-with-appsignal.html">Track Errors in Your NestJS Application with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-15">Feb 15, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/15/whats-new-in-rails-7-1.html">What&#x27;s New in Rails 7.1</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-14">Feb 14, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/14/introducing-appsignal-for-hanami.html">Introducing AppSignal for Hanami</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-14">Feb 14, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/14/under-the-hood-of-ecto.html">Under the Hood of Ecto</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-08">Feb 08, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/08/an-introduction-to-application-monitoring.html">An Introduction to Application Monitoring</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-08">Feb 08, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/08/puppeteer-in-nodejs-common-mistakes-to-avoid.html">Puppeteer in Node.js: Common Mistakes to Avoid</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-07">Feb 07, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/07/appsignal-for-elixir-now-supports-oban.html">AppSignal for Elixir Now Supports Oban</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-01">Feb 01, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/01/5-nodejs-tools-to-learn-in-2023.html">5 Node.js Tools to Learn in 2023</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-02-01">Feb 01, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/02/01/a-guide-to-rails-view-helpers.html">A Guide to Rails View Helpers</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-01-30">Jan 30, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/01/30/monitoring-your-nestjs-application-with-appsignal.html">Monitoring Your NestJS Application with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-01-25">Jan 25, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/01/25/calling-ruby-methods-in-c-avoid-memory-leaks.html">Calling Ruby Methods in C: Avoid Memory Leaks</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-01-24">Jan 24, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/01/24/how-to-instrument-your-elixir-application-with-appsignal.html">How To Instrument Your Elixir Application with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-01-18">Jan 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/01/18/how-to-parse-arguments-in-your-ruby-c-extension.html">How to Parse Arguments in Your Ruby C Extension</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-01-18">Jan 18, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/01/18/secure-your-aws-lambdas-with-typescript.html">Secure Your AWS Lambdas with TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-01-11">Jan 11, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/01/11/create-a-business-language-for-a-rails-application.html">Create a Business Language for a Rails Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2023-01-10">Jan 10, 2023</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2023/01/10/debugging-and-tracing-in-erlang.html">Debugging and Tracing in Erlang</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-21">Dec 21, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/21/appsignal%E2%80%99s-top-5-elixir-posts-in-2022.html">AppSignal’s Top 5 Elixir posts in 2022</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-21">Dec 21, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/21/appsignal%E2%80%99s-top-5-node.js-posts-in-2022.html">AppSignal’s Top 5 Node.js posts in 2022</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-21">Dec 21, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/21/appsignal%E2%80%99s-top-5-ruby-posts-in-2022.html">AppSignal’s Top 5 Ruby posts in 2022</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-20">Dec 20, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/20/a-guide-to-memoization-in-ruby.html">A Guide to Memoization in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-13">Dec 13, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/13/how-to-cache-locally-in-elixir-with-nebulex.html">How to Cache Locally in Elixir with Nebulex</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-07">Dec 07, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/07/database-performance-optimization-and-scaling-in-rails.html">Database Performance Optimization and Scaling in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-06">Dec 06, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/06/a-first-look-at-hanami-2-for-ruby.html">A First Look at Hanami 2 for Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-12-06">Dec 06, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/12/06/appsignal-for-phoenix-version-2.1.0-supports-phoenix-1.7.html">AppSignal for Phoenix Version 2.2.0 Supports Phoenix 1.7</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-30">Nov 30, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/30/optimize-your-aws-lambdas-with-typescript.html">Optimize Your AWS Lambdas with TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-29">Nov 29, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/29/debugging-in-elixir-and-erlang-an-introduction.html">Debugging in Elixir and Erlang: An Introduction</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-24">Nov 24, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/24/appsignal-3-0-for-nodejs-introduces-opentelemetry-support.html">AppSignal for Node.js 3.0 Introduces OpenTelemetry Support</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-23">Nov 23, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/23/nodejs-architecture-pitfalls-to-avoid.html">Node.js Architecture Pitfalls to Avoid</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-23">Nov 23, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/23/system-notifications-with-noticed-and-cableready-in-rails.html">System Notifications with Noticed and CableReady in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-17">Nov 17, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/17/appsignals-future-with-open-telemetry.html">AppSignal&#x27;s Future with OpenTelemetry</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-16">Nov 16, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/16/nodejs-error-handling-tips-and-tricks.html">Node.js Error Handling: Tips and Tricks</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-15">Nov 15, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/15/nodejs-19-release-whats-new.html">Node.js 19 Release: What’s New</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-15">Nov 15, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/15/parser-combinators-in-elixir-a-deeper-dive.html">Parser Combinators in Elixir: A Deeper Dive</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-10">Nov 10, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/10/appsignal-supports-mastodon.html">AppSignal Supports Mastodon</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-09">Nov 09, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/09/how-to-handle-async-code-in-javascript.html">How to Handle Async Code in JavaScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-09">Nov 09, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/09/how-to-scale-ruby-on-rails-applications.html">How to Scale Ruby on Rails Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-02">Nov 02, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/02/whats-new-in-nextjs-13.html">What&#x27;s New in Next.js 13</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-11-01">Nov 01, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/11/01/sanitize-strings-in-elixir-with-pattern-matching-and-recursion.html">Sanitize Strings in Elixir with Pattern Matching and Recursion</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-26">Oct 26, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/26/aws-lambdas-with-typescript-improve-the-dev-experience.html">AWS Lambdas with TypeScript: Improve the Dev Experience</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-26">Oct 26, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/26/build-a-table-editor-with-trix-and-turbo-frames-in-rails.html">Build a Table Editor with Trix and Turbo Frames in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-20">Oct 20, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/20/appsignal-for-elixir-now-supports-finch.html">AppSignal for Elixir Now Supports Finch</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-19">Oct 19, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/19/improve-code-in-your-ruby-application-with-rubycritic.html">Improve Code in Your Ruby Application with RubyCritic</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-18">Oct 18, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/18/parser-combinators-in-elixir-taming-semi-structured-text.html">Parser Combinators in Elixir: Taming Semi-Structured Text</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-12">Oct 12, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/12/deploy-a-nodejs-and-mongodb-application-to-heroku.html">Deploy a Node.js and MongoDB Application to Heroku</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-11">Oct 11, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/11/phoenix-liveview-018-new-special-html-attributes.html">Phoenix LiveView 0.18: New Special HTML Attributes</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-05">Oct 05, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/05/security-best-practices-for-your-rails-application.html">Security Best Practices for Your Rails Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-10-04">Oct 04, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/10/04/faster-xml-parsing-with-elixir.html">Faster XML Parsing with Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-28">Sep 28, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/28/minimize-heap-allocations-in-nodejs.html">Minimize Heap Allocations in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-21">Sep 21, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/21/debugging-in-ruby-with-appsignal.html">Debugging in Ruby with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-21">Sep 21, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/21/how-to-build-aws-lambdas-with-typescript.html">How to Build AWS Lambdas with TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-20">Sep 20, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/20/fix-process-bottlenecks-with-elixir-1-14s-partition-supervisor.html">Fix Process Bottlenecks with Elixir 1.14&#x27;s Partition Supervisor</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-14">Sep 14, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/14/secure-your-nodejs-app-with-json-web-tokens.html">Secure Your Node.js App with JSON Web Tokens</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-13">Sep 13, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/13/elixir-1-14-better-debugging-with-dbg-and-more.html">Elixir 1.14: Better Debugging with dbg/2 and More</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-07">Sep 07, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/07/jit-compilers-for-ruby-and-rails-an-overview.html">JIT Compilers for Ruby and Rails: An Overview</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-09-06">Sep 06, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/09/06/benchmark-your-elixir-apps-performance-with-benchee.html">Benchmark Your Elixir App&#x27;s Performance with Benchee</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-31">Aug 31, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/31/4-ways-to-minimize-your-dependencies-in-nodejs.html">4 Ways to Minimize Your Dependencies in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-31">Aug 31, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/31/monitor-ruby-application-performance-with-magic-dashboards.html">Monitor Ruby Application Performance with Magic Dashboards</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-24">Aug 24, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/24/an-introduction-to-ractors-in-ruby.html">An Introduction to Ractors in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-23">Aug 23, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/23/predictable-code-in-elixir-expressions-as-reducers-and-macros.html">Predictable Code in Elixir: Expressions as Reducers and Macros</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-17">Aug 17, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/17/build-a-crud-app-with-nodejs-and-mongodb.html">Build a CRUD App with Node.js and MongoDB</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-10">Aug 10, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/10/a-deep-dive-into-memory-leaks-in-ruby.html">A Deep Dive into Memory Leaks in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-09">Aug 09, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/09/write-a-standalone-cli-application-in-elixir.html">Write a Standalone CLI Application in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-03">Aug 03, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/03/connect-a-ruby-on-rails-app-with-react-in-a-monolith.html">Connect a Ruby on Rails App with React in a Monolith</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-02">Aug 02, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/02/all-you-need-to-know-about-edgedb.html">All You Need to Know about EdgeDB</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-08-02">Aug 02, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/08/02/alpine-linux-arm-support.html">Monitor Alpine Linux ARM Hosts with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-28">Jul 28, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/28/appsignal-for-ruby-gem-3-1-mri-vm-magic-dashboard.html">AppSignal for Ruby Gem 3.1: MRI VM Magic Dashboard</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-27">Jul 27, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/27/how-to-track-down-memory-leaks-in-ruby.html">How to Track Down Memory Leaks in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-26">Jul 26, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/26/how-to-write-a-functor-in-elixir.html">How to Write a Functor in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-20">Jul 20, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/20/an-introduction-to-multithreading-in-nodejs.html">An Introduction to Multithreading in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-19">Jul 19, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/19/writing-predictable-elixir-code-with-reducers.html">Writing Predictable Elixir Code with Reducers</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-13">Jul 13, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/13/deploy-your-ruby-on-rails-app-using-capistrano.html">Deploy Your Ruby on Rails App Using Capistrano</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-12">Jul 12, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/12/how-to-test-side-effects-in-nodejs.html">How to Test Side-Effects in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-07-06">Jul 06, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/07/06/get-started-with-hotwire-in-your-ruby-on-rails-app.html">Get Started with Hotwire in Your Ruby on Rails App</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-30">Jun 30, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/30/new-nth-error-per-hour-day-notifications-in-appsignal.html">New: Nth Error per Hour/Day Notifications in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-28">Jun 28, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/28/liveview-assigns-three-common-pitfalls-and-their-solutions.html">LiveView Assigns: Three Common Pitfalls and Their Solutions</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-23">Jun 23, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/23/frontend-error-grouping.html">AppSignal’s Next Level Of Front-end Error Tracking</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-22">Jun 22, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/22/state-machines-in-ruby-an-introduction.html">State Machines in Ruby: An Introduction</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-20">Jun 20, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/20/appsignal-for-phoenix-2-1-automatic-liveview-instrumentation.html">AppSignal for Phoenix 2.1: Automatic LiveView Instrumentation</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-16">Jun 16, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/16/recommended-appsignal-setup.html">Recommended AppSignal Setup</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-15">Jun 15, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/15/how-to-handle-errors-in-react.html">How to Handle Errors in React</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-14">Jun 14, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/14/a-guide-to-phoenix-liveview-assigns.html">A Guide to Phoenix LiveView Assigns</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-08">Jun 08, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/08/add-feature-flags-in-ruby-on-rails-with-flipper.html">Add Feature Flags in Ruby on Rails with Flipper</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-02">Jun 02, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/02/adding-redis-and-mysql-to-appsignal-for-node-with-opentelemetry.html">Adding Redis &amp; MySQL to AppSignal for Node.js with OpenTelemetry</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-06-01">Jun 01, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/06/01/build-a-data-access-layer-with-postgres-and-node.html">Build a Data Access Layer with PostgreSQL and Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-05-31">May 31, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/05/31/algebraic-data-types-in-elixir.html">Algebraic Data Types in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-05-25">May 25, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/05/25/an-introduction-to-polymorphism-in-ruby-on-rails.html">An Introduction to Polymorphism in Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-05-24">May 24, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/05/24/livebook-for-elixir-just-what-the-docs-ordered.html">Livebook for Elixir: Just What the Docs Ordered</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-05-18">May 18, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/05/18/using-scientist-to-refactor-critical-ruby-on-rails-code.html">Using Scientist to Refactor Critical Ruby on Rails Code</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-05-11">May 11, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/05/11/improving-appsignal-table-performance-backend-changes.html">How We Improved Table Performance in AppSignal - Back-end Changes</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-05-10">May 10, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/05/10/a-guide-to-event-driven-architecture-in-elixir.html">A Guide to Event-Driven Architecture in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-05-04">May 04, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/05/04/bootstrapping-with-ruby-on-rails-generators-and-templates.html">Bootstrapping with Ruby on Rails Generators and Templates</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-04-27">Apr 27, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/04/27/logbook-team-discussion-and-full-incident-history.html">Logbook: Team Discussion and Full Incident History</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-04-26">Apr 26, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/04/26/nodejs-18-release-whats-new.html">Node.js 18 Release: What&#x27;s New</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-04-26">Apr 26, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/04/26/using-profiling-in-elixir-to-improve-performance.html">Using Profiling in Elixir to Improve Performance</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-04-13">Apr 13, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/04/13/whats-new-in-react-18.html">What&#x27;s New in React 18</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-04-06">Apr 06, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/04/06/principles-of-object-oriented-programming-in-typescript.html">Principles of Object-oriented Programming in TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-30">Mar 30, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/30/5-tips-to-design-ruby-on-rails-transactions-the-right-way.html">5 Tips to Design Ruby on Rails Transactions the Right Way</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-29">Mar 29, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/29/phoenix-liveview-under-the-hood-the-form-function-component.html">Phoenix LiveView Under The Hood: The Form Function Component</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-23">Mar 23, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/23/build-serverless-apis-with-nodejs-and-aws-lambda.html">Build Serverless APIs with Node.js and AWS Lambda</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-16">Mar 16, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/16/the-perils-of-parallel-testing-in-ruby-on-rails.html">The Perils of Parallel Testing in Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-15">Mar 15, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/15/a-guide-to-secure-elixir-package-updates.html">A Guide to Secure Elixir Package Updates</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-10">Mar 10, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/10/new-process-for-exception-and-performance-incident-emails.html">New Process for Exception and Performance Incident Emails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-09">Mar 09, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/09/a-complete-guide-to-nodejs-process-management-with-pm2.html">A Complete Guide to Node.js Process Management with PM2</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-03-02">Mar 02, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/03/02/import-maps-under-the-hood-in-rails-7.html">Import Maps Under the Hood in Rails 7</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-24">Feb 24, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/24/organize-your-custom-dashboards-more-easily-in-appsignal.html">Organize Your Custom Dashboards More Easily in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-23">Feb 23, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/23/patterns-and-anti-patterns-in-nodejs.html">Patterns and Anti-patterns in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-16">Feb 16, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/16/dependency-injection-in-javascript-write-testable-code-easily.html">Dependency Injection in JavaScript: Write Testable Code Easily</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-15">Feb 15, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/15/delayed-job-vs-sidekiq-which-is-better.html">Delayed Job vs. Sidekiq: Which Is Better?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-09">Feb 09, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/09/an-introduction-to-deno-is-it-better-than-nodejs.html">An Introduction to Deno: Is It Better than Node.js?</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-08">Feb 08, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/08/functional-programming-in-elixir-with-witchcraft.html">Functional Programming in Elixir with Witchcraft</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-03">Feb 03, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/03/how-to-keep-database-table-sizes-down-and-prevent-data-bloat.html">How to Keep Database Table Sizes Down and Prevent Data Bloat</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-02-02">Feb 02, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/02/02/use-streams-to-build-high-performing-nodejs-applications.html">Use Streams to Build High-Performing Node.js Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-01-27">Jan 27, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/01/27/improvements-made-to-appsignal-for-node-js-in-2022.html">Improvements Made to AppSignal for Node.js in 2022</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-01-26">Jan 26, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/01/26/test-and-optimize-your-ruby-on-rails-database-performance.html">Test and Optimize Your Ruby on Rails Database Performance</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-01-25">Jan 25, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/01/25/securing-your-phoenix-liveview-apps.html">Securing Your Phoenix LiveView Apps</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-01-19">Jan 19, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/01/19/how-to-set-up-a-nodejs-project-with-typescript.html">How to Set Up a Node.js Project with TypeScript</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-01-12">Jan 12, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/01/12/how-to-migrate-your-blog-from-gatsby-to-nextjs.html">How to Migrate Your Blog from Gatsby to Next.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-01-11">Jan 11, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/01/11/build-interactive-phoenix-liveview-uis-with-components.html">Build Interactive Phoenix LiveView UIs with Components</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2022-01-05">Jan 05, 2022</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2022/01/05/next-level-ruby-on-rails-application-monitoring-with-appsignal.html">Next Level Ruby on Rails Application Monitoring with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-22">Dec 22, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/22/appsignals-top-5-elixir-posts-in-2021.html">AppSignal’s Top 5 Elixir Posts in 2021</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-22">Dec 22, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/22/appsignals-top-5-javascript-posts-in-2021.html">AppSignal’s Top 5 JavaScript Posts in 2021</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-22">Dec 22, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/22/appsignals-top-5-ruby-posts-in-2021.html">AppSignal’s Top 5 Ruby Posts in 2021</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-21">Dec 21, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/21/eight-common-causes-of-flaky-tests-in-elixir.html">8 Common Causes of Flaky Tests in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-20">Dec 20, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/20/exporting-and-sharing-graphs-from-appsignal.html">Exporting and Sharing Graphs From AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-15">Dec 15, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/15/whats-new-in-rails7.html">What&#x27;s New in Rails 7</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-14">Dec 14, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/14/whats-new-in-elixir-1-13.html">What&#x27;s New in Elixir 1.13</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-13">Dec 13, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/13/monitor-scheduler-utilization-in-elixir-with-appsignal.html">Monitor Scheduler Utilization in Elixir With AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-08">Dec 08, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/08/nodejs-memory-limits-what-you-should-know.html">Node.js Memory Limits - What You Should Know</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-12-01">Dec 01, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/12/01/ruby-on-rails-application-monitoring-with-appsignal.html">Ruby on Rails Application Monitoring with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-30">Nov 30, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/30/simpler-navigation-in-appsignal-a-story-about-refactoring-design.html">Simpler Navigation in AppSignal: A Story About Refactoring Design</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-30">Nov 30, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/30/three-ways-to-debug-code-in-elixir.html">Three Ways to Debug Code in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-24">Nov 24, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/24/7-ways-to-improve-nodejs-performance-at-scale.html">7 Ways to Improve Node.js Performance at Scale</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-17">Nov 17, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/17/practical-garbage-collection-tuning-in-ruby.html">Practical Garbage Collection Tuning in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-16">Nov 16, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/16/pitfalls-of-metaprogramming-in-elixir.html">Pitfalls of Metaprogramming in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-10">Nov 10, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/10/a-guide-to-load-testing-nodejs-apis-with-artillery.html">A Guide to Load Testing Node.js APIs with Artillery</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-03">Nov 03, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/03/designing-error-messages-and-a-logging-strategy-in-nodejs.html">Designing Error Messages and a Logging Strategy in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-11-02">Nov 02, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/11/02/authorization-and-policy-scopes-for-phoenix-apps.html">Authorization and Policy Scopes for Phoenix Apps</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-27">Oct 27, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/27/what-s-new-in-nodejs-17.html">What&#x27;s New in Node.js 17</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-26">Oct 26, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/26/how-to-use-macros-in-elixir.html">How to Use Macros in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-20">Oct 20, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/20/optimistic-locking-in-rails-rest-apis.html">Optimistic Locking in Rails REST APIs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-19">Oct 19, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/19/how-to-dockerize-an-existing-nodejs-application.html">How to Dockerize an Existing Node.js Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-14">Oct 14, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/14/add-more-metadata-to-your-front-end-javascript-errors-in-appsignal.html">Add More Metadata to Your Front-end JavaScript Errors in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-12">Oct 12, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/12/how-to-do-live-uploads-in-phoenix-liveview.html">How to Do Live Uploads in Phoenix LiveView</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-05">Oct 05, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/05/improved-error-tracking-for-node-in-appsignal.html">Improved Error Tracking for Node.js in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-10-05">Oct 05, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/10/05/under-the-hood-of-macros-in-elixir.html">Under the Hood of Macros in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-28">Sep 28, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/28/real-time-form-validations-with-phoenix-liveview.html">Real-Time Form Validation with Phoenix LiveView</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-22">Sep 22, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/22/improve-your-life-with-long-error-messages.html">Improve Your Life with Long Error Messages</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-21">Sep 21, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/21/how-to-reduce-memory-bloat-in-ruby.html">How to Reduce Memory Bloat in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-21">Sep 21, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/21/what-are-atoms-in-elixir-and-how-to-monitor-them-with-appsignal.html">What Are Atoms in Elixir and How To Monitor Them With AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-15">Sep 15, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/15/cpu-steal-time-a-crucial-metric-for-cloud-servers-and-vms.html">CPU Steal Time: A Crucial Metric for Cloud Servers and VMs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-15">Sep 15, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/15/how-to-debug-cloudflare-workers-with-appsignal.html">How to Debug Cloudflare Workers with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-14">Sep 14, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/14/application-code-upgrades-in-elixir.html">Application Code Upgrades in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-08">Sep 08, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/08/launching-public-status-pages-for-uptime-monitoring-in-appsignal.html">Launching Public Status Pages for Uptime Monitoring on AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-07">Sep 07, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/07/an-introduction-to-metaprogramming-in-elixir.html">An Introduction to Metaprogramming in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-09-01">Sep 01, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/09/01/best-practices-for-logging-in-nodejs.html">Best Practices for Logging in Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-31">Aug 31, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/31/liveview-integration-tests-in-elixir.html">LiveView Integration Tests in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-25">Aug 25, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/25/exploring-asynchronous-requests-in-recoil.html">Exploring Asynchronous Requests in Recoil</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-24">Aug 24, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/24/responsible-monkeypatching-in-ruby.html">Responsible Monkeypatching in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-23">Aug 23, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/23/using-supervisors-to-organize-your-elixir-application.html">Using Supervisors to Organize Your Elixir Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-18">Aug 18, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/18/improve-api-integrations-using-code-generation.html">TypeScript Compiler API: Improve API Integrations Using Code Generation</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-17">Aug 17, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/17/an-introduction-to-liveview-in-elixir.html">An Introduction to Testing LiveView in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-11">Aug 11, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/11/ruby-hidden-gems-bullet-and-how-it-integrates-with-appsignal.html">Ruby&#x27;s Hidden Gems: Bullet</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-09">Aug 09, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/09/appsignal-error-tracking-2-0.html">AppSignal Error Tracking 2.0</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-08-02">Aug 02, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/08/02/new-feature-line-of-code-based-error-grouping.html">New Feature: Line-of-code-based Error Grouping</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-07-28">Jul 28, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/07/28/introduction-to-pattern-matching-in-ruby.html">An Introduction to Pattern Matching in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-07-27">Jul 27, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/07/27/a-guide-to-hot-code-reloading-in-elixir.html">A Guide to Hot Code Reloading in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-07-21">Jul 21, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/07/21/how-to-get-started-with-prisma-orm-for-nodejs-and-postgresql.html">How to Get Started with Prisma ORM for Node.js and PostgreSQL</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-07-13">Jul 13, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/07/13/building-aggregates-in-elixir-and-postgresql.html">Building Aggregates in Elixir and PostgreSQL</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-07-07">Jul 07, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/07/07/general-ruby-on-rails-problems-and-takeaways.html">General Ruby on Rails Problems and Takeaways</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-06-30">Jun 30, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/06/30/how-to-monitor-and-optimize-your-database-performance-a-practical-guide.html">How to Monitor and Optimize Your Database Performance: A Practical Guide</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-06-23">Jun 23, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/06/23/adding-kubernetes-metadata-to-your-appsignal-errors.html">Adding Kubernetes Metadata to Your AppSignal Errors</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-06-22">Jun 22, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/06/22/how-to-test-websocket-clients-in-elixir-with-a-mock-server.html">How to Test WebSocket Clients in Elixir with a Mock Server</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-06-16">Jun 16, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/06/16/the-wolf-pack-tactic-for-monitoring-slow-apis.html">The Wolf Pack Tactic for Monitoring Slow APIs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-06-09">Jun 09, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/06/09/performance-stress-and-load-tests-in-rails.html">Performance, Stress, and Load Tests in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-06-02">Jun 02, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/06/02/uptime-monitoring-a-one-week-project-a-decade-in-the-making.html">Uptime Monitoring: A One-week Project, a Decade In the Making</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-06-01">Jun 01, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/06/01/monitoring-memory-usage-for-erlang-and-elixir-applications.html">Monitoring Memory Usage for Erlang and Elixir Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-05-26">May 26, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/05/26/integrating-appsignal-with-microsoft-teams.html">Integrating AppSignal With Microsoft Teams</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-05-20">May 20, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/05/20/more-in-one-uptime-monitoring-is-now-available-in-appsignal.html">Launching Uptime Monitoring In AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-05-19">May 19, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/05/19/zero-touch-saas-bookkeeping-with-stripe-and-moneybird.html">Zero-touch SaaS Bookkeeping with Stripe and Moneybird</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-05-12">May 12, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/05/12/three-ways-to-avoid-duplicate-sidekiq-jobs.html">Three Ways To Avoid Duplicate Sidekiq Jobs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-05-06">May 06, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/05/06/heroku-errors.html">New Features: Heroku Errors and a Magic Dashboard</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-05-05">May 05, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/05/05/a-quick-guide-to-co2-offseting-for-startups.html">A Quick Guide to CO2 Offsetting for Startups</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-04-28">Apr 28, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/04/28/ruby-linting.html">Linting Ruby Code</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-04-21">Apr 21, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/04/21/node-underrated-packages-passport-and-casl.html">Node.js&#x27;s Underrated Combo: Passport and CASL</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-04-14">Apr 14, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/04/14/ruby-on-rails-controller-patterns-and-anti-patterns.html">Ruby on Rails Controller Patterns and Anti-patterns</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-04-07">Apr 07, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/04/07/appsignal-apm-for-node-now-monitors-koa.html">AppSignal Now Monitors Koa and All Your Cascading Middleware</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-03-31">Mar 31, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/03/31/exposing-more-public-endpoints-for-sending-metrics-and-errors-to-appsignal.html">Exposing More Public Endpoints for Sending Metrics and Errors to AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-03-23">Mar 23, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/03/23/engineering-for-performance-ghost-queries.html">Engineering for Performance: Ghost Queries</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-03-17">Mar 17, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/03/17/the-easiest-way-to-monitor-ruby-automatic-instrumentation.html">The Easiest Way to Monitor Ruby: Automatic Instrumentation</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-03-10">Mar 10, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/03/10/powerful-caching-with-redis-in-node.html">Powerful Caching with Redis for Node.js Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-03-02">Mar 02, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/03/02/new-feature-searching-through-samples-in-appsignal.html">New Feature: Searching Through Samples in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-03-01">Mar 01, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/03/01/ruby-gem-3-0.html">Announcing AppSignal for Ruby Gem 3.0!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-02-24">Feb 24, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/02/24/troubleshooting-activerecord-performance.html">Troubleshooting ActiveRecord Performance</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-02-17">Feb 17, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/02/17/using-webpacker-in-your-ruby-on-rails-app-deep-dive.html">Using Webpacker in Your Ruby on Rails Application — a Deep Dive</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-02-10">Feb 10, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/02/10/ruby-on-rails-view-patterns-and-anti-patterns.html">Ruby on Rails View Patterns and Anti-patterns</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-02-03">Feb 03, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/02/03/improving-node-application-performance-with-clustering.html">Improving Node.js Application Performance With Clustering</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-01-27">Jan 27, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/01/27/rbs-the-new-ruby-3-typing-language-in-action.html">RBS: A New Ruby 3 Typing Language in Action</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-01-26">Jan 26, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/01/26/appsignal-for-elixir-integration-2-1-released.html">AppSignal for Elixir Integration 2.1 Released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-01-19">Jan 19, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/01/19/how-absinthe-uses-compilation-callbacks-for-schema-validation-in-elixir.html">How Absinthe Uses Compilation Callbacks for Schema Validation in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-01-19">Jan 19, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/01/19/nodejs-garbage-collection-heap-statistics-magic-dashboard-metrics.html">Node.js Garbage Collection: Heap Statistics Magic Dashboard</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-01-13">Jan 13, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/01/13/using-mixins-and-modules-in-your-ruby-on-rails-application.html">How to Use Mixins and Modules in Your Ruby on Rails Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2021-01-06">Jan 06, 2021</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2021/01/06/microservices-monitoring-using-namespaces-for-data-structuring.html">Microservices Monitoring: Using Namespaces for Data Structuring</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-16">Dec 16, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/16/top-5-elixir-posts-in-2020-from-appsignal.html">Top 5 Elixir Blog Posts in 2020 from AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-16">Dec 16, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/16/top-5-javascript-posts-in-2020-from-appsignal.html">Top 5 JavaScript Blog Posts in 2020 from AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-16">Dec 16, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/16/top-5-ruby-posts-in-2020-from-appsignal.html">Top 5 Ruby Blog Posts in 2020 from AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-15">Dec 15, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/15/ruby-rails-actionmailer-magic-dashboard.html">New Magic Dashboard for Ruby on Rails: ActionMailer</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-10">Dec 10, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/10/setting-up-appsignal-monitoring-for-a-ruby-on-rails-application.html">Setting Up AppSignal Monitoring for a Ruby on Rails Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-08">Dec 08, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/08/the-easiest-way-to-monitor-nodejs-automatic-instrumentation.html">The Easiest Way to Monitor Node.js: Automatic Instrumentation</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-02">Dec 02, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/02/building-a-multi-tenant-ruby-on-rails-app-with-subdomains.html">Building a Multi-tenant Ruby on Rails App With Subdomains</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-12-01">Dec 01, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/12/01/fast-and-curious-find-and-fix-slow-queries-and-apis.html">Fast &amp; Curious: Find and Fix Slow Queries &amp; API Requests</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-11-25">Nov 25, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/11/25/server-side-rendering-in-javascript-a-modern-approach.html">Server-side Rendering in JavaScript: A Modern Approach</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-11-18">Nov 18, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/11/18/rails-model-patterns-and-anti-patterns.html">Ruby on Rails Model Patterns and Anti-patterns</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-11-17">Nov 17, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/11/17/announcing-appsignal-for-elixir-integration-2-0.html">Announcing AppSignal for Elixir 2.0</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-11-10">Nov 10, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/11/10/understanding-associations-in-elixir-ecto.html">Understanding Associations in Elixir&#x27;s Ecto</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-11-04">Nov 04, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/11/04/structuring-monitoring-data-in-monolith-applications-through-namespaces.html">Structuring Monitoring Data in Monolithic Applications With Namespaces</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-11-03">Nov 03, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/11/03/setting-up-triggers-and-alerts-from-graphs-in-appsignal.html">Setting Up Triggers and Alerts From Graphs in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-10-27">Oct 27, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/10/27/trigger-improvements-in-appsignal.html">Triggers in AppSignal: Already Powerful — Now Easy To Set Up 🚀 </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-10-21">Oct 21, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/10/21/garbage-collection-in-javascript.html">JavaScript Internals: Garbage Collection</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-10-20">Oct 20, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/10/20/appsignal-is-free-for-open-source-software-and-for-good-projects.html">AppSignal is Free for Open-Source Software &amp; &quot;For Good&quot; Projects</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-10-13">Oct 13, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/10/13/capabilities-of-elixir-logger.html">Capabilities of Elixir&#x27;s Logger</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-10-07">Oct 07, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/10/07/launching-appsignal-monitoring-for-nodejs.html">Launching AppSignal Monitoring for Node.js 1.0</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-30">Sep 30, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/30/exploring-nodejs-async-hooks.html">Exploring Node.js Async Hooks</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-23">Sep 23, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/23/monitoring-any-system-with-statsd-and-the-standalone-appsignal-agent.html">Monitoring Any System with StatsD and AppSignal&#x27;s Standalone Agent</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-21">Sep 21, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/21/adding-diagnose-tool-to-appsignal-for-nodejs.html">The Diagnose: How Support Works at AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-16">Sep 16, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/16/rails-concers-to-concern-or-not-to-concern.html">Rails Concerns: To Concern Or Not To Concern</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-10">Sep 10, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/10/improved-pagerduty-integration.html">Improved Pagerduty Integration with Detailed Alerts</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-09">Sep 09, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/09/nodejs-resiliency-concepts-recovery-and-self-healing.html">Node.js Resiliency Concepts: Recovery and Self-Healing</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-08">Sep 08, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/08/going-from-consulting-to-saas.html">Going from Consulting to SaaS</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-09-02">Sep 02, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/09/02/getting-started-wit-web-vitals-in-nextjs.html">Getting Started With Web Vitals in Next.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-08-19">Aug 19, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/08/19/testing-absinthe.html">Testing the Tricky Parts of an Absinthe Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-08-17">Aug 17, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/08/17/identifying-and-resolving-a-kafka-issue-with-appsignal.html">Identifying and Resolving a Kafka Issue With AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-08-12">Aug 12, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/08/12/security-best-practices-for-nodejs.html">Security Best Practices for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-08-11">Aug 11, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/08/11/ruby-gem-2-11.html">AppSignal Ruby Gem 2.11: Active Job and Friends</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-08-06">Aug 06, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/08/06/appsignal-now-automatically-instruments-apollo-for-nodejs-applications.html">AppSignal Now Automatically Instruments Apollo for Node.js Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-08-05">Aug 05, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/08/05/introduction-to-ruby-on-rails-patterns-and-anti-patterns.html">Introduction to Ruby on Rails Patterns and Anti-patterns</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-07-29">Jul 29, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/07/29/appsignal-now-supports-redis-for-nodejs-ot-of-the-box.html">AppSignal Now Supports Redis for Node.js Out of the Box</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-07-28">Jul 28, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/07/28/the-state-of-elixir-http-clients.html">The State of Elixir HTTP Clients</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-07-22">Jul 22, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/07/22/nodejs-resiliency-concepts-the-circuit-breaker.html">Node.js Resiliency Concepts: The Circuit Breaker</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-07-14">Jul 14, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/07/14/building-state-machines-in-elixir-with-ecto.html">Building State Machines in Elixir with Ecto </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-07-08">Jul 08, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/07/08/scaling-queue-workers-efficiently-with-appsignal-metrics.html">Scaling Queue Workers Efficiently with AppSignal Metrics</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-07-07">Jul 07, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/07/07/how-appsignal-monitors-their-own-kafka-brokers.html">How AppSignal Monitors Their Own Kafka Brokers</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-07-01">Jul 01, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/07/01/a-deep-dive-into-v8.html">A Deep Dive Into V8</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-25">Jun 25, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/25/new-adding-custom-metrics-tonodejs-appsignal.html">New Feature: Add Custom Metrics For Node.js in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-24">Jun 24, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/24/best-practices-for-background-jobs-in-elixir.html">Best Practices for Background Jobs in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-24">Jun 24, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/24/git-is-about-communication.html">Git is About Communication</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-17">Jun 17, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/17/using-service-objects-in-ruby-on-rails.html">Using Service Objects in Ruby on Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-16">Jun 16, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/16/a-major-overhaul-of-appsignal-dashboards-powerful-and-easy-to-use.html">A Major Overhaul of AppSignal Dashboards: Powerful and Easy to Use</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-12">Jun 12, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/12/postgres-node-magic-dashboard.html">New feature: PostgreSQL Magic Dashboard in AppSignal for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-09">Jun 09, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/09/n-plus-one-queries-explained.html">Performance and N+1 Queries: Explained, Spotted, and Solved</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-06-03">Jun 03, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/06/03/building-apis-with-graphql-in-your-node-application.html">Building APIs With GraphQL in Your Node.js Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-26">May 26, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/26/appsignal-adds-nextjs-integration-automatically-adds-web-vitals-monitoring.html">AppSignal Adds Next.js Integration - Automatically Adds Web Vitals Monitoring</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-20">May 20, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/20/developer-dilemmas-are-now-online.html">Developer Dilemmas Are Now Online</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-19">May 19, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/19/using-mnesia-in-an-elixir-application.html">Using Mnesia in an Elixir Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-14">May 14, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/14/javascript-growing-pains-from-0-to-13000-dependencies.html">JavaScript Growing Pains: From 0 to 13,000 Dependencies</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-14">May 14, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/14/new-integration-postgresql-instrumented-for-node-js.html">New Integration: PostgreSQL Instrumented for Node.js</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-13">May 13, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/13/developer-dilemmas-are-coming-online-soon.html">Developer Dilemmas are Coming Online Soon</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-13">May 13, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/13/quickly-duplicate-triggers-across-apps-in-appsignal.html">Quickly Duplicate Triggers Across Apps in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-06">May 06, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/06/avoiding-memory-leaks-in-nodejs-best-practices-for-performance.html">Avoiding Memory Leaks in Node.js: Best Practices for Performance</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-05-05">May 05, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/05/05/railsconf-2020-2-couch-edition.html">RailsConf 2020.2 Couch Edition</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-30">Apr 30, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/30/javascript-error-tracking-version-1-3-0.html">JavaScript Error Tracking with AppSignal v1.3.0 is Here</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-28">Apr 28, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/28/configuring-your-elixir-application-at-runtime-with-vapor.html">Configuring your Elixir Application at Runtime with Vapor</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-28">Apr 28, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/28/elixir-package-1-13.html">Elixir Package 1.13: Phoenix LiveView Helpers and Updated Typespecs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-22">Apr 22, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/22/discord-integration.html">Official AppSignal Discord Integration is Here</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-16">Apr 16, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/16/new-appsignal-feature-graph-builder.html">New AppSignal Feature: Graph Builder</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-14">Apr 14, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/14/dissecting-rails-migrationsl.html">Dissecting Rails Migrations</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-09">Apr 09, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/09/ride-down-the-javascript-dependency-hell.html">Ride Down Into JavaScript Dependency Hell</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-08">Apr 08, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/08/the-citadel-architecture-at-appsignal.html">The Citadel Architecture at AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-01">Apr 01, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/01/appsignal-now-supports-node-roadmap-for-the-coming-weeks.html">AppSignal Now Supports Node.js: Roadmap for the Coming Weeks</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-04-01">Apr 01, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/04/01/changing-the-approach-to-debugging-in-ruby-with-tracepoint.html">Changing the Approach to Debugging in Ruby with TracePoint</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-03-25">Mar 25, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/03/25/whats-the-difference-between-monitoring-webhooks-and-background-jobs.html">What&#x27;s The Difference Between Monitoring Webhooks and Background Jobs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-03-24">Mar 24, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/03/24/how-to-use-grpc-in-elixir.html">How to Use gRPC in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-03-18">Mar 18, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/03/18/facade-pattern-in-rails-for-performance-and-maintainability.html">Facade Pattern in Rails for Performance and Maintainability</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-03-10">Mar 10, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/03/10/building-compile-time-tools-with-elixir-compiler-tracing-features.html">Building Compile-time Tools With Elixir&#x27;s Compiler Tracing Features</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-03-04">Mar 04, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/03/04/building-a-rails-app-with-multiple-subdomains.html">Building a Rails App With Multiple Subdomains</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-03-03">Mar 03, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/03/03/elixir-package-1-12.html">Elixir Package 1.12: Phoenix 1.5 Support &amp; Better Channel Error Handling</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-03-02">Mar 02, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/03/02/anomaly-detecting-hostname-host-triggers.html">Hostname Filter for Anomaly Detection Host Triggers</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-02-26">Feb 26, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/02/26/ui-ux-updates-faster-and-smoother-sample-navigation-in-appsignal.html">UI/UX Updates: Faster and Smoother Sample Navigation in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-02-25">Feb 25, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/02/25/migrating-production-data-in-elixir.html">Migrating Production Data in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-02-20">Feb 20, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/02/20/effective-profiling-in-google-chrome.html">Effective Profiling in Google Chrome</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-02-19">Feb 19, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/02/19/how-to-monitor-your-host-metrics-automatically.html">How to Monitor Your Host Metrics Automatically</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-02-12">Feb 12, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/02/12/getting-started-with-system-tests-in-ruby-with-minitest.html">Getting Started With System Tests in Rails With Minitest</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-02-05">Feb 05, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/02/05/ruby-gem-2-10.html">AppSignal Ruby Gem 2.10: Better Diagnose (And More)</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-02-04">Feb 04, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/02/04/elixir-monitoring-erlangvm-with-magic-dashboards.html">Monitoring the Erlang VM With AppSignal&#x27;s Magic Dashboard</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-01-29">Jan 29, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/01/29/how-to-get-your-elixir-application-ready-for-ci-cd.html">How to Get Your Elixir Application Ready for CI/CD</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-01-28">Jan 28, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/01/28/javascript-error-tracking-version-1-1-0.html">JavaScript Error Tracking v1.1.0</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-01-22">Jan 22, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/01/22/rails-is-fast-optimize-your-view-performance.html">Rails is Fast: Optimize Your View Performance</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2020-01-15">Jan 15, 2020</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2020/01/15/the-pros-and-cons-of-using-structure-sql-in-your-ruby-on-rails-application.html">Pros and Cons of Using structure.sql in Your Ruby on Rails Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-12-17">Dec 17, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/12/17/top-10-appsigna-blog-posts-in-2019.html">Top 10 AppSignal Blog Posts in 2019</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-12-12">Dec 12, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/12/12/how-to-use-broadway-in-your-elixir-application.html">How to Use Broadway in Your Elixir Application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-11-29">Nov 29, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/11/29/configurable-ruby-modules-the-module-builder-pattern.html">Configurable Ruby Modules: The Module Builder Pattern</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-11-20">Nov 20, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/11/20/javascript-errors-an-exceptional-history-part-ii.html">JavaScript Errors: An Exceptional History - Part II</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-11-12">Nov 12, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/11/12/caching-with-elixir-and-ets.html">Caching with Elixir and ETS</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-11-05">Nov 05, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/11/05/how-to-read-appsignal-performance-metrics.html">How to Read Performance Metrics in AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-10-29">Oct 29, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/10/29/sidekiq-optimization-and-monitoring.html">Sidekiq Optimization and Monitoring</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-10-17">Oct 17, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/10/17/javascript-errors-an-exceptional-history.html">JavaScript Errors: An Exceptional History</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-10-16">Oct 16, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/10/16/javascript-error-tracking-launch.html">Launching JavaScript Error Tracking v1.0.</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-10-15">Oct 15, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/10/15/behaviours.html">Typespecs and Behaviours in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-10-10">Oct 10, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/10/10/area-charts.html">Introducing area charts for custom dashboards.</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-10-01">Oct 01, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/10/01/tracking-down-exceptions-without-errors.html">How We Tracked Down an Exception Without Errors: A Detective Story</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-09-24">Sep 24, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/09/24/ruby-magic-baking-an-interpreter.html">Ruby Templating: Baking an Interpreter</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-09-19">Sep 19, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/09/19/slack-app.html">Migrate to our new Slack App!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-09-17">Sep 17, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/09/17/tldr-our-new-logo.html">TL;DR: Our new logo</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-09-10">Sep 10, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/09/10/flags-seeds-idempotency-elixir.html">Flags, Seeds and Idempotency: Database Tooling with Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-09-03">Sep 03, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/09/03/inherited-hook-method-and-parenting.html">The Inherited Hook Method in Ruby - and More Parenting Lessons</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-08-27">Aug 27, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/08/27/new-sample-navigation.html">New Sample Page Graphs and Navigation</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-08-27">Aug 27, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/08/27/ruby-magic-type-checking-in-ruby.html">Type Checking in Ruby — Check Yo Self Before You Wreck Yo Self</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-08-20">Aug 20, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/08/20/clean-up-strings.html">Cleaning Up Ruby Strings 13 Times Faster</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-08-13">Aug 13, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/08/13/elixir-alchemy-multiplayer-go-with-registry-pubsub-and-dynamic-supervisors.html">Multiplayer Go with Elixir&#x27;s Registry, PubSub and dynamic supervisors</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-07-30">Jul 30, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/07/30/ruby-magic-ruby-templating-the-parser.html">Digging Deeper into Ruby Templating: The Parser</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-07-16">Jul 16, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/07/16/elixir-alchemy-metaprogramming.html">Metaprogramming: From C Preprocessing to Elixir Macros</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-07-16">Jul 16, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/07/16/javascript-iterators-and-iterables.html">JavaScript Iterators and Iterables</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-07-15">Jul 15, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/07/15/product-updates-week-28.html">Last week&#x27;s Product Improvements (July 15th, 2019)</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-07-09">Jul 09, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/07/09/productive-procrastination-for-programmers.html">Productive Procrastination for Programmers - works for Ruby and Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-07-04">Jul 04, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/07/04/elixir-alchemy-building-go-in-elixir-time-travel-and-the-ko-rule.html">Building the Go Game in Elixir - Time Travel and the Ko Rule</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-07-02">Jul 02, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/07/02/ruby-magic-brewing-our-own-template-lexer-in-ruby.html">Brewing our own Template Lexer in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-06-25">Jun 25, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/06/25/introducing-context-incident-notes.html">Introducing Incident Context and Incident Notes</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-06-18">Jun 18, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/06/18/elixir-alchemy-building-go-with-phoenix-live-view.html">Building and Playing the Go Game with Phoenix LiveView</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-06-11">Jun 11, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/06/11/devise-ultimate-internationalisation-checklist.html">The Ultimate Checklist to Properly Internationalize Devise</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-06-03">Jun 03, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/06/03/stripe-vatmoss.html">How We Do VAT for Our SAAS with Stripe</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-05-30">May 30, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/05/30/clubhouse-io-integration.html">Introducing our Clubhouse integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-05-28">May 28, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/05/28/ruby-magic-enumeration.html">Inside Enumeration in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-05-20">May 20, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/05/20/heroku-postgresql-magic-dashboard.html">New Magic Dashboard: Heroku Postgres</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-05-14">May 14, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/05/14/elixir-alchemy-background-processing.html">Doing Background Work Using a Native Elixir Approach</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-05-07">May 07, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/05/07/method-missing.html">Up the Ancestor Chain with method_missing</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-04-30">Apr 30, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/04/30/ruby-magic-hidden-gems-delegator-forwardable.html">Ruby&#x27;s Hidden Gems -Delegator and Forwardable</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-04-23">Apr 23, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/04/23/kafka-sidekiq-ruby.html">Kafka and Ruby, a Sidekiq Lovestory</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-04-23">Apr 23, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/04/23/weve-got-your-back-at-railsconf.html">We&#x27;ve got your back at RailsConf</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-04-17">Apr 17, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/04/17/user-email-notifications.html">More personal email notification preferences</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-04-16">Apr 16, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/04/16/elixir-alchemy-routing-phoenix-umbrella-apps.html">Routing in Phoenix Umbrella Apps</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-04-02">Apr 02, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/04/02/background-processing-system-in-ruby.html">Learning by building, a Background Processing System in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-29">Mar 29, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/29/memory-magic-dashboard.html">Memory Magic Dashboard</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-28">Mar 28, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/28/pinned-apps.html">Pinned apps</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-27">Mar 27, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/27/magic-dashboards.html">Introducing Magic Dashboards</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-26">Mar 26, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/26/object-marshalling-in-ruby.html">Object Marshalling in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-21">Mar 21, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/21/revamped-dashboards.html">Revamped dashboards!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-19">Mar 19, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/19/elixir-alchemy-recursion.html">Iteration, Recursion, and Tail-call Optimization in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-06">Mar 06, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/06/navigation-improvements.html">Improved navigation for better feature discovery.</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-03-05">Mar 05, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/03/05/stringscanner.html">Ruby&#x27;s Hidden Gems, StringScanner</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-02-26">Feb 26, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/02/26/diving-into-dup-and-clone.html">Diving into Ruby&#x27;s #dup and #clone</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-02-19">Feb 19, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/02/19/elixir-alchemy-pouring-protocols.html">Pouring Protocols in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-02-12">Feb 12, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/02/12/replica-set-lag-monitoring-with-appsignal.html">Monitoring MongoDB Replicaset Lag with AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-02-08">Feb 08, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/02/08/google-hangouts-chat-integration.html">Introducing our Google Hangouts Chat integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-02-05">Feb 05, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/02/05/ruby-magic-classes-instances-and-metaclasses.html">Unraveling Classes, Instances and Metaclasses in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-01-31">Jan 31, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/01/31/asana-integration.html">Introducing our Asana integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-01-29">Jan 29, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/01/29/graphql.html">An instrumental intro to GraphQL with Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-01-22">Jan 22, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/01/22/serving-plug-building-an-elixir-http-server.html">Serving Plug - Building an Elixir HTTP server from scratch</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2019-01-08">Jan 08, 2019</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2019/01/08/ruby-magic-bindings-and-lexical-scope.html">Bindings and Lexical Scope in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-12-20">Dec 20, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/12/20/elixir-package-1-9.html">Elixir package 1.9: Improved Erlang error &amp; Container memory support </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-12-20">Dec 20, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/12/20/ruby-gem-2-8.html">Ruby gem 2.8 - Container memory &amp; JRuby on Alpine Linux support</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-12-04">Dec 04, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/12/04/dont-be-mean-statistical-means-and-percentiles-101.html">Don&#x27;t be mean: Statistical means and percentiles 101</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-11-27">Nov 27, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/11/27/ruby-magic-fibers-and-enumerators-in-ruby.html">Fibers and Enumerators in Ruby - Turning Blocks Inside Out</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-11-13">Nov 13, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/11/13/elixir-alchemy-understanding-elixirs-genstages-querying-the-blockchain.html">Understanding Elixir’s GenStages - Querying the Blockchain</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-11-06">Nov 06, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/11/06/testing-asyncronous-threads-in-ruby.html">Testing Asynchronous Threads in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-10-30">Oct 30, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/10/30/ruby-magic-building-a-ruby-c-extension-from-scratch.html">Building a Ruby C Extension From Scratch</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-10-23">Oct 23, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/10/23/the-innards-of-a-ruby-gem.html">The innards of a RubyGem</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-10-16">Oct 16, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/10/16/elixir-alchemy-hot-code-reloading-in-elixir.html">Hot Code Reloading in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-10-09">Oct 09, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/10/09/active-record-vs-ecto-part-2.html">ActiveRecord vs. Ecto Part Two </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-10-08">Oct 08, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/10/08/improved-navigation.html">Improved Navigation</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-10-02">Oct 02, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/10/02/ruby-magic-class-level-instance-variables.html">The Magic of Class-level Instance Variables</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-09-28">Sep 28, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/09/28/active-record-vs-ecto.html">ActiveRecord vs. Ecto Part One </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-09-25">Sep 25, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/09/25/explicitly-casting-vs-implicitly-coercing-types-in-ruby.html">#to_s or #to_str? Explicitly casting vs. implicitly coercing types in Ruby </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-09-18">Sep 18, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/09/18/elixir-alchemy-how-otp-applications-are-structured.html">How OTP Applications are structured</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-09-11">Sep 11, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/09/11/differences-between-nil-empty-blank-and-present.html">Differences Between #nil?, #empty?, #blank?, and #present? </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-09-04">Sep 04, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/09/04/ruby-magic-closures-in-ruby-blocks-procs-and-lambdas.html">Closures in Ruby: Blocks, Procs and Lambdas </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-08-28">Aug 28, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/08/28/push-and-pubsub-in-ruby.html">Push and Pub/Sub in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-08-21">Aug 21, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/08/21/elixir-alchemy-list-vs-tuples.html">Lists vs Tuples in Elixirs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-08-14">Aug 14, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/08/14/rails-collection-caching.html">Rails Collection Caching</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-08-13">Aug 13, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/08/13/elixir-package-1-8.html">Elixir package 1.8: Improvements! </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-08-13">Aug 13, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/08/13/ruby-gem-2-7.html">Ruby gem 2.7: Improvements and bug fixes </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-08-07">Aug 07, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/08/07/ruby-magic-changing-the-way-ruby-creates-objects.html">Changing the Way Ruby Creates Objects</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-31">Jul 31, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/31/generating-random-numbers-in-ruby.html">Generating Random Numbers in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-26">Jul 26, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/26/ruby-magic-summer-special-best-of-appsignal-academy.html">Ruby Magic Summer Special: The Best of AppSignal Academy </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-24">Jul 24, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/24/elixir-alchemy-parsing-numbers-in-elixir.html">Parsing Numbers in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-17">Jul 17, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/17/javascript-sprinkled-rails-applications.html">JavaScript-sprinkled Rails Applications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-11">Jul 11, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/11/elixir-package-1-7.html">Elixir integration 1.7 released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-10">Jul 10, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/10/ruby-magic-slurping-and-streaming-files.html">Under the Hood: “Slurping” and Streaming Files in Ruby </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-05">Jul 05, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/05/appsignal-dashboard-live-updating-insights.html">AppSignal Dashboard: Live updating insights </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-07-03">Jul 03, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/07/03/custom-exceptions-in-ruby.html">Custom Exceptions in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-06-28">Jun 28, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/06/28/rebooting-the-luftschiff.html">Rebooting the Luftschiff!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-06-19">Jun 19, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/06/19/activerecords-counter-cache.html">Caching counters with ActiveRecord&#x27;s counter caches</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-06-12">Jun 12, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/06/12/elixir-alchemy-deconstructing-genservers.html">Deconstructing Elixir&#x27;s GenServers</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-06-05">Jun 05, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/06/05/redo-retry-next.html">Ruby&#x27;s redo, retry and next keywords</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-05-29">May 29, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/05/29/ruby-magic-enumerable-and-enumerator.html">Ruby&#x27;s magical Enumerable module</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-05-23">May 23, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/05/23/speeding-up-your-apps-navigation-with-turbolinks.html">Speeding up your app’s navigation with Turbolinks</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-05-16">May 16, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/05/16/ensure-retry-and-reraise-exceptions-in-ruby.html">Ensuring execution, retrying failures and reraising exceptions in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-05-08">May 08, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/05/08/elixir-integration-1-6.html">Elixir integration 1.6: The GDPR release! </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-05-08">May 08, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/05/08/general-data-protection-regulation.html">General Data Protection Regulation (GDPR)</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-05-08">May 08, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/05/08/ruby-gem-2-6.html">Ruby gem 2.6: The GDPR release! </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-05-01">May 01, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/05/01/client-side-caching-in-rails-conditional-get-requests.html">Client-side caching in Rails: conditional GET requests </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-24">Apr 24, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/24/active-record-performance-the-n-1-queries-antipattern.html">ActiveRecord performance: the N+1 queries antipattern</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-20">Apr 20, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/20/post-mortem-april-19th-2018.html">Post-mortem: April 19th, 2018</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-17">Apr 17, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/17/rails-built-in-cache-stores.html">Rails&#x27; built-in cache stores: an overview </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-11">Apr 11, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/11/github-app.html">New GitHub integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-10">Apr 10, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/10/rescuing-exceptions-in-ruby.html">Rescuing exceptions in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-05">Apr 05, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/05/appsignal-ui-updates.html">AppSignal UI updates</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-04">Apr 04, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/04/elixir-package-1-5.html">Elixir integration 1.5 released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-04-03">Apr 03, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/04/03/russian-doll-caching-in-rails.html">Russian doll caching in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-03-28">Mar 28, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/03/28/understanding-system-load-and-load-averages.html">Understanding system load and load averages </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-03-20">Mar 20, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/03/20/fragment-caching-in-rails.html">Fragment caching in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-03-13">Mar 13, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/03/13/exceptions-in-ruby.html">Exceptions in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-03-06">Mar 06, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/03/06/understanding-cpu-statistics.html">Understanding CPU statistics</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-27">Feb 27, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/27/benchmarking-ruby-code.html">Benchmarking Ruby Code</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-21">Feb 21, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/21/inspecting-data-in-ruby.html">Inspecting data in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-20">Feb 20, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/20/comparing-hosts.html">Comparing host metrics</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-20">Feb 20, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/20/ruby-magic-syntactic-sugar-methods.html">Syntactic sugar methods in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-14">Feb 14, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/14/ruby-gem-2-5.html">Ruby gem 2.5 - JRuby support!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-13">Feb 13, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/13/debugging-exceptions-in-rails.html">Debugging exceptions in Rails</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-08">Feb 08, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/08/improved-host-metrics-alerts.html">Improved host metrics and alerts</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2018-02-06">Feb 06, 2018</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2018/02/06/reading-and-understanding-ruby-stack-traces.html">Reading and understanding Ruby stack traces</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-11-13">Nov 13, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/11/13/track-cache-hits-with-custom-metrics.html">Track cache hits with custom metrics </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-11-02">Nov 02, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/11/02/elixir-package-1-4.html">Elixir integration 1.4 released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-10-31">Oct 31, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/10/31/ruby-gem-2-4.html">Ruby gem 2.4 - FreeBSD support and more exceptions!&quot; </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-10-30">Oct 30, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/10/30/koos-keeping-others-off-support.html">Koos: keeping others off support</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-10-27">Oct 27, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/10/27/multiple-notifiers-anomaly-detection.html">Better, more and more specific notification options</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-10-10">Oct 10, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/10/10/two-factor-authentication.html">Two-factor authentication</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-10-05">Oct 05, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/10/05/mass-change-incident-status.html">(Mass) Change incident status</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-09-18">Sep 18, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/09/18/introducing-anomaly-detection-beta.html">Introducing Anomaly detection (Beta)</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-08-17">Aug 17, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/08/17/improved-snapshot.html">Improved Snapshots of your apps</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-08-10">Aug 10, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/08/10/elixir-alchemy-supervisors-building-fault-tolerant-elixir-applications.html">Supervisors: Building fault-tolerant Elixir applications </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-08-03">Aug 03, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/08/03/elixir-1-3.html">Elixir integration 1.3 released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-08-01">Aug 01, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/08/01/ruby-magic-code-interpretation.html">A look at how Ruby interprets your code</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-07-06">Jul 06, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/07/06/improved-slack-notifications.html">Improved Slack notifications</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-07-04">Jul 04, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/07/04/gem-2-3.html">Gem 2.3 - ActionCable!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-06-06">Jun 06, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/06/06/ruby-magic-concurrency-event-loop.html">Concurrency Deep Dive: Event loops</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-05-18">May 18, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/05/18/elixir-alchemy-demystifying-processes-in-elixir.html">Demystifying processes in Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-05-03">May 03, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/05/03/gem-2-2.html">Gem 2.2 - Custom namespaces!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-04-18">Apr 18, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/04/18/ruby-magic-concurrency-threads.html">Concurrency Deep Dive: Multi-threading</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-04-07">Apr 07, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/04/07/elixir-1-2.html">Elixir integration 1.2 released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-03-14">Mar 14, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/03/14/elixir-1-1.html">Elixir integration 1.1 released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-03-07">Mar 07, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/03/07/ruby-magic-concurrency-processes.html">Concurrency Deep Dive: Multi-process</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-02-24">Feb 24, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/02/24/launching-appsignal-for-elixir.html">Launching AppSignal for Elixir</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-01-31">Jan 31, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/01/31/gem-2-1.html">Gem 2.1 released - Alpine Linux support!</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-01-27">Jan 27, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/01/27/documentation-updates.html">Documentation updates</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2017-01-24">Jan 24, 2017</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2017/01/24/ruby-magic-building-a-ruby-http-server-part-2-running-a-rails-app.html">Running Rack: How Ruby HTTP servers run Rails apps</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-12-21">Dec 21, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/12/21/ruby-magic-escaping-in-ruby.html">Escaping characters in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-12-08">Dec 08, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/12/08/learning-how-to-become-a-product-business.html">Learning how to become a product business</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-12-07">Dec 07, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/12/07/session-review.html">Review active browser sessions</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-11-28">Nov 28, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/11/28/custom-markers-from-any-graph.html">Add custom markers from any graph</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-11-23">Nov 23, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/11/23/ruby-magic-building-a-30-line-http-server-in-ruby.html">Building a 30 line HTTP server in Ruby</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-10-28">Oct 28, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/10/28/custom-markers.html">Custom Markers</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-10-26">Oct 26, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/10/26/gem-2-0.html">Gem 2.0 released 🎉</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-10-18">Oct 18, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/10/18/ruby-magic-exceptions-primer.html">Rescuing Exceptions in Ruby: A Primer </a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-09-27">Sep 27, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/09/27/git-rebasing-strategies.html">Rebasing a complex branch in Git</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-09-20">Sep 20, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/09/20/introducing-a-new-layout-for-appsignal.html">Introducing: A new layout for AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-08-29">Aug 29, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/08/29/gem-1-3.html">Gem 1.3: Giving Sinatra some love</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-08-23">Aug 23, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/08/23/how-to-tame-your-growing-users-table.html">How to tame your growing users table</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-07-28">Jul 28, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/07/28/ruby-magic-garbage-collection-part-2.html">Introduction to Garbage Collection (Part II)</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-07-21">Jul 21, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/07/21/host-metrics-in-samples.html">Host metrics in samples</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-07-12">Jul 12, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/07/12/ruby-magic-garbage-collection-part-1.html">Introduction to Garbage Collection (Part I)</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-07-04">Jul 04, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/07/04/monitor-mongodb-load-with-custom-metrics.html">Monitor MongoDB (query) load with Custom Metrics</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-06-28">Jun 28, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/06/28/new-event-timeline.html">New event timeline</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-06-16">Jun 16, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/06/16/gem-1-2.html">Gem 1.2: Host metrics</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-03-29">Mar 29, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/03/29/gem-1-1.html">Gem version 1.1</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-03-21">Mar 21, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/03/21/referral-program-give-100-get-100.html">Share the love: give 100, get 100</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-03-21">Mar 21, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/03/21/upgrading-mongoid.html">Upgrading to Mongoid 5 / mongo-ruby-driver</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-03-17">Mar 17, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/03/17/ruby-magic-mastering-concurrency.html">Mastering Concurrency</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-02-23">Feb 23, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/02/23/introducing-graph-toggles.html">Introducing Graph Toggles</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-02-01">Feb 01, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/02/01/stroopwafels-and-how-to-eat-them.html">Stroopwafels and how to eat them</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-01-26">Jan 26, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/01/26/custom-metrics.html">How to use custom metrics</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-01-22">Jan 22, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/01/22/getting-high-on-our-own-supply.html">Getting high on our own supply</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-01-19">Jan 19, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/01/19/shipped-it-a-partnership-with-the-ruby-on-rails-podcast.html">Shipped it: A partnership with the Ruby on Rails podcast</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-01-14">Jan 14, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/01/14/event-type-graphs.html">Event type graphs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-01-12">Jan 12, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/01/12/agent-release.html">AppSignal agent release</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2016-01-07">Jan 07, 2016</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2016/01/07/phabricator.html">Phabricator integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-10-28">Oct 28, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/10/28/pagerduty.html">PagerDuty integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-08-31">Aug 31, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/08/31/opsgenie.html">OpsGenie integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-08-14">Aug 14, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/08/14/five-signs-to-recognize-a-future-customer.html">Five Signs to Recognize a Future Customer</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-08-10">Aug 10, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/08/10/gem-0-11-13-release.html">Gem version 0.11.13 released</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-07-22">Jul 22, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/07/22/custom-notifications-with-zapier.html">Custom notifications with Zapier</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-07-21">Jul 21, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/07/21/automated-screenshots-using-capybara.html">Automated screenshots using Capybara and Selenium</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-07-20">Jul 20, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/07/20/padrino-support.html">Padrino support</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-07-15">Jul 15, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/07/15/issue-states-notification-settings-and-interface-updates.html">Issue states, notification settings &amp; interface updates</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-06-30">Jun 30, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/06/30/intercom-integration.html">Introducing the Intercom integration beta</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-05-13">May 13, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/05/13/vat-with-stripe-followup.html">Handling VAT with Stripe: Follow up</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-04-02">Apr 02, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/04/02/introducing-the-jira-beta.html">Introducing the JIRA beta</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-03-06">Mar 06, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/03/06/official-sinatra-support.html">Official Sinatra support</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-02-17">Feb 17, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/02/17/zapier.html">Introducing the Zapier beta (No Official Support Since 2017)</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2015-01-20">Jan 20, 2015</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2015/01/20/gitlab-integration.html">GitLab integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-11-17">Nov 17, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/11/17/gem-version-011.html">Gem version 0.11</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-10-08">Oct 08, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/10/08/appsignal-integrates-with-pivotal-tracker-github-and-trello.html">AppSignal integrates with Pivotal Tracker, GitHub &amp; Trello</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-09-02">Sep 02, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/09/02/first-steps-towards-a-new-front-end.html">First steps towards a new front-end architecture</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-08-28">Aug 28, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/08/28/handling-vat-with-stripe.html">Handling VAT with Stripe</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-08-19">Aug 19, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/08/19/post-mortem-why-our-gem-disabled-itself.html">Post-Mortem: Why our gem disabled itself</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-08-13">Aug 13, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/08/13/gem-version-010.html">Gem version 0.10</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-08-04">Aug 04, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/08/04/consistent-api.html">Consistent API</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-07-04">Jul 04, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/07/04/flowdock.html">Flowdock integration</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-06-27">Jun 27, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/06/27/gem-version-09.html">Gem version 0.9</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-04-11">Apr 11, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/04/11/heartbleed.html">Our response to Heartbleed</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-04-07">Apr 07, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/04/07/stroopwafels-as-a-service.html">Stroopwafels as a Service</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-04-04">Apr 04, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/04/04/notification-settings-per-app.html">Set notification settings per application</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-03-31">Mar 31, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/03/31/mongodb-mongoid-and-sideiq-connection-problems.html">Vastly improve performance for MongoDB, Mongoid and Sidekiq</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-03-17">Mar 17, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/03/17/refactor-design.html">Refactoring design</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-01-31">Jan 31, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/01/31/error-performance-and-deploy-notifications-in-slack.html">Error, performance and deploy notifications in Slack</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-01-21">Jan 21, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/01/21/background-jobs.html">We now monitor your background jobs</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2014-01-07">Jan 07, 2014</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2014/01/07/realtime-mongodb-with-aggregations.html">Realtime graphs from MongoDB with aggregations</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-10-07">Oct 07, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/10/07/appsignal-api.html">AppSignal API</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-09-17">Sep 17, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/09/17/tagged-requests.html">Error request tagging</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-08-26">Aug 26, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/08/26/shelly-cloud.html">AppSignal and Shelly Cloud partner up</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-08-09">Aug 09, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/08/09/90th-and-snapshots.html">Improved graphs and snapshots</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-07-30">Jul 30, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/07/30/taming-mongodb-disk-usage.html">Taming our MongoDB database size.</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-07-27">Jul 27, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/07/27/week-30.html">AppSignal Sunday</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-07-23">Jul 23, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/07/23/poor-man-s-usability-testing.html">Poor man&#x27;s usability testing</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-07-15">Jul 15, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/07/15/developers-and-designers-an-arranged-marriage.html">Developers and designers: an arranged marriage.</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-06-19">Jun 19, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/06/19/gem-version-0-6.html">Gem version 0.6</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-06-13">Jun 13, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/06/13/reducing-mongodb-queries.html">A quick post about reducing MongoDB queries</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-06-06">Jun 06, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/06/06/user-test.html">User test</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-05-17">May 17, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/05/17/designing-appsignal.html">Designing AppSignal</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-04-29">Apr 29, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/04/29/opening-up-shop.html">Opening up shop</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-04-19">Apr 19, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/04/19/four-oh-one.html">401: Unauthorized</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-04-18">Apr 18, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/04/18/filter-sensitive-data-from-params.html">Filtering sensitive data from params</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-03-26">Mar 26, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/03/26/better-graphs-event-tree-and-new-hosts-section.html">Better graphs, event tree &amp; new hosts section</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-02-15">Feb 15, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/02/15/jquery-toggle-is-slow-javascript-to-the-rescue.html">jQuery toggle() is slow, JavaScript to the rescue</a></li><li class="sm:flex"><time class="block flex-shrink-0 w-32 mb-2 text-xs sm:text-base text-gray-700" dateTime="2013-01-31">Jan 31, 2013</time><a class="sm:pl-8 c_h-heading leading-tight no-underline hover:underline" href="/2013/01/31/welcome-to-appsignal.html">Welcome to AppSignal!</a></li></ul></div></section><section class="bg-gradient-to-b from-gray-900 to-blue-800 || content-visibility-auto"><div class="c-container max-w-7xl text-center pt-20 sm:pt-24 overflow-hidden"><div class="max-w-3xl mx-auto space-y-4 sm:space-y-5"><h1 class="c_h-heading c_h-heading--4xl sm:c_h-heading--5xl text-white">AppSignal monitors your apps</h1><p class="text-lg lg:text-xl text-gray-200">AppSignal provides insights for Ruby, Rails, Elixir, Phoenix, Node.js, Express and many other frameworks and libraries. We are located in beautiful Amsterdam. We love<!-- --> <a href="https://www.appsignal.com/waffles" target="_blank" rel="noopener noreferrer">stroopwafels</a>. If you do too,<!-- --> <a href="mailto:contact@appsignal.com">let us know</a>. We might send you some!</p></div><a href="https://www.appsignal.com" class="mt-10 c-button c-button--md c-button--green">Discover AppSignal</a><div class="relative mt-16"><div class="max-h-40 max-w-md mx-auto || sm:hidden"><img alt="AppSignal monitors your apps" loading="lazy" width="552" height="320" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fimages%2Fgeneral%2Fcall-to-action-small.png&amp;w=640&amp;q=75 1x, /_next/image?url=%2Fimages%2Fgeneral%2Fcall-to-action-small.png&amp;w=1200&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fgeneral%2Fcall-to-action-small.png&amp;w=1200&amp;q=75"/></div><div class="max-h-64 md:max-h-80 lg:max-h-100 lg:mb-4 || hidden sm:block"><img alt="AppSignal monitors your apps" loading="lazy" width="1280" height="720" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2Fimages%2Fgeneral%2Fcall-to-action.png&amp;w=1920&amp;q=75 1x, /_next/image?url=%2Fimages%2Fgeneral%2Fcall-to-action.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2Fimages%2Fgeneral%2Fcall-to-action.png&amp;w=3840&amp;q=75"/></div></div></div></section></main><footer class="relative px-4 py-16 sm:pt-20 xl:pb-28 dark text-gray-300 bg-gray-900"><div class="c-container"><div class="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-x-12 gap-y-10"><div class="col-span-1"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Features</h2><ul class="space-y-2"><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bug" class="svg-inline--fa fa-bug " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z"></path></svg></span><div><a href="https://www.appsignal.com/tour/errors/" class="no-underline text-white undefined sm:text-lg hover:underline">Error tracking</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rabbit-running" class="svg-inline--fa fa-rabbit-running " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M460.7 39.3l-2.2-2.1c-4.7-4.6-11.5-6.4-17.9-4.7s-11.4 6.6-13.1 13l-.8 2.9c-3.3 11.8-5.1 23.7-5.5 35.6c24.3 20.6 42.9 47.8 53.3 78.8c-8.2-1.9-16.5-2.9-25-2.9c-.6 0-1.1 0-1.7 0c-18.4-44-56.5-77.4-103.6-89.3l-3.4-.9c-6.2-1.6-12.9-.6-18.5 2.6c-10.8 6.2-15.6 19.5-11.2 31.1c14.9 39.5 44.3 71.4 81.4 89.7c-3.7 6.6-6.4 14-7.6 21.8L279.7 154.9C248.8 137.3 213.8 128 178.2 128c-32.3 0-62.2 16.8-78.9 44.4C89 159.9 73.4 152 56 152c-30.9 0-56 25.1-56 56s25.1 56 56 56c11.3 0 21.8-3.3 30.6-9.1c4.9 17.2 14.5 33.1 28.4 45.9L257.2 431.2C269 442 284.4 448 300.4 448H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352 335.2 320V340.5c0-42.9-28.4-80.5-69.6-92.3l-30.8-8.8c-8.5-2.4-13.4-11.3-11-19.8s11.3-13.4 19.8-11l30.8 8.8c55 15.7 92.8 65.9 92.8 123.1v15.7l56-32.4 6.4-3.7H515.7c33.3 0 60.3-27 60.3-60.3c0-18.1-8.2-35.3-22.2-46.7l-34.6-28.2c-4.6-3.7-9.4-7.1-14.5-10c8.4-49.3-7.8-100-43.9-135.5zm-318.5 382c-14.7 9.8-18.7 29.7-8.9 44.4s29.7 18.7 44.4 8.9l46-30.7-48.6-44.5-32.9 22zM480 240a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z"></path></svg></span><div><a href="https://www.appsignal.com/tour/performance" class="no-underline text-white undefined sm:text-lg hover:underline">Performance monitoring</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="server" class="svg-inline--fa fa-server " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"></path></svg></span><div><a href="https://www.appsignal.com/tour/hosts" class="no-underline text-white undefined sm:text-lg hover:underline">Host monitoring</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="siren-on" class="svg-inline--fa fa-siren-on " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M69.3 36l48 32c11 7.4 14 22.3 6.7 33.3s-22.3 14-33.3 6.7l-48-32c-11-7.4-14-22.3-6.7-33.3s22.3-14 33.3-6.7zM597.3 76l-48 32c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l48-32c11-7.4 25.9-4.4 33.3 6.7s4.4 25.9-6.7 33.3zM24 192H88c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm528 0h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552c-13.3 0-24-10.7-24-24s10.7-24 24-24zM144 352l25-199.9c4-32 31.2-56.1 63.5-56.1h175c32.3 0 59.5 24 63.5 56.1L496 352H234.1l21.8-174c1.1-8.8-5.1-16.8-13.9-17.9s-16.8 5.1-17.9 13.9L201.9 352H144zM96 416c0-17.7 14.3-32 32-32H512c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416z"></path></svg></span><div><a href="https://www.appsignal.com/tour/anomaly-detection" class="no-underline text-white undefined sm:text-lg hover:underline">Anomaly detection</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="traffic-light" class="svg-inline--fa fa-traffic-light " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z"></path></svg></span><div><a href="https://www.appsignal.com/tour/uptime-monitoring" class="no-underline text-white undefined sm:text-lg hover:underline">Uptime monitoring</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></span><div><a href="https://www.appsignal.com/tour/metrics" class="no-underline text-white undefined sm:text-lg hover:underline">Metric dashboards</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="users" class="svg-inline--fa fa-users " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z"></path></svg></span><div><a href="https://www.appsignal.com/tour/workflow" class="no-underline text-white undefined sm:text-lg hover:underline">Workflow</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="line-columns" class="svg-inline--fa fa-line-columns " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M224 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H192c17.7 0 32-14.3 32-32zm0 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM0 320c0 17.7 14.3 32 32 32H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM224 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H192c17.7 0 32-14.3 32-32zM288 64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 192c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32zM288 320c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32zM512 448c0-17.7-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32z"></path></svg></span><div><a href="https://www.appsignal.com/tour/log-management" class="no-underline text-white undefined sm:text-lg hover:underline">Log management</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></span><div><a href="https://www.appsignal.com/tour/automated-dashboards" class="no-underline text-white undefined sm:text-lg hover:underline">Automated Dashboards</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-check" class="svg-inline--fa fa-square-check " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"></path></svg></span><div><a href="https://www.appsignal.com/tour/check-ins" class="no-underline text-white undefined sm:text-lg hover:underline">Check-ins</a></div></div></li><li><div class="flex items-center space-x-3"><span class="h-4 w-4 flex justify-center items-center"></span><div><a href="https://www.appsignal.com/tour/time-detective" class="no-underline text-white undefined sm:text-lg hover:underline">Time Detective</a></div></div></li></ul></div><div class="col-span-1"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Resources</h2><ul class="space-y-2"><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/plans" class="no-underline text-white undefined sm:text-lg hover:underline">Plans &amp; pricing</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://docs.appsignal.com/" class="no-underline text-white undefined sm:text-lg hover:underline">Documentation</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/">Blog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/customers" class="no-underline text-white undefined sm:text-lg hover:underline">Customer Stories</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/alternative/datadog-alternative" class="no-underline text-white undefined sm:text-lg hover:underline">Compare AppSignal to Datadog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/alternative/new-relic-alternative" class="no-underline text-white undefined sm:text-lg hover:underline">Compare AppSignal to New Relic</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/alternative/sentry-alternative" class="no-underline text-white undefined sm:text-lg hover:underline">Compare AppSignal to Sentry</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/changelog" class="no-underline text-white undefined sm:text-lg hover:underline">Changelog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/learning-center" class="no-underline text-white undefined sm:text-lg hover:underline">Learning Center</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/why" class="no-underline text-white undefined sm:text-lg hover:underline">Why AppSignal</a></div></div></li></ul></div><div class="col-span-1"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Support</h2><p class="text-sm mb-4">Do you need help, have a feature request or just need someone to rubber duck with? Get in touch with one of our engineers.</p><ul class="space-y-2"><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/contact" class="no-underline text-white undefined sm:text-lg hover:underline">Contact us</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="mailto:support@appsignal.com" class="no-underline text-white undefined sm:text-lg hover:underline">Live chat</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://status.appsignal.com/" class="no-underline text-white undefined sm:text-lg hover:underline">Status</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/security" class="no-underline text-white undefined sm:text-lg hover:underline">Security</a></div></div></li></ul></div><div class="col-span-1"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">About us</h2><p class="text-sm mb-4"><span>AppSignal is located in the beautiful Netherlands. We love<!-- --> <a href="https://www.appsignal.com/waffles">stroopwafels</a>. If you do too, <a href="mailto:support@appsignal.com">let us know</a>. We might send you some!</span></p><ul class="space-y-2"><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/about" class="no-underline text-white undefined sm:text-lg hover:underline">About</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/jobs" class="no-underline text-white undefined sm:text-lg hover:underline">Jobs</a></div></div></li><li><div class="flex items-center space-x-3"><div><a class="no-underline text-white undefined sm:text-lg hover:underline" href="/write-for-us">Write for Our Blog</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/diversity" class="no-underline text-white undefined sm:text-lg hover:underline">Diversity</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://www.appsignal.com/open-source" class="no-underline text-white undefined sm:text-lg hover:underline">Open Source</a></div></div></li><li><div class="flex items-center space-x-3"><div><a href="https://twitter.com/appsignal" class="no-underline text-white undefined sm:text-lg hover:underline">Twitter</a></div></div></li></ul></div><div class="col-span-1 sm:col-span-2 xl:col-span-4"><h2 class="text-white uppercase tracking-wider font-medium border-b border-gray-700 pb-3 mb-4">Languages</h2><div class="grid grid-cols-1 sm:grid-cols-3 gap-6 sm:gap-12"><div class="space-y-6 sm:space-y-12 lg:space-y-0 lg:grid lg:grid-cols-2 lg:gap-12"><ul class="space-y-2"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gem" class="svg-inline--fa fa-gem " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z"></path></svg></span><div><a href="https://www.appsignal.com/ruby" class="no-underline text-white text-lg sm:text-lg hover:underline">Ruby</a></div></div><p class="mt-1"><span class="sm:block"><a href="https://www.appsignal.com/ruby/active-record-monitoring" class="no-underline hover:underline">Active Record</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/capistrano-monitoring" class="no-underline hover:underline">Capistrano</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/delayed-job-monitoring" class="no-underline hover:underline">Delayed::Job</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/garbage-collection-monitoring" class="no-underline hover:underline">Garbage Collection</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/global-vm-lock-monitoring" class="no-underline hover:underline">Global VM Lock</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/grape-monitoring" class="no-underline hover:underline">Grape</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/graphql-monitoring" class="no-underline hover:underline">GraphQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/hanami-monitoring" class="no-underline hover:underline">Hanami</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/mongodb-monitoring" class="no-underline hover:underline">MongoDB</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/padrino-monitoring" class="no-underline hover:underline">Padrino</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/puma-monitoring" class="no-underline hover:underline">Puma</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/que-monitoring" class="no-underline hover:underline">Que</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/rails-monitoring" class="no-underline hover:underline">Ruby on Rails</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/rake-monitoring" class="no-underline hover:underline">Rake</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/resque-monitoring" class="no-underline hover:underline">Resque</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/shoryuken-monitoring" class="no-underline hover:underline">Shoryuken</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/sidekiq-monitoring" class="no-underline hover:underline">Sidekiq</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/sinatra-monitoring" class="no-underline hover:underline">Sinatra</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/solid-queue-monitoring" class="no-underline hover:underline">Solid Queue</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/view-component-monitoring" class="no-underline hover:underline">ViewComponent</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/ruby/webmachine-monitoring" class="no-underline hover:underline">Webmachine</a><span class="sm:hidden"></span></span></p></li></ul><ul class="space-y-2"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="droplet" class="svg-inline--fa fa-droplet " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"></path></svg></span><div><a href="https://www.appsignal.com/elixir" class="no-underline text-white text-lg sm:text-lg hover:underline">Elixir</a></div></div><p class="mt-1"><span class="sm:block"><a href="https://www.appsignal.com/elixir/absinthe-monitoring" class="no-underline hover:underline">Absinthe</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/elixir/ecto-monitoring" class="no-underline hover:underline">Ecto</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/elixir/erlang-monitoring" class="no-underline hover:underline">Erlang</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/elixir/finch-monitoring" class="no-underline hover:underline">Finch</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/elixir/oban-monitoring" class="no-underline hover:underline">Oban</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/elixir/phoenix-monitoring" class="no-underline hover:underline">Phoenix</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/elixir/plug-monitoring" class="no-underline hover:underline">Plug</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/elixir/tesla-monitoring" class="no-underline hover:underline">Tesla</a><span class="sm:hidden"></span></span></p></li></ul></div><div class="space-y-6 sm:space-y-12 lg:space-y-0 lg:grid lg:grid-cols-2 lg:gap-12"><ul class="space-y-2"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="node-js" class="svg-inline--fa fa-node-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"></path></svg></span><div><a href="https://www.appsignal.com/nodejs" class="no-underline text-white text-lg sm:text-lg hover:underline">Node.js</a></div></div><p class="mt-1"><span class="sm:block"><a href="https://www.appsignal.com/nodejs/amqplib-monitoring" class="no-underline hover:underline">AMQPlib</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/apollo-gateway-monitoring" class="no-underline hover:underline">Apollo Gateway</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/bullmq-monitoring" class="no-underline hover:underline">BullMQ</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/express-monitoring" class="no-underline hover:underline">Express</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/fastify-monitoring" class="no-underline hover:underline">Fastify</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/graphql-monitoring" class="no-underline hover:underline">GraphQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/knexjs-monitoring" class="no-underline hover:underline">Knex.js</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/koa-monitoring" class="no-underline hover:underline">Koa</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/mongodb-monitoring" class="no-underline hover:underline">MongoDB</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/mongoose-monitoring" class="no-underline hover:underline">Mongoose</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/mysql-monitoring" class="no-underline hover:underline">MySQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/nestjs-monitoring" class="no-underline hover:underline">NestJS</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/nextjs-monitoring" class="no-underline hover:underline">Next.js</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/pino-monitoring" class="no-underline hover:underline">Pino</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/postgresql-monitoring" class="no-underline hover:underline">PostgreSQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/prisma-monitoring" class="no-underline hover:underline">Prisma</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/redis-monitoring" class="no-underline hover:underline">Redis</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/remix-monitoring" class="no-underline hover:underline">Remix</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/restify-monitoring" class="no-underline hover:underline">Restify</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/nodejs/winston-monitoring" class="no-underline hover:underline">Winston</a><span class="sm:hidden"></span></span></p></li></ul><ul class="space-y-2"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="square-js" class="svg-inline--fa fa-square-js " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448 96c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96zM180.9 444.9c-33.7 0-53.2-17.4-63.2-38.5L152 385.7c6.6 11.7 12.6 21.6 27.1 21.6c13.8 0 22.6-5.4 22.6-26.5V237.7h42.1V381.4c0 43.6-25.6 63.5-62.9 63.5zm85.8-43L301 382.1c9 14.7 20.8 25.6 41.5 25.6c17.4 0 28.6-8.7 28.6-20.8c0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5c0-31.6 24.1-55.6 61.6-55.6c26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18c-12.3 0-20.1 7.8-20.1 18c0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2c0 37.8-29.8 58.6-69.7 58.6c-39.1 0-64.4-18.6-76.7-43z"></path></svg></span><div><a href="https://www.appsignal.com/javascript" class="no-underline text-white text-lg sm:text-lg hover:underline">JavaScript</a></div></div><p class="mt-1"><span class="sm:block"><a href="https://www.appsignal.com/javascript/react-monitoring" class="no-underline hover:underline">React</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/javascript/vue-monitoring" class="no-underline hover:underline">Vue</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/javascript/angular-monitoring" class="no-underline hover:underline">Angular</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/javascript/ember-monitoring" class="no-underline hover:underline">Ember</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/javascript/preact-monitoring" class="no-underline hover:underline">Preact</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/javascript/stimulus-monitoring" class="no-underline hover:underline">Stimulus</a><span class="sm:hidden"></span></span></p></li></ul></div><div class="space-y-6 sm:space-y-12 lg:space-y-0 lg:grid lg:grid-cols-2 lg:gap-12"><ul class="space-y-2"><li><div class="flex items-center space-x-2"><span class="h-4 w-4 flex justify-center items-center"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="python" class="svg-inline--fa fa-python " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z"></path></svg></span><div><a href="https://www.appsignal.com/python" class="no-underline text-white text-lg sm:text-lg hover:underline">Python</a></div></div><p class="mt-1"><span class="sm:block"><a href="https://www.appsignal.com/python/celery-monitoring" class="no-underline hover:underline">Celery</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/django-monitoring" class="no-underline hover:underline">Django</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/fastapi-monitoring" class="no-underline hover:underline">FastAPI</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/flask-monitoring" class="no-underline hover:underline">Flask</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/jinja2-monitoring" class="no-underline hover:underline">Jinja2</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/mysql-monitoring" class="no-underline hover:underline">MySQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/pika-monitoring" class="no-underline hover:underline">Pika</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/postgresql-monitoring" class="no-underline hover:underline">PostgreSQL</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/redis-monitoring" class="no-underline hover:underline">Redis</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/request-monitoring" class="no-underline hover:underline">Request</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/sqlalchemy-monitoring" class="no-underline hover:underline">SQLAlchemy</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/sqlite-monitoring" class="no-underline hover:underline">SQLite</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/starlette-monitoring" class="no-underline hover:underline">Starlette</a><span class="sm:hidden">, </span></span><span class="sm:block"><a href="https://www.appsignal.com/python/wsgi-asgi-monitoring" class="no-underline hover:underline">WSGI and ASGI</a><span class="sm:hidden"></span></span></p></li></ul><ul class="space-y-2"><li><div class="flex items-center space-x-2"><div><a class="no-underline text-white text-lg sm:text-lg hover:underline"></a></div></div></li></ul></div></div></div><div class="col-span-1 sm:col-span-2 xl:col-span-4 border-t border-gray-800 pt-6 xl:flex xl:items-center xl:justify-between"><div class="w-[168px] h-[31px] mb-4 xl:mb-0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 350.92 64.54"><g fill="#fff"><path d="M341.56 12.58c-5.46 0-9.37 4.82-13.39 10.18C325.68 11.38 322.9 0 314.07 0S302.46 11.38 300 22.76c-4-5.36-7.93-10.18-13.39-10.18-3.47 0-9.35 2.37-9.35 11.22v16.11c0 8.69 4.64 10.82 7.42 11.54 4.8 1.25 16.36 2.4 29.37 2.4s24.57-1.15 29.36-2.4c2.79-.72 7.43-2.85 7.43-11.54V23.8c0-8.85-5.88-11.22-9.36-11.22M314.07 5c5.29 0 7.3 10.44 10.12 23-3.09 3.79-6.36 6.86-10.12 6.86S307 31.78 304 28c2.63-11.72 4.65-23 10.12-23m-31.84 34.91V23.8c0-5.59 3-6.2 4.33-6.2 3.85 0 8 6.43 11.94 11.59-2.83 11.71-5.78 18.81-12.75 17.37-1.82-.5-3.52-1.65-3.52-6.65M296 48.05c3-3.35 5-8.58 6.5-14.12 3.23 3.38 6.95 5.93 11.57 5.93s8.33-2.55 11.56-5.93c1.5 5.54 3.47 10.77 6.55 14.12-5.39.5-11.88.79-18.11.79s-12.73-.29-18.12-.79m49.91-8.14c0 5-1.71 6.15-3.52 6.65-7 1.48-9.93-5.66-12.72-17.37 3.95-5.16 8.09-11.59 11.94-11.59 1.3 0 4.34.61 4.34 6.2ZM1.13 52.07a1.12 1.12 0 0 1-.79-.34 1.16 1.16 0 0 1-.34-.85 1.52 1.52 0 0 1 .11-.52L14 13.74a2 2 0 0 1 .62-1 1.81 1.81 0 0 1 1.25-.4h5a1.81 1.81 0 0 1 1.25.4 2.44 2.44 0 0 1 .68 1l13.82 36.62a2.52 2.52 0 0 1 .06.52 1.16 1.16 0 0 1-.34.85 1.12 1.12 0 0 1-.79.34h-3.92a1.4 1.4 0 0 1-1.07-.37 2.41 2.41 0 0 1-.46-.7l-2.89-7.48H9.47L6.63 51a2 2 0 0 1-.48.66 1.5 1.5 0 0 1-1.1.37Zm10.15-14.18H25.4l-7.09-18.82ZM42.52 62.84a1.25 1.25 0 0 1-1.3-1.31V23.89a1.24 1.24 0 0 1 1.3-1.3h3.57a1.25 1.25 0 0 1 1.31 1.3v2.38a11.6 11.6 0 0 1 3.62-3A11.35 11.35 0 0 1 56.58 22a12.67 12.67 0 0 1 5.33 1 10.13 10.13 0 0 1 3.68 2.83 12.56 12.56 0 0 1 2.24 4.26 19.79 19.79 0 0 1 .88 5.21c0 .64.06 1.31.06 2s0 1.34-.06 2a18.1 18.1 0 0 1-.82 5.16 13.14 13.14 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.56 12.56 0 0 1-5.36 1.05 11.36 11.36 0 0 1-5.36-1.16 10.55 10.55 0 0 1-3.54-3v13a1.27 1.27 0 0 1-.37.94 1.38 1.38 0 0 1-1 .37ZM55 47.3a6.63 6.63 0 0 0 4.17-1.16 6.53 6.53 0 0 0 2.18-3 14.43 14.43 0 0 0 .8-4.14 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.8-4.14 6.58 6.58 0 0 0-2.18-3A6.69 6.69 0 0 0 55 27.35a6.44 6.44 0 0 0-6.49 4.22 12.43 12.43 0 0 0-.82 3.77q-.06 1-.06 2.16c0 .79 0 1.53.06 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86A6.83 6.83 0 0 0 55 47.3ZM75.71 62.84a1.27 1.27 0 0 1-1.3-1.31V23.89a1.25 1.25 0 0 1 1.3-1.3h3.58a1.29 1.29 0 0 1 .93.36 1.27 1.27 0 0 1 .37.94v2.38a11.53 11.53 0 0 1 3.63-3A11.29 11.29 0 0 1 89.77 22a12.64 12.64 0 0 1 5.33 1 10.16 10.16 0 0 1 3.69 2.83 12.74 12.74 0 0 1 2.21 4.3 20.21 20.21 0 0 1 .88 5.21v4a18.1 18.1 0 0 1-.83 5.16 12.94 12.94 0 0 1-2.24 4.22 10.21 10.21 0 0 1-3.71 2.89 12.53 12.53 0 0 1-5.36 1.05 11.31 11.31 0 0 1-5.35-1.16 10.49 10.49 0 0 1-3.55-3v13a1.27 1.27 0 0 1-.37.94 1.34 1.34 0 0 1-1 .37ZM88.19 47.3a6.1 6.1 0 0 0 6.35-4.19 14.43 14.43 0 0 0 .79-4.11 25.8 25.8 0 0 0 0-3.29 14.43 14.43 0 0 0-.79-4.14 6.1 6.1 0 0 0-6.35-4.19 6.44 6.44 0 0 0-6.5 4.22 12.74 12.74 0 0 0-.82 3.77c0 .64-.05 1.36-.05 2.16s0 1.53.05 2.21a9.3 9.3 0 0 0 .85 3.6 7.15 7.15 0 0 0 2.38 2.86 6.84 6.84 0 0 0 4.09 1.1ZM122.17 52.63a21.18 21.18 0 0 1-8.56-1.53 12.82 12.82 0 0 1-5.27-4 9.44 9.44 0 0 1-1.93-5.25 1.1 1.1 0 0 1 .34-.79 1.15 1.15 0 0 1 .85-.34h4a1.47 1.47 0 0 1 1 .31 2.75 2.75 0 0 1 .57.76 6.36 6.36 0 0 0 1.36 2.39 7.72 7.72 0 0 0 2.86 2 12.06 12.06 0 0 0 4.73.79q4.48 0 6.61-1.53a4.88 4.88 0 0 0 2.12-4.19 3.83 3.83 0 0 0-1.13-2.87 10.56 10.56 0 0 0-3.52-2c-1.58-.6-3.64-1.25-6.17-1.93a36.52 36.52 0 0 1-7-2.55 10.29 10.29 0 0 1-4.19-3.57 9.81 9.81 0 0 1-1.39-5.44 9.72 9.72 0 0 1 1.73-5.67 11.66 11.66 0 0 1 4.93-3.94 18.66 18.66 0 0 1 7.68-1.45 19 19 0 0 1 6.35 1 14 14 0 0 1 4.57 2.55 11.53 11.53 0 0 1 2.77 3.4 8.31 8.31 0 0 1 1 3.57 1.18 1.18 0 0 1-.32.77 1.09 1.09 0 0 1-.87.37h-4.14a1.83 1.83 0 0 1-.88-.23 1.5 1.5 0 0 1-.65-.85 5.22 5.22 0 0 0-2.44-3.46 9.49 9.49 0 0 0-5.39-1.42 10.19 10.19 0 0 0-5.41 1.28 4.35 4.35 0 0 0-2.07 4 4.24 4.24 0 0 0 1 2.89 8.38 8.38 0 0 0 3.18 2 58.53 58.53 0 0 0 5.75 1.9 43.26 43.26 0 0 1 7.76 2.54 10.38 10.38 0 0 1 4.4 3.51 9.64 9.64 0 0 1 1.41 5.42 10 10 0 0 1-1.95 6.2 12.32 12.32 0 0 1-5.44 4 22 22 0 0 1-8.25 1.36ZM143.77 17.37a1.34 1.34 0 0 1-1-.37 1.24 1.24 0 0 1-.37-.93v-3.58a1.34 1.34 0 0 1 .37-1 1.32 1.32 0 0 1 1-.4h4.31a1.39 1.39 0 0 1 1 .4 1.29 1.29 0 0 1 .4 1v3.58a1.2 1.2 0 0 1-.4.93 1.41 1.41 0 0 1-1 .37Zm.34 34.7a1.38 1.38 0 0 1-1-.37 1.27 1.27 0 0 1-.37-.94V23.89a1.27 1.27 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.69a1.25 1.25 0 0 1 1.3 1.3v26.87a1.27 1.27 0 0 1-.37.94 1.28 1.28 0 0 1-.93.37ZM168.5 64.54a17.5 17.5 0 0 1-6.58-1.05 12.16 12.16 0 0 1-4-2.52 9.27 9.27 0 0 1-2.09-2.97 8.1 8.1 0 0 1-.65-2.38 1.13 1.13 0 0 1 .34-1 1.3 1.3 0 0 1 1-.39h3.86a1.51 1.51 0 0 1 .85.22 1.8 1.8 0 0 1 .56 1 11.19 11.19 0 0 0 1 1.73 5 5 0 0 0 1.93 1.61 7.69 7.69 0 0 0 3.57.68 11 11 0 0 0 4.05-.65 4.82 4.82 0 0 0 2.5-2.3 9.59 9.59 0 0 0 .87-4.47v-3.84a10.93 10.93 0 0 1-3.64 2.79 11.93 11.93 0 0 1-5.38 1.08 12.69 12.69 0 0 1-5.36-1 9.78 9.78 0 0 1-3.69-2.86 13.36 13.36 0 0 1-2.21-4.28 18.82 18.82 0 0 1-.82-5.27q-.06-1.53 0-3.12a18.94 18.94 0 0 1 .8-5.16 12.85 12.85 0 0 1 2.21-4.39 10.34 10.34 0 0 1 3.71-2.94 12.23 12.23 0 0 1 5.36-1.06 11.1 11.1 0 0 1 5.52 1.25 11.77 11.77 0 0 1 3.66 3.06V24a1.37 1.37 0 0 1 .37-1 1.31 1.31 0 0 1 1-.39h3.57a1.33 1.33 0 0 1 1.35 1.39v27.39a16.14 16.14 0 0 1-1.38 6.91 10 10 0 0 1-4.4 4.59 16.32 16.32 0 0 1-7.88 1.65Zm-.17-17.69a6.62 6.62 0 0 0 4.11-1.19 7.39 7.39 0 0 0 2.33-3 10.87 10.87 0 0 0 .87-3.71c0-.49.06-1.12.06-1.9s0-1.39-.06-1.84a11.09 11.09 0 0 0-.87-3.74 7.13 7.13 0 0 0-2.33-3 6.74 6.74 0 0 0-4.11-1.16 6.85 6.85 0 0 0-4.17 1.16 6.49 6.49 0 0 0-2.24 3 14.43 14.43 0 0 0-.79 4.14v2.84a14.62 14.62 0 0 0 .79 4.11 6.52 6.52 0 0 0 2.24 3.06 6.85 6.85 0 0 0 4.17 1.23ZM190.13 52.07a1.38 1.38 0 0 1-1-.37 1.31 1.31 0 0 1-.37-.94V23.89a1.31 1.31 0 0 1 .37-.94 1.37 1.37 0 0 1 1-.36h3.63a1.25 1.25 0 0 1 1.31 1.3v2.44a12.29 12.29 0 0 1 3.8-3.09 11.91 11.91 0 0 1 5.72-1.24 11.34 11.34 0 0 1 6.12 1.59 10.28 10.28 0 0 1 3.92 4.41 15.55 15.55 0 0 1 1.37 6.77v16a1.25 1.25 0 0 1-.4.94 1.39 1.39 0 0 1-1 .37h-3.92a1.28 1.28 0 0 1-.93-.37 1.27 1.27 0 0 1-.37-.94V35.06a8.33 8.33 0 0 0-1.79-5.67 6.45 6.45 0 0 0-5.13-2 6.84 6.84 0 0 0-5.18 2 7.83 7.83 0 0 0-2 5.67v15.7a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37ZM230.92 52.63a11.76 11.76 0 0 1-5.25-1.16 9.93 9.93 0 0 1-3.74-3.09 7.31 7.31 0 0 1-1.39-4.38 7.42 7.42 0 0 1 3.18-6.27 18.1 18.1 0 0 1 8.39-3.09l8-1.19v-1.4a5.5 5.5 0 0 0-1.36-4c-.91-.94-2.42-1.41-4.54-1.41a6.9 6.9 0 0 0-3.74.9 5.22 5.22 0 0 0-2 2.44 1.32 1.32 0 0 1-1.25.74h-3.51a1.2 1.2 0 0 1-.94-.34 1.34 1.34 0 0 1-.31-.91 5.88 5.88 0 0 1 .71-2.12 8.28 8.28 0 0 1 2.07-2.5 11.76 11.76 0 0 1 3.66-2 15.47 15.47 0 0 1 5.35-.82 17.06 17.06 0 0 1 5.9.88 9.93 9.93 0 0 1 3.8 2.35 9.17 9.17 0 0 1 2.07 3.4 12.46 12.46 0 0 1 .65 4v18.1a1.22 1.22 0 0 1-.4.94 1.37 1.37 0 0 1-1 .37h-3.63a1.25 1.25 0 0 1-1.3-1.31v-2.38a9.3 9.3 0 0 1-2 2 10.74 10.74 0 0 1-3 1.62 13.85 13.85 0 0 1-4.42.63Zm1.59-4.82a8.24 8.24 0 0 0 3.91-.93A6.74 6.74 0 0 0 239.2 44a10.38 10.38 0 0 0 1-4.88v-1.4l-6.13 1a13.25 13.25 0 0 0-5.52 1.75 3.66 3.66 0 0 0-1.85 3.06 3.46 3.46 0 0 0 .85 2.41 5.33 5.33 0 0 0 2.16 1.42 8 8 0 0 0 2.8.45ZM254.47 52.07a1.25 1.25 0 0 1-1.3-1.31V13.12a1.25 1.25 0 0 1 1.3-1.31h3.74a1.25 1.25 0 0 1 1.3 1.31v37.64a1.25 1.25 0 0 1-1.3 1.31Z"></path></g></svg></div><ul><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a href="https://www.appsignal.com/terms" class="no-underline hover:underline">Terms &amp; Conditions</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a href="https://www.appsignal.com/privacy-policy" class="no-underline hover:underline">Privacy Policy</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a href="https://www.appsignal.com/cookie-policy" class="no-underline hover:underline">Cookie Policy</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a href="https://docs.appsignal.com/appsignal/gdpr.html" class="no-underline hover:underline">GDPR compliance</a></li><li class="mb-2 xl:mb-0 sm:inline-block sm:mr-4 sm:last:mr-0 xl:mr-12"><a href="https://www.appsignal.com/contact" class="no-underline hover:underline">Contact us / Imprint</a></li></ul></div></div></div></footer></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"menu":{"tags":[{"slug":"appsignal","shortName":"AppSignal Updates"},{"slug":"ruby","shortName":"Ruby"},{"slug":"elixir","shortName":"Elixir"},{"slug":"javascript","shortName":"JavaScript"},{"slug":"python","shortName":"Python"},{"slug":"academy","shortName":"APM Academy"}]},"posts":{"related":[{"author":"Ana Malinović","authors":null,"category":"elixir","date":"2024-12-17T00:00:00+00:00","image":"/images/blog/2024-12/top-5-elixir.jpg","intro":"It's time for our yearly rundown of our top 5 best-performing Elixir posts.","slug":"2024/12/17/appsignals-top-5-elixir-posts-in-2024","title":"AppSignal’s Top 5 Elixir Posts in 2024"},{"author":"Ana Malinović","authors":null,"category":"javascript","date":"2024-12-17T00:00:00+00:00","image":"/images/blog/2024-12/top-5-node.jpg","intro":"Check out the 5 JavaScript posts that really stood out on our blog in 2024.","slug":"2024/12/17/appsignals-top-5-javascript-posts-in-2024","title":"AppSignal’s Top 5 JavaScript Posts in 2024"},{"author":"Ana Malinović","authors":null,"category":"ruby","date":"2024-12-17T00:00:00+00:00","image":"/images/blog/2024-12/top-5-ruby.jpg","intro":"Let's look back at our top 5 Ruby posts this year.","slug":"2024/12/17/appsignals-top-5-ruby-posts-in-2024","title":"AppSignal’s Top 5 Ruby Posts in 2024"},{"author":"Connor James","authors":null,"category":"appsignal","date":"2024-12-12T00:00:00+00:00","image":"/images/blog/2024-12/new-relic.jpg","intro":"Exploring alternatives to New Relic? In this post, we'll compare New Relic to its top competitors to help you choose the best monitoring tool for you.","slug":"2024/12/12/the-top-five-new-relic-alternatives","title":"The Top 5 New Relic Alternatives"},{"author":"Damilola Olatunji","authors":null,"category":"javascript","date":"2024-12-11T00:00:00+00:00","image":"/images/blog/2024-12/common-js-es.jpg","intro":"While CommonJS has served the Node community well, ES modules are rapidly gaining traction. Let's take a deep dive into both.","slug":"2024/12/11/a-deep-dive-into-commonjs-and-es-modules-in-nodejs","title":"A Deep Dive Into CommonJS and ES Modules in Node.js"},{"author":"Pulkit Goyal","authors":null,"category":"elixir","date":"2024-12-10T00:00:00+00:00","image":"/images/blog/2024-12/p2-dist-phoenix.jpg","intro":"In part one of this series, we managed distributed state using GenServers. In this part, we'll explore deployment and scaling strategies.","slug":"2024/12/10/distributed-phoenix-deployment-and-scaling","title":"Distributed Phoenix: Deployment and Scaling"},{"author":"Nik Tomazic","authors":null,"category":"python","date":"2024-12-04T00:00:00+00:00","image":"/images/blog/2024-12/nplus1-queries-django.jpg","intro":"We'll track the N+1 query problem in a Django app and fix it using AppSignal.","slug":"2024/12/04/find-and-fix-n-plus-one-queries-in-django-using-appsignal","title":"Find and Fix N+1 Queries in Django Using AppSignal"},{"author":"Ayush Newatia","authors":null,"category":"ruby","date":"2024-11-27T00:00:00+00:00","image":"/images/blog/2024-11/p3-rack.jpg","intro":"In the final part of our three-part series, we'll use server-sent events (SSEs) and WebSockets to establish a persistent connection in a Rack app.","slug":"2024/11/27/server-sent-events-and-websockets-in-rack-for-ruby","title":"Server-sent Events and WebSockets in Rack for Ruby"},{"author":"Antonello Zanini","authors":null,"category":"javascript","date":"2024-11-27T00:00:00+00:00","image":"/images/blog/2024-11/jest-unit-tests.jpg","intro":"Jest has become one of the most popular solutions when unit testing in Node: let's see why.","slug":"2024/11/27/unit-testing-in-nodejs-with-jest","title":"Unit Testing in Node.js With Jest"},{"author":"Connor James","authors":null,"category":"appsignal","date":"2024-11-21T00:00:00+00:00","image":"/images/blog/2024-09/alternatives-to-sentry.jpg","intro":"Let's compare Sentry to five competitors to help you find the best application performance monitoring solution.","slug":"2024/11/21/the-top-5-sentry-alternatives","title":"The Top 5 Sentry Alternatives"},{"author":"Greg Gorlen","authors":null,"category":"javascript","date":"2024-11-20T00:00:00+00:00","image":"/images/blog/2024-11/false-postives-node.jpg","intro":"Let's examine several common false positive patterns that can crop up in Node.js test suites.","slug":"2024/11/20/avoiding-false-positives-in-nodejs-tests","title":"Avoiding False Positives in Node.js Tests"},{"author":"Ayush Newatia","authors":null,"category":"ruby","date":"2024-11-20T00:00:00+00:00","image":"/images/blog/2024-11/p2-rack.jpg","intro":"Rack is the foundation for every popular Ruby web framework in existence. In part two of this three-part series, we'll run through socket hijacking.","slug":"2024/11/20/rack-for-ruby-socket-hijacking","title":"Rack for Ruby: Socket Hijacking"}],"remaining":[{"date":"2024-11-14T00:00:00+00:00","slug":"2024/11/14/manage-your-pino-logs-with-appsignal","title":"Manage Your Pino Logs with AppSignal"},{"date":"2024-11-13T00:00:00+00:00","slug":"2024/11/13/streamlined-contract-testing-in-nodejs-a-simple-and-achievable-approach","title":"Streamlined Contract Testing in Node.js: A Simple and Achievable Approach"},{"date":"2024-11-12T00:00:00+00:00","slug":"2024/11/12/how-to-track-errors-in-oban-for-elixir-using-appsignal","title":"How to Track Errors in Oban for Elixir Using AppSignal"},{"date":"2024-11-07T00:00:00+00:00","slug":"2024/11/07/the-top-5-honeybadger-alternatives-in-2024","title":"The Top 5 Honeybadger Alternatives in 2024"},{"date":"2024-10-30T00:00:00+00:00","slug":"2024/10/30/advanced-open-edx-monitoring-with-appsignal-for-python","title":"Advanced Open edX Monitoring with AppSignal for Python"},{"date":"2024-10-30T00:00:00+00:00","slug":"2024/10/30/optimize-database-performance-in-ruby-on-rails-and-activerecord","title":"Optimize Database Performance in Ruby on Rails and ActiveRecord"},{"date":"2024-10-30T00:00:00+00:00","slug":"2024/10/30/the-basics-of-rack-for-ruby","title":"The Basics of Rack for Ruby"},{"date":"2024-10-29T00:00:00+00:00","slug":"2024/10/29/managing-distributed-state-with-genservers-in-phoenix-and-elixir","title":"Managing Distributed State with GenServers in Phoenix and Elixir"},{"date":"2024-10-16T00:00:00+00:00","slug":"2024/10/16/best-testing-practices-in-nodejs","title":"Best Testing Practices in Node.js"},{"date":"2024-10-16T00:00:00+00:00","slug":"2024/10/16/how-to-use-lambda-functions-in-python","title":"How to Use Lambda Functions in Python"},{"date":"2024-10-10T00:00:00+00:00","slug":"2024/10/10/rails-community-survey-2024-appsignal-ranks-in-top-5","title":"Rails Community Survey 2024: AppSignal Ranks in Top 5"},{"date":"2024-10-08T00:00:00+00:00","slug":"2024/10/08/find-and-fix-n-plus-1-queries-using-appsignal-for-a-phoenix-app-in-elixir","title":"Find and Fix N+1 Queries Using AppSignal for a Phoenix App in Elixir"},{"date":"2024-10-08T00:00:00+00:00","slug":"2024/10/08/weve-redesigned-our-charts-at-appsignal-6-new-features","title":"We've Redesigned Our Charts at AppSignal: 6 New Features"},{"date":"2024-10-07T00:00:00+00:00","slug":"2024/10/07/whats-new-in-ruby-on-rails-8","title":"What's New in Ruby on Rails 8"},{"date":"2024-10-02T00:00:00+00:00","slug":"2024/10/02/integrating-open-edx-with-appsignal","title":"Integrating Open edX with AppSignal"},{"date":"2024-10-02T00:00:00+00:00","slug":"2024/10/02/measuring-the-impact-of-feature-flags-in-ruby-on-rails-with-appsignal","title":"Measuring the Impact of Feature Flags in Ruby on Rails with AppSignal"},{"date":"2024-09-26T00:00:00+00:00","slug":"2024/09/26/introducing-check-ins-for-scheduled-job-and-continuous-process-monitoring","title":"Introducing Check-ins for Scheduled Job and Continuous Process Monitoring"},{"date":"2024-09-18T00:00:00+00:00","slug":"2024/09/18/dynamodb-single-table-design-with-typescript","title":"DynamoDB Single-Table Design with TypeScript"},{"date":"2024-09-18T00:00:00+00:00","slug":"2024/09/18/rubys-hidden-gems-sorbet","title":"Ruby’s hidden gems: Sorbet"},{"date":"2024-09-17T00:00:00+00:00","slug":"2024/09/17/a-complete-guide-to-phoenix-for-elixir-monitoring-with-appsignal","title":"A Complete Guide to Phoenix for Elixir Monitoring with AppSignal"},{"date":"2024-09-11T00:00:00+00:00","slug":"2024/09/11/ruby-on-rails-7-1-partial-strict-locals-and-their-gotchas","title":"Ruby on Rails 7.1: Partial Strict Locals and Their Gotchas"},{"date":"2024-09-11T00:00:00+00:00","slug":"2024/09/11/top-5-http-request-libraries-for-nodejs","title":"Top 5 HTTP Request Libraries for Node.js"},{"date":"2024-09-04T00:00:00+00:00","slug":"2024/09/04/integrating-stripe-into-a-one-product-django-python-shop","title":"Integrating Stripe Into A One-Product Django Python Shop"},{"date":"2024-09-03T00:00:00+00:00","slug":"2024/09/03/scaling-your-phoenix-app-in-elixir-with-flame","title":"Scaling Your Phoenix App in Elixir with FLAME"},{"date":"2024-08-28T00:00:00+00:00","slug":"2024/08/28/build-a-one-product-shop-with-the-python-django-framework-and-htmx","title":"Build a One-Product Shop With the Python Django Framework and Htmx"},{"date":"2024-08-28T00:00:00+00:00","slug":"2024/08/28/how-to-handle-errors-in-nextjs-for-node-with-the-app-router","title":"How to Handle Errors in Next.js for Node With the App Router"},{"date":"2024-08-23T00:00:00+00:00","slug":"2024/08/23/appsignal-for-ruby-version-4-0","title":"AppSignal for Ruby Version 4.0"},{"date":"2024-08-21T00:00:00+00:00","slug":"2024/08/21/monitor-nodejs-amqp-brokers-with-appsignal","title":"Monitor Node.js AMQP Brokers with AppSignal"},{"date":"2024-08-21T00:00:00+00:00","slug":"2024/08/21/squash-your-ruby-and-rails-bugs-faster","title":"Squash Your Ruby and Rails Bugs Faster"},{"date":"2024-08-20T00:00:00+00:00","slug":"2024/08/20/livestate-for-elixir-an-overview-and-how-to-build-embeddable-web-apps","title":"LiveState for Elixir: An Overview and How to Build Embeddable Web Apps"},{"date":"2024-08-14T00:00:00+00:00","slug":"2024/08/14/an-introduction-to-http-caching-in-ruby-on-rails","title":"An Introduction to HTTP Caching in Ruby On Rails"},{"date":"2024-08-14T00:00:00+00:00","slug":"2024/08/14/an-introduction-to-unit-testing-in-nodejs","title":"An Introduction to Unit Testing in Node.js"},{"date":"2024-08-07T00:00:00+00:00","slug":"2024/08/07/advanced-use-cases-of-the-nodejs-native-test-runner","title":"Advanced Use Cases of the Node.js Native Test Runner"},{"date":"2024-08-07T00:00:00+00:00","slug":"2024/08/07/an-introduction-to-nix-for-ruby-developers","title":"An Introduction to Nix for Ruby Developers"},{"date":"2024-08-06T00:00:00+00:00","slug":"2024/08/06/custom-instrumentation-for-a-phoenix-app-in-elixir-with-appsignal","title":"Custom Instrumentation for a Phoenix App in Elixir with AppSignal"},{"date":"2024-07-31T00:00:00+00:00","slug":"2024/07/31/monitor-the-performance-of-your-python-django-app-with-appsignal","title":"Monitor the Performance of Your Python Django App with AppSignal"},{"date":"2024-07-31T00:00:00+00:00","slug":"2024/07/31/setting-up-custom-metrics-with-effective-alerts-for-a-ruby-app-in-appsignal","title":"Setting Up Custom Metrics with Effective Alerts for a Ruby App in AppSignal"},{"date":"2024-07-30T00:00:00+00:00","slug":"2024/07/30/monitor-bullmq-background-jobs-with-appsignal","title":"Monitor BullMQ Background Jobs with AppSignal"},{"date":"2024-07-24T00:00:00+00:00","slug":"2024/07/24/grokking-dynamodb-with-typescript","title":"Grokking DynamoDB with TypeScript"},{"date":"2024-07-24T00:00:00+00:00","slug":"2024/07/24/whats-coming-in-ruby-on-rails-7-2-database-features-in-active-record","title":"What's Coming in Ruby on Rails 7.2: Database Features in Active Record"},{"date":"2024-07-23T00:00:00+00:00","slug":"2024/07/23/enhancing-your-elixir-codebase-with-gleam","title":"Enhancing Your Elixir Codebase with Gleam"},{"date":"2024-07-17T00:00:00+00:00","slug":"2024/07/17/an-introduction-to-auth0-for-ruby-on-rails","title":"An Introduction to Auth0 for Ruby on Rails"},{"date":"2024-07-17T00:00:00+00:00","slug":"2024/07/17/exploring-the-nodejs-native-test-runner","title":"Exploring the Node.js Native Test Runner"},{"date":"2024-07-10T00:00:00+00:00","slug":"2024/07/10/monitor-the-performance-of-your-fastapi-for-python-app-with-appsignal","title":"Monitor the Performance of your Python FastAPI App with AppSignal"},{"date":"2024-07-09T00:00:00+00:00","slug":"2024/07/09/track-errors-in-phoenix-for-elixir-with-appsignal","title":"Track Errors in Phoenix for Elixir with AppSignal"},{"date":"2024-07-03T00:00:00+00:00","slug":"2024/07/03/debugging-in-ruby-with-debug","title":"Debugging in Ruby with Debug"},{"date":"2024-07-03T00:00:00+00:00","slug":"2024/07/03/security-best-practices-for-your-nodejs-application","title":"Security Best Practices for Your Node.js Application"},{"date":"2024-06-26T00:00:00+00:00","slug":"2024/06/26/deploy-a-python-fastapi-application-to-render","title":"Deploy a Python FastAPI Application to Render"},{"date":"2024-06-25T00:00:00+00:00","slug":"2024/06/25/leverage-concurrency-efficiently-when-managing-multiple-tasks-in-elixir","title":"Leverage Concurrency Efficiently When Managing Multiple Tasks in Elixir"},{"date":"2024-06-19T00:00:00+00:00","slug":"2024/06/19/how-to-perform-data-validation-in-nodejs","title":"How to Perform Data Validation in Node.js"},{"date":"2024-06-12T00:00:00+00:00","slug":"2024/06/12/monitor-the-performance-of-your-ruby-on-rails-application-using-appsignal","title":"Monitor the Performance of Your Ruby on Rails Application Using AppSignal"},{"date":"2024-06-11T00:00:00+00:00","slug":"2024/06/11/advanced-dependency-injection-in-elixir-with-rewire","title":"Advanced Dependency Injection in Elixir with Rewire"},{"date":"2024-06-06T00:00:00+00:00","slug":"2024/06/06/the-top-5-datadog-alternatives-in-2024","title":"The Top 5 Datadog Alternatives in 2024"},{"date":"2024-06-05T00:00:00+00:00","slug":"2024/06/05/develop-a-serverless-typescript-api-on-aws-ecs-with-fargate","title":"Develop a Serverless TypeScript API on AWS ECS with Fargate"},{"date":"2024-06-05T00:00:00+00:00","slug":"2024/06/05/how-to-use-tailwind-css-for-your-ruby-on-rails-project","title":"How to Use Tailwind CSS for Your Ruby On Rails Project"},{"date":"2024-05-29T00:00:00+00:00","slug":"2024/05/29/getting-started-your-ruby-on-rails-app-hosted-on-digitalocean-with-appsignal","title":"Getting Started: Your Ruby On Rails App Hosted On DigitalOcean With AppSignal"},{"date":"2024-05-29T00:00:00+00:00","slug":"2024/05/29/track-errors-in-your-python-flask-application-with-appsignal","title":"Track Errors in Your Python Flask Application with AppSignal"},{"date":"2024-05-23T00:00:00+00:00","slug":"2024/05/23/appsignal-is-a-rails-world-2024-platinum-sponsor","title":"AppSignal Is A Rails World 2024 Platinum Sponsor"},{"date":"2024-05-22T00:00:00+00:00","slug":"2024/05/22/cypress-vs-playwright-for-node-a-head-to-head-comparison","title":"Cypress vs. Playwright for Node: A Head-to-Head Comparison"},{"date":"2024-05-22T00:00:00+00:00","slug":"2024/05/22/five-things-to-avoid-in-ruby","title":"Five Things to Avoid in Ruby"},{"date":"2024-05-21T00:00:00+00:00","slug":"2024/05/21/using-dependency-injection-in-elixir","title":"Using Dependency Injection in Elixir"},{"date":"2024-05-15T00:00:00+00:00","slug":"2024/05/15/creating-forms-in-ruby-on-rails-with-simple-form","title":"Creating Forms in Ruby on Rails with Simple Form"},{"date":"2024-05-15T00:00:00+00:00","slug":"2024/05/15/understanding-offset-and-cursor-based-pagination-in-nodejs","title":"Understanding Offset and Cursor-Based Pagination in Node.js"},{"date":"2024-05-08T00:00:00+00:00","slug":"2024/05/08/debugging-in-ruby-with-pry-byebug","title":"Debugging in Ruby with pry-byebug"},{"date":"2024-05-08T00:00:00+00:00","slug":"2024/05/08/effective-testing-in-javascript","title":"Effective Testing in JavaScript"},{"date":"2024-05-07T00:00:00+00:00","slug":"2024/05/07/whats-new-in-nodejs-22","title":"What's New in Node.js 22"},{"date":"2024-05-01T00:00:00+00:00","slug":"2024/05/01/anycable-for-ruby-on-rails-how-does-it-improve-over-action-cable","title":"AnyCable for Ruby on Rails: How Does it Improve over Action Cable?"},{"date":"2024-05-01T00:00:00+00:00","slug":"2024/05/01/when-to-use-bun-instead-of-nodejs","title":"When to Use Bun Instead of Node.js"},{"date":"2024-04-24T00:00:00+00:00","slug":"2024/04/24/should-you-use-ruby-on-rails-or-hanami","title":"Should You Use Ruby on Rails or Hanami?"},{"date":"2024-04-23T00:00:00+00:00","slug":"2024/04/23/deep-diving-into-the-erlang-scheduler","title":"Deep Diving Into the Erlang Scheduler"},{"date":"2024-04-18T00:00:00+00:00","slug":"2024/04/18/introducing-support-for-apollo-gateway","title":"Introducing Support for Apollo Gateway"},{"date":"2024-04-17T00:00:00+00:00","slug":"2024/04/17/handling-exceptions-in-grape-for-ruby","title":"Handling Exceptions in Grape for Ruby"},{"date":"2024-04-17T00:00:00+00:00","slug":"2024/04/17/measuring-nodejs-performance-in-production-with-performance-hooks","title":"Measuring Node.js Performance in Production with Performance Hooks"},{"date":"2024-04-03T00:00:00+00:00","slug":"2024/04/03/how-to-implement-rate-limiting-in-express-for-nodejs","title":"How to Implement Rate Limiting in Express for Node.js"},{"date":"2024-04-02T00:00:00+00:00","slug":"2024/04/02/how-to-use-flume-in-your-elixir-app","title":"How to Use Flume in your Elixir Application"},{"date":"2024-03-28T00:00:00+00:00","slug":"2024/03/28/tracking-custom-metrics-in-python-with-appsignal","title":"Tracking Custom Metrics in Python with AppSignal"},{"date":"2024-03-27T00:00:00+00:00","slug":"2024/03/27/building-serverless-apps-with-the-aws-cdk-using-typescript","title":"Building Serverless Apps with the AWS CDK Using TypeScript"},{"date":"2024-03-27T00:00:00+00:00","slug":"2024/03/27/track-errors-in-fastapi-for-python-with-appsignal","title":"Track Errors in FastAPI for Python with AppSignal"},{"date":"2024-03-20T00:00:00+00:00","slug":"2024/03/20/good-database-migration-practices-for-your-ruby-on-rails-app-using-strong-migrations","title":"Good Database Migration Practices for Your Ruby on Rails App using Strong Migrations"},{"date":"2024-03-19T00:00:00+00:00","slug":"2024/03/19/direct-file-uploads-to-amazon-s3-with-phoenix-liveview","title":"Direct File Uploads to Amazon S3 with Phoenix LiveView"},{"date":"2024-03-14T00:00:00+00:00","slug":"2024/03/14/appsignals-2024-ruby-event-sponsorships","title":"AppSignal's 2024 Ruby Event Sponsorships"},{"date":"2024-03-13T00:00:00+00:00","slug":"2024/03/13/nodejs-performance-apis-an-introduction","title":"Node.js Performance APIs: An Introduction"},{"date":"2024-03-13T00:00:00+00:00","slug":"2024/03/13/turbo-streaming-modals-in-ruby-on-rails","title":"Turbo Streaming Modals in Ruby on Rails"},{"date":"2024-03-07T00:00:00+00:00","slug":"2024/03/07/two-factor-authentication-enforcement-is-now-available-on-all-appsignal-plans","title":"Two-Factor Authentication Enforcement Now Available On All AppSignal Plans"},{"date":"2024-03-06T00:00:00+00:00","slug":"2024/03/06/active-record-or-sequel-which-best-fits-the-needs-of-your-ruby-app","title":"Active Record or Sequel: Which Best Fits The Needs of Your Ruby App?"},{"date":"2024-03-05T00:00:00+00:00","slug":"2024/03/05/powerful-caching-in-elixir-with-cachex","title":"Powerful Caching in Elixir with Cachex"},{"date":"2024-02-28T00:00:00+00:00","slug":"2024/02/28/top-8-recent-v8-in-node-updates","title":"Top 8 Recent V8 in Node Updates"},{"date":"2024-02-28T00:00:00+00:00","slug":"2024/02/28/track-errors-in-your-python-django-application-with-appsignal","title":"Track Errors in Your Python Django Application with AppSignal"},{"date":"2024-02-21T00:00:00+00:00","slug":"2024/02/21/hotwire-modals-in-ruby-on-rails-with-stimulus-and-turbo-frames","title":"Hotwire Modals in Ruby on Rails with Stimulus and Turbo Frames"},{"date":"2024-02-20T00:00:00+00:00","slug":"2024/02/20/creating-custom-exceptions-in-elixir","title":"Creating Custom Exceptions in Elixir"},{"date":"2024-02-14T00:00:00+00:00","slug":"2024/02/14/build-an-idempotent-api-in-nodejs","title":"Build an Idempotent API in Node.js with Redis"},{"date":"2024-02-14T00:00:00+00:00","slug":"2024/02/14/full-text-search-for-ruby-on-rails-with-litesearch","title":"Full-Text Search for Ruby on Rails with Litesearch"},{"date":"2024-02-13T00:00:00+00:00","slug":"2024/02/13/introducing-appsignal-business-add-ons","title":"Introducing AppSignal Business Add-Ons"},{"date":"2024-02-07T00:00:00+00:00","slug":"2024/02/07/a-deep-dive-into-rspec-tests-in-ruby-on-rails","title":"A Deep Dive Into RSpec Tests in Ruby on Rails"},{"date":"2024-02-06T00:00:00+00:00","slug":"2024/02/06/how-to-build-a-memory-efficient-elixir-app-with-streams","title":"How to Build a Memory-efficient Elixir App with Streams"},{"date":"2024-01-31T00:00:00+00:00","slug":"2024/01/31/an-introduction-to-testing-with-django-for-python","title":"An Introduction to Testing with Django for Python"},{"date":"2024-01-31T00:00:00+00:00","slug":"2024/01/31/throttling-a-kafka-queue-in-nodejs","title":"Throttling a Kafka Queue in Node.js"},{"date":"2024-01-24T00:00:00+00:00","slug":"2024/01/24/behaviour-driven-development-in-ruby-with-rspec","title":"Behaviour Driven Development in Ruby with RSpec"},{"date":"2024-01-23T00:00:00+00:00","slug":"2024/01/23/build-a-simple-tracing-system-in-elixir","title":"Build A Simple Tracing System in Elixir"},{"date":"2024-01-17T00:00:00+00:00","slug":"2024/01/17/dealing-with-cpu-bound-tasks-in-nodejs","title":"Dealing with CPU-bound Tasks in Node.js"},{"date":"2024-01-17T00:00:00+00:00","slug":"2024/01/17/speed-up-your-ruby-on-rails-application-with-litecache","title":"Speed Up Your Ruby on Rails Application with LiteCache"},{"date":"2024-01-10T00:00:00+00:00","slug":"2024/01/10/keep-your-ruby-code-maintainable-with-draper","title":"Keep your Ruby Code Maintainable with Draper"},{"date":"2023-12-20T00:00:00+00:00","slug":"2023/12/20/appsignals-top-5-elixir-posts-in-2023","title":"AppSignal’s Top 5 Elixir Posts in 2023"},{"date":"2023-12-20T00:00:00+00:00","slug":"2023/12/20/appsignals-top-5-javascript-posts-in-2023","title":"AppSignal’s Top 5 JavaScript Posts in 2023"},{"date":"2023-12-20T00:00:00+00:00","slug":"2023/12/20/appsignals-top-5-ruby-posts-in-2023","title":"AppSignal’s Top 5 Ruby Posts in 2023"},{"date":"2023-12-19T00:00:00+00:00","slug":"2023/12/19/whats-new-in-elixir-1-16","title":"What's New in Elixir 1.16"},{"date":"2023-12-18T00:00:00+00:00","slug":"2023/12/18/connecting-react-and-stimulusjs-with-javascript-events","title":"Connecting React.js and StimulusJS with JavaScript Events"},{"date":"2023-12-13T00:00:00+00:00","slug":"2023/12/13/appsignal-expands-monitoring-capabilities-with-vector","title":"AppSignal Expands Monitoring Capabilities with Vector"},{"date":"2023-12-13T00:00:00+00:00","slug":"2023/12/13/server-side-rendering-with-nextjs-react-and-typescript","title":"Server-side Rendering with Next.js, React, and TypeScript"},{"date":"2023-12-13T00:00:00+00:00","slug":"2023/12/13/stream-updates-to-your-users-with-litecable-for-ruby-on-rails","title":"Stream Updates to Your Users with LiteCable for Ruby on Rails"},{"date":"2023-12-06T00:00:00+00:00","slug":"2023/12/06/how-to-deploy-a-python-flask-app-with-heroku","title":"How to Deploy a Python Flask app with Heroku"},{"date":"2023-12-06T00:00:00+00:00","slug":"2023/12/06/how-to-use-shoulda-matchers-with-rspec-for-ruby-on-rails","title":"How to Use Shoulda Matchers with RSpec for Ruby on Rails"},{"date":"2023-12-05T00:00:00+00:00","slug":"2023/12/05/advanced-multi-tenancy-for-elixir-applications-using-ecto","title":"Advanced Multi-tenancy for Elixir Applications Using Ecto"},{"date":"2023-11-29T00:00:00+00:00","slug":"2023/11/29/an-introduction-to-profiling-in-nodejs","title":"An Introduction to Profiling in Node.js"},{"date":"2023-11-29T00:00:00+00:00","slug":"2023/11/29/keep-your-ruby-code-maintainable-with-money-rails","title":"Keep Your Ruby Code Maintainable with Money-Rails"},{"date":"2023-11-29T00:00:00+00:00","slug":"2023/11/29/monitor-solid-cache-with-appsignal","title":"Monitor Solid Cache in Rails with AppSignal"},{"date":"2023-11-22T00:00:00+00:00","slug":"2023/11/22/shaping-the-future-of-ruby-and-kafka-together-with-rdkafka-ruby","title":"Shaping the Future of Ruby and Kafka Together with rdkafka-ruby"},{"date":"2023-11-21T00:00:00+00:00","slug":"2023/11/21/setting-up-a-multi-tenant-phoenix-app-for-elixir","title":"Setting Up a Multi-tenant Phoenix App for Elixir"},{"date":"2023-11-16T00:00:00+00:00","slug":"2023/11/16/how-we-handle-upgrades-at-appsignal","title":"How We Handle Upgrades at AppSignal"},{"date":"2023-11-15T00:00:00+00:00","slug":"2023/11/15/handle-incoming-webhooks-with-litejob-for-ruby-on-rails","title":"Handle Incoming Webhooks with LiteJob for Ruby on Rails"},{"date":"2023-11-15T00:00:00+00:00","slug":"2023/11/15/how-to-optimize-mongodb-performance-for-nodejs","title":"How to Optimize MongoDB Performance for Node.js"},{"date":"2023-11-08T00:00:00+00:00","slug":"2023/11/08/how-to-use-timeouts-in-nodejs","title":"How to Use Timeouts in Node.js"},{"date":"2023-11-07T00:00:00+00:00","slug":"2023/11/07/validating-data-in-elixir-using-ecto-and-nimbleoptions","title":"Validating Data in Elixir: Using Ecto and NimbleOptions"},{"date":"2023-11-06T00:00:00+00:00","slug":"2023/11/06/how-appsignal-got-its-domain-name","title":"How AppSignal Got Its (Domain) Name"},{"date":"2023-11-06T00:00:00+00:00","slug":"2023/11/06/we-have-levelled-up-our-top-monitoring-features","title":"We've Levelled up Our Top Monitoring Features"},{"date":"2023-11-01T00:00:00+00:00","slug":"2023/11/01/a-deep-dive-into-litedb-for-ruby on-rails","title":"A Deep Dive Into LiteDB for Ruby on Rails"},{"date":"2023-11-01T00:00:00+00:00","slug":"2023/11/01/what-do-deno-and-bun-bring-to-the-table","title":"What Do Deno and Bun Bring to the Table?"},{"date":"2023-10-31T00:00:00+00:00","slug":"2023/10/31/appsignal-monitoring-available-for-python-applications","title":"AppSignal Monitoring Available for Python Applications"},{"date":"2023-10-30T00:00:00+00:00","slug":"2023/10/30/sponsoring-rails-world-what-did-it-cost-and-was-it-worth-it","title":"Sponsoring Rails World: What Did It Cost, and Was It Worth It?"},{"date":"2023-10-25T00:00:00+00:00","slug":"2023/10/25/whats-new-in-nodejs-21","title":"What's New in Node.js 21"},{"date":"2023-10-24T00:00:00+00:00","slug":"2023/10/24/how-to-use-zig-for-elixir-nifs","title":"How To Use Zig for Elixir NIFs"},{"date":"2023-10-18T00:00:00+00:00","slug":"2023/10/18/advanced-usages-of-action-policy-for-ruby-on-rails","title":"Advanced Usages of Action Policy for Ruby on Rails"},{"date":"2023-10-18T00:00:00+00:00","slug":"2023/10/18/aws-step-functions-with-nodejs-build-an-api","title":"AWS Step Functions with Node.js: Build an API"},{"date":"2023-10-17T00:00:00+00:00","slug":"2023/10/17/monitor-your-node-and-remix-application-with-appsignal","title":"Monitor Your Node.js and Remix Application with AppSignal"},{"date":"2023-10-11T00:00:00+00:00","slug":"2023/10/11/expressive-ruby-and-rails-communicate-effectively-with-your-code","title":"Expressive Ruby and Rails: Communicate Effectively With Your Code"},{"date":"2023-10-10T00:00:00+00:00","slug":"2023/10/10/validate-data-in-a-phoenix-application-for-elixir","title":"Validate Data in a Phoenix Application for Elixir"},{"date":"2023-10-04T00:00:00+00:00","slug":"2023/10/04/deploy-and-test-aws-step-functions-with-nodejs","title":"Deploy and Test AWS Step Functions with Node.js"},{"date":"2023-10-04T00:00:00+00:00","slug":"2023/10/04/using-action-policy-for-a-ruby-on-rails-app-the-basics","title":"Using Action Policy for a Ruby on Rails App: The Basics"},{"date":"2023-09-28T00:00:00+00:00","slug":"2023/09/28/how-to-reduce-reductions-in-elixir","title":"How To Reduce Reductions in Elixir"},{"date":"2023-09-27T00:00:00+00:00","slug":"2023/09/27/an-introduction-to-litestack-for-ruby-on-rails","title":"An Introduction to LiteStack for Ruby on Rails"},{"date":"2023-09-26T00:00:00+00:00","slug":"2023/09/26/an-introduction-to-exceptions-in-elixir","title":"An Introduction to Exceptions in Elixir"},{"date":"2023-09-20T00:00:00+00:00","slug":"2023/09/20/an-introduction-to-sidekiq-for-ruby-on-rails","title":"An Introduction to Sidekiq for Ruby on Rails"},{"date":"2023-09-20T00:00:00+00:00","slug":"2023/09/20/when-to-use-playwright-over-puppeteer-in-nodejs","title":"When to Use Playwright Over Puppeteer in Node.js"},{"date":"2023-09-12T00:00:00+00:00","slug":"2023/09/12/phoenix-1-7-for-elixir-edit-a-form-in-a-modal","title":"Phoenix 1.7 for Elixir: Edit a Form in a Modal"},{"date":"2023-09-06T00:00:00+00:00","slug":"2023/09/06/an-introduction-to-rubocop-for-ruby-on-rails","title":"An Introduction to RuboCop for Ruby on Rails"},{"date":"2023-09-06T00:00:00+00:00","slug":"2023/09/06/job-schedulers-for-node-bull-or-agenda","title":"Job Schedulers for Node: Bull or Agenda?"},{"date":"2023-08-30T00:00:00+00:00","slug":"2023/08/30/tracking-errors-in-a-nodejs-application","title":"Tracking Errors in a Node.js Application"},{"date":"2023-08-29T00:00:00+00:00","slug":"2023/08/29/writing-a-custom-credo-check-in-elixir","title":"Writing a Custom Credo Check in Elixir"},{"date":"2023-08-23T00:00:00+00:00","slug":"2023/08/23/secure-your-ruby-app-with-json-web-tokens","title":"Secure Your Ruby App with JSON Web Tokens"},{"date":"2023-08-16T00:00:00+00:00","slug":"2023/08/16/pitfalls-to-avoid-in-playwright-for-nodejs","title":"Pitfalls to Avoid in Playwright for Node.js"},{"date":"2023-08-09T00:00:00+00:00","slug":"2023/08/09/how-to-use-mongodb-and-mongoose-for-nodejs","title":"How to Use MongoDB and Mongoose with Node.js"},{"date":"2023-08-08T00:00:00+00:00","slug":"2023/08/08/a-deep-dive-into-subscriptions-with-absinthe","title":"A Deep Dive into Subscriptions with Absinthe"},{"date":"2023-08-02T00:00:00+00:00","slug":"2023/08/02/advanced-usages-of-devise-for-rails","title":"Advanced Usages of Devise for Rails"},{"date":"2023-08-01T00:00:00+00:00","slug":"2023/08/01/add-a-form-to-a-modal-in-phoenix-1-7","title":"Add a Form to a Modal in Phoenix 1.7"},{"date":"2023-07-26T00:00:00+00:00","slug":"2023/07/26/an-introduction-to-metaprogramming-in-ruby","title":"An Introduction to Metaprogramming in Ruby"},{"date":"2023-07-26T00:00:00+00:00","slug":"2023/07/26/track-errors-in-fastify-with-appsignal","title":"Track Errors in Fastify with AppSignal"},{"date":"2023-07-19T00:00:00+00:00","slug":"2023/07/19/how-to-delegate-methods-in-ruby","title":"How to Delegate Methods in Ruby"},{"date":"2023-07-18T00:00:00+00:00","slug":"2023/07/18/observe-your-phoenix-app-with-structured-logging","title":"Observe Your Phoenix App with Structured Logging"},{"date":"2023-07-12T00:00:00+00:00","slug":"2023/07/12/an-introduction-to-devise-for-ruby-on-rails","title":"An Introduction to Devise for Ruby on Rails"},{"date":"2023-07-12T00:00:00+00:00","slug":"2023/07/12/an-introduction-to-playwright-for-nodejs","title":"An Introduction to Playwright for Node.js"},{"date":"2023-07-11T00:00:00+00:00","slug":"2023/07/11/boost-http-client-monitoring-in-elixir-with-appsignal-and-tesla-templates","title":"Boost HTTP Client Monitoring in Elixir with AppSignal and Tesla Templates"},{"date":"2023-07-05T00:00:00+00:00","slug":"2023/07/05/multithreading-with-worker-threads-in-nodejs","title":"Multithreading with Worker Threads in Node.js"},{"date":"2023-07-04T00:00:00+00:00","slug":"2023/07/04/a-deep-dive-into-mutations-with-absinthe","title":"A Deep Dive into Mutations with Absinthe"},{"date":"2023-07-04T00:00:00+00:00","slug":"2023/07/04/monitoring-your-elixir-graphql-api-with-appsignal","title":"Monitoring Your Elixir GraphQL API with AppSignal"},{"date":"2023-06-28T00:00:00+00:00","slug":"2023/06/28/keep-your-ruby-app-secure-with-bundler","title":"Keep Your Ruby App Secure with Bundler"},{"date":"2023-06-28T00:00:00+00:00","slug":"2023/06/28/migrate-your-express-application-to-fastify","title":"Migrate Your Express Application to Fastify"},{"date":"2023-06-27T00:00:00+00:00","slug":"2023/06/27/expand-your-monitoring-capabilities-with-appsignal-standalone-agent-docker-image","title":"Expand Your Monitoring Capabilities with AppSignal's Standalone Agent Docker Image"},{"date":"2023-06-21T00:00:00+00:00","slug":"2023/06/21/an-introduction-to-lambdas-in-ruby","title":"An Introduction to Lambdas in Ruby"},{"date":"2023-06-20T00:00:00+00:00","slug":"2023/06/20/create-and-open-a-modal-in-phoenix-1-7","title":"Create and Open a Modal in Phoenix 1.7"},{"date":"2023-06-20T00:00:00+00:00","slug":"2023/06/20/exceptional-error-reporting-for-rails-exceptions","title":"Exceptional Error Reporting for Rails Exceptions"},{"date":"2023-06-14T00:00:00+00:00","slug":"2023/06/14/puppeteer-in-nodejs-more-antipatterns-to-avoid","title":"Puppeteer in Node.js: More Antipatterns to Avoid"},{"date":"2023-06-14T00:00:00+00:00","slug":"2023/06/14/setting-up-business-logic-with-dci-in-rails","title":"Setting Up Business Logic with DCI in Rails"},{"date":"2023-06-07T00:00:00+00:00","slug":"2023/06/07/designing-a-scalable-backend-in-nodejs","title":"Designing a Scalable Backend in Node.js"},{"date":"2023-06-06T00:00:00+00:00","slug":"2023/06/06/absinthe-for-large-elixir-applications","title":"Absinthe for Large Elixir Applications"},{"date":"2023-05-31T00:00:00+00:00","slug":"2023/05/31/how-to-use-sinatra-to-build-a-ruby-application","title":"How to Use Sinatra to Build a Ruby Application"},{"date":"2023-05-31T00:00:00+00:00","slug":"2023/05/31/set-up-tracing-for-a-nodejs-application-on-appsignal","title":"Set Up Tracing for a Node.js Application on AppSignal"},{"date":"2023-05-24T00:00:00+00:00","slug":"2023/05/24/advanced-fastify-hooks-middleware-and-decorators","title":"Advanced Fastify: Hooks, Middleware, and Decorators"},{"date":"2023-05-23T00:00:00+00:00","slug":"2023/05/23/tackling-performance-issues-in-ecto-applications","title":"Tackling Performance Issues in Ecto Applications"},{"date":"2023-05-18T00:00:00+00:00","slug":"2023/05/18/transport-your-logs-with-winston-to-appsignal","title":"Transport Your Logs to AppSignal with Winston"},{"date":"2023-05-17T00:00:00+00:00","slug":"2023/05/17/an-introduction-to-async-stack-traces-in-nodejs","title":"An Introduction to Async Stack Traces in Node.js"},{"date":"2023-05-17T00:00:00+00:00","slug":"2023/05/17/manage-your-ruby-logs-like-a-pro","title":"Manage Your Ruby Logs Like a Pro"},{"date":"2023-05-16T00:00:00+00:00","slug":"2023/05/16/an-introduction-to-absinthe-for-elixir","title":"An Introduction to Absinthe"},{"date":"2023-05-10T00:00:00+00:00","slug":"2023/05/10/organize-business-logic-in-your-ruby-on-rails-application","title":"Organize Business Logic in Your Ruby on Rails Application"},{"date":"2023-05-03T00:00:00+00:00","slug":"2023/05/03/a-guide-to-handling-errors-in-preact","title":"A Guide to Handling Errors in Preact"},{"date":"2023-05-03T00:00:00+00:00","slug":"2023/05/03/integrate-and-troubleshoot-inbound-emails-with-action-mailbox-in-rails","title":"Integrate and Troubleshoot Inbound Emails with Action Mailbox in Rails"},{"date":"2023-04-26T00:00:00+00:00","slug":"2023/04/26/getting-started-with-fastify-for-nodejs","title":"Getting Started with Fastify for Node.js"},{"date":"2023-04-26T00:00:00+00:00","slug":"2023/04/26/how-to-monitor-custom-metrics-with-appsignal","title":"How to Monitor Custom Metrics with AppSignal"},{"date":"2023-04-25T00:00:00+00:00","slug":"2023/04/25/test-data-libraries-for-elixir","title":"Test Data Libraries for Elixir"},{"date":"2023-04-19T00:00:00+00:00","slug":"2023/04/19/how-to-load-code-in-ruby","title":"How to Load Code in Ruby"},{"date":"2023-04-19T00:00:00+00:00","slug":"2023/04/19/nodejs-pitfalls-to-avoid","title":"Node.js Pitfalls to Avoid"},{"date":"2023-04-18T00:00:00+00:00","slug":"2023/04/18/optimize-your-prisma-queries-with-appsignal-and-opentelemetry","title":"Optimize Your Prisma Queries with AppSignal and OpenTelemetry"},{"date":"2023-04-12T00:00:00+00:00","slug":"2023/04/12/audit-logging-in-ruby-and-rails","title":"Audit Logging in Ruby and Rails"},{"date":"2023-04-11T00:00:00+00:00","slug":"2023/04/11/an-introduction-to-mocking-tools-for-elixir","title":"An Introduction to Mocking Tools for Elixir"},{"date":"2023-04-05T00:00:00+00:00","slug":"2023/04/05/how-to-use-the-rodauth-omniauth-gem-in-ruby","title":"How to Use the rodauth-omniauth Gem in Ruby"},{"date":"2023-04-05T00:00:00+00:00","slug":"2023/04/05/monitor-the-health-of-your-nodejs-application","title":"Monitor the Health of Your Node.js Application"},{"date":"2023-04-04T00:00:00+00:00","slug":"2023/04/04/monitor-nginx-performance-automatically-with-appsignal","title":"Monitor NGINX Performance Automatically with AppSignal"},{"date":"2023-03-29T00:00:00+00:00","slug":"2023/03/29/diving-into-custom-exceptions-in-ruby","title":"Diving into Custom Exceptions in Ruby"},{"date":"2023-03-28T00:00:00+00:00","slug":"2023/03/28/debugging-phoenix-liveview-with-open-browser2","title":"Debugging Phoenix LiveView with open_browser/2"},{"date":"2023-03-22T00:00:00+00:00","slug":"2023/03/22/authorization-gems-in-ruby-pundit-and-cancancan","title":"Authorization Gems in Ruby: Pundit and CanCanCan"},{"date":"2023-03-22T00:00:00+00:00","slug":"2023/03/22/introducing-appsignal-log-management","title":"Introducing AppSignal Logging"},{"date":"2023-03-21T00:00:00+00:00","slug":"2023/03/21/generating-data-functions-in-your-elixir-app","title":"Generating Data Functions in Your Elixir App"},{"date":"2023-03-15T00:00:00+00:00","slug":"2023/03/15/a-generalized-user-local-container-for-ui-state-in-kredis","title":"A Generalized User-local Container for UI State in Kredis"},{"date":"2023-03-15T00:00:00+00:00","slug":"2023/03/15/how-to-build-an-error-handling-layer-in-nodejs","title":"How to Build an Error Handling Layer in Node.js"},{"date":"2023-03-01T00:00:00+00:00","slug":"2023/03/01/making-the-most-of-your-logs-in-rails","title":"Making the Most of Your Logs in Rails"},{"date":"2023-02-28T00:00:00+00:00","slug":"2023/02/28/an-introduction-to-test-factories-and-fixtures-for-elixir","title":"An Introduction to Test Factories and Fixtures for Elixir"},{"date":"2023-02-22T00:00:00+00:00","slug":"2023/02/22/storing-ephemeral-ui-state-with-kredis-for-rails","title":"Storing Ephemeral UI State with Kredis for Rails"},{"date":"2023-02-22T00:00:00+00:00","slug":"2023/02/22/track-errors-in-your-nestjs-application-with-appsignal","title":"Track Errors in Your NestJS Application with AppSignal"},{"date":"2023-02-15T00:00:00+00:00","slug":"2023/02/15/whats-new-in-rails-7-1","title":"What's New in Rails 7.1"},{"date":"2023-02-14T00:00:00+00:00","slug":"2023/02/14/introducing-appsignal-for-hanami","title":"Introducing AppSignal for Hanami"},{"date":"2023-02-14T00:00:00+00:00","slug":"2023/02/14/under-the-hood-of-ecto","title":"Under the Hood of Ecto"},{"date":"2023-02-08T00:00:00+00:00","slug":"2023/02/08/an-introduction-to-application-monitoring","title":"An Introduction to Application Monitoring"},{"date":"2023-02-08T00:00:00+00:00","slug":"2023/02/08/puppeteer-in-nodejs-common-mistakes-to-avoid","title":"Puppeteer in Node.js: Common Mistakes to Avoid"},{"date":"2023-02-07T00:00:00+00:00","slug":"2023/02/07/appsignal-for-elixir-now-supports-oban","title":"AppSignal for Elixir Now Supports Oban"},{"date":"2023-02-01T00:00:00+00:00","slug":"2023/02/01/5-nodejs-tools-to-learn-in-2023","title":"5 Node.js Tools to Learn in 2023"},{"date":"2023-02-01T00:00:00+00:00","slug":"2023/02/01/a-guide-to-rails-view-helpers","title":"A Guide to Rails View Helpers"},{"date":"2023-01-30T00:00:00+00:00","slug":"2023/01/30/monitoring-your-nestjs-application-with-appsignal","title":"Monitoring Your NestJS Application with AppSignal"},{"date":"2023-01-25T00:00:00+00:00","slug":"2023/01/25/calling-ruby-methods-in-c-avoid-memory-leaks","title":"Calling Ruby Methods in C: Avoid Memory Leaks"},{"date":"2023-01-24T00:00:00+00:00","slug":"2023/01/24/how-to-instrument-your-elixir-application-with-appsignal","title":"How To Instrument Your Elixir Application with AppSignal"},{"date":"2023-01-18T00:00:00+00:00","slug":"2023/01/18/how-to-parse-arguments-in-your-ruby-c-extension","title":"How to Parse Arguments in Your Ruby C Extension"},{"date":"2023-01-18T00:00:00+00:00","slug":"2023/01/18/secure-your-aws-lambdas-with-typescript","title":"Secure Your AWS Lambdas with TypeScript"},{"date":"2023-01-11T00:00:00+00:00","slug":"2023/01/11/create-a-business-language-for-a-rails-application","title":"Create a Business Language for a Rails Application"},{"date":"2023-01-10T00:00:00+00:00","slug":"2023/01/10/debugging-and-tracing-in-erlang","title":"Debugging and Tracing in Erlang"},{"date":"2022-12-21T00:00:00+00:00","slug":"2022/12/21/appsignal’s-top-5-elixir-posts-in-2022","title":"AppSignal’s Top 5 Elixir posts in 2022"},{"date":"2022-12-21T00:00:00+00:00","slug":"2022/12/21/appsignal’s-top-5-node.js-posts-in-2022","title":"AppSignal’s Top 5 Node.js posts in 2022"},{"date":"2022-12-21T00:00:00+00:00","slug":"2022/12/21/appsignal’s-top-5-ruby-posts-in-2022","title":"AppSignal’s Top 5 Ruby posts in 2022"},{"date":"2022-12-20T00:00:00+00:00","slug":"2022/12/20/a-guide-to-memoization-in-ruby","title":"A Guide to Memoization in Ruby"},{"date":"2022-12-13T00:00:00+00:00","slug":"2022/12/13/how-to-cache-locally-in-elixir-with-nebulex","title":"How to Cache Locally in Elixir with Nebulex"},{"date":"2022-12-07T00:00:00+00:00","slug":"2022/12/07/database-performance-optimization-and-scaling-in-rails","title":"Database Performance Optimization and Scaling in Rails"},{"date":"2022-12-06T00:00:00+00:00","slug":"2022/12/06/a-first-look-at-hanami-2-for-ruby","title":"A First Look at Hanami 2 for Ruby"},{"date":"2022-12-06T00:00:00+00:00","slug":"2022/12/06/appsignal-for-phoenix-version-2.1.0-supports-phoenix-1.7","title":"AppSignal for Phoenix Version 2.2.0 Supports Phoenix 1.7"},{"date":"2022-11-30T00:00:00+00:00","slug":"2022/11/30/optimize-your-aws-lambdas-with-typescript","title":"Optimize Your AWS Lambdas with TypeScript"},{"date":"2022-11-29T00:00:00+00:00","slug":"2022/11/29/debugging-in-elixir-and-erlang-an-introduction","title":"Debugging in Elixir and Erlang: An Introduction"},{"date":"2022-11-24T00:00:00+00:00","slug":"2022/11/24/appsignal-3-0-for-nodejs-introduces-opentelemetry-support","title":"AppSignal for Node.js 3.0 Introduces OpenTelemetry Support"},{"date":"2022-11-23T00:00:00+00:00","slug":"2022/11/23/nodejs-architecture-pitfalls-to-avoid","title":"Node.js Architecture Pitfalls to Avoid"},{"date":"2022-11-23T00:00:00+00:00","slug":"2022/11/23/system-notifications-with-noticed-and-cableready-in-rails","title":"System Notifications with Noticed and CableReady in Rails"},{"date":"2022-11-17T00:00:00+00:00","slug":"2022/11/17/appsignals-future-with-open-telemetry","title":"AppSignal's Future with OpenTelemetry"},{"date":"2022-11-16T00:00:00+00:00","slug":"2022/11/16/nodejs-error-handling-tips-and-tricks","title":"Node.js Error Handling: Tips and Tricks"},{"date":"2022-11-15T00:00:00+00:00","slug":"2022/11/15/nodejs-19-release-whats-new","title":"Node.js 19 Release: What’s New"},{"date":"2022-11-15T00:00:00+00:00","slug":"2022/11/15/parser-combinators-in-elixir-a-deeper-dive","title":"Parser Combinators in Elixir: A Deeper Dive"},{"date":"2022-11-10T00:00:00+00:00","slug":"2022/11/10/appsignal-supports-mastodon","title":"AppSignal Supports Mastodon"},{"date":"2022-11-09T00:00:00+00:00","slug":"2022/11/09/how-to-handle-async-code-in-javascript","title":"How to Handle Async Code in JavaScript"},{"date":"2022-11-09T00:00:00+00:00","slug":"2022/11/09/how-to-scale-ruby-on-rails-applications","title":"How to Scale Ruby on Rails Applications"},{"date":"2022-11-02T00:00:00+00:00","slug":"2022/11/02/whats-new-in-nextjs-13","title":"What's New in Next.js 13"},{"date":"2022-11-01T00:00:00+00:00","slug":"2022/11/01/sanitize-strings-in-elixir-with-pattern-matching-and-recursion","title":"Sanitize Strings in Elixir with Pattern Matching and Recursion"},{"date":"2022-10-26T00:00:00+00:00","slug":"2022/10/26/aws-lambdas-with-typescript-improve-the-dev-experience","title":"AWS Lambdas with TypeScript: Improve the Dev Experience"},{"date":"2022-10-26T00:00:00+00:00","slug":"2022/10/26/build-a-table-editor-with-trix-and-turbo-frames-in-rails","title":"Build a Table Editor with Trix and Turbo Frames in Rails"},{"date":"2022-10-20T00:00:00+00:00","slug":"2022/10/20/appsignal-for-elixir-now-supports-finch","title":"AppSignal for Elixir Now Supports Finch"},{"date":"2022-10-19T00:00:00+00:00","slug":"2022/10/19/improve-code-in-your-ruby-application-with-rubycritic","title":"Improve Code in Your Ruby Application with RubyCritic"},{"date":"2022-10-18T00:00:00+00:00","slug":"2022/10/18/parser-combinators-in-elixir-taming-semi-structured-text","title":"Parser Combinators in Elixir: Taming Semi-Structured Text"},{"date":"2022-10-12T00:00:00+00:00","slug":"2022/10/12/deploy-a-nodejs-and-mongodb-application-to-heroku","title":"Deploy a Node.js and MongoDB Application to Heroku"},{"date":"2022-10-11T00:00:00+00:00","slug":"2022/10/11/phoenix-liveview-018-new-special-html-attributes","title":"Phoenix LiveView 0.18: New Special HTML Attributes"},{"date":"2022-10-05T00:00:00+00:00","slug":"2022/10/05/security-best-practices-for-your-rails-application","title":"Security Best Practices for Your Rails Application"},{"date":"2022-10-04T00:00:00+00:00","slug":"2022/10/04/faster-xml-parsing-with-elixir","title":"Faster XML Parsing with Elixir"},{"date":"2022-09-28T00:00:00+00:00","slug":"2022/09/28/minimize-heap-allocations-in-nodejs","title":"Minimize Heap Allocations in Node.js"},{"date":"2022-09-21T00:00:00+00:00","slug":"2022/09/21/debugging-in-ruby-with-appsignal","title":"Debugging in Ruby with AppSignal"},{"date":"2022-09-21T00:00:00+00:00","slug":"2022/09/21/how-to-build-aws-lambdas-with-typescript","title":"How to Build AWS Lambdas with TypeScript"},{"date":"2022-09-20T00:00:00+00:00","slug":"2022/09/20/fix-process-bottlenecks-with-elixir-1-14s-partition-supervisor","title":"Fix Process Bottlenecks with Elixir 1.14's Partition Supervisor"},{"date":"2022-09-14T00:00:00+00:00","slug":"2022/09/14/secure-your-nodejs-app-with-json-web-tokens","title":"Secure Your Node.js App with JSON Web Tokens"},{"date":"2022-09-13T00:00:00+00:00","slug":"2022/09/13/elixir-1-14-better-debugging-with-dbg-and-more","title":"Elixir 1.14: Better Debugging with dbg/2 and More"},{"date":"2022-09-07T00:00:00+00:00","slug":"2022/09/07/jit-compilers-for-ruby-and-rails-an-overview","title":"JIT Compilers for Ruby and Rails: An Overview"},{"date":"2022-09-06T00:00:00+00:00","slug":"2022/09/06/benchmark-your-elixir-apps-performance-with-benchee","title":"Benchmark Your Elixir App's Performance with Benchee"},{"date":"2022-08-31T00:00:00+00:00","slug":"2022/08/31/4-ways-to-minimize-your-dependencies-in-nodejs","title":"4 Ways to Minimize Your Dependencies in Node.js"},{"date":"2022-08-31T00:00:00+00:00","slug":"2022/08/31/monitor-ruby-application-performance-with-magic-dashboards","title":"Monitor Ruby Application Performance with Magic Dashboards"},{"date":"2022-08-24T00:00:00+00:00","slug":"2022/08/24/an-introduction-to-ractors-in-ruby","title":"An Introduction to Ractors in Ruby"},{"date":"2022-08-23T00:00:00+00:00","slug":"2022/08/23/predictable-code-in-elixir-expressions-as-reducers-and-macros","title":"Predictable Code in Elixir: Expressions as Reducers and Macros"},{"date":"2022-08-17T00:00:00+00:00","slug":"2022/08/17/build-a-crud-app-with-nodejs-and-mongodb","title":"Build a CRUD App with Node.js and MongoDB"},{"date":"2022-08-10T00:00:00+00:00","slug":"2022/08/10/a-deep-dive-into-memory-leaks-in-ruby","title":"A Deep Dive into Memory Leaks in Ruby"},{"date":"2022-08-09T00:00:00+00:00","slug":"2022/08/09/write-a-standalone-cli-application-in-elixir","title":"Write a Standalone CLI Application in Elixir"},{"date":"2022-08-03T00:00:00+00:00","slug":"2022/08/03/connect-a-ruby-on-rails-app-with-react-in-a-monolith","title":"Connect a Ruby on Rails App with React in a Monolith"},{"date":"2022-08-02T00:00:00+00:00","slug":"2022/08/02/all-you-need-to-know-about-edgedb","title":"All You Need to Know about EdgeDB"},{"date":"2022-08-02T00:00:00+00:00","slug":"2022/08/02/alpine-linux-arm-support","title":"Monitor Alpine Linux ARM Hosts with AppSignal"},{"date":"2022-07-28T00:00:00+00:00","slug":"2022/07/28/appsignal-for-ruby-gem-3-1-mri-vm-magic-dashboard","title":"AppSignal for Ruby Gem 3.1: MRI VM Magic Dashboard"},{"date":"2022-07-27T00:00:00+00:00","slug":"2022/07/27/how-to-track-down-memory-leaks-in-ruby","title":"How to Track Down Memory Leaks in Ruby"},{"date":"2022-07-26T00:00:00+00:00","slug":"2022/07/26/how-to-write-a-functor-in-elixir","title":"How to Write a Functor in Elixir"},{"date":"2022-07-20T00:00:00+00:00","slug":"2022/07/20/an-introduction-to-multithreading-in-nodejs","title":"An Introduction to Multithreading in Node.js"},{"date":"2022-07-19T00:00:00+00:00","slug":"2022/07/19/writing-predictable-elixir-code-with-reducers","title":"Writing Predictable Elixir Code with Reducers"},{"date":"2022-07-13T00:00:00+00:00","slug":"2022/07/13/deploy-your-ruby-on-rails-app-using-capistrano","title":"Deploy Your Ruby on Rails App Using Capistrano"},{"date":"2022-07-12T00:00:00+00:00","slug":"2022/07/12/how-to-test-side-effects-in-nodejs","title":"How to Test Side-Effects in Node.js"},{"date":"2022-07-06T00:00:00+00:00","slug":"2022/07/06/get-started-with-hotwire-in-your-ruby-on-rails-app","title":"Get Started with Hotwire in Your Ruby on Rails App"},{"date":"2022-06-30T00:00:00+00:00","slug":"2022/06/30/new-nth-error-per-hour-day-notifications-in-appsignal","title":"New: Nth Error per Hour/Day Notifications in AppSignal"},{"date":"2022-06-28T00:00:00+00:00","slug":"2022/06/28/liveview-assigns-three-common-pitfalls-and-their-solutions","title":"LiveView Assigns: Three Common Pitfalls and Their Solutions"},{"date":"2022-06-23T00:00:00+00:00","slug":"2022/06/23/frontend-error-grouping","title":"AppSignal’s Next Level Of Front-end Error Tracking"},{"date":"2022-06-22T00:00:00+00:00","slug":"2022/06/22/state-machines-in-ruby-an-introduction","title":"State Machines in Ruby: An Introduction"},{"date":"2022-06-20T00:00:00+00:00","slug":"2022/06/20/appsignal-for-phoenix-2-1-automatic-liveview-instrumentation","title":"AppSignal for Phoenix 2.1: Automatic LiveView Instrumentation"},{"date":"2022-06-16T00:00:00+00:00","slug":"2022/06/16/recommended-appsignal-setup","title":"Recommended AppSignal Setup"},{"date":"2022-06-15T00:00:00+00:00","slug":"2022/06/15/how-to-handle-errors-in-react","title":"How to Handle Errors in React"},{"date":"2022-06-14T00:00:00+00:00","slug":"2022/06/14/a-guide-to-phoenix-liveview-assigns","title":"A Guide to Phoenix LiveView Assigns"},{"date":"2022-06-08T00:00:00+00:00","slug":"2022/06/08/add-feature-flags-in-ruby-on-rails-with-flipper","title":"Add Feature Flags in Ruby on Rails with Flipper"},{"date":"2022-06-02T00:00:00+00:00","slug":"2022/06/02/adding-redis-and-mysql-to-appsignal-for-node-with-opentelemetry","title":"Adding Redis \u0026 MySQL to AppSignal for Node.js with OpenTelemetry"},{"date":"2022-06-01T00:00:00+00:00","slug":"2022/06/01/build-a-data-access-layer-with-postgres-and-node","title":"Build a Data Access Layer with PostgreSQL and Node.js"},{"date":"2022-05-31T00:00:00+00:00","slug":"2022/05/31/algebraic-data-types-in-elixir","title":"Algebraic Data Types in Elixir"},{"date":"2022-05-25T00:00:00+00:00","slug":"2022/05/25/an-introduction-to-polymorphism-in-ruby-on-rails","title":"An Introduction to Polymorphism in Ruby on Rails"},{"date":"2022-05-24T00:00:00+00:00","slug":"2022/05/24/livebook-for-elixir-just-what-the-docs-ordered","title":"Livebook for Elixir: Just What the Docs Ordered"},{"date":"2022-05-18T00:00:00+00:00","slug":"2022/05/18/using-scientist-to-refactor-critical-ruby-on-rails-code","title":"Using Scientist to Refactor Critical Ruby on Rails Code"},{"date":"2022-05-11T00:00:00+00:00","slug":"2022/05/11/improving-appsignal-table-performance-backend-changes","title":"How We Improved Table Performance in AppSignal - Back-end Changes"},{"date":"2022-05-10T00:00:00+00:00","slug":"2022/05/10/a-guide-to-event-driven-architecture-in-elixir","title":"A Guide to Event-Driven Architecture in Elixir"},{"date":"2022-05-04T00:00:00+00:00","slug":"2022/05/04/bootstrapping-with-ruby-on-rails-generators-and-templates","title":"Bootstrapping with Ruby on Rails Generators and Templates"},{"date":"2022-04-27T00:00:00+00:00","slug":"2022/04/27/logbook-team-discussion-and-full-incident-history","title":"Logbook: Team Discussion and Full Incident History"},{"date":"2022-04-26T00:00:00+00:00","slug":"2022/04/26/nodejs-18-release-whats-new","title":"Node.js 18 Release: What's New"},{"date":"2022-04-26T00:00:00+00:00","slug":"2022/04/26/using-profiling-in-elixir-to-improve-performance","title":"Using Profiling in Elixir to Improve Performance"},{"date":"2022-04-13T00:00:00+00:00","slug":"2022/04/13/whats-new-in-react-18","title":"What's New in React 18"},{"date":"2022-04-06T00:00:00+00:00","slug":"2022/04/06/principles-of-object-oriented-programming-in-typescript","title":"Principles of Object-oriented Programming in TypeScript"},{"date":"2022-03-30T00:00:00+00:00","slug":"2022/03/30/5-tips-to-design-ruby-on-rails-transactions-the-right-way","title":"5 Tips to Design Ruby on Rails Transactions the Right Way"},{"date":"2022-03-29T00:00:00+00:00","slug":"2022/03/29/phoenix-liveview-under-the-hood-the-form-function-component","title":"Phoenix LiveView Under The Hood: The Form Function Component"},{"date":"2022-03-23T00:00:00+00:00","slug":"2022/03/23/build-serverless-apis-with-nodejs-and-aws-lambda","title":"Build Serverless APIs with Node.js and AWS Lambda"},{"date":"2022-03-16T00:00:00+00:00","slug":"2022/03/16/the-perils-of-parallel-testing-in-ruby-on-rails","title":"The Perils of Parallel Testing in Ruby on Rails"},{"date":"2022-03-15T00:00:00+00:00","slug":"2022/03/15/a-guide-to-secure-elixir-package-updates","title":"A Guide to Secure Elixir Package Updates"},{"date":"2022-03-10T00:00:00+00:00","slug":"2022/03/10/new-process-for-exception-and-performance-incident-emails","title":"New Process for Exception and Performance Incident Emails"},{"date":"2022-03-09T00:00:00+00:00","slug":"2022/03/09/a-complete-guide-to-nodejs-process-management-with-pm2","title":"A Complete Guide to Node.js Process Management with PM2"},{"date":"2022-03-02T00:00:00+00:00","slug":"2022/03/02/import-maps-under-the-hood-in-rails-7","title":"Import Maps Under the Hood in Rails 7"},{"date":"2022-02-24T00:00:00+00:00","slug":"2022/02/24/organize-your-custom-dashboards-more-easily-in-appsignal","title":"Organize Your Custom Dashboards More Easily in AppSignal"},{"date":"2022-02-23T00:00:00+00:00","slug":"2022/02/23/patterns-and-anti-patterns-in-nodejs","title":"Patterns and Anti-patterns in Node.js"},{"date":"2022-02-16T00:00:00+00:00","slug":"2022/02/16/dependency-injection-in-javascript-write-testable-code-easily","title":"Dependency Injection in JavaScript: Write Testable Code Easily"},{"date":"2022-02-15T00:00:00+00:00","slug":"2022/02/15/delayed-job-vs-sidekiq-which-is-better","title":"Delayed Job vs. Sidekiq: Which Is Better?"},{"date":"2022-02-09T00:00:00+00:00","slug":"2022/02/09/an-introduction-to-deno-is-it-better-than-nodejs","title":"An Introduction to Deno: Is It Better than Node.js?"},{"date":"2022-02-08T00:00:00+00:00","slug":"2022/02/08/functional-programming-in-elixir-with-witchcraft","title":"Functional Programming in Elixir with Witchcraft"},{"date":"2022-02-03T00:00:00+00:00","slug":"2022/02/03/how-to-keep-database-table-sizes-down-and-prevent-data-bloat","title":"How to Keep Database Table Sizes Down and Prevent Data Bloat"},{"date":"2022-02-02T00:00:00+00:00","slug":"2022/02/02/use-streams-to-build-high-performing-nodejs-applications","title":"Use Streams to Build High-Performing Node.js Applications"},{"date":"2022-01-27T00:00:00+00:00","slug":"2022/01/27/improvements-made-to-appsignal-for-node-js-in-2022","title":"Improvements Made to AppSignal for Node.js in 2022"},{"date":"2022-01-26T00:00:00+00:00","slug":"2022/01/26/test-and-optimize-your-ruby-on-rails-database-performance","title":"Test and Optimize Your Ruby on Rails Database Performance"},{"date":"2022-01-25T00:00:00+00:00","slug":"2022/01/25/securing-your-phoenix-liveview-apps","title":"Securing Your Phoenix LiveView Apps"},{"date":"2022-01-19T00:00:00+00:00","slug":"2022/01/19/how-to-set-up-a-nodejs-project-with-typescript","title":"How to Set Up a Node.js Project with TypeScript"},{"date":"2022-01-12T00:00:00+00:00","slug":"2022/01/12/how-to-migrate-your-blog-from-gatsby-to-nextjs","title":"How to Migrate Your Blog from Gatsby to Next.js"},{"date":"2022-01-11T00:00:00+00:00","slug":"2022/01/11/build-interactive-phoenix-liveview-uis-with-components","title":"Build Interactive Phoenix LiveView UIs with Components"},{"date":"2022-01-05T00:00:00+00:00","slug":"2022/01/05/next-level-ruby-on-rails-application-monitoring-with-appsignal","title":"Next Level Ruby on Rails Application Monitoring with AppSignal"},{"date":"2021-12-22T00:00:00+00:00","slug":"2021/12/22/appsignals-top-5-elixir-posts-in-2021","title":"AppSignal’s Top 5 Elixir Posts in 2021"},{"date":"2021-12-22T00:00:00+00:00","slug":"2021/12/22/appsignals-top-5-javascript-posts-in-2021","title":"AppSignal’s Top 5 JavaScript Posts in 2021"},{"date":"2021-12-22T00:00:00+00:00","slug":"2021/12/22/appsignals-top-5-ruby-posts-in-2021","title":"AppSignal’s Top 5 Ruby Posts in 2021"},{"date":"2021-12-21T00:00:00+00:00","slug":"2021/12/21/eight-common-causes-of-flaky-tests-in-elixir","title":"8 Common Causes of Flaky Tests in Elixir"},{"date":"2021-12-20T00:00:00+00:00","slug":"2021/12/20/exporting-and-sharing-graphs-from-appsignal","title":"Exporting and Sharing Graphs From AppSignal"},{"date":"2021-12-15T00:00:00+00:00","slug":"2021/12/15/whats-new-in-rails7","title":"What's New in Rails 7"},{"date":"2021-12-14T00:00:00+00:00","slug":"2021/12/14/whats-new-in-elixir-1-13","title":"What's New in Elixir 1.13"},{"date":"2021-12-13T00:00:00+00:00","slug":"2021/12/13/monitor-scheduler-utilization-in-elixir-with-appsignal","title":"Monitor Scheduler Utilization in Elixir With AppSignal"},{"date":"2021-12-08T00:00:00+00:00","slug":"2021/12/08/nodejs-memory-limits-what-you-should-know","title":"Node.js Memory Limits - What You Should Know"},{"date":"2021-12-01T00:00:00+00:00","slug":"2021/12/01/ruby-on-rails-application-monitoring-with-appsignal","title":"Ruby on Rails Application Monitoring with AppSignal"},{"date":"2021-11-30T00:00:00+00:00","slug":"2021/11/30/simpler-navigation-in-appsignal-a-story-about-refactoring-design","title":"Simpler Navigation in AppSignal: A Story About Refactoring Design"},{"date":"2021-11-30T00:00:00+00:00","slug":"2021/11/30/three-ways-to-debug-code-in-elixir","title":"Three Ways to Debug Code in Elixir"},{"date":"2021-11-24T00:00:00+00:00","slug":"2021/11/24/7-ways-to-improve-nodejs-performance-at-scale","title":"7 Ways to Improve Node.js Performance at Scale"},{"date":"2021-11-17T00:00:00+00:00","slug":"2021/11/17/practical-garbage-collection-tuning-in-ruby","title":"Practical Garbage Collection Tuning in Ruby"},{"date":"2021-11-16T00:00:00+00:00","slug":"2021/11/16/pitfalls-of-metaprogramming-in-elixir","title":"Pitfalls of Metaprogramming in Elixir"},{"date":"2021-11-10T00:00:00+00:00","slug":"2021/11/10/a-guide-to-load-testing-nodejs-apis-with-artillery","title":"A Guide to Load Testing Node.js APIs with Artillery"},{"date":"2021-11-03T00:00:00+00:00","slug":"2021/11/03/designing-error-messages-and-a-logging-strategy-in-nodejs","title":"Designing Error Messages and a Logging Strategy in Node.js"},{"date":"2021-11-02T00:00:00+00:00","slug":"2021/11/02/authorization-and-policy-scopes-for-phoenix-apps","title":"Authorization and Policy Scopes for Phoenix Apps"},{"date":"2021-10-27T00:00:00+00:00","slug":"2021/10/27/what-s-new-in-nodejs-17","title":"What's New in Node.js 17"},{"date":"2021-10-26T00:00:00+00:00","slug":"2021/10/26/how-to-use-macros-in-elixir","title":"How to Use Macros in Elixir"},{"date":"2021-10-20T00:00:00+00:00","slug":"2021/10/20/optimistic-locking-in-rails-rest-apis","title":"Optimistic Locking in Rails REST APIs"},{"date":"2021-10-19T00:00:00+00:00","slug":"2021/10/19/how-to-dockerize-an-existing-nodejs-application","title":"How to Dockerize an Existing Node.js Application"},{"date":"2021-10-14T00:00:00+00:00","slug":"2021/10/14/add-more-metadata-to-your-front-end-javascript-errors-in-appsignal","title":"Add More Metadata to Your Front-end JavaScript Errors in AppSignal"},{"date":"2021-10-12T00:00:00+00:00","slug":"2021/10/12/how-to-do-live-uploads-in-phoenix-liveview","title":"How to Do Live Uploads in Phoenix LiveView"},{"date":"2021-10-05T00:00:00+00:00","slug":"2021/10/05/improved-error-tracking-for-node-in-appsignal","title":"Improved Error Tracking for Node.js in AppSignal"},{"date":"2021-10-05T00:00:00+00:00","slug":"2021/10/05/under-the-hood-of-macros-in-elixir","title":"Under the Hood of Macros in Elixir"},{"date":"2021-09-28T00:00:00+00:00","slug":"2021/09/28/real-time-form-validations-with-phoenix-liveview","title":"Real-Time Form Validation with Phoenix LiveView"},{"date":"2021-09-22T00:00:00+00:00","slug":"2021/09/22/improve-your-life-with-long-error-messages","title":"Improve Your Life with Long Error Messages"},{"date":"2021-09-21T00:00:00+00:00","slug":"2021/09/21/how-to-reduce-memory-bloat-in-ruby","title":"How to Reduce Memory Bloat in Ruby"},{"date":"2021-09-21T00:00:00+00:00","slug":"2021/09/21/what-are-atoms-in-elixir-and-how-to-monitor-them-with-appsignal","title":"What Are Atoms in Elixir and How To Monitor Them With AppSignal"},{"date":"2021-09-15T00:00:00+00:00","slug":"2021/09/15/cpu-steal-time-a-crucial-metric-for-cloud-servers-and-vms","title":"CPU Steal Time: A Crucial Metric for Cloud Servers and VMs"},{"date":"2021-09-15T00:00:00+00:00","slug":"2021/09/15/how-to-debug-cloudflare-workers-with-appsignal","title":"How to Debug Cloudflare Workers with AppSignal"},{"date":"2021-09-14T00:00:00+00:00","slug":"2021/09/14/application-code-upgrades-in-elixir","title":"Application Code Upgrades in Elixir"},{"date":"2021-09-08T00:00:00+00:00","slug":"2021/09/08/launching-public-status-pages-for-uptime-monitoring-in-appsignal","title":"Launching Public Status Pages for Uptime Monitoring on AppSignal"},{"date":"2021-09-07T00:00:00+00:00","slug":"2021/09/07/an-introduction-to-metaprogramming-in-elixir","title":"An Introduction to Metaprogramming in Elixir"},{"date":"2021-09-01T00:00:00+00:00","slug":"2021/09/01/best-practices-for-logging-in-nodejs","title":"Best Practices for Logging in Node.js"},{"date":"2021-08-31T00:00:00+00:00","slug":"2021/08/31/liveview-integration-tests-in-elixir","title":"LiveView Integration Tests in Elixir"},{"date":"2021-08-25T00:00:00+00:00","slug":"2021/08/25/exploring-asynchronous-requests-in-recoil","title":"Exploring Asynchronous Requests in Recoil"},{"date":"2021-08-24T00:00:00+00:00","slug":"2021/08/24/responsible-monkeypatching-in-ruby","title":"Responsible Monkeypatching in Ruby"},{"date":"2021-08-23T00:00:00+00:00","slug":"2021/08/23/using-supervisors-to-organize-your-elixir-application","title":"Using Supervisors to Organize Your Elixir Application"},{"date":"2021-08-18T00:00:00+00:00","slug":"2021/08/18/improve-api-integrations-using-code-generation","title":"TypeScript Compiler API: Improve API Integrations Using Code Generation"},{"date":"2021-08-17T00:00:00+00:00","slug":"2021/08/17/an-introduction-to-liveview-in-elixir","title":"An Introduction to Testing LiveView in Elixir"},{"date":"2021-08-11T00:00:00+00:00","slug":"2021/08/11/ruby-hidden-gems-bullet-and-how-it-integrates-with-appsignal","title":"Ruby's Hidden Gems: Bullet"},{"date":"2021-08-09T00:00:00+00:00","slug":"2021/08/09/appsignal-error-tracking-2-0","title":"AppSignal Error Tracking 2.0"},{"date":"2021-08-02T00:00:00+00:00","slug":"2021/08/02/new-feature-line-of-code-based-error-grouping","title":"New Feature: Line-of-code-based Error Grouping"},{"date":"2021-07-28T00:00:00+00:00","slug":"2021/07/28/introduction-to-pattern-matching-in-ruby","title":"An Introduction to Pattern Matching in Ruby"},{"date":"2021-07-27T00:00:00+00:00","slug":"2021/07/27/a-guide-to-hot-code-reloading-in-elixir","title":"A Guide to Hot Code Reloading in Elixir"},{"date":"2021-07-21T00:00:00+00:00","slug":"2021/07/21/how-to-get-started-with-prisma-orm-for-nodejs-and-postgresql","title":"How to Get Started with Prisma ORM for Node.js and PostgreSQL"},{"date":"2021-07-13T00:00:00+00:00","slug":"2021/07/13/building-aggregates-in-elixir-and-postgresql","title":"Building Aggregates in Elixir and PostgreSQL"},{"date":"2021-07-07T00:00:00+00:00","slug":"2021/07/07/general-ruby-on-rails-problems-and-takeaways","title":"General Ruby on Rails Problems and Takeaways"},{"date":"2021-06-30T00:00:00+00:00","slug":"2021/06/30/how-to-monitor-and-optimize-your-database-performance-a-practical-guide","title":"How to Monitor and Optimize Your Database Performance: A Practical Guide"},{"date":"2021-06-23T00:00:00+00:00","slug":"2021/06/23/adding-kubernetes-metadata-to-your-appsignal-errors","title":"Adding Kubernetes Metadata to Your AppSignal Errors"},{"date":"2021-06-22T00:00:00+00:00","slug":"2021/06/22/how-to-test-websocket-clients-in-elixir-with-a-mock-server","title":"How to Test WebSocket Clients in Elixir with a Mock Server"},{"date":"2021-06-16T00:00:00+00:00","slug":"2021/06/16/the-wolf-pack-tactic-for-monitoring-slow-apis","title":"The Wolf Pack Tactic for Monitoring Slow APIs"},{"date":"2021-06-09T00:00:00+00:00","slug":"2021/06/09/performance-stress-and-load-tests-in-rails","title":"Performance, Stress, and Load Tests in Rails"},{"date":"2021-06-02T00:00:00+00:00","slug":"2021/06/02/uptime-monitoring-a-one-week-project-a-decade-in-the-making","title":"Uptime Monitoring: A One-week Project, a Decade In the Making"},{"date":"2021-06-01T00:00:00+00:00","slug":"2021/06/01/monitoring-memory-usage-for-erlang-and-elixir-applications","title":"Monitoring Memory Usage for Erlang and Elixir Applications"},{"date":"2021-05-26T00:00:00+00:00","slug":"2021/05/26/integrating-appsignal-with-microsoft-teams","title":"Integrating AppSignal With Microsoft Teams"},{"date":"2021-05-20T00:00:00+00:00","slug":"2021/05/20/more-in-one-uptime-monitoring-is-now-available-in-appsignal","title":"Launching Uptime Monitoring In AppSignal"},{"date":"2021-05-19T00:00:00+00:00","slug":"2021/05/19/zero-touch-saas-bookkeeping-with-stripe-and-moneybird","title":"Zero-touch SaaS Bookkeeping with Stripe and Moneybird"},{"date":"2021-05-12T00:00:00+00:00","slug":"2021/05/12/three-ways-to-avoid-duplicate-sidekiq-jobs","title":"Three Ways To Avoid Duplicate Sidekiq Jobs"},{"date":"2021-05-06T00:00:00+00:00","slug":"2021/05/06/heroku-errors","title":"New Features: Heroku Errors and a Magic Dashboard"},{"date":"2021-05-05T00:00:00+00:00","slug":"2021/05/05/a-quick-guide-to-co2-offseting-for-startups","title":"A Quick Guide to CO2 Offsetting for Startups"},{"date":"2021-04-28T00:00:00+00:00","slug":"2021/04/28/ruby-linting","title":"Linting Ruby Code"},{"date":"2021-04-21T00:00:00+00:00","slug":"2021/04/21/node-underrated-packages-passport-and-casl","title":"Node.js's Underrated Combo: Passport and CASL"},{"date":"2021-04-14T00:00:00+00:00","slug":"2021/04/14/ruby-on-rails-controller-patterns-and-anti-patterns","title":"Ruby on Rails Controller Patterns and Anti-patterns"},{"date":"2021-04-07T00:00:00+00:00","slug":"2021/04/07/appsignal-apm-for-node-now-monitors-koa","title":"AppSignal Now Monitors Koa and All Your Cascading Middleware"},{"date":"2021-03-31T00:00:00+00:00","slug":"2021/03/31/exposing-more-public-endpoints-for-sending-metrics-and-errors-to-appsignal","title":"Exposing More Public Endpoints for Sending Metrics and Errors to AppSignal"},{"date":"2021-03-23T00:00:00+00:00","slug":"2021/03/23/engineering-for-performance-ghost-queries","title":"Engineering for Performance: Ghost Queries"},{"date":"2021-03-17T00:00:00+00:00","slug":"2021/03/17/the-easiest-way-to-monitor-ruby-automatic-instrumentation","title":"The Easiest Way to Monitor Ruby: Automatic Instrumentation"},{"date":"2021-03-10T00:00:00+00:00","slug":"2021/03/10/powerful-caching-with-redis-in-node","title":"Powerful Caching with Redis for Node.js Applications"},{"date":"2021-03-02T00:00:00+00:00","slug":"2021/03/02/new-feature-searching-through-samples-in-appsignal","title":"New Feature: Searching Through Samples in AppSignal"},{"date":"2021-03-01T00:00:00+00:00","slug":"2021/03/01/ruby-gem-3-0","title":"Announcing AppSignal for Ruby Gem 3.0!"},{"date":"2021-02-24T00:00:00+00:00","slug":"2021/02/24/troubleshooting-activerecord-performance","title":"Troubleshooting ActiveRecord Performance"},{"date":"2021-02-17T00:00:00+00:00","slug":"2021/02/17/using-webpacker-in-your-ruby-on-rails-app-deep-dive","title":"Using Webpacker in Your Ruby on Rails Application — a Deep Dive"},{"date":"2021-02-10T00:00:00+00:00","slug":"2021/02/10/ruby-on-rails-view-patterns-and-anti-patterns","title":"Ruby on Rails View Patterns and Anti-patterns"},{"date":"2021-02-03T00:00:00+00:00","slug":"2021/02/03/improving-node-application-performance-with-clustering","title":"Improving Node.js Application Performance With Clustering"},{"date":"2021-01-27T00:00:00+00:00","slug":"2021/01/27/rbs-the-new-ruby-3-typing-language-in-action","title":"RBS: A New Ruby 3 Typing Language in Action"},{"date":"2021-01-26T00:00:00+00:00","slug":"2021/01/26/appsignal-for-elixir-integration-2-1-released","title":"AppSignal for Elixir Integration 2.1 Released"},{"date":"2021-01-19T00:00:00+00:00","slug":"2021/01/19/how-absinthe-uses-compilation-callbacks-for-schema-validation-in-elixir","title":"How Absinthe Uses Compilation Callbacks for Schema Validation in Elixir"},{"date":"2021-01-19T00:00:00+00:00","slug":"2021/01/19/nodejs-garbage-collection-heap-statistics-magic-dashboard-metrics","title":"Node.js Garbage Collection: Heap Statistics Magic Dashboard"},{"date":"2021-01-13T00:00:00+00:00","slug":"2021/01/13/using-mixins-and-modules-in-your-ruby-on-rails-application","title":"How to Use Mixins and Modules in Your Ruby on Rails Application"},{"date":"2021-01-06T00:00:00+00:00","slug":"2021/01/06/microservices-monitoring-using-namespaces-for-data-structuring","title":"Microservices Monitoring: Using Namespaces for Data Structuring"},{"date":"2020-12-16T00:00:00+00:00","slug":"2020/12/16/top-5-elixir-posts-in-2020-from-appsignal","title":"Top 5 Elixir Blog Posts in 2020 from AppSignal"},{"date":"2020-12-16T00:00:00+00:00","slug":"2020/12/16/top-5-javascript-posts-in-2020-from-appsignal","title":"Top 5 JavaScript Blog Posts in 2020 from AppSignal"},{"date":"2020-12-16T00:00:00+00:00","slug":"2020/12/16/top-5-ruby-posts-in-2020-from-appsignal","title":"Top 5 Ruby Blog Posts in 2020 from AppSignal"},{"date":"2020-12-15T00:00:00+00:00","slug":"2020/12/15/ruby-rails-actionmailer-magic-dashboard","title":"New Magic Dashboard for Ruby on Rails: ActionMailer"},{"date":"2020-12-10T00:00:00+00:00","slug":"2020/12/10/setting-up-appsignal-monitoring-for-a-ruby-on-rails-application","title":"Setting Up AppSignal Monitoring for a Ruby on Rails Application"},{"date":"2020-12-08T00:00:00+00:00","slug":"2020/12/08/the-easiest-way-to-monitor-nodejs-automatic-instrumentation","title":"The Easiest Way to Monitor Node.js: Automatic Instrumentation"},{"date":"2020-12-02T00:00:00+00:00","slug":"2020/12/02/building-a-multi-tenant-ruby-on-rails-app-with-subdomains","title":"Building a Multi-tenant Ruby on Rails App With Subdomains"},{"date":"2020-12-01T00:00:00+00:00","slug":"2020/12/01/fast-and-curious-find-and-fix-slow-queries-and-apis","title":"Fast \u0026 Curious: Find and Fix Slow Queries \u0026 API Requests"},{"date":"2020-11-25T00:00:00+00:00","slug":"2020/11/25/server-side-rendering-in-javascript-a-modern-approach","title":"Server-side Rendering in JavaScript: A Modern Approach"},{"date":"2020-11-18T00:00:00+00:00","slug":"2020/11/18/rails-model-patterns-and-anti-patterns","title":"Ruby on Rails Model Patterns and Anti-patterns"},{"date":"2020-11-17T00:00:00+00:00","slug":"2020/11/17/announcing-appsignal-for-elixir-integration-2-0","title":"Announcing AppSignal for Elixir 2.0"},{"date":"2020-11-10T00:00:00+00:00","slug":"2020/11/10/understanding-associations-in-elixir-ecto","title":"Understanding Associations in Elixir's Ecto"},{"date":"2020-11-04T00:00:00+00:00","slug":"2020/11/04/structuring-monitoring-data-in-monolith-applications-through-namespaces","title":"Structuring Monitoring Data in Monolithic Applications With Namespaces"},{"date":"2020-11-03T00:00:00+00:00","slug":"2020/11/03/setting-up-triggers-and-alerts-from-graphs-in-appsignal","title":"Setting Up Triggers and Alerts From Graphs in AppSignal"},{"date":"2020-10-27T00:00:00+00:00","slug":"2020/10/27/trigger-improvements-in-appsignal","title":"Triggers in AppSignal: Already Powerful — Now Easy To Set Up 🚀 "},{"date":"2020-10-21T00:00:00+00:00","slug":"2020/10/21/garbage-collection-in-javascript","title":"JavaScript Internals: Garbage Collection"},{"date":"2020-10-20T00:00:00+00:00","slug":"2020/10/20/appsignal-is-free-for-open-source-software-and-for-good-projects","title":"AppSignal is Free for Open-Source Software \u0026 \"For Good\" Projects"},{"date":"2020-10-13T00:00:00+00:00","slug":"2020/10/13/capabilities-of-elixir-logger","title":"Capabilities of Elixir's Logger"},{"date":"2020-10-07T00:00:00+00:00","slug":"2020/10/07/launching-appsignal-monitoring-for-nodejs","title":"Launching AppSignal Monitoring for Node.js 1.0"},{"date":"2020-09-30T00:00:00+00:00","slug":"2020/09/30/exploring-nodejs-async-hooks","title":"Exploring Node.js Async Hooks"},{"date":"2020-09-23T00:00:00+00:00","slug":"2020/09/23/monitoring-any-system-with-statsd-and-the-standalone-appsignal-agent","title":"Monitoring Any System with StatsD and AppSignal's Standalone Agent"},{"date":"2020-09-21T00:00:00+00:00","slug":"2020/09/21/adding-diagnose-tool-to-appsignal-for-nodejs","title":"The Diagnose: How Support Works at AppSignal"},{"date":"2020-09-16T00:00:00+00:00","slug":"2020/09/16/rails-concers-to-concern-or-not-to-concern","title":"Rails Concerns: To Concern Or Not To Concern"},{"date":"2020-09-10T00:00:00+00:00","slug":"2020/09/10/improved-pagerduty-integration","title":"Improved Pagerduty Integration with Detailed Alerts"},{"date":"2020-09-09T00:00:00+00:00","slug":"2020/09/09/nodejs-resiliency-concepts-recovery-and-self-healing","title":"Node.js Resiliency Concepts: Recovery and Self-Healing"},{"date":"2020-09-08T00:00:00+00:00","slug":"2020/09/08/going-from-consulting-to-saas","title":"Going from Consulting to SaaS"},{"date":"2020-09-02T00:00:00+00:00","slug":"2020/09/02/getting-started-wit-web-vitals-in-nextjs","title":"Getting Started With Web Vitals in Next.js"},{"date":"2020-08-19T00:00:00+00:00","slug":"2020/08/19/testing-absinthe","title":"Testing the Tricky Parts of an Absinthe Application"},{"date":"2020-08-17T00:00:00+00:00","slug":"2020/08/17/identifying-and-resolving-a-kafka-issue-with-appsignal","title":"Identifying and Resolving a Kafka Issue With AppSignal"},{"date":"2020-08-12T00:00:00+00:00","slug":"2020/08/12/security-best-practices-for-nodejs","title":"Security Best Practices for Node.js"},{"date":"2020-08-11T00:00:00+00:00","slug":"2020/08/11/ruby-gem-2-11","title":"AppSignal Ruby Gem 2.11: Active Job and Friends"},{"date":"2020-08-06T00:00:00+00:00","slug":"2020/08/06/appsignal-now-automatically-instruments-apollo-for-nodejs-applications","title":"AppSignal Now Automatically Instruments Apollo for Node.js Applications"},{"date":"2020-08-05T00:00:00+00:00","slug":"2020/08/05/introduction-to-ruby-on-rails-patterns-and-anti-patterns","title":"Introduction to Ruby on Rails Patterns and Anti-patterns"},{"date":"2020-07-29T00:00:00+00:00","slug":"2020/07/29/appsignal-now-supports-redis-for-nodejs-ot-of-the-box","title":"AppSignal Now Supports Redis for Node.js Out of the Box"},{"date":"2020-07-28T00:00:00+00:00","slug":"2020/07/28/the-state-of-elixir-http-clients","title":"The State of Elixir HTTP Clients"},{"date":"2020-07-22T00:00:00+00:00","slug":"2020/07/22/nodejs-resiliency-concepts-the-circuit-breaker","title":"Node.js Resiliency Concepts: The Circuit Breaker"},{"date":"2020-07-14T00:00:00+00:00","slug":"2020/07/14/building-state-machines-in-elixir-with-ecto","title":"Building State Machines in Elixir with Ecto "},{"date":"2020-07-08T00:00:00+00:00","slug":"2020/07/08/scaling-queue-workers-efficiently-with-appsignal-metrics","title":"Scaling Queue Workers Efficiently with AppSignal Metrics"},{"date":"2020-07-07T00:00:00+00:00","slug":"2020/07/07/how-appsignal-monitors-their-own-kafka-brokers","title":"How AppSignal Monitors Their Own Kafka Brokers"},{"date":"2020-07-01T00:00:00+00:00","slug":"2020/07/01/a-deep-dive-into-v8","title":"A Deep Dive Into V8"},{"date":"2020-06-25T00:00:00+00:00","slug":"2020/06/25/new-adding-custom-metrics-tonodejs-appsignal","title":"New Feature: Add Custom Metrics For Node.js in AppSignal"},{"date":"2020-06-24T00:00:00+00:00","slug":"2020/06/24/best-practices-for-background-jobs-in-elixir","title":"Best Practices for Background Jobs in Elixir"},{"date":"2020-06-24T00:00:00+00:00","slug":"2020/06/24/git-is-about-communication","title":"Git is About Communication"},{"date":"2020-06-17T00:00:00+00:00","slug":"2020/06/17/using-service-objects-in-ruby-on-rails","title":"Using Service Objects in Ruby on Rails"},{"date":"2020-06-16T00:00:00+00:00","slug":"2020/06/16/a-major-overhaul-of-appsignal-dashboards-powerful-and-easy-to-use","title":"A Major Overhaul of AppSignal Dashboards: Powerful and Easy to Use"},{"date":"2020-06-12T00:00:00+00:00","slug":"2020/06/12/postgres-node-magic-dashboard","title":"New feature: PostgreSQL Magic Dashboard in AppSignal for Node.js"},{"date":"2020-06-09T00:00:00+00:00","slug":"2020/06/09/n-plus-one-queries-explained","title":"Performance and N+1 Queries: Explained, Spotted, and Solved"},{"date":"2020-06-03T00:00:00+00:00","slug":"2020/06/03/building-apis-with-graphql-in-your-node-application","title":"Building APIs With GraphQL in Your Node.js Application"},{"date":"2020-05-26T00:00:00+00:00","slug":"2020/05/26/appsignal-adds-nextjs-integration-automatically-adds-web-vitals-monitoring","title":"AppSignal Adds Next.js Integration - Automatically Adds Web Vitals Monitoring"},{"date":"2020-05-20T00:00:00+00:00","slug":"2020/05/20/developer-dilemmas-are-now-online","title":"Developer Dilemmas Are Now Online"},{"date":"2020-05-19T00:00:00+00:00","slug":"2020/05/19/using-mnesia-in-an-elixir-application","title":"Using Mnesia in an Elixir Application"},{"date":"2020-05-14T00:00:00+00:00","slug":"2020/05/14/javascript-growing-pains-from-0-to-13000-dependencies","title":"JavaScript Growing Pains: From 0 to 13,000 Dependencies"},{"date":"2020-05-14T00:00:00+00:00","slug":"2020/05/14/new-integration-postgresql-instrumented-for-node-js","title":"New Integration: PostgreSQL Instrumented for Node.js"},{"date":"2020-05-13T00:00:00+00:00","slug":"2020/05/13/developer-dilemmas-are-coming-online-soon","title":"Developer Dilemmas are Coming Online Soon"},{"date":"2020-05-13T00:00:00+00:00","slug":"2020/05/13/quickly-duplicate-triggers-across-apps-in-appsignal","title":"Quickly Duplicate Triggers Across Apps in AppSignal"},{"date":"2020-05-06T00:00:00+00:00","slug":"2020/05/06/avoiding-memory-leaks-in-nodejs-best-practices-for-performance","title":"Avoiding Memory Leaks in Node.js: Best Practices for Performance"},{"date":"2020-05-05T00:00:00+00:00","slug":"2020/05/05/railsconf-2020-2-couch-edition","title":"RailsConf 2020.2 Couch Edition"},{"date":"2020-04-30T00:00:00+00:00","slug":"2020/04/30/javascript-error-tracking-version-1-3-0","title":"JavaScript Error Tracking with AppSignal v1.3.0 is Here"},{"date":"2020-04-28T00:00:00+00:00","slug":"2020/04/28/configuring-your-elixir-application-at-runtime-with-vapor","title":"Configuring your Elixir Application at Runtime with Vapor"},{"date":"2020-04-28T00:00:00+00:00","slug":"2020/04/28/elixir-package-1-13","title":"Elixir Package 1.13: Phoenix LiveView Helpers and Updated Typespecs"},{"date":"2020-04-22T00:00:00+00:00","slug":"2020/04/22/discord-integration","title":"Official AppSignal Discord Integration is Here"},{"date":"2020-04-16T00:00:00+00:00","slug":"2020/04/16/new-appsignal-feature-graph-builder","title":"New AppSignal Feature: Graph Builder"},{"date":"2020-04-14T00:00:00+00:00","slug":"2020/04/14/dissecting-rails-migrationsl","title":"Dissecting Rails Migrations"},{"date":"2020-04-09T00:00:00+00:00","slug":"2020/04/09/ride-down-the-javascript-dependency-hell","title":"Ride Down Into JavaScript Dependency Hell"},{"date":"2020-04-08T00:00:00+00:00","slug":"2020/04/08/the-citadel-architecture-at-appsignal","title":"The Citadel Architecture at AppSignal"},{"date":"2020-04-01T00:00:00+00:00","slug":"2020/04/01/appsignal-now-supports-node-roadmap-for-the-coming-weeks","title":"AppSignal Now Supports Node.js: Roadmap for the Coming Weeks"},{"date":"2020-04-01T00:00:00+00:00","slug":"2020/04/01/changing-the-approach-to-debugging-in-ruby-with-tracepoint","title":"Changing the Approach to Debugging in Ruby with TracePoint"},{"date":"2020-03-25T00:00:00+00:00","slug":"2020/03/25/whats-the-difference-between-monitoring-webhooks-and-background-jobs","title":"What's The Difference Between Monitoring Webhooks and Background Jobs"},{"date":"2020-03-24T00:00:00+00:00","slug":"2020/03/24/how-to-use-grpc-in-elixir","title":"How to Use gRPC in Elixir"},{"date":"2020-03-18T00:00:00+00:00","slug":"2020/03/18/facade-pattern-in-rails-for-performance-and-maintainability","title":"Facade Pattern in Rails for Performance and Maintainability"},{"date":"2020-03-10T00:00:00+00:00","slug":"2020/03/10/building-compile-time-tools-with-elixir-compiler-tracing-features","title":"Building Compile-time Tools With Elixir's Compiler Tracing Features"},{"date":"2020-03-04T00:00:00+00:00","slug":"2020/03/04/building-a-rails-app-with-multiple-subdomains","title":"Building a Rails App With Multiple Subdomains"},{"date":"2020-03-03T00:00:00+00:00","slug":"2020/03/03/elixir-package-1-12","title":"Elixir Package 1.12: Phoenix 1.5 Support \u0026 Better Channel Error Handling"},{"date":"2020-03-02T00:00:00+00:00","slug":"2020/03/02/anomaly-detecting-hostname-host-triggers","title":"Hostname Filter for Anomaly Detection Host Triggers"},{"date":"2020-02-26T00:00:00+00:00","slug":"2020/02/26/ui-ux-updates-faster-and-smoother-sample-navigation-in-appsignal","title":"UI/UX Updates: Faster and Smoother Sample Navigation in AppSignal"},{"date":"2020-02-25T00:00:00+00:00","slug":"2020/02/25/migrating-production-data-in-elixir","title":"Migrating Production Data in Elixir"},{"date":"2020-02-20T00:00:00+00:00","slug":"2020/02/20/effective-profiling-in-google-chrome","title":"Effective Profiling in Google Chrome"},{"date":"2020-02-19T00:00:00+00:00","slug":"2020/02/19/how-to-monitor-your-host-metrics-automatically","title":"How to Monitor Your Host Metrics Automatically"},{"date":"2020-02-12T00:00:00+00:00","slug":"2020/02/12/getting-started-with-system-tests-in-ruby-with-minitest","title":"Getting Started With System Tests in Rails With Minitest"},{"date":"2020-02-05T00:00:00+00:00","slug":"2020/02/05/ruby-gem-2-10","title":"AppSignal Ruby Gem 2.10: Better Diagnose (And More)"},{"date":"2020-02-04T00:00:00+00:00","slug":"2020/02/04/elixir-monitoring-erlangvm-with-magic-dashboards","title":"Monitoring the Erlang VM With AppSignal's Magic Dashboard"},{"date":"2020-01-29T00:00:00+00:00","slug":"2020/01/29/how-to-get-your-elixir-application-ready-for-ci-cd","title":"How to Get Your Elixir Application Ready for CI/CD"},{"date":"2020-01-28T00:00:00+00:00","slug":"2020/01/28/javascript-error-tracking-version-1-1-0","title":"JavaScript Error Tracking v1.1.0"},{"date":"2020-01-22T00:00:00+00:00","slug":"2020/01/22/rails-is-fast-optimize-your-view-performance","title":"Rails is Fast: Optimize Your View Performance"},{"date":"2020-01-15T00:00:00+00:00","slug":"2020/01/15/the-pros-and-cons-of-using-structure-sql-in-your-ruby-on-rails-application","title":"Pros and Cons of Using structure.sql in Your Ruby on Rails Application"},{"date":"2019-12-17T00:00:00+00:00","slug":"2019/12/17/top-10-appsigna-blog-posts-in-2019","title":"Top 10 AppSignal Blog Posts in 2019"},{"date":"2019-12-12T00:00:00+00:00","slug":"2019/12/12/how-to-use-broadway-in-your-elixir-application","title":"How to Use Broadway in Your Elixir Application"},{"date":"2019-11-29T00:00:00+00:00","slug":"2019/11/29/configurable-ruby-modules-the-module-builder-pattern","title":"Configurable Ruby Modules: The Module Builder Pattern"},{"date":"2019-11-20T00:00:00+00:00","slug":"2019/11/20/javascript-errors-an-exceptional-history-part-ii","title":"JavaScript Errors: An Exceptional History - Part II"},{"date":"2019-11-12T00:00:00+00:00","slug":"2019/11/12/caching-with-elixir-and-ets","title":"Caching with Elixir and ETS"},{"date":"2019-11-05T00:00:00+00:00","slug":"2019/11/05/how-to-read-appsignal-performance-metrics","title":"How to Read Performance Metrics in AppSignal"},{"date":"2019-10-29T00:00:00+00:00","slug":"2019/10/29/sidekiq-optimization-and-monitoring","title":"Sidekiq Optimization and Monitoring"},{"date":"2019-10-17T00:00:00+00:00","slug":"2019/10/17/javascript-errors-an-exceptional-history","title":"JavaScript Errors: An Exceptional History"},{"date":"2019-10-16T00:00:00+00:00","slug":"2019/10/16/javascript-error-tracking-launch","title":"Launching JavaScript Error Tracking v1.0."},{"date":"2019-10-15T00:00:00+00:00","slug":"2019/10/15/behaviours","title":"Typespecs and Behaviours in Elixir"},{"date":"2019-10-10T00:00:00+00:00","slug":"2019/10/10/area-charts","title":"Introducing area charts for custom dashboards."},{"date":"2019-10-01T00:00:00+00:00","slug":"2019/10/01/tracking-down-exceptions-without-errors","title":"How We Tracked Down an Exception Without Errors: A Detective Story"},{"date":"2019-09-24T00:00:00+00:00","slug":"2019/09/24/ruby-magic-baking-an-interpreter","title":"Ruby Templating: Baking an Interpreter"},{"date":"2019-09-19T00:00:00+00:00","slug":"2019/09/19/slack-app","title":"Migrate to our new Slack App!"},{"date":"2019-09-17T00:00:00+00:00","slug":"2019/09/17/tldr-our-new-logo","title":"TL;DR: Our new logo"},{"date":"2019-09-10T00:00:00+00:00","slug":"2019/09/10/flags-seeds-idempotency-elixir","title":"Flags, Seeds and Idempotency: Database Tooling with Elixir"},{"date":"2019-09-03T00:00:00+00:00","slug":"2019/09/03/inherited-hook-method-and-parenting","title":"The Inherited Hook Method in Ruby - and More Parenting Lessons"},{"date":"2019-08-27T00:00:00+00:00","slug":"2019/08/27/new-sample-navigation","title":"New Sample Page Graphs and Navigation"},{"date":"2019-08-27T00:00:00+00:00","slug":"2019/08/27/ruby-magic-type-checking-in-ruby","title":"Type Checking in Ruby — Check Yo Self Before You Wreck Yo Self"},{"date":"2019-08-20T00:00:00+00:00","slug":"2019/08/20/clean-up-strings","title":"Cleaning Up Ruby Strings 13 Times Faster"},{"date":"2019-08-13T00:00:00+00:00","slug":"2019/08/13/elixir-alchemy-multiplayer-go-with-registry-pubsub-and-dynamic-supervisors","title":"Multiplayer Go with Elixir's Registry, PubSub and dynamic supervisors"},{"date":"2019-07-30T00:00:00+00:00","slug":"2019/07/30/ruby-magic-ruby-templating-the-parser","title":"Digging Deeper into Ruby Templating: The Parser"},{"date":"2019-07-16T00:00:00+00:00","slug":"2019/07/16/elixir-alchemy-metaprogramming","title":"Metaprogramming: From C Preprocessing to Elixir Macros"},{"date":"2019-07-16T00:00:00+00:00","slug":"2019/07/16/javascript-iterators-and-iterables","title":"JavaScript Iterators and Iterables"},{"date":"2019-07-15T00:00:00+00:00","slug":"2019/07/15/product-updates-week-28","title":"Last week's Product Improvements (July 15th, 2019)"},{"date":"2019-07-09T00:00:00+00:00","slug":"2019/07/09/productive-procrastination-for-programmers","title":"Productive Procrastination for Programmers - works for Ruby and Elixir"},{"date":"2019-07-04T00:00:00+00:00","slug":"2019/07/04/elixir-alchemy-building-go-in-elixir-time-travel-and-the-ko-rule","title":"Building the Go Game in Elixir - Time Travel and the Ko Rule"},{"date":"2019-07-02T00:00:00+00:00","slug":"2019/07/02/ruby-magic-brewing-our-own-template-lexer-in-ruby","title":"Brewing our own Template Lexer in Ruby"},{"date":"2019-06-25T00:00:00+00:00","slug":"2019/06/25/introducing-context-incident-notes","title":"Introducing Incident Context and Incident Notes"},{"date":"2019-06-18T00:00:00+00:00","slug":"2019/06/18/elixir-alchemy-building-go-with-phoenix-live-view","title":"Building and Playing the Go Game with Phoenix LiveView"},{"date":"2019-06-11T00:00:00+00:00","slug":"2019/06/11/devise-ultimate-internationalisation-checklist","title":"The Ultimate Checklist to Properly Internationalize Devise"},{"date":"2019-06-03T00:00:00+00:00","slug":"2019/06/03/stripe-vatmoss","title":"How We Do VAT for Our SAAS with Stripe"},{"date":"2019-05-30T00:00:00+00:00","slug":"2019/05/30/clubhouse-io-integration","title":"Introducing our Clubhouse integration"},{"date":"2019-05-28T00:00:00+00:00","slug":"2019/05/28/ruby-magic-enumeration","title":"Inside Enumeration in Ruby"},{"date":"2019-05-20T00:00:00+00:00","slug":"2019/05/20/heroku-postgresql-magic-dashboard","title":"New Magic Dashboard: Heroku Postgres"},{"date":"2019-05-14T00:00:00+00:00","slug":"2019/05/14/elixir-alchemy-background-processing","title":"Doing Background Work Using a Native Elixir Approach"},{"date":"2019-05-07T00:00:00+00:00","slug":"2019/05/07/method-missing","title":"Up the Ancestor Chain with method_missing"},{"date":"2019-04-30T00:00:00+00:00","slug":"2019/04/30/ruby-magic-hidden-gems-delegator-forwardable","title":"Ruby's Hidden Gems -Delegator and Forwardable"},{"date":"2019-04-23T00:00:00+00:00","slug":"2019/04/23/kafka-sidekiq-ruby","title":"Kafka and Ruby, a Sidekiq Lovestory"},{"date":"2019-04-23T00:00:00+00:00","slug":"2019/04/23/weve-got-your-back-at-railsconf","title":"We've got your back at RailsConf"},{"date":"2019-04-17T00:00:00+00:00","slug":"2019/04/17/user-email-notifications","title":"More personal email notification preferences"},{"date":"2019-04-16T00:00:00+00:00","slug":"2019/04/16/elixir-alchemy-routing-phoenix-umbrella-apps","title":"Routing in Phoenix Umbrella Apps"},{"date":"2019-04-02T00:00:00+00:00","slug":"2019/04/02/background-processing-system-in-ruby","title":"Learning by building, a Background Processing System in Ruby"},{"date":"2019-03-29T00:00:00+00:00","slug":"2019/03/29/memory-magic-dashboard","title":"Memory Magic Dashboard"},{"date":"2019-03-28T00:00:00+00:00","slug":"2019/03/28/pinned-apps","title":"Pinned apps"},{"date":"2019-03-27T00:00:00+00:00","slug":"2019/03/27/magic-dashboards","title":"Introducing Magic Dashboards"},{"date":"2019-03-26T00:00:00+00:00","slug":"2019/03/26/object-marshalling-in-ruby","title":"Object Marshalling in Ruby"},{"date":"2019-03-21T00:00:00+00:00","slug":"2019/03/21/revamped-dashboards","title":"Revamped dashboards!"},{"date":"2019-03-19T00:00:00+00:00","slug":"2019/03/19/elixir-alchemy-recursion","title":"Iteration, Recursion, and Tail-call Optimization in Elixir"},{"date":"2019-03-06T00:00:00+00:00","slug":"2019/03/06/navigation-improvements","title":"Improved navigation for better feature discovery."},{"date":"2019-03-05T00:00:00+00:00","slug":"2019/03/05/stringscanner","title":"Ruby's Hidden Gems, StringScanner"},{"date":"2019-02-26T00:00:00+00:00","slug":"2019/02/26/diving-into-dup-and-clone","title":"Diving into Ruby's #dup and #clone"},{"date":"2019-02-19T00:00:00+00:00","slug":"2019/02/19/elixir-alchemy-pouring-protocols","title":"Pouring Protocols in Elixir"},{"date":"2019-02-12T00:00:00+00:00","slug":"2019/02/12/replica-set-lag-monitoring-with-appsignal","title":"Monitoring MongoDB Replicaset Lag with AppSignal"},{"date":"2019-02-08T00:00:00+00:00","slug":"2019/02/08/google-hangouts-chat-integration","title":"Introducing our Google Hangouts Chat integration"},{"date":"2019-02-05T00:00:00+00:00","slug":"2019/02/05/ruby-magic-classes-instances-and-metaclasses","title":"Unraveling Classes, Instances and Metaclasses in Ruby"},{"date":"2019-01-31T00:00:00+00:00","slug":"2019/01/31/asana-integration","title":"Introducing our Asana integration"},{"date":"2019-01-29T00:00:00+00:00","slug":"2019/01/29/graphql","title":"An instrumental intro to GraphQL with Ruby"},{"date":"2019-01-22T00:00:00+00:00","slug":"2019/01/22/serving-plug-building-an-elixir-http-server","title":"Serving Plug - Building an Elixir HTTP server from scratch"},{"date":"2019-01-08T00:00:00+00:00","slug":"2019/01/08/ruby-magic-bindings-and-lexical-scope","title":"Bindings and Lexical Scope in Ruby"},{"date":"2018-12-20T00:00:00+00:00","slug":"2018/12/20/elixir-package-1-9","title":"Elixir package 1.9:\nImproved Erlang error \u0026\nContainer memory support\n"},{"date":"2018-12-20T00:00:00+00:00","slug":"2018/12/20/ruby-gem-2-8","title":"Ruby gem 2.8 - Container memory \u0026 JRuby on Alpine Linux support"},{"date":"2018-12-04T00:00:00+00:00","slug":"2018/12/04/dont-be-mean-statistical-means-and-percentiles-101","title":"Don't be mean: Statistical means and percentiles 101"},{"date":"2018-11-27T00:00:00+00:00","slug":"2018/11/27/ruby-magic-fibers-and-enumerators-in-ruby","title":"Fibers and Enumerators in Ruby - Turning Blocks Inside Out"},{"date":"2018-11-13T00:00:00+00:00","slug":"2018/11/13/elixir-alchemy-understanding-elixirs-genstages-querying-the-blockchain","title":"Understanding Elixir’s GenStages - Querying the Blockchain"},{"date":"2018-11-06T00:00:00+00:00","slug":"2018/11/06/testing-asyncronous-threads-in-ruby","title":"Testing Asynchronous Threads in Ruby"},{"date":"2018-10-30T00:00:00+00:00","slug":"2018/10/30/ruby-magic-building-a-ruby-c-extension-from-scratch","title":"Building a Ruby C Extension From Scratch"},{"date":"2018-10-23T00:00:00+00:00","slug":"2018/10/23/the-innards-of-a-ruby-gem","title":"The innards of a RubyGem"},{"date":"2018-10-16T00:00:00+00:00","slug":"2018/10/16/elixir-alchemy-hot-code-reloading-in-elixir","title":"Hot Code Reloading in Elixir"},{"date":"2018-10-09T00:00:00+00:00","slug":"2018/10/09/active-record-vs-ecto-part-2","title":"ActiveRecord vs. Ecto\nPart Two\n"},{"date":"2018-10-08T00:00:00+00:00","slug":"2018/10/08/improved-navigation","title":"Improved Navigation"},{"date":"2018-10-02T00:00:00+00:00","slug":"2018/10/02/ruby-magic-class-level-instance-variables","title":"The Magic of Class-level Instance Variables"},{"date":"2018-09-28T00:00:00+00:00","slug":"2018/09/28/active-record-vs-ecto","title":"ActiveRecord vs. Ecto\nPart One\n"},{"date":"2018-09-25T00:00:00+00:00","slug":"2018/09/25/explicitly-casting-vs-implicitly-coercing-types-in-ruby","title":"#to_s or #to_str?\nExplicitly casting vs. implicitly coercing types in Ruby\n"},{"date":"2018-09-18T00:00:00+00:00","slug":"2018/09/18/elixir-alchemy-how-otp-applications-are-structured","title":"How OTP Applications are structured"},{"date":"2018-09-11T00:00:00+00:00","slug":"2018/09/11/differences-between-nil-empty-blank-and-present","title":"Differences Between #nil?, #empty?, #blank?, and #present?\n"},{"date":"2018-09-04T00:00:00+00:00","slug":"2018/09/04/ruby-magic-closures-in-ruby-blocks-procs-and-lambdas","title":"Closures in Ruby: Blocks, Procs and Lambdas\n"},{"date":"2018-08-28T00:00:00+00:00","slug":"2018/08/28/push-and-pubsub-in-ruby","title":"Push and Pub/Sub in Ruby"},{"date":"2018-08-21T00:00:00+00:00","slug":"2018/08/21/elixir-alchemy-list-vs-tuples","title":"Lists vs Tuples in Elixirs"},{"date":"2018-08-14T00:00:00+00:00","slug":"2018/08/14/rails-collection-caching","title":"Rails Collection Caching"},{"date":"2018-08-13T00:00:00+00:00","slug":"2018/08/13/elixir-package-1-8","title":"Elixir package 1.8:\nImprovements!\n"},{"date":"2018-08-13T00:00:00+00:00","slug":"2018/08/13/ruby-gem-2-7","title":"Ruby gem 2.7:\nImprovements and bug fixes\n"},{"date":"2018-08-07T00:00:00+00:00","slug":"2018/08/07/ruby-magic-changing-the-way-ruby-creates-objects","title":"Changing the Way Ruby Creates Objects"},{"date":"2018-07-31T00:00:00+00:00","slug":"2018/07/31/generating-random-numbers-in-ruby","title":"Generating Random Numbers in Ruby"},{"date":"2018-07-26T00:00:00+00:00","slug":"2018/07/26/ruby-magic-summer-special-best-of-appsignal-academy","title":"Ruby Magic Summer Special: The Best of AppSignal Academy\n"},{"date":"2018-07-24T00:00:00+00:00","slug":"2018/07/24/elixir-alchemy-parsing-numbers-in-elixir","title":"Parsing Numbers in Elixir"},{"date":"2018-07-17T00:00:00+00:00","slug":"2018/07/17/javascript-sprinkled-rails-applications","title":"JavaScript-sprinkled Rails Applications"},{"date":"2018-07-11T00:00:00+00:00","slug":"2018/07/11/elixir-package-1-7","title":"Elixir integration 1.7 released"},{"date":"2018-07-10T00:00:00+00:00","slug":"2018/07/10/ruby-magic-slurping-and-streaming-files","title":"Under the Hood: “Slurping” and Streaming Files in Ruby\n"},{"date":"2018-07-05T00:00:00+00:00","slug":"2018/07/05/appsignal-dashboard-live-updating-insights","title":"AppSignal Dashboard:\nLive updating insights\n"},{"date":"2018-07-03T00:00:00+00:00","slug":"2018/07/03/custom-exceptions-in-ruby","title":"Custom Exceptions in Ruby"},{"date":"2018-06-28T00:00:00+00:00","slug":"2018/06/28/rebooting-the-luftschiff","title":"Rebooting the Luftschiff!"},{"date":"2018-06-19T00:00:00+00:00","slug":"2018/06/19/activerecords-counter-cache","title":"Caching counters with ActiveRecord's counter caches"},{"date":"2018-06-12T00:00:00+00:00","slug":"2018/06/12/elixir-alchemy-deconstructing-genservers","title":"Deconstructing Elixir's GenServers"},{"date":"2018-06-05T00:00:00+00:00","slug":"2018/06/05/redo-retry-next","title":"Ruby's redo, retry and next keywords"},{"date":"2018-05-29T00:00:00+00:00","slug":"2018/05/29/ruby-magic-enumerable-and-enumerator","title":"Ruby's magical Enumerable module"},{"date":"2018-05-23T00:00:00+00:00","slug":"2018/05/23/speeding-up-your-apps-navigation-with-turbolinks","title":"Speeding up your app’s navigation with Turbolinks"},{"date":"2018-05-16T00:00:00+00:00","slug":"2018/05/16/ensure-retry-and-reraise-exceptions-in-ruby","title":"Ensuring execution, retrying failures and reraising exceptions in Ruby"},{"date":"2018-05-08T00:00:00+00:00","slug":"2018/05/08/elixir-integration-1-6","title":"Elixir integration 1.6:\nThe GDPR release!\n"},{"date":"2018-05-08T00:00:00+00:00","slug":"2018/05/08/general-data-protection-regulation","title":"General Data Protection Regulation (GDPR)"},{"date":"2018-05-08T00:00:00+00:00","slug":"2018/05/08/ruby-gem-2-6","title":"Ruby gem 2.6:\nThe GDPR release!\n"},{"date":"2018-05-01T00:00:00+00:00","slug":"2018/05/01/client-side-caching-in-rails-conditional-get-requests","title":"Client-side caching in Rails:\nconditional GET requests\n"},{"date":"2018-04-24T00:00:00+00:00","slug":"2018/04/24/active-record-performance-the-n-1-queries-antipattern","title":"ActiveRecord performance: the N+1 queries antipattern"},{"date":"2018-04-20T00:00:00+00:00","slug":"2018/04/20/post-mortem-april-19th-2018","title":"Post-mortem: April 19th, 2018"},{"date":"2018-04-17T00:00:00+00:00","slug":"2018/04/17/rails-built-in-cache-stores","title":"Rails' built-in cache stores:\nan overview\n"},{"date":"2018-04-11T00:00:00+00:00","slug":"2018/04/11/github-app","title":"New GitHub integration"},{"date":"2018-04-10T00:00:00+00:00","slug":"2018/04/10/rescuing-exceptions-in-ruby","title":"Rescuing exceptions in Ruby"},{"date":"2018-04-05T00:00:00+00:00","slug":"2018/04/05/appsignal-ui-updates","title":"AppSignal UI updates"},{"date":"2018-04-04T00:00:00+00:00","slug":"2018/04/04/elixir-package-1-5","title":"Elixir integration 1.5 released"},{"date":"2018-04-03T00:00:00+00:00","slug":"2018/04/03/russian-doll-caching-in-rails","title":"Russian doll caching in Rails"},{"date":"2018-03-28T00:00:00+00:00","slug":"2018/03/28/understanding-system-load-and-load-averages","title":"Understanding system load\nand load averages\n"},{"date":"2018-03-20T00:00:00+00:00","slug":"2018/03/20/fragment-caching-in-rails","title":"Fragment caching in Rails"},{"date":"2018-03-13T00:00:00+00:00","slug":"2018/03/13/exceptions-in-ruby","title":"Exceptions in Ruby"},{"date":"2018-03-06T00:00:00+00:00","slug":"2018/03/06/understanding-cpu-statistics","title":"Understanding CPU statistics"},{"date":"2018-02-27T00:00:00+00:00","slug":"2018/02/27/benchmarking-ruby-code","title":"Benchmarking Ruby Code"},{"date":"2018-02-21T00:00:00+00:00","slug":"2018/02/21/inspecting-data-in-ruby","title":"Inspecting data in Ruby"},{"date":"2018-02-20T00:00:00+00:00","slug":"2018/02/20/comparing-hosts","title":"Comparing host metrics"},{"date":"2018-02-20T00:00:00+00:00","slug":"2018/02/20/ruby-magic-syntactic-sugar-methods","title":"Syntactic sugar methods in Ruby"},{"date":"2018-02-14T00:00:00+00:00","slug":"2018/02/14/ruby-gem-2-5","title":"Ruby gem 2.5 - JRuby support!"},{"date":"2018-02-13T00:00:00+00:00","slug":"2018/02/13/debugging-exceptions-in-rails","title":"Debugging exceptions in Rails"},{"date":"2018-02-08T00:00:00+00:00","slug":"2018/02/08/improved-host-metrics-alerts","title":"Improved host metrics and alerts"},{"date":"2018-02-06T00:00:00+00:00","slug":"2018/02/06/reading-and-understanding-ruby-stack-traces","title":"Reading and understanding Ruby stack traces"},{"date":"2017-11-13T00:00:00+00:00","slug":"2017/11/13/track-cache-hits-with-custom-metrics","title":"Track cache hits\nwith custom metrics\n"},{"date":"2017-11-02T00:00:00+00:00","slug":"2017/11/02/elixir-package-1-4","title":"Elixir integration 1.4 released"},{"date":"2017-10-31T00:00:00+00:00","slug":"2017/10/31/ruby-gem-2-4","title":"Ruby gem 2.4 -\nFreeBSD support and more exceptions!\"\n"},{"date":"2017-10-30T00:00:00+00:00","slug":"2017/10/30/koos-keeping-others-off-support","title":"Koos: keeping others off support"},{"date":"2017-10-27T00:00:00+00:00","slug":"2017/10/27/multiple-notifiers-anomaly-detection","title":"Better, more and more specific notification options"},{"date":"2017-10-10T00:00:00+00:00","slug":"2017/10/10/two-factor-authentication","title":"Two-factor authentication"},{"date":"2017-10-05T00:00:00+00:00","slug":"2017/10/05/mass-change-incident-status","title":"(Mass) Change incident status"},{"date":"2017-09-18T00:00:00+00:00","slug":"2017/09/18/introducing-anomaly-detection-beta","title":"Introducing Anomaly detection (Beta)"},{"date":"2017-08-17T00:00:00+00:00","slug":"2017/08/17/improved-snapshot","title":"Improved Snapshots of your apps"},{"date":"2017-08-10T00:00:00+00:00","slug":"2017/08/10/elixir-alchemy-supervisors-building-fault-tolerant-elixir-applications","title":"Supervisors:\nBuilding fault-tolerant\nElixir applications\n"},{"date":"2017-08-03T00:00:00+00:00","slug":"2017/08/03/elixir-1-3","title":"Elixir integration 1.3 released"},{"date":"2017-08-01T00:00:00+00:00","slug":"2017/08/01/ruby-magic-code-interpretation","title":"A look at how Ruby interprets your code"},{"date":"2017-07-06T00:00:00+00:00","slug":"2017/07/06/improved-slack-notifications","title":"Improved Slack notifications"},{"date":"2017-07-04T00:00:00+00:00","slug":"2017/07/04/gem-2-3","title":"Gem 2.3 - ActionCable!"},{"date":"2017-06-06T00:00:00+00:00","slug":"2017/06/06/ruby-magic-concurrency-event-loop","title":"Concurrency Deep Dive: Event loops"},{"date":"2017-05-18T00:00:00+00:00","slug":"2017/05/18/elixir-alchemy-demystifying-processes-in-elixir","title":"Demystifying processes in Elixir"},{"date":"2017-05-03T00:00:00+00:00","slug":"2017/05/03/gem-2-2","title":"Gem 2.2 - Custom namespaces!"},{"date":"2017-04-18T00:00:00+00:00","slug":"2017/04/18/ruby-magic-concurrency-threads","title":"Concurrency Deep Dive: Multi-threading"},{"date":"2017-04-07T00:00:00+00:00","slug":"2017/04/07/elixir-1-2","title":"Elixir integration 1.2 released"},{"date":"2017-03-14T00:00:00+00:00","slug":"2017/03/14/elixir-1-1","title":"Elixir integration 1.1 released"},{"date":"2017-03-07T00:00:00+00:00","slug":"2017/03/07/ruby-magic-concurrency-processes","title":"Concurrency Deep Dive: Multi-process"},{"date":"2017-02-24T00:00:00+00:00","slug":"2017/02/24/launching-appsignal-for-elixir","title":"Launching AppSignal for Elixir"},{"date":"2017-01-31T00:00:00+00:00","slug":"2017/01/31/gem-2-1","title":"Gem 2.1 released - Alpine Linux support!"},{"date":"2017-01-27T00:00:00+00:00","slug":"2017/01/27/documentation-updates","title":"Documentation updates"},{"date":"2017-01-24T00:00:00+00:00","slug":"2017/01/24/ruby-magic-building-a-ruby-http-server-part-2-running-a-rails-app","title":"Running Rack: How Ruby HTTP servers run Rails apps"},{"date":"2016-12-21T00:00:00+00:00","slug":"2016/12/21/ruby-magic-escaping-in-ruby","title":"Escaping characters in Ruby"},{"date":"2016-12-08T00:00:00+00:00","slug":"2016/12/08/learning-how-to-become-a-product-business","title":"Learning how to become a product business"},{"date":"2016-12-07T00:00:00+00:00","slug":"2016/12/07/session-review","title":"Review active browser sessions"},{"date":"2016-11-28T00:00:00+00:00","slug":"2016/11/28/custom-markers-from-any-graph","title":"Add custom markers from any graph"},{"date":"2016-11-23T00:00:00+00:00","slug":"2016/11/23/ruby-magic-building-a-30-line-http-server-in-ruby","title":"Building a 30 line HTTP server in Ruby"},{"date":"2016-10-28T00:00:00+00:00","slug":"2016/10/28/custom-markers","title":"Custom Markers"},{"date":"2016-10-26T00:00:00+00:00","slug":"2016/10/26/gem-2-0","title":"Gem 2.0 released 🎉"},{"date":"2016-10-18T00:00:00+00:00","slug":"2016/10/18/ruby-magic-exceptions-primer","title":"Rescuing Exceptions in Ruby:\nA Primer\n"},{"date":"2016-09-27T00:00:00+00:00","slug":"2016/09/27/git-rebasing-strategies","title":"Rebasing a complex branch in Git"},{"date":"2016-09-20T00:00:00+00:00","slug":"2016/09/20/introducing-a-new-layout-for-appsignal","title":"Introducing: A new layout for AppSignal"},{"date":"2016-08-29T00:00:00+00:00","slug":"2016/08/29/gem-1-3","title":"Gem 1.3: Giving Sinatra some love"},{"date":"2016-08-23T00:00:00+00:00","slug":"2016/08/23/how-to-tame-your-growing-users-table","title":"How to tame your growing users table"},{"date":"2016-07-28T00:00:00+00:00","slug":"2016/07/28/ruby-magic-garbage-collection-part-2","title":"Introduction to Garbage Collection (Part II)"},{"date":"2016-07-21T00:00:00+00:00","slug":"2016/07/21/host-metrics-in-samples","title":"Host metrics in samples"},{"date":"2016-07-12T00:00:00+00:00","slug":"2016/07/12/ruby-magic-garbage-collection-part-1","title":"Introduction to Garbage Collection (Part I)"},{"date":"2016-07-04T00:00:00+00:00","slug":"2016/07/04/monitor-mongodb-load-with-custom-metrics","title":"Monitor MongoDB (query) load with Custom Metrics"},{"date":"2016-06-28T00:00:00+00:00","slug":"2016/06/28/new-event-timeline","title":"New event timeline"},{"date":"2016-06-16T00:00:00+00:00","slug":"2016/06/16/gem-1-2","title":"Gem 1.2: Host metrics"},{"date":"2016-03-29T00:00:00+00:00","slug":"2016/03/29/gem-1-1","title":"Gem version 1.1"},{"date":"2016-03-21T00:00:00+00:00","slug":"2016/03/21/referral-program-give-100-get-100","title":"Share the love: give 100, get 100"},{"date":"2016-03-21T00:00:00+00:00","slug":"2016/03/21/upgrading-mongoid","title":"Upgrading to Mongoid 5 / mongo-ruby-driver"},{"date":"2016-03-17T00:00:00+00:00","slug":"2016/03/17/ruby-magic-mastering-concurrency","title":"Mastering Concurrency"},{"date":"2016-02-23T00:00:00+00:00","slug":"2016/02/23/introducing-graph-toggles","title":"Introducing Graph Toggles"},{"date":"2016-02-01T00:00:00+00:00","slug":"2016/02/01/stroopwafels-and-how-to-eat-them","title":"Stroopwafels and how to eat them"},{"date":"2016-01-26T00:00:00+00:00","slug":"2016/01/26/custom-metrics","title":"How to use custom metrics"},{"date":"2016-01-22T00:00:00+00:00","slug":"2016/01/22/getting-high-on-our-own-supply","title":"Getting high on our own supply"},{"date":"2016-01-19T00:00:00+00:00","slug":"2016/01/19/shipped-it-a-partnership-with-the-ruby-on-rails-podcast","title":"Shipped it: A partnership with the Ruby on Rails podcast"},{"date":"2016-01-14T00:00:00+00:00","slug":"2016/01/14/event-type-graphs","title":"Event type graphs"},{"date":"2016-01-12T00:00:00+00:00","slug":"2016/01/12/agent-release","title":"AppSignal agent release"},{"date":"2016-01-07T00:00:00+00:00","slug":"2016/01/07/phabricator","title":"Phabricator integration"},{"date":"2015-10-28T00:00:00+00:00","slug":"2015/10/28/pagerduty","title":"PagerDuty integration"},{"date":"2015-08-31T00:00:00+00:00","slug":"2015/08/31/opsgenie","title":"OpsGenie integration"},{"date":"2015-08-14T00:00:00+00:00","slug":"2015/08/14/five-signs-to-recognize-a-future-customer","title":"Five Signs to Recognize a Future Customer"},{"date":"2015-08-10T00:00:00+00:00","slug":"2015/08/10/gem-0-11-13-release","title":"Gem version 0.11.13 released"},{"date":"2015-07-22T00:00:00+00:00","slug":"2015/07/22/custom-notifications-with-zapier","title":"Custom notifications with Zapier"},{"date":"2015-07-21T00:00:00+00:00","slug":"2015/07/21/automated-screenshots-using-capybara","title":"Automated screenshots using Capybara and Selenium"},{"date":"2015-07-20T00:00:00+00:00","slug":"2015/07/20/padrino-support","title":"Padrino support"},{"date":"2015-07-15T00:00:00+00:00","slug":"2015/07/15/issue-states-notification-settings-and-interface-updates","title":"Issue states, notification settings \u0026 interface updates"},{"date":"2015-06-30T00:00:00+00:00","slug":"2015/06/30/intercom-integration","title":"Introducing the Intercom integration beta"},{"date":"2015-05-13T00:00:00+00:00","slug":"2015/05/13/vat-with-stripe-followup","title":"Handling VAT with Stripe: Follow up"},{"date":"2015-04-02T00:00:00+00:00","slug":"2015/04/02/introducing-the-jira-beta","title":"Introducing the JIRA beta"},{"date":"2015-03-06T00:00:00+00:00","slug":"2015/03/06/official-sinatra-support","title":"Official Sinatra support"},{"date":"2015-02-17T00:00:00+00:00","slug":"2015/02/17/zapier","title":"Introducing the Zapier beta (No Official Support Since 2017)"},{"date":"2015-01-20T00:00:00+00:00","slug":"2015/01/20/gitlab-integration","title":"GitLab integration"},{"date":"2014-11-17T00:00:00+00:00","slug":"2014/11/17/gem-version-011","title":"Gem version 0.11"},{"date":"2014-10-08T00:00:00+00:00","slug":"2014/10/08/appsignal-integrates-with-pivotal-tracker-github-and-trello","title":"AppSignal integrates with Pivotal Tracker, GitHub \u0026 Trello"},{"date":"2014-09-02T00:00:00+00:00","slug":"2014/09/02/first-steps-towards-a-new-front-end","title":"First steps towards a new front-end architecture"},{"date":"2014-08-28T00:00:00+00:00","slug":"2014/08/28/handling-vat-with-stripe","title":"Handling VAT with Stripe"},{"date":"2014-08-19T00:00:00+00:00","slug":"2014/08/19/post-mortem-why-our-gem-disabled-itself","title":"Post-Mortem: Why our gem disabled itself"},{"date":"2014-08-13T00:00:00+00:00","slug":"2014/08/13/gem-version-010","title":"Gem version 0.10"},{"date":"2014-08-04T00:00:00+00:00","slug":"2014/08/04/consistent-api","title":"Consistent API"},{"date":"2014-07-04T00:00:00+00:00","slug":"2014/07/04/flowdock","title":"Flowdock integration"},{"date":"2014-06-27T00:00:00+00:00","slug":"2014/06/27/gem-version-09","title":"Gem version 0.9"},{"date":"2014-04-11T00:00:00+00:00","slug":"2014/04/11/heartbleed","title":"Our response to Heartbleed"},{"date":"2014-04-07T00:00:00+00:00","slug":"2014/04/07/stroopwafels-as-a-service","title":"Stroopwafels as a Service"},{"date":"2014-04-04T00:00:00+00:00","slug":"2014/04/04/notification-settings-per-app","title":"Set notification settings per application"},{"date":"2014-03-31T00:00:00+00:00","slug":"2014/03/31/mongodb-mongoid-and-sideiq-connection-problems","title":"Vastly improve performance for MongoDB, Mongoid and Sidekiq"},{"date":"2014-03-17T00:00:00+00:00","slug":"2014/03/17/refactor-design","title":"Refactoring design"},{"date":"2014-01-31T00:00:00+00:00","slug":"2014/01/31/error-performance-and-deploy-notifications-in-slack","title":"Error, performance and deploy notifications in Slack"},{"date":"2014-01-21T00:00:00+00:00","slug":"2014/01/21/background-jobs","title":"We now monitor your background jobs"},{"date":"2014-01-07T00:00:00+00:00","slug":"2014/01/07/realtime-mongodb-with-aggregations","title":"Realtime graphs from MongoDB with aggregations"},{"date":"2013-10-07T00:00:00+00:00","slug":"2013/10/07/appsignal-api","title":"AppSignal API"},{"date":"2013-09-17T00:00:00+00:00","slug":"2013/09/17/tagged-requests","title":"Error request tagging"},{"date":"2013-08-26T00:00:00+00:00","slug":"2013/08/26/shelly-cloud","title":"AppSignal and Shelly Cloud partner up"},{"date":"2013-08-09T00:00:00+00:00","slug":"2013/08/09/90th-and-snapshots","title":"Improved graphs and snapshots"},{"date":"2013-07-30T00:00:00+00:00","slug":"2013/07/30/taming-mongodb-disk-usage","title":"Taming our MongoDB database size."},{"date":"2013-07-27T00:00:00+00:00","slug":"2013/07/27/week-30","title":"AppSignal Sunday"},{"date":"2013-07-23T00:00:00+00:00","slug":"2013/07/23/poor-man-s-usability-testing","title":"Poor man's usability testing"},{"date":"2013-07-15T00:00:00+00:00","slug":"2013/07/15/developers-and-designers-an-arranged-marriage","title":"Developers and designers: an arranged marriage."},{"date":"2013-06-19T00:00:00+00:00","slug":"2013/06/19/gem-version-0-6","title":"Gem version 0.6"},{"date":"2013-06-13T00:00:00+00:00","slug":"2013/06/13/reducing-mongodb-queries","title":"A quick post about reducing MongoDB queries"},{"date":"2013-06-06T00:00:00+00:00","slug":"2013/06/06/user-test","title":"User test"},{"date":"2013-05-17T00:00:00+00:00","slug":"2013/05/17/designing-appsignal","title":"Designing AppSignal"},{"date":"2013-04-29T00:00:00+00:00","slug":"2013/04/29/opening-up-shop","title":"Opening up shop"},{"date":"2013-04-19T00:00:00+00:00","slug":"2013/04/19/four-oh-one","title":"401: Unauthorized"},{"date":"2013-04-18T00:00:00+00:00","slug":"2013/04/18/filter-sensitive-data-from-params","title":"Filtering sensitive data from params"},{"date":"2013-03-26T00:00:00+00:00","slug":"2013/03/26/better-graphs-event-tree-and-new-hosts-section","title":"Better graphs, event tree \u0026 new hosts section"},{"date":"2013-02-15T00:00:00+00:00","slug":"2013/02/15/jquery-toggle-is-slow-javascript-to-the-rescue","title":"jQuery toggle() is slow, JavaScript to the rescue"},{"date":"2013-01-31T00:00:00+00:00","slug":"2013/01/31/welcome-to-appsignal","title":"Welcome to AppSignal!"}]}},"__N_SSG":true},"page":"/","query":{},"buildId":"4VD4GTi1vs_NVN2Wl-Jyb","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10