{"title":"DanLevy.net","description":"Come for the code, stay for the cats.","site":"https://danlevy.net/","items":[{"sourcePath":"open-source-journal","title":"Open Source Journal","pubDate":"2024-12-16T00:00:00.000Z","description":"A collection of open-source projects I've worked on.","categories":["Projects","open-source","projects"],"category":"Projects","cover":"../../images/social-banner.webp","slug":"open-source-journal","link":"/open-source-journal/"},{"sourcePath":"2026-01-30--llm-connection-strings","title":"It's Time for LLM Connection Strings","pubDate":"2026-01-30T00:00:00.000Z","description":"Simplify Model & Provider Config with `llm://` URLs","categories":["AI","ai","llm","api","developer-experience","standards"],"category":"AI","slug":"llm-connection-strings","link":"/llm-connection-strings/"},{"sourcePath":"2026-01-26--securing-clawdbot-tailscale","title":"Your AI Assistant Gave Me Shell Access","pubDate":"2026-01-15T00:00:00.000Z","description":"How to secure your local or VPS OpenClaw/Moltbot setup","categories":["Security","AI Infrastructure","security","moltbot","clawdbot","tailscale","ai","vpn","devops","ssh"],"category":"Security","slug":"securing-clawdbot-tailscale","link":"/securing-clawdbot-tailscale/"},{"sourcePath":"2026-01-06--ai-sdk-math-tool","title":"Stop Asking LLMs to Do Math","pubDate":"2026-01-06T00:00:00.000Z","description":"They are bad at it. Here is how to fix it.","categories":["AI","Engineering","AI","AI SDK","TypeScript","Math","Tools","Patterns"],"category":"AI","slug":"ai-sdk-math-tool","link":"/ai-sdk-math-tool/"},{"sourcePath":"2026-01-05--mastra-workflows-memory","title":"Stop Building Flaky Agents: Use Workflows & Memory","pubDate":"2026-01-05T00:00:00.000Z","description":"Deterministic patterns for non-deterministic models.","categories":["AI","Architecture","AI","Workflows","Memory","Mastra","Agent Networks","Orchestration"],"category":"AI","slug":"mastra-workflows-memory","link":"/mastra-workflows-memory/"},{"sourcePath":"2026-01-04--mastra-mcp-tool-integrations","title":"Your AI Agent is Useless Without This","pubDate":"2026-01-04T00:00:00.000Z","description":"Why MCP is the USB-C of Artificial Intelligence.","categories":["AI","Integration","AI","MCP","Tools","Integrations","Mastra","Salesforce","APIs"],"category":"AI","slug":"mastra-mcp-tool-integrations","link":"/mastra-mcp-tool-integrations/"},{"sourcePath":"2026-01-03--mastra-security-guardrails","title":"Production AI is Terrifying (And How to Fix It)","pubDate":"2026-01-03T00:00:00.000Z","description":"If your agent doesn't have guardrails, you aren't ready for production.","categories":["AI","Security","AI","Security","Mastra","Guardrails","Privacy","PII"],"category":"AI","slug":"mastra-security-guardrails","link":"/mastra-security-guardrails/"},{"sourcePath":"2026-01-02--llm-routing-mastra-ai","title":"Don't Marry Your Model","pubDate":"2026-01-02T00:00:00.000Z","description":"LLM Routing, so hot right now","categories":["AI","Engineering","AI","LLM","TypeScript","Mastra","Agent Orchestration"],"category":"AI","slug":"llm-routing-mastra-ai","link":"/llm-routing-mastra-ai/"},{"sourcePath":"2025-12-29--your-foreign-keys-are-killing-performance","title":"Foreign Keys: Stop Asking If They're Fast","pubDate":"2025-12-29T00:00:00.000Z","description":"Ask what you're actually optimizing for.","categories":["Code","Databases","postgres","postgresql","databases","performance","foreign-keys","constraints","indexing"],"category":"Code","slug":"your-foreign-keys-are-killing-performance","link":"/your-foreign-keys-are-killing-performance/"},{"sourcePath":"2025-12-29--weakmap-the-javascript-feature-you-dont-use","title":"Stop Leaking Memory with WeakMap","pubDate":"2025-12-29T00:00:00.000Z","description":"Fixing weak code with weak references!","categories":["Code","Best Practices","javascript","memory","garbage-collection","performance","patterns"],"category":"Code","slug":"weakmap-the-javascript-feature-you-dont-use","link":"/weakmap-the-javascript-feature-you-dont-use/"},{"sourcePath":"2025-12-29--the-jsonb-seduction","title":"JSONB: The Best Way to Ruin Your Database","pubDate":"2025-12-29T00:00:00.000Z","description":"JSONB is powerful, useful, and very easy to misuse when you let a blob become your real schema.","categories":["Code","Databases","postgres","postgresql","databases","jsonb","json","schema-design","technical-debt"],"category":"Code","slug":"the-jsonb-seduction","link":"/the-jsonb-seduction/"},{"sourcePath":"2025-12-29--the-8-byte-timestamp-that-destroyed-our-database","title":"Your Timestamp is a Lie","pubDate":"2025-12-29T00:00:00.000Z","description":"What a train ticket taught me about storing time in databases","categories":["Code","Databases","postgres","postgresql","databases","timestamps","timezones","microservices","debugging"],"category":"Code","slug":"the-8-byte-timestamp-that-destroyed-our-database","link":"/the-8-byte-timestamp-that-destroyed-our-database/"},{"sourcePath":"2025-12-29--async-stack-traces-why-error-stack-lies-in-production","title":"Async Stack Traces: Why `Error.stack` Lies to You","pubDate":"2025-12-29T00:00:00.000Z","description":"The microtask queue ate my homework (and my debugging context).","categories":["Code","Best Practices","javascript","async","debugging","node.js","v8","performance"],"category":"Code","slug":"async-stack-traces-why-error-stack-lies-in-production","link":"/async-stack-traces-why-error-stack-lies-in-production/"},{"sourcePath":"2025-11-04--quiz-advanced-js-error-mastery","title":"Quiz: Advanced JS Error Mastery","pubDate":"2025-11-03T00:00:00.000Z","description":"Are your exceptions truly exceptional?","categories":["Quiz","JavaScript","quiz","javascript","error-handling","debugging","advanced"],"category":"Quiz","slug":"quiz-advanced-js-error-mastery","link":"/quiz-advanced-js-error-mastery/"},{"sourcePath":"2025-09-15--serverless-database-magic","title":"2025's Wave of Database Innovation","pubDate":"2025-09-10T00:00:00.000Z","description":"You can thank AI.","categories":["Search","Databases","serverless","databases","AI","innovation","chroma","lanceDB","pagefind","orama","duckdb"],"category":"Search","slug":"serverless-database-magic","link":"/serverless-database-magic/"},{"sourcePath":"2025-09-10--patchy-with-a-chance-of-vulnerability","title":"Who put vulns in my patch?","pubDate":"2025-09-10T00:00:00.000Z","description":"Why updates can't save you","categories":["Security","Vulnerability Management","security","patches","software-updates","risk-management","enterprise-it"],"category":"Security","slug":"patchy-with-a-chance-of-vulnerability","link":"/patchy-with-a-chance-of-vulnerability/"},{"sourcePath":"2025-05-31--the-last-to-think","title":"The Last to Think","pubDate":"2025-05-31T00:00:00.000Z","description":"Human or Machine?","categories":["AI","Policy","edtech","education","technology","history"],"category":"AI","slug":"the-last-to-think","link":"/the-last-to-think/"},{"sourcePath":"2025-04-03--beware-the-single-purpose-people","title":"Beware the Single-Purpose People","pubDate":"2025-04-14T00:00:00.000Z","description":"So pure it hurts","categories":["Code","Best Practices","software development","code organization","maintainability","testing","dogma","pragmatism"],"category":"Code","slug":"beware-the-single-purpose-people","link":"/beware-the-single-purpose-people/"},{"sourcePath":"2025-03-01--you-might-not-need-algolia","title":"You May Not Need Algolia™","pubDate":"2025-03-01T00:00:00.000Z","description":"Is PageFind the Open Source Algolia™ Killer?","categories":["Search","site-search","algolia","pagefind","search","cdn"],"category":"Search","slug":"you-might-not-need-algolia","link":"/you-might-not-need-algolia/"},{"sourcePath":"2025-01-05--docker-security-tips-for-self-hosting","title":"Essential Docker Security Tips for Self-Hosting","pubDate":"2025-01-04T00:00:00.000Z","description":"Secure your self-hosted services, from defense to monitoring!","categories":["Security","docker","security","devops","containers","best-practices"],"category":"Security","slug":"docker-security-tips-for-self-hosting","link":"/docker-security-tips-for-self-hosting/"},{"sourcePath":"2025-01-01--the-unassuming-power-of-multiple-choice-questions","title":"The Unassuming Power of Multiple-Choice Questions","pubDate":"2025-01-01T00:00:00.000Z","description":"How to Harness the Full Potential of MCQs in Education","categories":["Instructional Design","Teaching","education","assessment","learning","multiple-choice-questions"],"category":"Instructional Design","slug":"the-unassuming-power-of-multiple-choice-questions","link":"/the-unassuming-power-of-multiple-choice-questions/"},{"sourcePath":"2024-12-29--from-zero-to-regex-hero-extract-url-like-strings","title":"From Zero to Regex Hero","pubDate":"2024-12-29T00:00:00.000Z","description":"Extract & Parse URL-like Strings with a Single Regex","categories":["Regex","Data Extraction","regex","url","data-extraction","data-processing"],"category":"Regex","slug":"from-zero-to-regex-hero-extract-url-like-strings","link":"/from-zero-to-regex-hero-extract-url-like-strings/"},{"sourcePath":"2024-12-28--quiz-is-your-memory-rusty","title":"Quiz: Essential Rust Memory Management","pubDate":"2024-12-28T00:00:00.000Z","description":"(Borrow) check yo self before you wreck yo self! 🦀","categories":["Quiz","Rust","quiz","rust","memory-management","ownership","borrowing","lifetimes","intermediate","advanced"],"category":"Quiz","slug":"quiz-is-your-memory-rusty","link":"/quiz-is-your-memory-rusty/"},{"sourcePath":"2024-12-28--quiz-in-the-aws-cloud","title":"Quiz: AWS Storage: 20+ Questions!","pubDate":"2024-12-28T00:00:00.000Z","description":"Can you navigate the cloud labyrinth?","categories":["Quiz","Cloud","quiz","aws","cloud","storage","databases","s3","dynamodb","rds","elasticache"],"category":"Quiz","slug":"quiz-in-the-aws-cloud","link":"/quiz-in-the-aws-cloud/"},{"sourcePath":"2024-12-05--replacing-my-job-with-gpt-and-llm","title":"Replacing Myself with AI","pubDate":"2024-12-04T00:00:00.000Z","description":"How I learned to stop worrying and love the GPT.","categories":["AI","Machine Learning","ai","gpt","llm","machine-learning","nlp","automation"],"category":"AI","slug":"replacing-my-job-with-gpt-and-llm","link":"/replacing-my-job-with-gpt-and-llm/"},{"sourcePath":"2024-11-28--quiz-postgres-sql-mastery-pt2","title":"Quiz: Deep Postgres: Pt. 2","pubDate":"2024-11-28T00:00:00.000Z","description":"Are you SQL Steele? Or a SQL Softie?","categories":["Quiz","Database","quiz","postgresql","sql","database","intermediate","advanced"],"category":"Quiz","slug":"quiz-postgres-sql-mastery-pt2","link":"/quiz-postgres-sql-mastery-pt2/"},{"sourcePath":"2024-11-27--quiz-postgres-sql-mastery-pt1","title":"Quiz: Deep Postgres: Pt. 1","pubDate":"2024-11-27T00:00:00.000Z","description":"Does SQL make you squeal?","categories":["Quiz","Database","quiz","postgresql","sql","database","intermediate","advanced"],"category":"Quiz","slug":"quiz-postgres-sql-mastery-pt1","link":"/quiz-postgres-sql-mastery-pt1/"},{"sourcePath":"2024-11-20--quiz-bash-in-the-shell","title":"Quiz: Bash & Shell Mastery","pubDate":"2024-11-20T00:00:00.000Z","description":"Can you talk to computers? Like, well?","categories":["Quiz","Bash","quiz","bash","scripting","shell","linux","beginner","intermediate","advanced"],"category":"Quiz","slug":"quiz-bash-in-the-shell","link":"/quiz-bash-in-the-shell/"},{"sourcePath":"2024-11-15--quiz-regex-or-wreckage","title":"Quiz: Regular Expressions Mastery","pubDate":"2024-11-15T00:00:00.000Z","description":"Can you tame some wild RegEx?","categories":["Quiz","RegEx","quiz","regex","javascript","intermediate","patterns"],"category":"Quiz","slug":"quiz-regex-or-wreckage","link":"/quiz-regex-or-wreckage/"},{"sourcePath":"2024-11-15--quiz-nodejs-files-streams-buffers-oh-my","title":"Quiz: NodeJS IO Mastery","pubDate":"2024-11-15T00:00:00.000Z","description":"Test your knowledge of files, streams & buffers","categories":["Quiz","NodeJS","quiz","nodejs","io","streams","buffers","filesystem","intermediate"],"category":"Quiz","slug":"quiz-nodejs-files-streams-buffers-oh-my","link":"/quiz-nodejs-files-streams-buffers-oh-my/"},{"sourcePath":"2024-11-12--quiz-destructuring-delights","title":"Quiz: Destructuring Delights","pubDate":"2024-11-12T00:00:00.000Z","description":"Are you a maestro of Destructuring?","categories":["Quiz","JavaScript","quiz","intro","javascript","es2015","destructuring","beginner","intermediate"],"category":"Quiz","slug":"quiz-destructuring-delights","link":"/quiz-destructuring-delights/"},{"sourcePath":"2024-11-08--quiz-sql-query-fundamentals","title":"Quiz: Prove your SQL Skills!","pubDate":"2024-11-08T00:00:00.000Z","description":"Are you team SQL? Or noSQL?","categories":["Quiz","Database","quiz","intro","sql","core","fundamentals","beginner","intermediate"],"category":"Quiz","slug":"quiz-sql-query-fundamentals","link":"/quiz-sql-query-fundamentals/"},{"sourcePath":"2024-11-08--quiz-css-core-fundamentals","title":"Quiz: Do You know CSS fundamentals? (2025)","pubDate":"2024-11-08T00:00:00.000Z","description":"Are you front-end enough?","categories":["Quiz","CSS","quiz","intro","css","styles","beginner","intermediate"],"category":"Quiz","slug":"quiz-css-core-fundamentals","link":"/quiz-css-core-fundamentals/"},{"sourcePath":"2024-11-07--quiz-modern-css-2025","title":"Quiz: Do You know Modern CSS? (for 2025)","pubDate":"2024-10-31T00:00:00.000Z","description":"Are you front-end enough?","categories":["Quiz","CSS","quiz","css","advanced","intermediate"],"category":"Quiz","slug":"quiz-modern-css-2025","link":"/quiz-modern-css-2025/"},{"sourcePath":"2024-11-06--quiz-can-you-count-to-bigint","title":"Quiz: Can you count on JavaScript?","pubDate":"2024-10-31T00:00:00.000Z","description":"Know your `parseInt` from `parseFloat`?","categories":["Quiz","JavaScript","quiz","data-structures","algorithms"],"category":"Quiz","cover":"/_astro/victor-freitas-hOuJYX2K5DA-unsplash-square.kitpE3Mn.webp","slug":"quiz-can-you-count-to-bigint","link":"/quiz-can-you-count-to-bigint/"},{"sourcePath":"2024-11-01--quiz-master-modern-html5","title":"Quiz: Does HTML still belong on your résumé?","pubDate":"2024-10-31T00:00:00.000Z","description":"Prove yourself!","categories":["Quiz","HTML","quiz","web","quiz","semantic","html5","web","beginner","intermediate"],"category":"Quiz","slug":"quiz-master-modern-html5","link":"/quiz-master-modern-html5/"},{"sourcePath":"2024-10-31--quiz-js-interfaces-symbols-and-enumerables","title":"Quiz: Symbols & Enumerables","pubDate":"2024-10-31T00:00:00.000Z","description":"Do you know the less-famous bits of ES2015?","categories":["Quiz","JavaScript","quiz","javascript","interfaces","symbols","enumerables"],"category":"Quiz","slug":"quiz-js-interfaces-symbols-and-enumerables","link":"/quiz-js-interfaces-symbols-and-enumerables/"},{"sourcePath":"2024-10-31--quiz-do-you-know-esnext","title":"Quiz: Do You Know Modern JavaScript?","pubDate":"2024-10-31T00:00:00.000Z","description":"Prove your esteemed JavaScript skillz!","categories":["Quiz","JavaScript","quiz","javascript","intro","esnext","features","intermediate"],"category":"Quiz","slug":"quiz-do-you-know-esnext","link":"/quiz-do-you-know-esnext/"},{"sourcePath":"2024-10-31--quiz-data-structures-algorithms","title":"Quiz: Data Structures & Algorithms","pubDate":"2024-10-31T00:00:00.000Z","description":"Can you BS a Binary Tree?","categories":["Quiz","Data Structures","quiz","data-structures","algorithms","intermediate","advanced"],"category":"Quiz","cover":"/_astro/redcharlie-mugDbuNnbd0-unsplash-square.CeuhYwY0.webp","slug":"quiz-data-structures-algorithms","link":"/quiz-data-structures-algorithms/"},{"sourcePath":"2024-10-23--honest-priorities","title":"The Priority Trap","pubDate":"2024-10-23T00:00:00.000Z","description":"Is Multiple Choice the Best Choice?","categories":["Thoughts","Agile","agile","leadership","priority","backlog","jira"],"category":"Thoughts","cover":"/_astro/new-priority-city.Bq5Q-71D.webp","slug":"honest-priorities","link":"/honest-priorities/"},{"sourcePath":"2024-09-29--one-weird-trick-to-speed-up-feature-teams","title":"One weird trick to speed up feature teams!","pubDate":"2024-09-29T00:00:00.000Z","description":"Staff engineers hate this!","categories":["Engineering","agile","teams"],"category":"Engineering","slug":"one-weird-trick-to-speed-up-feature-teams","link":"/one-weird-trick-to-speed-up-feature-teams/"},{"sourcePath":"2024-09-01--breaking-unicorns","title":"How to lose a billion dollars super fast","pubDate":"2024-09-25T00:00:00.000Z","description":"Breaking Unicorns","categories":["Lulz","Thoughts","breaking-unicorns","startup","satire","silicon valley"],"category":"Lulz","cover":"/_astro/your-score-zero.2xulyJlc.webp","slug":"breaking-unicorns","link":"/breaking-unicorns/"},{"sourcePath":"2024-08-29--handling-international-numbers-and-currency","title":"Understanding International Numbers & Currency","pubDate":"2024-08-28T00:00:00.000Z","description":"Localized money explained!","categories":["HowTo","Internationalization","engineering","internationalization","localization","currency","numbers"],"category":"HowTo","slug":"handling-international-numbers-and-currency","link":"/handling-international-numbers-and-currency/"},{"sourcePath":"2024-08-22--upgrade-from-gatsby-to-astro","title":"Lessons Learned Upgrading My Blog","pubDate":"2024-08-21T00:00:00.000Z","description":"Astro, Tailwind, MDX, Pagefind, and more!","categories":["Guides","astro","tailwind","mdx","pagefind","gatsby"],"category":"Guides","cover":"/_astro/galaxy-contribution-mode.DLmQO1SD.webp","slug":"upgrade-from-gatsby-to-astro","link":"/upgrade-from-gatsby-to-astro/"},{"sourcePath":"2024-01-16--contribute-to-open-source-the-easy-way","title":"Become an Open Source Millionaire*","pubDate":"2024-01-16T00:00:00.000Z","description":"In 3 Simple Steps...","categories":["Guides","Open Source","engineering","open source","oss"],"category":"Guides","cover":"/_astro/open-source-high-life-slice.DdxqZPa_.webp","slug":"contribute-to-open-source-the-easy-way","link":"/contribute-to-open-source-the-easy-way/"},{"sourcePath":"2023-09-06--guerrilla-types-in-typescript","title":"Guerrilla Types in TypeScript","pubDate":"2023-09-05T00:00:00.000Z","description":"Renegade Type Design","categories":["Guides","TypeScript","engineering","typescript","composition","types"],"category":"Guides","cover":"/_astro/gorilla-types_dall-e.BdcNwRQG.webp","slug":"guerrilla-types-in-typescript","link":"/guerrilla-types-in-typescript/"},{"sourcePath":"2023-08-28--deathmatch-git-rebase-vs-merge","title":"Deathmatch: Git Rebase vs. Merge","pubDate":"2023-08-27T00:00:00.000Z","description":"A timeless question...","categories":["Thoughts","Git","engineering","git","rebase","merge"],"category":"Thoughts","cover":"/_astro/casper-johansson-GBHnQXbY2Ts-unsplash-cropped.Bz6uMsW1.webp","slug":"deathmatch-git-rebase-vs-merge","link":"/deathmatch-git-rebase-vs-merge/"},{"sourcePath":"2023-08-18--should-you-use-named-or-default-exports","title":"ESM exports: named vs. default?","pubDate":"2023-08-10T00:00:00.000Z","description":"To name, or not to name?","categories":["Guides","JavaScript","typescript","javascript","modules"],"category":"Guides","cover":"/_astro/austin-kirk-cHX_Eih2hkY-unsplash-cropped.H60mqZBi.webp","slug":"should-you-use-named-or-default-exports","link":"/should-you-use-named-or-default-exports/"},{"sourcePath":"2023-08-13--mastering-functional-pipelines-passing-state","title":"Master of Pipelines: Passing State","pubDate":"2023-08-09T00:00:00.000Z","description":"Hello Closure, My Old Friend.","categories":["Guides","JavaScript","typescript","closure","stateful","scoping","hoisting","functional","pipeline"],"category":"Guides","cover":"/_astro/sven-kucinic-LxYxC6jdjcA-unsplash-cropped-1200.DxLJlSgB.webp","slug":"mastering-functional-pipelines-passing-state","link":"/mastering-functional-pipelines-passing-state/"},{"sourcePath":"2021-03-03--the-4-pillars-of-collaborative-culture","title":"The 4 Pillars of Collaborative Culture","pubDate":"2021-04-03T00:00:00.000Z","description":"Safety, Speed, Clarity and Commitment.","categories":["Leadership","culture","collaborative-culture","culture","teams","growth","personal-development"],"category":"Leadership","cover":"/_astro/pexels-fauxels-3184430-cropped.Cg11gJTO.webp","slug":"the-4-pillars-of-collaborative-culture","link":"/the-4-pillars-of-collaborative-culture/"},{"sourcePath":"2021-03-03--creating-collaborative-culture","title":"Creating Collaborative Culture","pubDate":"2021-01-01T00:00:00.000Z","description":"Unlock your teams' creativity!","categories":["Leadership","culture","collaborative-culture","culture","teams","growth","personal-development"],"category":"Leadership","cover":"/_astro/pexels-photo-3184431--cropped.BlPVUhB-.webp","slug":"creating-collaborative-culture","link":"/creating-collaborative-culture/"},{"sourcePath":"2020-01-02--js-quiz-14-date-time-questions-test-your-knowledge","title":"Quiz: 14 JavaScript Date Questions","pubDate":"2020-01-02T00:00:00.000Z","description":"Learn to impress at parties with JS trivia! ✨","categories":["Quiz","JavaScript","quiz","javascript","date","date class","gotchas","challenge","intermediate"],"category":"Quiz","cover":"/_astro/pocket-watch.alzwQKy-.webp","slug":"js-quiz-14-date-time-questions-test-your-knowledge","link":"/js-quiz-14-date-time-questions-test-your-knowledge/"},{"sourcePath":"2019-11-26--javascript-promises-quiz","title":"Quiz: 9 JavaScript Promise Questions","pubDate":"2019-11-26T00:00:00.000Z","description":"Never drop a promise again!","categories":["Quiz","JavaScript","promises","programming","async","javascript","guides","quiz","intermediate"],"category":"Quiz","cover":"/_astro/olav-ahrens-rotne-jvBXiynINGE-resized.BaGJBC2i.webp","slug":"javascript-promises-quiz","link":"/javascript-promises-quiz/"},{"sourcePath":"2018-11-15--you-may-not-need-axios","title":"You may not need Axios","pubDate":"2018-11-14T00:00:00.000Z","description":"Fetch API to the rescue!","categories":["Guides","fetch","programming","patterns","examples","nodejs","javascript","promises","axios","fetch"],"category":"Guides","cover":"/_astro/brock-dupont-575648-unsplash.C3yXw2qW.webp","slug":"you-may-not-need-axios","link":"/you-may-not-need-axios/"},{"sourcePath":"2018-11-14--securely-using-environment-variables-in-nodejs","title":"Using Environment Variables in NodeJS","pubDate":"2018-11-13T00:00:00.000Z","description":"Using `dotenv`","categories":["Code","howto","dotenv","api-keys","secrets","tokens","security","nodejs"],"category":"Code","cover":"/_astro/john-salvino-417565-unsplash.DOfqkoAX.webp","slug":"securely-using-environment-variables-in-nodejs","link":"/securely-using-environment-variables-in-nodejs/"},{"sourcePath":"2018-10-27--protect-your-tokens","title":"Protecting Your Tokens, API Keys and Secrets","pubDate":"2018-10-27T00:00:00.000Z","description":"Public? Private? Wat?","categories":["Guides","security","tokens","api-keys","secrets","security","nodejs","json-web-tokens"],"category":"Guides","cover":"/_astro/dayne-topkin-78982-unsplash.CYzz3dFb.webp","slug":"protect-your-tokens","link":"/protect-your-tokens/"},{"sourcePath":"2018-10-06--are-promises-broken","title":"Broken Promises?","pubDate":"2018-10-06T00:00:00.000Z","description":"Dropping errors, losing results...","categories":["Code","promises","promises","javascript","errors","programming"],"category":"Code","cover":"/_astro/lennart-heim-766366-unsplash.xE39hN4K.webp","slug":"are-promises-broken","link":"/are-promises-broken/"},{"sourcePath":"2018-10-03--stop-trying-to-make-async-await-happen","title":"Stop trying to make async/await happen","pubDate":"2018-10-03T00:00:00.000Z","description":"Promises are so fetch right now","categories":["Guides","promises","promises","async","await","async-await","javascript","composition"],"category":"Guides","cover":"/_astro/matt-nelson-414464-unsplash.BVeLdd4E.webp","slug":"stop-trying-to-make-async-await-happen","link":"/stop-trying-to-make-async-await-happen/"},{"sourcePath":"2018-09-30--visualizing-promises","title":"Visualizing Promises","pubDate":"2018-09-30T00:00:00.000Z","description":"Break on through...","categories":["Guides","promises","promises","async","visualizing","javascript","composition"],"category":"Guides","cover":"/_astro/junior-ferreira-735237-unsplash.DEVRYhvj.webp","slug":"visualizing-promises","link":"/visualizing-promises/"},{"sourcePath":"2018-09-26--promise-gotchas","title":"Promise Gotchas","pubDate":"2018-09-26T00:00:00.000Z","description":"Avoiding common mistakes","categories":["Code","promises","promises","async","debugging","errors","javascript","composition"],"category":"Code","cover":"/_astro/michal-parzuchowski-224092-unsplash.DvSO6aHL.webp","slug":"promise-gotchas","link":"/promise-gotchas/"},{"sourcePath":"2018-08-01--intro-to-promises","title":"Intro to Promises","pubDate":"2018-08-01T00:00:00.000Z","description":"JavaScript Promises Are Fun!","categories":["Code","promises","promises","async","javascript","composition"],"category":"Code","cover":"/_astro/joe-yates-480485-unsplash.CkcvbxBN.webp","slug":"intro-to-promises","link":"/intro-to-promises/"},{"sourcePath":"2017-05-10--pitfalls-in-promise-docs","title":"Pitfalls in Promise Docs","pubDate":"2017-05-10T00:00:00.000Z","description":"Avoiding issues from popular docs","categories":["Code","promises","programming","patterns","promises","functional river"],"category":"Code","cover":"/_astro/craig-whitehead-433328-unsplash.CS2iOZdJ.webp","slug":"pitfalls-in-promise-docs","link":"/pitfalls-in-promise-docs/"},{"sourcePath":"2017-05-01--linux-system-benchmark-scripts","title":"Linux Server Benchmarking Scripts","pubDate":"2017-05-01T00:00:00.000Z","description":"Quickly Benchmark CPU & HDD","categories":["DevOps","servers","benchmarks","servers","performance"],"category":"DevOps","cover":"/_astro/rod-long-1052613-unsplash.D6yFrar6.webp","slug":"linux-system-benchmark-scripts","link":"/linux-system-benchmark-scripts/"},{"sourcePath":"2017-04-15--compare-nvme-ssd-cloud-options","title":"Compare NVMe SSD Cloud Options","pubDate":"2017-04-15T00:00:00.000Z","description":"NVMe SSD Head-to-Head: AWS, DigitalOcean, Packet.net","categories":["DevOps","programming","cloud","servers","architecture","scaling","digital-ocean","amazon-web-services","google-cloud-engine","azure","packet.net","ovh.net","ssd","io"],"category":"DevOps","cover":"/_astro/solaiman-hossen-553024-unsplash.C-QJvdmI.webp","slug":"compare-nvme-ssd-cloud-options","link":"/compare-nvme-ssd-cloud-options/"},{"sourcePath":"2016-06-01--naming-things-real-good","title":"Naming things good","pubDate":"2016-06-01T00:00:00.000Z","description":"Naming stuff: Object Oriented Basics","categories":["Guides","programming","programming","patterns","naming","source code","organization"],"category":"Guides","cover":"/_astro/rawpixel-652639-unsplash.Rt4g4Xy5.webp","slug":"naming-things-real-good","link":"/naming-things-real-good/"},{"sourcePath":"2015-12-18--when-ai-fails-and-the-crashing-robot-cars","title":"When AI Fails & the Crashing Robotic Cars","pubDate":"2015-12-18T00:00:00.000Z","description":"Google's self-driving cars are in 2x as many accidents as human drivers","categories":["AI","machine-learning","artificial intelligence","ai","self-driving cars","fails"],"category":"AI","cover":"/_astro/sandy-millar-749381-unsplash.xZMy1eMW.webp","slug":"when-ai-fails-and-the-crashing-robot-cars","link":"/when-ai-fails-and-the-crashing-robot-cars/"},{"sourcePath":"2015-11-22--disable-transparent-hugepages","title":"MongoDB: Disable transparent huge pages","pubDate":"2015-12-22T00:00:00.000Z","description":"A fix for Debian/Ubuntu","categories":["DevOps","mongodb","devops","mongodb","performance","tuning"],"category":"DevOps","cover":"/_astro/victor-garcia-645096-unsplash.CdrHtLqc.webp","slug":"disable-transparent-hugepages","link":"/disable-transparent-hugepages/"},{"sourcePath":"2015-10-05--higher-order-programming","title":"Higher Order Programming","pubDate":"2015-09-22T00:00:00.000Z","description":"Exploring Array- and Set-based Pipeline Techniques","categories":["Code","programming","programming","patterns","models","source code","organization"],"category":"Code","cover":"/_astro/susan-holt-simpson-799094-unsplash.DoOreY8n.webp","slug":"higher-order-programming","link":"/higher-order-programming/"},{"sourcePath":"2015-08-05--angularjs-v2-impending-schism","title":"AngularJS v2.0 and the Impending Schism","pubDate":"2015-08-05T00:00:00.000Z","description":"Can it be avoided?","categories":["Thoughts","angularjs","programming","angularjs","javascript","python","opinion"],"category":"Thoughts","cover":"/_astro/alex-perez-753751-unsplash.DY0mk_iG.webp","slug":"angularjs-v2-impending-schism","link":"/angularjs-v2-impending-schism/"},{"sourcePath":"2015-06-11--docker-rocks","title":"Docker rocks & now works on OSX","pubDate":"2015-06-11T00:00:00.000Z","description":"Docker is amazing, fast, and flexible","categories":["DevOps","docker","docker","boot2docker","devops"],"category":"DevOps","cover":"/_astro/guillaume-bolduc-259596-unsplash.fLg-BaOX.webp","slug":"docker-rocks","link":"/docker-rocks/"},{"sourcePath":"2015-06-06--javascript-scope-magic","title":"JavaScript Magic","pubDate":"2015-06-06T00:00:00.000Z","description":"[draft] Imperative vs. Recursive vs. Functional","categories":["Code","javascript","javascript","programming","performance","patterns"],"category":"Code","cover":"/_astro/markus-spiske-197281-unsplash.D4j7MWhM.webp","slug":"javascript-scope-magic","link":"/javascript-scope-magic/"},{"sourcePath":"2015-06-06--docker-firewall-setup","title":"Docker Firewall Setup","pubDate":"2015-06-06T00:00:00.000Z","description":"Setup a Docker Host's Firewall","categories":["DevOps","docker","docker","security","devops"],"category":"DevOps","cover":"/_astro/charles-deluvio-456501-unsplash.DQDvYAad.webp","slug":"docker-firewall-setup","link":"/docker-firewall-setup/"},{"sourcePath":"2015-04-06--docker-server-setup-notes","title":"Docker Server Setup","pubDate":"2015-04-06T00:00:00.000Z","description":"Start Database Servers w/ single commands","categories":["DevOps","docker","devops","docker","server","postgres","mysql","mongodb","elasticsearch","setup","shell script"],"category":"DevOps","cover":"/_astro/markus-spiske-193031-unsplash.Do51GfKi.webp","slug":"docker-server-setup-notes","link":"/docker-server-setup-notes/"},{"sourcePath":"2015-03-12--docker-makes-everything-better","title":"Docker === Love","pubDate":"2015-02-26T00:00:00.000Z","description":"Docker can do :allthethings:!","categories":["DevOps","docker","docker","devops","patterns"],"category":"DevOps","cover":"/_astro/guillaume-bolduc-259596-unsplash.fLg-BaOX.webp","slug":"docker-makes-everything-better","link":"/docker-makes-everything-better/"},{"sourcePath":"2015-03-10--stop-the-angularjs-hate","title":"AngularJS Tricks","pubDate":"2015-02-26T00:00:00.000Z","description":"AngularJS CAN BE Fun!","categories":["Code","angularjs","angularjs","development","performance","programming"],"category":"Code","cover":"/_astro/sharon-mccutcheon-522851-unsplash.C-s8I9AL.webp","slug":"stop-the-angularjs-hate","link":"/stop-the-angularjs-hate/"},{"sourcePath":"2015-02-26--amazing-resources","title":"Best Free UI Design Resources for Developers","pubDate":"2015-02-26T00:00:00.000Z","description":"A curated 2026 list of UI kits, Tailwind blocks, icons, fonts, illustrations, animations, and design tools for building polished websites faster.","categories":["Code","design","development","design","resources","ui","tailwind","icons","patterns"],"category":"Code","slug":"amazing-resources","link":"/amazing-resources/"},{"sourcePath":"2015-02-24--security-notes-regex","title":"Security Notes: RegEx","pubDate":"2015-02-24T00:00:00.000Z","description":"Can RegEx be vulnerable?","categories":["Security","RegEx","security","regex","dos","remote-exploit"],"category":"Security","cover":"/_astro/markus-spiske-666905-unsplash.Bmr_JGUp.webp","slug":"security-notes-regex","link":"/security-notes-regex/"}]}