{"id":906,"date":"2025-03-23T23:48:31","date_gmt":"2025-03-23T23:48:31","guid":{"rendered":"https:\/\/www.uselesspickles.com\/portfolio\/home\/"},"modified":"2025-06-19T14:28:55","modified_gmt":"2025-06-19T14:28:55","slug":"home","status":"publish","type":"page","link":"https:\/\/www.uselesspickles.com\/portfolio\/","title":{"rendered":"Useless Pickles&#8217; Personal Projects"},"content":{"rendered":"\n<div class=\"wp-block-uagb-container uag-blocks-common-selector uagb-block-bb910256 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-536763e4 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><h1 class=\"uagb-ifb-title\">Useless Pickles&#8217;<br>Personal Projects<\/h1><\/div><p class=\"uagb-ifb-desc\">Professional Software Engineer.<br>Amateur Electronics Engineer, Auto Mechanic, Warranty Voider.<br><\/p><\/div><\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uag-blocks-common-selector uagb-block-35bb6b1c alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-d4c93922 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><h2 class=\"uagb-ifb-title\">What is &#8220;Useless Pickles&#8221;?<\/h2><\/div><\/div><\/div><\/div>\n\n\n\n<p class=\"has-ast-global-color-5-color has-text-color has-link-color wp-elements-6dadebb4e643fd6282e475b3f5a26fc1\">&#8220;Useless Pickles&#8221; is the internet user name of a passionate software engineer with over 20 years of professional experience, primarily specializing in front-end web development. Driven by curiosity and a fascination with developing innovative solutions to complex problems, he has also amassed a wide variety of personal projects ranging from electronics and microcontroller programming, to automotive modification, diagnosis, and restoration. This page is collection of some of these personal passion projects.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uag-blocks-common-selector uagb-block-35f90cf8 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-bf47a2d1 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><h2 class=\"uagb-ifb-title\">Microcontroller \/ Electronics Projects<\/h2><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uagb-layout-flex uagb-block-dbf68499 alignfull uagb-is-root-container\">\n<div class=\"wp-block-uagb-info-box uagb-block-145f91ed uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/IMG_9242-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">Car Phone Bluetooth Conversion<\/h4><\/div><p class=\"uagb-ifb-desc\">I converted a vintage car phone to be fully functional on modern cellular networks via a Bluetooth connection to a modern cell phone. This involved reverse-engineering the handset so I could develop custom hardware and software to completely take control of the handset, and re-implement much of the original behavior from scratch.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/portfolio\/vintage-car-phone-bluetooth-conversion\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Read More<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-03769f40 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/Power-Wheels.jpg\" alt=\"\" width=\"960\" height=\"720\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">Proportional Throttle on a Power Wheels<\/h4><\/div><p class=\"uagb-ifb-desc\">Power Wheels have on\/off switches for throttle control. My kids deserve better. I modified the Power Wheels to have smooth fully proportional throttle control, using custom electronics, microcontroller programming, and a speed controller for R\/C cars.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/portfolio\/proportional-throttle-on-a-power-wheels\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Read More<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-23485b1c uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/IMG_3400-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">Motorcycle Fuel Map Switching<\/h4><\/div><p class=\"uagb-ifb-desc\">I programmed a microcontroller to detect when I am cruising fairly steadily on my motorcycle and automatically trigger an after-market fuel tuning system to switch between two fuel maps: one for smooth power, the other for better fuel economy.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/portfolio\/motorcycle-fuel-map-switching\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Read More<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uag-blocks-common-selector uagb-block-b20e854d alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-9409d4d2 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><h2 class=\"uagb-ifb-title\">Open Source Libraries<\/h2><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uagb-layout-flex uagb-block-0f878c9b alignfull uagb-is-root-container\">\n<div class=\"wp-block-uagb-info-box uagb-block-6b5bea2a uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/ts-logo-256.svg\" alt=\"\" width=\"256\" height=\"256\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">ts-enum-util<\/h4><\/div><p class=\"uagb-ifb-desc\">Strictly typed utilities for working with TypeScript enums (and string\/number literal union types).<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/github.com\/UselessPickles\/ts-enum-util\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_blank\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">View on GitHub<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 496 512\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-30280fad uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/ts-logo-256.svg\" alt=\"\" width=\"256\" height=\"256\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">strictly-typed-events<\/h4><\/div><p class=\"uagb-ifb-desc\">An Event emitting\/subscription library designed for simplicity, convenience, and type-safety in TypeScript projects.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/github.com\/UselessPickles\/strictly-typed-events\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_blank\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">View on GitHub<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 496 512\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-uagb-container uagb-layout-flex uagb-block-f1475c90 alignfull uagb-is-root-container\">\n<div class=\"wp-block-uagb-info-box uagb-block-a97d2c94 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/ts-logo-256.svg\" alt=\"\" width=\"256\" height=\"256\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">promise-delegate<\/h4><\/div><p class=\"uagb-ifb-desc\">A simple type-safe wrapper around a\u00a0<code>Promise<\/code>\u00a0that provides an object-oriented interface for settling (resolving\/rejecting) the promise. Particularly useful for mocking promise return values of functions in unit tests.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/github.com\/UselessPickles\/promise-delegate\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_blank\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">View on GitHub<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 496 512\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-b99affac uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/ts-logo-256.svg\" alt=\"\" width=\"256\" height=\"256\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">ts-stopwatch<\/h4><\/div><p class=\"uagb-ifb-desc\">A stopwatch-inspired timer utility for measuring durations of time between different points of execution in code.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/github.com\/UselessPickles\/ts-stopwatch\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_blank\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">View on GitHub<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 496 512\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uag-blocks-common-selector uagb-block-57c71cf0 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-5e124462 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><h2 class=\"uagb-ifb-title\">Old Web Development Projects\/Demos<\/h2><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uagb-block-1cfefff8 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-a42a5cef uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/MMBA-Trail-Guide-Map-Only.png\" alt=\"\" width=\"706\" height=\"587\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">Mountain Biking Trail Guide<\/h4><\/div><p class=\"uagb-ifb-desc\">In 2012, I was struggling to find mountain biking trails in my area. So I developed an interactive map-based trail guide for the Michigan Mountain Biking Association as a volunteer project. Built with the Google Maps API.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/portfolio\/mountain-biking-trail-guide\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Read More<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-69de6364 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/triangles-e1742787551561.png\" alt=\"\" width=\"398\" height=\"335\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">Efficient Triangles from DIV+CSS<\/h4><\/div><p class=\"uagb-ifb-desc\">A demonstration of rendering arbitrary triangles using borders of DIVs. Presented as a simple real-time 3D rendering engine. This was in 2006 before WebGL and widespread availability of Canvas. Warning: this is an old ugly web page.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/triangles\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">See it in Action<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-15fbde87 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/balls.png\" alt=\"\" width=\"386\" height=\"314\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">JavaScript Ball Physics Simulation<\/h4><\/div><p class=\"uagb-ifb-desc\">Throw balls around and experiment with the effects of gravitational force between objects, elasticity, rolling friction and viscosity. Implemented with HTML\/JS\/CSS only, of course. This was my &#8220;experimenting with web development&#8221; project in 2005. Warning: not touch-screen friendly.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/jsballs\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Try It<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uag-blocks-common-selector uagb-block-39b21959 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-a5a36348 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><h2 class=\"uagb-ifb-title\">I Still Play With Cars<\/h2><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uagb-block-2c206d59 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-08e6440b uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/IMG_7888-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">Turbocharged 2013 Jeep Wrangler<\/h4><\/div><p class=\"uagb-ifb-desc\">A modified daily driver and off-road toy.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/portfolio\/turbocharged-2013-jeep-wrangler\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Read More<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-6ac2f3f8 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/IMG_9251-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">Turbocharged 1995 Mazda Miata<\/h4><\/div><p class=\"uagb-ifb-desc\">A modified summer-time cruiser and occasional racecar.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/portfolio\/turbocharged-1995-mazda-miata\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Read More<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-info-box uagb-block-21d116cb uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-image-content\"><img decoding=\"async\" src=\"https:\/\/www.uselesspickles.com\/portfolio\/wp-content\/uploads\/2025\/03\/IMG_5523-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1920\" loading=\"lazy\"\/><\/div><div class=\"uagb-ifb-title-wrap\"><h4 class=\"uagb-ifb-title\">1993 Mitsubishi 3000GT VR4<\/h4><\/div><p class=\"uagb-ifb-desc\">A time capsule of early 90&#8217;s advanced technology.<\/p><div class=\"uagb-ifb-button-wrapper wp-block-button\"><a href=\"https:\/\/www.uselesspickles.com\/portfolio\/1993-mitsubishi-3000gt-vr4\/\" class=\"uagb-infobox-cta-link wp-block-button__link\" target=\"_self\" rel=\"noopener noreferrer\" onclick=\"return true;\"><span class=\"uagb-inline-editing\">Read More<\/span><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M502.6 278.6l-128 128c-12.51 12.51-32.76 12.49-45.25 0c-12.5-12.5-12.5-32.75 0-45.25L402.8 288H32C14.31 288 0 273.7 0 255.1S14.31 224 32 224h370.8l-73.38-73.38c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l128 128C515.1 245.9 515.1 266.1 502.6 278.6z\"><\/path><\/svg><\/a><\/div><\/div><\/div><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-uagb-container uag-blocks-common-selector uagb-block-ac014eb3 alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-uagb-info-box uagb-block-4d50fd47 uagb-infobox__content-wrap  uagb-infobox-icon-above-title uagb-infobox-image-valign-top wp-block-uagb-info-box--has-margin\"><div class=\"uagb-infobox-margin-wrapper\"><div class=\"uagb-ifb-content\"><div class=\"uagb-ifb-title-wrap\"><h2 class=\"uagb-ifb-title\">Social Links<\/h2><\/div><\/div><\/div><\/div>\n\n\n\n<ul class=\"wp-block-social-links has-visible-labels has-icon-color has-icon-background-color is-style-pill-shape is-horizontal is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-ecd33c62 wp-block-social-links-is-layout-flex\"><li style=\"color:var(--ast-global-color-5);background-color:var(--ast-global-color-0);\" class=\"wp-social-link wp-social-link-youtube has-ast-global-color-5-color wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/@UselessPickles\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label\">YouTube<\/span><\/a><\/li>\n\n<li style=\"color:var(--ast-global-color-5);background-color:var(--ast-global-color-0);\" class=\"wp-social-link wp-social-link-instagram has-ast-global-color-5-color wp-block-social-link\"><a href=\"https:\/\/www.instagram.com\/uselesspickles\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,4.622c2.403,0,2.688,0.009,3.637,0.052c0.877,0.04,1.354,0.187,1.671,0.31c0.42,0.163,0.72,0.358,1.035,0.673 c0.315,0.315,0.51,0.615,0.673,1.035c0.123,0.317,0.27,0.794,0.31,1.671c0.043,0.949,0.052,1.234,0.052,3.637 s-0.009,2.688-0.052,3.637c-0.04,0.877-0.187,1.354-0.31,1.671c-0.163,0.42-0.358,0.72-0.673,1.035 c-0.315,0.315-0.615,0.51-1.035,0.673c-0.317,0.123-0.794,0.27-1.671,0.31c-0.949,0.043-1.233,0.052-3.637,0.052 s-2.688-0.009-3.637-0.052c-0.877-0.04-1.354-0.187-1.671-0.31c-0.42-0.163-0.72-0.358-1.035-0.673 c-0.315-0.315-0.51-0.615-0.673-1.035c-0.123-0.317-0.27-0.794-0.31-1.671C4.631,14.688,4.622,14.403,4.622,12 s0.009-2.688,0.052-3.637c0.04-0.877,0.187-1.354,0.31-1.671c0.163-0.42,0.358-0.72,0.673-1.035 c0.315-0.315,0.615-0.51,1.035-0.673c0.317-0.123,0.794-0.27,1.671-0.31C9.312,4.631,9.597,4.622,12,4.622 M12,3 C9.556,3,9.249,3.01,8.289,3.054C7.331,3.098,6.677,3.25,6.105,3.472C5.513,3.702,5.011,4.01,4.511,4.511 c-0.5,0.5-0.808,1.002-1.038,1.594C3.25,6.677,3.098,7.331,3.054,8.289C3.01,9.249,3,9.556,3,12c0,2.444,0.01,2.751,0.054,3.711 c0.044,0.958,0.196,1.612,0.418,2.185c0.23,0.592,0.538,1.094,1.038,1.594c0.5,0.5,1.002,0.808,1.594,1.038 c0.572,0.222,1.227,0.375,2.185,0.418C9.249,20.99,9.556,21,12,21s2.751-0.01,3.711-0.054c0.958-0.044,1.612-0.196,2.185-0.418 c0.592-0.23,1.094-0.538,1.594-1.038c0.5-0.5,0.808-1.002,1.038-1.594c0.222-0.572,0.375-1.227,0.418-2.185 C20.99,14.751,21,14.444,21,12s-0.01-2.751-0.054-3.711c-0.044-0.958-0.196-1.612-0.418-2.185c-0.23-0.592-0.538-1.094-1.038-1.594 c-0.5-0.5-1.002-0.808-1.594-1.038c-0.572-0.222-1.227-0.375-2.185-0.418C14.751,3.01,14.444,3,12,3L12,3z M12,7.378 c-2.552,0-4.622,2.069-4.622,4.622S9.448,16.622,12,16.622s4.622-2.069,4.622-4.622S14.552,7.378,12,7.378z M12,15 c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S13.657,15,12,15z M16.804,6.116c-0.596,0-1.08,0.484-1.08,1.08 s0.484,1.08,1.08,1.08c0.596,0,1.08-0.484,1.08-1.08S17.401,6.116,16.804,6.116z\"><\/path><\/svg><span class=\"wp-block-social-link-label\">Instagram<\/span><\/a><\/li>\n\n<li style=\"color:var(--ast-global-color-5);background-color:var(--ast-global-color-0);\" class=\"wp-social-link wp-social-link-tiktok has-ast-global-color-5-color wp-block-social-link\"><a href=\"https:\/\/www.tiktok.com\/@uselesspickles\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M16.708 0.027c1.745-0.027 3.48-0.011 5.213-0.027 0.105 2.041 0.839 4.12 2.333 5.563 1.491 1.479 3.6 2.156 5.652 2.385v5.369c-1.923-0.063-3.855-0.463-5.6-1.291-0.76-0.344-1.468-0.787-2.161-1.24-0.009 3.896 0.016 7.787-0.025 11.667-0.104 1.864-0.719 3.719-1.803 5.255-1.744 2.557-4.771 4.224-7.88 4.276-1.907 0.109-3.812-0.411-5.437-1.369-2.693-1.588-4.588-4.495-4.864-7.615-0.032-0.667-0.043-1.333-0.016-1.984 0.24-2.537 1.495-4.964 3.443-6.615 2.208-1.923 5.301-2.839 8.197-2.297 0.027 1.975-0.052 3.948-0.052 5.923-1.323-0.428-2.869-0.308-4.025 0.495-0.844 0.547-1.485 1.385-1.819 2.333-0.276 0.676-0.197 1.427-0.181 2.145 0.317 2.188 2.421 4.027 4.667 3.828 1.489-0.016 2.916-0.88 3.692-2.145 0.251-0.443 0.532-0.896 0.547-1.417 0.131-2.385 0.079-4.76 0.095-7.145 0.011-5.375-0.016-10.735 0.025-16.093z\" \/><\/svg><span class=\"wp-block-social-link-label\">TikTok<\/span><\/a><\/li>\n\n<li style=\"color:var(--ast-global-color-5);background-color:var(--ast-global-color-0);\" class=\"wp-social-link wp-social-link-github has-ast-global-color-5-color wp-block-social-link\"><a href=\"https:\/\/github.com\/UselessPickles\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label\">GitHub<\/span><\/a><\/li>\n\n<li style=\"color:var(--ast-global-color-5);background-color:var(--ast-global-color-0);\" class=\"wp-social-link wp-social-link-facebook has-ast-global-color-5-color wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/UselessPickles\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label\">Facebook<\/span><\/a><\/li>\n\n<li style=\"color:var(--ast-global-color-5);background-color:var(--ast-global-color-0);\" class=\"wp-social-link wp-social-link-linkedin has-ast-global-color-5-color wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/in\/jefflau\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label\">LinkedIn<\/span><\/a><\/li><\/ul>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;Useless Pickles&#8221; is the internet user name of a passionate software engineer with over 20 years of professional experience, primarily specializing in front-end web development. Driven by curiosity and a fascination with developing innovative solutions to complex problems, he has also amassed a wide variety of personal projects ranging from electronics and microcontroller programming, to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"no-sidebar","site-content-layout":"plain-container","ast-site-content-layout":"normal-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"enabled","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-906","page","type-page","status-publish","hentry"],"aioseo_notices":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"UselessPickles","author_link":"https:\/\/www.uselesspickles.com\/portfolio\/author\/uselesspickles_hc12f0\/"},"uagb_comment_info":0,"uagb_excerpt":"&#8220;Useless Pickles&#8221; is the internet user name of a passionate software engineer with over 20 years of professional experience, primarily specializing in front-end web development. Driven by curiosity and a fascination with developing innovative solutions to complex problems, he has also amassed a wide variety of personal projects ranging from electronics and microcontroller programming, to&hellip;","_links":{"self":[{"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/pages\/906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/comments?post=906"}],"version-history":[{"count":9,"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/pages\/906\/revisions"}],"predecessor-version":[{"id":2676,"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/pages\/906\/revisions\/2676"}],"wp:attachment":[{"href":"https:\/\/www.uselesspickles.com\/portfolio\/wp-json\/wp\/v2\/media?parent=906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}