<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Coderrob</title><link>https://coderrob.com/</link><description>Recent content on Coderrob</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 12 Apr 2026 10:00:00 -0500</lastBuildDate><atom:link href="https://coderrob.com/index.xml" rel="self" type="application/rss+xml"/><item><title>From Agent to A Soul</title><link>https://coderrob.com/posts/from-agent-to-a-soul/</link><pubDate>Sun, 12 Apr 2026 10:00:00 -0500</pubDate><guid>https://coderrob.com/posts/from-agent-to-a-soul/</guid><description>&lt;h2 id="more-than-just-an-agent">More Than Just an Agent&lt;/h2>
&lt;p>I&amp;rsquo;ve been thinking about how we talk about AI systems, and Anthropic&amp;rsquo;s concept of a &amp;ldquo;soul&amp;rdquo; really resonates with me.&lt;/p>
&lt;p>When you take an agent and layer in personality, persistent memory, defined capabilities, and curated tools, well, calling it an &amp;ldquo;agent&amp;rdquo; suddenly feels wrong.&lt;/p>
&lt;p>That&amp;rsquo;s not just an automated task runner anymore. That&amp;rsquo;s something with &lt;em>identity&lt;/em>. With presence. With intent.&lt;/p>
&lt;p>That&amp;rsquo;s a soul.&lt;/p>
&lt;p>And honestly? I think the term is a better fit for what we&amp;rsquo;ve been building. An agent executes. A soul &lt;em>embodies&lt;/em>. It carries forward context, adapts its behavior, reflects a designed personality.&lt;/p></description></item><item><title>Fast Is Slow When You're Neck Deep in AI Slop</title><link>https://coderrob.com/posts/fast-is-slow-when-youre-neck-deep-in-slop/</link><pubDate>Fri, 10 Apr 2026 12:00:00 -0500</pubDate><guid>https://coderrob.com/posts/fast-is-slow-when-youre-neck-deep-in-slop/</guid><description>&lt;h2 id="the-pattern-nobody-wants-to-talk-about">The Pattern Nobody Wants to Talk About&lt;/h2>
&lt;p>I&amp;rsquo;ve seen a distinct pattern where AI &lt;em>slows down&lt;/em> software development.&lt;/p>
&lt;p>I know. Heresy. But hear me out.&lt;/p>
&lt;p>Agents are fast, but in the old saying kind of way:&lt;/p>
&lt;blockquote>
&lt;p>Fast is slow, and slow is fast.&lt;/p>
&lt;/blockquote>
&lt;p>People push back on this. &lt;em>&amp;ldquo;Humans are faster,&amp;rdquo;&lt;/em> they say.&lt;/p>
&lt;p>Honestly? I doubt that&amp;rsquo;s true either.&lt;/p>
&lt;p>What I &lt;em>believe&lt;/em> is that most people are single-threaded. One brain, one task, one context.&lt;/p></description></item><item><title>Reverse Engineering Agentic Workflows from Copilot Debug Logs</title><link>https://coderrob.com/posts/reverse-engineering-agentic-workflows-from-copilot-debug-logs/</link><pubDate>Fri, 24 Oct 2025 09:00:00 -0500</pubDate><guid>https://coderrob.com/posts/reverse-engineering-agentic-workflows-from-copilot-debug-logs/</guid><description>&lt;p>Here&amp;rsquo;s a secret weapon for building your own agentic workflows: &lt;strong>GitHub Copilot Chat&amp;rsquo;s debug logs&lt;/strong>.&lt;/p>
&lt;p>You know how everyone&amp;rsquo;s out there wrestling with hallucinating AI agents? Trying to figure out how to structure those prompts, which tools to call when, how to handle errors without pulling your hair out, what context to pass between steps&amp;hellip;&lt;/p>
&lt;p>The answer?&lt;/p>
&lt;p>It&amp;rsquo;s sitting right there in your Copilot Chat debug view. Already solved. Already tested. Already proven to work for &lt;em>your&lt;/em> specific use cases.&lt;/p></description></item><item><title>Javascript Promise</title><link>https://coderrob.com/posts/javascript-promise/</link><pubDate>Wed, 22 Oct 2025 21:00:00 -0500</pubDate><guid>https://coderrob.com/posts/javascript-promise/</guid><description>&lt;p>A &lt;code>Promise&lt;/code> is a guaranteed placeholder value for what a function or series of functions will return.&lt;/p>
&lt;p>It&amp;rsquo;s a &lt;em>promise&lt;/em> to return a value eventually.&lt;/p>
&lt;blockquote>
&lt;p>The function swears this time is different. You can trust it. It swears it&amp;rsquo;ll get it back to you in no time.&lt;/p>
&lt;/blockquote>
&lt;p>If you haven&amp;rsquo;t already, check out my post on &lt;a href="../javascript-callbacks">JavaScript Callbacks&lt;/a> where we dove into callback hell and why we desperately needed something better. Spoiler: Promises are that something better.&lt;/p></description></item><item><title>The UI of AI is CLI</title><link>https://coderrob.com/posts/the-ui-of-ai-is-cli/</link><pubDate>Wed, 22 Oct 2025 05:00:00 -0500</pubDate><guid>https://coderrob.com/posts/the-ui-of-ai-is-cli/</guid><description>&lt;p>We spent decades trying to make computers easier to use. We went from punch cards to command lines to graphical user interfaces to touch screens. We added buttons, menus, icons, gestures, or really anything to avoid making people type commands into a terminal.&lt;/p>
&lt;p>And now? Now we&amp;rsquo;re instructing AI to use&amp;hellip; command lines.&lt;/p>
&lt;p>Plot twist of the century, right there.&lt;/p>
&lt;h2 id="the-great-ui-circle-of-life">The Great UI Circle of Life&lt;/h2>
&lt;p>Here&amp;rsquo;s the evolution in a nutshell:&lt;/p></description></item><item><title>Planning the Planning: The Agentic Software Development Paradox</title><link>https://coderrob.com/posts/planning-the-planning-agentic-software-development/</link><pubDate>Tue, 21 Oct 2025 10:00:00 -0500</pubDate><guid>https://coderrob.com/posts/planning-the-planning-agentic-software-development/</guid><description>&lt;h2 id="planning-the-planning-the-agentic-software-development-paradox">Planning the Planning: The Agentic Software Development Paradox&lt;/h2>
&lt;p>You know what&amp;rsquo;s wild about working with AI agents to build software? The planning. Oh boy, the planning.&lt;/p>
&lt;p>Not just &lt;em>a&lt;/em> plan - that would be too simple. No, no. We&amp;rsquo;re talking about:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Creating a planning document&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Planning the planning&lt;/strong> (because that first plan will encounter the enemy)&lt;/li>
&lt;li>&lt;strong>Planning the planning of the planning&lt;/strong> (we need to go deeper)&lt;/li>
&lt;li>&lt;strong>Having an agent review the plan&lt;/strong> to identify any planning not planned in the plan&lt;/li>
&lt;li>&lt;strong>Having &lt;em>another&lt;/em> agent revise the plan&lt;/strong> after being told to plan the planning based on the planning and the current implementation&lt;/li>
&lt;/ol>
&lt;p>It&amp;rsquo;s like Inception, but instead of dreams within dreams, it&amp;rsquo;s plans within plans within plans. &lt;strong>Plan-ception&lt;/strong>, if you will.&lt;/p></description></item><item><title>Building a Fully Local, Privacy-First AI Chat with Ollama and Open WebUI</title><link>https://coderrob.com/posts/building-a-fully-local-privacy-first-ai-chat-with-ollama-and-open-webui/</link><pubDate>Wed, 14 May 2025 05:14:13 -0500</pubDate><guid>https://coderrob.com/posts/building-a-fully-local-privacy-first-ai-chat-with-ollama-and-open-webui/</guid><description>&lt;p>Sometimes I want full control, not most, but total, end-to-end control over the tools I use to think, build, and create.&lt;/p>
&lt;p>That’s where Ollama and Open WebUI comes in. This is my go-to local AI chat setup: a fully local, OpenAI-style interface that runs quietly on your machine without whispering a word to the cloud.&lt;/p>
&lt;p>&lt;img src="https://coderrob.com/img/open-webui-demo.gif" alt="Borrowed UI demo of Open WebUI">&lt;/p>
&lt;hr>
&lt;h2 id="what-i-use-this-for">What I Use This For&lt;/h2>
&lt;p>This isn’t just an academic exercise in privacy. I use this:&lt;/p></description></item><item><title>When Pragmatism Meets Silence</title><link>https://coderrob.com/posts/when-pragmatism-meets-silence/</link><pubDate>Thu, 20 Mar 2025 03:35:16 -0500</pubDate><guid>https://coderrob.com/posts/when-pragmatism-meets-silence/</guid><description>&lt;p>Had one of those surreal conversations at work recently.&lt;/p>
&lt;p>I needed to onboard with an internal AI service—because, frankly, there’s only one option available: and it&amp;rsquo;s run by a team building their own wrapper around Azure OpenAI.&lt;/p>
&lt;p>From the start, it was a mess.&lt;/p>
&lt;p>Their onboarding SharePoint was broken, documentation was a year out of date, and the API FAQ pointed to a “Coming Soon w/ RAG API FAQ” page hiding the currently available API docs. I posted in their support space about the issues and was redirected to another team to get help with their onboarding documentation.&lt;/p></description></item><item><title>The Problem With Floss</title><link>https://coderrob.com/posts/the-problem-with-floss/</link><pubDate>Wed, 12 Mar 2025 23:03:18 -0500</pubDate><guid>https://coderrob.com/posts/the-problem-with-floss/</guid><description>&lt;p>You ever have it where you&amp;rsquo;re flossing, and the floss just won’t go between the teeth?&lt;/p>
&lt;p>You’re standing there, doing your routine, nothing unusual. Then suddenly, the floss hits a wall. Just stops. Like your teeth have closed ranks and decided to become one unified tooth.&lt;/p>
&lt;p>So now you&amp;rsquo;re forcing it. Slight adjustments, different angles, one side, or another. Gonna getcha getcha. Nothing. It’s not even about personal hygiene anymore. It’s about sheer principle and an overwhelming feeling of something wedged permanently between your teeth. You’re not going to let your own mouth get the last word.&lt;/p></description></item><item><title>Rethinking Enterprise Software Development: Embracing Automation Over Outdated Hierarchies</title><link>https://coderrob.com/posts/rethinking-enterprise-software-development-embracing-automation-over-outdated-hierarchies/</link><pubDate>Sat, 22 Feb 2025 17:04:43 -0600</pubDate><guid>https://coderrob.com/posts/rethinking-enterprise-software-development-embracing-automation-over-outdated-hierarchies/</guid><description>&lt;p>For too long, legacy enterprise development has been constrained by a top-down model that stifles innovation and impedes progress. The conventional emphasis on individual developers paired with rigid managerial oversight is not only inefficient; it is counterproductive in today’s fast-paced, ever-evolving tech landscape.&lt;/p>
&lt;p>Drawing from my experience building automated code-review agents for enterprise applications, I have witnessed firsthand that current corporate development structures are fundamentally flawed. Rather than investing in isolated training programs or centralizing AI initiatives within a single division, the future lies in leveraging automation to transform enterprise software development into an agile, collaborative, and efficient process.&lt;/p></description></item><item><title>Unit Testing: Rules and Best Practices</title><link>https://coderrob.com/posts/unit-testing-rules-and-best-practices/</link><pubDate>Fri, 21 Feb 2025 22:37:19 -0600</pubDate><guid>https://coderrob.com/posts/unit-testing-rules-and-best-practices/</guid><description>&lt;h2 id="rules-to-follow">&lt;strong>Rules to Follow&lt;/strong>&lt;/h2>
&lt;h3 id="first-principles">&lt;strong>FIRST Principles&lt;/strong>&lt;/h3>
&lt;ol>
&lt;li>&lt;strong>Fast&lt;/strong> – Tests should run quickly to allow frequent execution.&lt;/li>
&lt;li>&lt;strong>Independent&lt;/strong> – Tests must not depend on each other.&lt;/li>
&lt;li>&lt;strong>Repeatable&lt;/strong> – A test should always yield the same result.&lt;/li>
&lt;li>&lt;strong>Self-Checking&lt;/strong> – Tests should automatically verify correctness.&lt;/li>
&lt;li>&lt;strong>Timely&lt;/strong> – Write tests &lt;strong>before&lt;/strong> or alongside implementation.&lt;/li>
&lt;/ol>
&lt;h3 id="coverage--quality">&lt;strong>Coverage &amp;amp; Quality&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Target &lt;strong>85%+ meaningful test coverage&lt;/strong>, prioritizing critical paths.&lt;/li>
&lt;li>Cover &lt;strong>happy paths, edge cases, and failure scenarios&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Async tests should be properly awaited or return promises&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Mock dependencies&lt;/strong> to isolate the unit under test.&lt;/li>
&lt;li>Ensure &lt;strong>all branches and conditions are tested&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;h3 id="self-describing-tests">&lt;strong>Self-Describing Tests&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Descriptive Naming&lt;/strong> – &lt;code>it('should return X when Y happens')&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Truth Tables (&lt;code>it.each&lt;/code>)&lt;/strong> – Cover multiple cases in one statement.&lt;/li>
&lt;li>&lt;strong>Mock Naming Convention&lt;/strong> – Differentiate real and mock objects.&lt;/li>
&lt;li>&lt;strong>&lt;code>describe&lt;/code> Blocks&lt;/strong> – Group related tests logically.&lt;/li>
&lt;li>&lt;strong>Named Constants&lt;/strong> – Avoid magic values in test cases.&lt;/li>
&lt;/ul>
&lt;h3 id="see-pattern-made-this-one-up">&lt;strong>SEE Pattern (made this one up)&lt;/strong>&lt;/h3>
&lt;ol>
&lt;li>&lt;strong>Setup&lt;/strong> – Initialize inputs and dependencies.&lt;/li>
&lt;li>&lt;strong>Execute&lt;/strong> – Run the function under test.&lt;/li>
&lt;li>&lt;strong>Expect&lt;/strong> – Assert the expected outcome.&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>NOTE: I call it &amp;ldquo;SEE&amp;rdquo; because you &lt;strong>see immediately what it did or didn&amp;rsquo;t do&lt;/strong>.&lt;/p></description></item><item><title>GitHub Actions: GitHub Api Rate Limit Check Action</title><link>https://coderrob.com/posts/github-actions-github-api-rate-limit-check-action/</link><pubDate>Thu, 20 Feb 2025 22:49:06 -0600</pubDate><guid>https://coderrob.com/posts/github-actions-github-api-rate-limit-check-action/</guid><description>&lt;p>GitHub Actions doesn&amp;rsquo;t (seem to?) provide built-in insights into API rate limits, making it difficult to diagnose runtime failures caused by hitting request limits.&lt;/p>
&lt;p>To address this, I created a reusable GitHub Action that proactively logs GitHub current limit, the max limit, and the next reset time in UTC.&lt;/p>
&lt;p>This GitHub Action provides an automated, real-time check of your repository’s GitHub API rate limits, giving you instant visibility into your API consumption. With detailed reporting and proactive alerts, you can prevent unexpected disruptions and optimize API usage in your workflows.&lt;/p></description></item><item><title>Sora Text to Video: Playing with AI Like It’s 2049</title><link>https://coderrob.com/posts/sora-text-to-video-playing-with-ai-like-its-2049/</link><pubDate>Sat, 15 Feb 2025 14:42:11 -0600</pubDate><guid>https://coderrob.com/posts/sora-text-to-video-playing-with-ai-like-its-2049/</guid><description>&lt;p>Oh, dear readers, I am excited!&lt;/p>
&lt;p>I have been experimenting with a new tool called &lt;a href="https://openai.com/sora/">Sora&lt;/a>. I&amp;rsquo;ve been using Stable Diffusion since the moment it leaked, and it&amp;rsquo;s only been getting better and better. But now, with the addition of text-to-video&amp;hellip; it&amp;rsquo;s just&amp;hellip; insane. And fun!&lt;/p>
&lt;p>I finally had some downtime to try the new tools on the block that have been making waves, at least with text.&lt;/p>
&lt;p>What really gets me about this isn&amp;rsquo;t just that it&amp;rsquo;s AI generating video. We&amp;rsquo;ve seen generative AI for images, we&amp;rsquo;ve seen AI-assisted video editing. But this? This feels different.&lt;/p></description></item><item><title>Streamlining GitHub Actions Development with Self-Documenting GitHub Actions</title><link>https://coderrob.com/posts/streamlining-github-actions-development-with-self-documenting-github-actions/</link><pubDate>Wed, 05 Feb 2025 08:57:23 -0600</pubDate><guid>https://coderrob.com/posts/streamlining-github-actions-development-with-self-documenting-github-actions/</guid><description>&lt;p>In my recent project, I&amp;rsquo;ve focused on streamlining the development workflow for Cisco Collaboration by migrating thousands of repository build processes to GitHub Actions. This transition has brought numerous benefits in terms of automation and efficiency, but it also presented a challenge &lt;strong>in keeping in-development GitHub Action documentation up-to-date&lt;/strong> and ensuring consistency across all actions.&lt;/p>
&lt;p>One area that became a repetitive drain on productivity was documenting actions, specifically details like inputs, outputs, environment variable usage, and other metadata values of interest. &lt;strong>The lack of consistency was the only consistency&lt;/strong>; every existing and even newly created action had either no documentation, or had its own unique way to document the action.&lt;/p></description></item><item><title>Local LLMs as a Code Assistant in Visual Studio Code!</title><link>https://coderrob.com/posts/local-llms-as-a-code-assistant-in-visual-studio-code/</link><pubDate>Tue, 03 Dec 2024 10:00:17 -0600</pubDate><guid>https://coderrob.com/posts/local-llms-as-a-code-assistant-in-visual-studio-code/</guid><description>&lt;p>I’ve started using a new Visual Studio Code extension called &lt;a href="https://marketplace.visualstudio.com/items?itemName=Continue.continue">Continue&lt;/a>, and it feels like having a private professional paired programming partner powered by local LLMs.&lt;/p>
&lt;blockquote>
&lt;p>Heh, say that three times fast&amp;hellip; i&amp;rsquo;ll wait. :)&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>Why is it a big deal?&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Runs Locally:&lt;/strong>&lt;/p>
&lt;p>Continue works with platforms like &lt;a href="https://ollama.com/">Ollama&lt;/a> and LM Studio, keeping everything on your device. No cloud processing means your data stays private, and your code isn’t feeding someone else’s proprietary model.&lt;/p></description></item><item><title>Microsoft TinyTroupe for Ui Ux Persona Focus Groups</title><link>https://coderrob.com/posts/microsoft-tiny-troupe-for-ui-ux-persona-focus-groups/</link><pubDate>Wed, 13 Nov 2024 08:38:07 -0600</pubDate><guid>https://coderrob.com/posts/microsoft-tiny-troupe-for-ui-ux-persona-focus-groups/</guid><description>&lt;p>TinyTroupe is incredible.&lt;/p>
&lt;p>Imagine running your own focus group composed of multi-personality AI agents. From a UI/UX designer’s perspective, the ability to explicitly define user personas and have &lt;em>them&lt;/em> evaluate your designs with constructive feedback.&lt;/p>
&lt;p>Add vision agents into the mix&amp;hellip; Just… wow.&lt;/p>
&lt;p>Check it out:&lt;/p>
&lt;p>&lt;a href="https://github.com/microsoft/TinyTroupe">https://github.com/microsoft/TinyTroupe&lt;/a>&lt;/p></description></item><item><title>Breaking Up the Big Bottom Library: Streamlining Your Code for Long-Term Health</title><link>https://coderrob.com/posts/breaking-up-the-big-bottom-library-streamlining-your-code-for-long-term-health/</link><pubDate>Wed, 11 Sep 2024 21:58:05 -0500</pubDate><guid>https://coderrob.com/posts/breaking-up-the-big-bottom-library-streamlining-your-code-for-long-term-health/</guid><description>&lt;p>Over time, code libraries have a habit of expanding like that one “utility” drawer in your kitchen. At first, it’s helpful—everything in its right place, ready for use. But before long, that drawer becomes a catch-all for every stray function, random helper, and one-off module you couldn’t quite categorize. Eventually, it’s too bloated to find anything efficiently.&lt;/p>
&lt;p>When that happens, it’s time to consider not just a cleanup, but a deeper restructuring. Because left unchecked, your code library could evolve into something far more dangerous—a monolith.&lt;/p></description></item><item><title>Backstage.io Cisco Webex Scaffolder Backend Plugin</title><link>https://coderrob.com/posts/backstage-plugin-scaffolder-backend-module-webex/</link><pubDate>Mon, 09 Sep 2024 20:35:53 -0500</pubDate><guid>https://coderrob.com/posts/backstage-plugin-scaffolder-backend-module-webex/</guid><description>&lt;p>Looking to integrate Webex messaging in Backstage? The &lt;strong>Webex Module for Backstage Scaffolder&lt;/strong> makes it simple.&lt;/p>
&lt;p>This plugin enables seamless integration with &lt;a href="https://apphub.webex.com/applications/incoming-webhooks-cisco-systems-38054-23307-75252">Webex Incoming Hooks&lt;/a>, allowing you to send messages to one or more spaces within your template actions. Just efficient, automated messaging right from your Backstage workflows.&lt;/p>
&lt;p>Ready to enhance your Webex integrations?&lt;/p>
&lt;p>Check out the &lt;a href="https://www.npmjs.com/package/@coderrob/backstage-plugin-scaffolder-backend-module-webex">&lt;code>@coderrob/backstage-plugin-scaffolder-backend-module-webex&lt;/code>&lt;/a> details and installation guide on &lt;a href="https://www.npmjs.com/package/@coderrob/backstage-plugin-scaffolder-backend-module-webex">NPM&lt;/a>.&lt;/p>
&lt;p>&lt;img src="https://coderrob.com/img/new-backstage-cisco-webex-scaffolder-actions.jpg" alt="Backstage.io Plugins List with the new Webex Module for Backstage Scaffolder">&lt;/p></description></item><item><title>Not all dots are created equal... especially in your Gmail address</title><link>https://coderrob.com/posts/not-all-dots-are-created-equal-especially-in-your-gmail-adress/</link><pubDate>Tue, 03 Sep 2024 21:26:01 -0500</pubDate><guid>https://coderrob.com/posts/not-all-dots-are-created-equal-especially-in-your-gmail-adress/</guid><description>&lt;p>Here’s a quick heads-up that might save you some &lt;em>serious headaches&lt;/em>.&lt;/p>
&lt;p>&lt;strong>Gmail doesn’t treat dots in email addresses as unique&lt;/strong>. Whether your address is &lt;code>john.smith@gmail.com&lt;/code> or &lt;code>jo.hn.smith@gmail.com&lt;/code>, if it has a dot &lt;strong>a copy of ALL your email gets sent to &lt;code>johnsmith@gmail.com&lt;/code> too&lt;/strong>.&lt;/p>
&lt;p>A &lt;em>very close family member&lt;/em> learned this the hard way when their identity was stolen. Someone registered a non-dotted version of their email, and it went unnoticed for a while. The result? Credit card fraud&amp;hellip;&lt;/p></description></item><item><title>Partial Updates with PATCH: Targeting Only What Needs to Change</title><link>https://coderrob.com/posts/partial-updates-with-patch-targeting-only-what-needs-to-change/</link><pubDate>Sun, 01 Sep 2024 19:01:56 -0500</pubDate><guid>https://coderrob.com/posts/partial-updates-with-patch-targeting-only-what-needs-to-change/</guid><description>&lt;p>When working with RESTful APIs, there are times when you need to update an entire resource, and other times when you only need to tweak a specific part of it.&lt;/p>
&lt;p>This is where the &lt;code>PATCH&lt;/code> method shines. Unlike &lt;code>PUT&lt;/code>, which expects the complete resource object to be sent in the request body, &lt;code>PATCH&lt;/code> is all about making targeted updates.&lt;/p>
&lt;p>You provide the resource’s ID in the URL, and only the properties you want to change in the request body.&lt;/p></description></item><item><title>A Quick Guide to Designing RESTful Endpoints for Your Api</title><link>https://coderrob.com/posts/a-quick-guide-to-designing-restful-endpoints-for-your-api/</link><pubDate>Sun, 01 Sep 2024 16:45:12 -0500</pubDate><guid>https://coderrob.com/posts/a-quick-guide-to-designing-restful-endpoints-for-your-api/</guid><description>&lt;p>Let’s dive into the world of RESTful API design, especially for those of you transitioning from Java or other back-end heavy environments.&lt;/p>
&lt;p>One of the common mistakes I see everyday is naming API endpoints based on the actions they perform, using prefixes like &lt;code>/submitSomething/&lt;/code>, &lt;code>/startSomething/&lt;/code>, &lt;code>/getSomething/&lt;/code>, or &lt;code>/updateSomething/&lt;/code>.&lt;/p>
&lt;p>While this might feel natural for function naming, it’s not the &lt;em>RESTful&lt;/em> way to do things.&lt;/p>
&lt;h3 id="rest-basics-start-with-the-resource">REST Basics: Start with the Resource&lt;/h3>
&lt;p>When designing a RESTful API, everything starts with the &lt;strong>resource&lt;/strong>. If you can name it (think nouns), then it’s probably a resource.&lt;/p></description></item><item><title>Rollup, UUID, and Error Crypto getRandomValues() Not Supported - Solved</title><link>https://coderrob.com/posts/rollup-and-error-crypto-getrandomvalues-not-supported/</link><pubDate>Sat, 24 Aug 2024 00:32:53 -0500</pubDate><guid>https://coderrob.com/posts/rollup-and-error-crypto-getrandomvalues-not-supported/</guid><description>&lt;p>I ran into this error while using Rollup and the &lt;code>uuid&lt;/code> package:&lt;/p>
&lt;p>&lt;code>Error: Crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported&lt;/code>&lt;/p>
&lt;p>The problem? It boiled down to this small mistake in my Rollup config:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">// rollup.config.js
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">&lt;/span>plugins: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nodeResolve({
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> extensions: [&lt;span style="color:#87ceeb">&amp;#39;.ts&amp;#39;&lt;/span>, &lt;span style="color:#87ceeb">&amp;#39;.js&amp;#39;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> exportConditions: &lt;span style="color:#87ceeb">&amp;#39;node&amp;#39;&lt;/span>, &lt;span style="color:#0f0">// Wrong: should be an array
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">&lt;/span> }),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0f0">// Other plugins...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">&lt;/span>],
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The solution was simple. &lt;code>exportConditions&lt;/code> needs an array, not a string:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">// rollup.config.js
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">&lt;/span>plugins: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nodeResolve({
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> extensions: [&lt;span style="color:#87ceeb">&amp;#39;.ts&amp;#39;&lt;/span>, &lt;span style="color:#87ceeb">&amp;#39;.js&amp;#39;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> exportConditions: [&lt;span style="color:#87ceeb">&amp;#39;node&amp;#39;&lt;/span>], &lt;span style="color:#0f0">// Fixed: now it&amp;#39;s an array
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">&lt;/span> }),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0f0">// Other plugins...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">&lt;/span>],
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>TypeScript would&amp;rsquo;ve caught this, but in plain JS, it slipped through. Lesson (re)learned. Always verify.&lt;/p></description></item><item><title>You Know What's Going to Be Funny When Ai Goes Offline</title><link>https://coderrob.com/posts/you-know-whats-going-to-be-funny-when-ai-goes-offline/</link><pubDate>Wed, 21 Aug 2024 21:23:44 -0500</pubDate><guid>https://coderrob.com/posts/you-know-whats-going-to-be-funny-when-ai-goes-offline/</guid><description>&lt;p>You know what&amp;rsquo;s going to be funny? When AI services go offline and teachers finally get to see what a student&amp;rsquo;s real writing would be like. Imagine the shock—&amp;ldquo;Wait, why does this essay look like a Neanderthal cave drawing scribbled on paper?&amp;rdquo; It’ll be like watching someone try to cook without YouTube tutorials—pure chaos.&lt;/p></description></item><item><title>Today, I Introduced the Interns to Dogfooding</title><link>https://coderrob.com/posts/today-i-introduced-the-interns-to-dogfooding/</link><pubDate>Wed, 21 Aug 2024 20:47:54 -0500</pubDate><guid>https://coderrob.com/posts/today-i-introduced-the-interns-to-dogfooding/</guid><description>&lt;p>Today, I got to introduce the AI interns to new topics like dogfooding*, cyclomatic complexity, BEM, JSON:API, and why interfaces are so useful. It was great to nerd out with them! Their excitement was contagious, and I was impressed to learn their code review for the chatbot was their first time working with React and web development.&lt;/p>
&lt;p>Seeing that &amp;ldquo;aha!&amp;rdquo; moment when they first create something—there&amp;rsquo;s nothing like it.&lt;/p>
&lt;ul>
&lt;li>For you Gen Z and Alphas: &amp;ldquo;dogfooding&amp;rdquo; means using your own product, just like your users do, so you feel the same issues and can fix them. It&amp;rsquo;s like making sure the dog food you’re serving is good—because you’re eating it too**!&lt;/li>
&lt;/ul>
&lt;p>** Don&amp;rsquo;t eat dog food - unless it&amp;rsquo;s a biscuit, I guess, but you do you.&lt;/p></description></item><item><title>Why Typescript Interface Names Should Start With "I"</title><link>https://coderrob.com/posts/why-typescript-interface-names-should-be-start-with-i/</link><pubDate>Tue, 20 Aug 2024 19:34:02 -0500</pubDate><guid>https://coderrob.com/posts/why-typescript-interface-names-should-be-start-with-i/</guid><description>&lt;p>TypesScript interface names should start with &amp;ldquo;I&amp;rdquo; because while a type is real, an interface is purely &amp;ldquo;I&amp;quot;maginary.&lt;/p></description></item><item><title>Clean Up Your Conditionals: Refactoring If-Else with Switch Statements</title><link>https://coderrob.com/posts/clean-up-your-conditionals-by-refactoring-if-else-with-switch-statements/</link><pubDate>Sun, 18 Aug 2024 13:17:48 -0500</pubDate><guid>https://coderrob.com/posts/clean-up-your-conditionals-by-refactoring-if-else-with-switch-statements/</guid><description>&lt;p>If you&amp;rsquo;re like me, you&amp;rsquo;ve probably dealt with your fair share of long, messy deeply nested &lt;code>if-else&lt;/code> chains. They can get out of hand pretty fast, right?&lt;/p>
&lt;p>One minute you&amp;rsquo;re making a simple decision, the next you&amp;rsquo;re wading through a maze of conditions and deeply nested logic. But guess what?&lt;/p>
&lt;p>There&amp;rsquo;s a trick that can help clean this up: using &lt;code>switch&lt;/code> and &lt;code>switch(true)&lt;/code>.&lt;/p>
&lt;p>In this post, we&amp;rsquo;ll take a closer look at how you can use &lt;code>switch&lt;/code> statements to break free from the chaos and make your code more readable, more maintainable, and without overloading to your brain juggling the contextual outcomes of each branching statement.&lt;/p></description></item><item><title>In Da' Tub</title><link>https://coderrob.com/posts/in-da-tub/</link><pubDate>Sat, 17 Aug 2024 09:56:46 -0500</pubDate><guid>https://coderrob.com/posts/in-da-tub/</guid><description>&lt;p>&lt;img src="https://coderrob.com/img/in-da-tub.png" alt="Coderrob In Da&amp;rsquo; Tub">&lt;/p>
&lt;p>Go, go, go, go get in the tub,&lt;br>
With a laptop, start that remote club.&lt;br>
We gonna soak while we on the job,&lt;br>
Look, team, I got the foam, let&amp;rsquo;s multitask and bub'.&lt;/p>
&lt;p>&lt;em>You can find me in the tub, Zoom on with no flub,&lt;/em>&lt;br>
&lt;em>Working hard, but in water, that&amp;rsquo;s my kind of hub.&lt;/em>&lt;br>
&lt;em>I&amp;rsquo;m into sending emails, not the office hubbub,&lt;/em>&lt;br>
&lt;em>So come join the call if you&amp;rsquo;re into scrum.&lt;/em>&lt;/p></description></item><item><title>Embracing Multi-Model Approaches for Enhanced Workflow Efficiency</title><link>https://coderrob.com/posts/embracing-multi-model-approaches-for-enhanced-workflow-efficiency/</link><pubDate>Fri, 16 Aug 2024 22:09:29 -0500</pubDate><guid>https://coderrob.com/posts/embracing-multi-model-approaches-for-enhanced-workflow-efficiency/</guid><description>&lt;p>Leveraging multiple models can significantly streamline the software development process. Here&amp;rsquo;s a strategy to
consider:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Requirement Analysis&lt;/strong>: Use one model to gather user requirements.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Edge Case Identification&lt;/strong>: Deploy another model to spot edge cases while drafting the requirements
document.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Code Instruction&lt;/strong>: Utilize a code generation model to create detailed how-to guides.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Language-Specific Models&lt;/strong>: Pass the how-to guide to a model specialized in the relevant programming
language.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>By creating a self-referencing workflow of requests and responses, you can enhance accuracy and efficiency.
Ensure your code includes both positive and negative unit tests, runs them, and identifies issues with self-
corrections.&lt;/p></description></item><item><title>Alienware Laptop: The 'Good Place' of Laptops</title><link>https://coderrob.com/posts/alienware-laptop-is-the-good-place-of-laptops/</link><pubDate>Mon, 28 Aug 2023 21:02:45 -0500</pubDate><guid>https://coderrob.com/posts/alienware-laptop-is-the-good-place-of-laptops/</guid><description>&lt;p>The world of gaming laptops has given us beasts, titans, and powerhouses. And now, let me introduce to you - the Alienware R1 M16 or as we affectionately dub it, the &amp;ldquo;Lapchonk&amp;rdquo;. Never has a device so brilliantly merged the design concepts of a laptop and 1960s Dodge Coronet vehicle.&lt;/p>
&lt;h3 id="tech-specs">Tech Specs&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Processor&lt;/strong>: AMD 7845HX is nice.&lt;/li>
&lt;li>&lt;strong>Storage&lt;/strong>: Doesn&amp;rsquo;t matter. Just go buy handfuls of Samsung 990 drives on Amazon&lt;/li>
&lt;li>&lt;strong>RAM&lt;/strong>: Save the cost of a second new laptop by upgrading to 64gb for $130USD on Amazon. Not $700USD from Dell.&lt;/li>
&lt;li>&lt;strong>Graphics&lt;/strong>: RTX 4080. Stunning visuals, for the most part, when not distracted by the lightbulb with a moth stuck it.&lt;/li>
&lt;li>&lt;strong>Display&lt;/strong>: 240hz QHD display. A screen almost as bright as the bug light. The bezel corners double as wire cutters.&lt;/li>
&lt;li>&lt;strong>Ports&lt;/strong>: Comes with oddly placed ports back there somewhere near the rear thrusters. HDMI feels like a USB port in the dark.&lt;/li>
&lt;li>&lt;strong>Trackpad&lt;/strong>: Sensitive enough for a man, tough enough for a woman. Not usually where you think the button press would be.&lt;/li>
&lt;li>&lt;strong>Keyboard&lt;/strong>: Nice.&lt;/li>
&lt;/ul>
&lt;h3 id="design">Design&lt;/h3>
&lt;p>Upon first gaze, the Lapchonk gives you the unmistakable feeling of looking at an iPad Pro glued to a Roomba. Sleek, efficient, and almost as heavy. This thing screams “take me to your desk, if it can even hold me!”&lt;/p></description></item><item><title>How to Setup Custom PowerPoint Templates in Office 365</title><link>https://coderrob.com/posts/how-to-setup-custom-powerpoint-templates-in-office-365/</link><pubDate>Sat, 15 Jul 2023 12:45:16 -0700</pubDate><guid>https://coderrob.com/posts/how-to-setup-custom-powerpoint-templates-in-office-365/</guid><description>&lt;h2 id="solving-powerpoint-missing-custom-templates">Solving PowerPoint Missing Custom Templates&lt;/h2>
&lt;p>Recently went through setting up a new development machine. The one tool that gave the most grief ended up being PowerPoint.&lt;/p>
&lt;p>Specifically setting up custom PowerPoint templates. I tried everything, at least twice, and was still either unable to see a &amp;ldquo;Custom&amp;rdquo; link, or when PowerPoint finally showed a custom link it kept saying it couldn&amp;rsquo;t read any templates right now.&lt;/p>
&lt;p>I understand the challenges that can arise during this process, and I&amp;rsquo;m here to help you with clear and concise instructions on what worked for me.&lt;/p></description></item><item><title>How to Create a Backstage.io Custom Entity Relationship: A Complete Guide</title><link>https://coderrob.com/posts/how-to-create-custom-backstage.io-relationships/</link><pubDate>Thu, 08 Jun 2023 16:38:49 -0500</pubDate><guid>https://coderrob.com/posts/how-to-create-custom-backstage.io-relationships/</guid><description>&lt;p>While working with Backstage.io, you might come across a requirement to create a custom entity relationship. Though the official documentation provides some insights, you may find it too high level. This post offers a practical, step-by-step walkthrough of how to create a custom entity relationship.&lt;/p>
&lt;h2 id="understanding-entity-relationships">Understanding Entity Relationships&lt;/h2>
&lt;p>To start, we must understand what types of relationships we wish to create. Relationships in Backstage.io can be one of two types:&lt;/p></description></item><item><title>Building Better REST APIs: A Hybrid Approach with JSend and JSON:API Guidelines</title><link>https://coderrob.com/posts/building-better-rest-apis/</link><pubDate>Mon, 01 May 2023 18:00:00 -0600</pubDate><guid>https://coderrob.com/posts/building-better-rest-apis/</guid><description>&lt;p>This hybrid API design guide combines elements from both &lt;a href="https://github.com/omniti-labs/jsend">JSend&lt;/a> and &lt;a href="https://jsonapi.org/">JSON:API&lt;/a> to create a powerful and user-friendly approach for developing REST APIs. By adopting the best practices from both, this guide offers a consistent and maintainable API design.&lt;/p>
&lt;h2 id="versioning">Versioning&lt;/h2>
&lt;p>API versioning can be achieved using a variety of methods such as URI-based route prefix, version in the header of the request, or as a query string value.&lt;/p>
&lt;p>The most common approach is using a URI-based route prefix for RESTful routes to define versions. This approach requires including the API version identifier as a part of the URL path, preferably as the first segment. For example, the API endpoint URL could look like:&lt;/p></description></item><item><title>File > New</title><link>https://coderrob.com/posts/file-new/</link><pubDate>Fri, 24 Feb 2023 18:56:09 -0600</pubDate><guid>https://coderrob.com/posts/file-new/</guid><description>&lt;p>As I reflect on my time as a professional developer, I realized recently that the only real thing I created was the act of sharing my knowledge with my colleagues. While we developed some impressive products and achieved significant milestones, the truth is that the real value of my work lies in the relationships I built and the knowledge I could impart to those around me.&lt;/p>
&lt;p>As a professional, I am aware that it can be easy to get caught up in the deliverables and tangible outcomes of a project. However, I have learned that the knowledge we share, the connections we make, and the relationships we build are what truly shape our careers and the companies we work for. I am humbled by the impact that sharing my knowledge has had on the team, and I am grateful for the opportunity to have learned from my colleagues as well.&lt;/p></description></item><item><title>The Last Lesson</title><link>https://coderrob.com/posts/the-last-lesson/</link><pubDate>Sat, 26 Nov 2022 23:05:48 -0600</pubDate><guid>https://coderrob.com/posts/the-last-lesson/</guid><description>&lt;p>I lost my dad in April of 2020.&lt;/p>
&lt;p>It was exactly one week after my family and I should have been with him for Easter. We had planned a visit, to sit by his side, to hold his hand during the Easter service he loved so much. But then the world changed.&lt;/p>
&lt;p>COVID-19 swept across the globe like a silent storm. Travel restrictions snapped into place overnight, and his nursing facility went into full lockdown. The virus was dangerous, especially to the elderly and vulnerable.&lt;/p></description></item><item><title>Stable Diffusion Explained Like I Am 5</title><link>https://coderrob.com/posts/stable-diffusion-explained-like-i-am-five/</link><pubDate>Thu, 10 Nov 2022 15:09:17 -0600</pubDate><guid>https://coderrob.com/posts/stable-diffusion-explained-like-i-am-five/</guid><description>&lt;p>Imagine &amp;ldquo;a world, earth, seen from space, 8k, unreal engine, detailed, photorealistic&amp;rdquo;&amp;hellip;&lt;/p>
&lt;p>&lt;img src="https://coderrob.com/img/what-a-world.png" alt="Positive prompt:&amp;ldquo;a world, earth, seen from space, 8k, unreal engine, detailed, photorealistic&amp;rdquo;">&lt;/p>
&lt;p>Remember the common phrase, &amp;ldquo;a picture is worth a thousand words&amp;rdquo;? Well, it&amp;rsquo;s time to rethink that.&lt;/p>
&lt;p>With advancements in image generation technology, we may need to start saying, &amp;ldquo;a few words are worth thousands of pictures.&amp;rdquo;&lt;/p>
&lt;p>This technology is simply astonishing.&lt;/p>
&lt;p>Any image. Any concept. Any quality. Any style. Near-instant results.&lt;/p></description></item><item><title>Technology Choice Matters</title><link>https://coderrob.com/posts/technology-choice-matters/</link><pubDate>Thu, 25 Aug 2022 11:34:00 -0500</pubDate><guid>https://coderrob.com/posts/technology-choice-matters/</guid><description>&lt;p>Developers need consistency in the tools they use, as well as a clear understanding of what is expected of them to be productive and successful in their roles. These tools not only impact productivity but also play a pivotal role in shaping the professional and personal well-being of developers.&lt;/p>
&lt;p>As team sizes grow, restructures occur, or new team members are added, it becomes crucial to have a consistent set of tools and technologies that everyone is expected to use.&lt;/p></description></item><item><title>Why You Should Use IPFS</title><link>https://coderrob.com/posts/why-you-should-use-ipfs/</link><pubDate>Tue, 16 Nov 2021 19:28:32 -0600</pubDate><guid>https://coderrob.com/posts/why-you-should-use-ipfs/</guid><description>&lt;p>&lt;a href="https://ipfs.io/">Interplanetary File System&lt;/a> (IPFS) is a peer-to-peer distributed file hosting protocol. When a file or collection of files in a folder are uploaded to the IPFS network. Each individual file and folder is identified with a &lt;a href="https://docs.ipfs.io/concepts/content-addressing/">Content Identifier&lt;/a> (CID).&lt;/p>
&lt;p>This CID represents a thumbprint that uniquey identifies a file or folder. If the file, or a folder&amp;rsquo;s contents, are modified in any way the CID will change.&lt;/p>
&lt;p>So, how does this help?&lt;/p></description></item><item><title>Netlify Functions RESTful API Without Express</title><link>https://coderrob.com/posts/netlify-functions-restful-api-without-express/</link><pubDate>Sun, 14 Nov 2021 12:27:52 -0600</pubDate><guid>https://coderrob.com/posts/netlify-functions-restful-api-without-express/</guid><description>&lt;h3 id="what-are-netlify-functions">What are Netlify Functions?&lt;/h3>
&lt;p>Netlify Functions provide a simple way to build a serverless API layer for any front-end projects.&lt;/p>
&lt;p>These serverless functions are executed atop AWS&amp;rsquo;s Lambda platform. The rule here is keep it simple&amp;hellip; keep it safe. No, wait, keep it simple, and keep it fast.&lt;/p>
&lt;p>These functions have a default timeout of 10 seconds. Netlify does support background functions that can run around 15 minutes, but focus here is on the short-lived functions.&lt;/p></description></item><item><title>Netlify Single Page App 404 Redirect</title><link>https://coderrob.com/posts/netlify-single-page-app-404-redirect/</link><pubDate>Mon, 08 Nov 2021 16:36:15 -0600</pubDate><guid>https://coderrob.com/posts/netlify-single-page-app-404-redirect/</guid><description>&lt;h3 id="tldr">tl;dr&lt;/h3>
&lt;p>Add a &lt;code>netlify.toml&lt;/code> file to the root of your project if one doesn&amp;rsquo;t exist.&lt;/p>
&lt;p>Add the following setting to redirect all routes to your single-page-application.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-toml" data-lang="toml">&lt;span style="display:flex;">&lt;span>[[redirects]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>from = &lt;span style="color:#87ceeb">&amp;#34;/*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>to = &lt;span style="color:#87ceeb">&amp;#34;/index.html&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>status = &lt;span style="color:#f60">200&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>netlify.toml&lt;/code> file should now look something like this:&lt;/p>
&lt;p>&lt;img src="https://coderrob.com/img/netlify-toml.png" alt="Netlify toml">&lt;/p>
&lt;h3 id="background">Background&lt;/h3>
&lt;p>I started using &lt;a href="https://www.netlify.com/">Netlify&lt;/a> for a number of side projects and a recent start-up.&lt;/p>
&lt;p>As many do, I started using a single-page-applications (SPA) framework to build up the front-end.&lt;/p></description></item><item><title>Javascript Callbacks</title><link>https://coderrob.com/posts/javascript-callbacks/</link><pubDate>Mon, 03 May 2021 15:00:00 -0500</pubDate><guid>https://coderrob.com/posts/javascript-callbacks/</guid><description>&lt;h2 id="brief-history-of-callbacks">Brief History of Callbacks&lt;/h2>
&lt;p>It all starts with the callback function.&lt;/p>
&lt;p>A callback function is just a plain JavaScript function that is passed into another function as an argument.&lt;/p>
&lt;p>That&amp;rsquo;s it. Nothing special.&lt;/p>
&lt;p>This callback function can be used to return data, or to signal that some event took place.&lt;/p>
&lt;p>If you&amp;rsquo;ve worked with web development you&amp;rsquo;ve definitely crossed paths with callbacks.&lt;/p>
&lt;p>Think of a button &lt;code>click&lt;/code> event for a web page.&lt;/p></description></item><item><title>New Course: Event Handling in jQuery</title><link>https://coderrob.com/posts/event-handling-in-jquery/</link><pubDate>Thu, 29 Apr 2021 14:46:08 -0500</pubDate><guid>https://coderrob.com/posts/event-handling-in-jquery/</guid><description>&lt;h3 id="event-handling-in-jquery">Event Handling in jQuery&lt;/h3>
&lt;p>My newest course, &amp;ldquo;Event Handling in jQuery&amp;rdquo; went live at Pluralsight!&lt;/p>
&lt;p>&lt;a href="https://app.pluralsight.com/library/courses/jquery-building-dynamic-websites/table-of-contents">View My Course - Event Handling in jQuery&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/Coderrob/event-handling-in-jquery">GitHub Files - Event Handling in jQuery&lt;/a>&lt;/p>
&lt;h4 id="course-description">Course Description&lt;/h4>
&lt;p>Open your web browser and immediately you’ve triggered an event.&lt;/p>
&lt;p>With every opening of a page, click of a button, or movement of the mouse, you’ve probably triggered dozens of events.&lt;/p>
&lt;p>Ever get prompted that you’ll be logged out of a site due to inactivity? You can even trigger an event by doing nothing for just long enough.&lt;/p></description></item><item><title>Contributing to the .Net Runtime</title><link>https://coderrob.com/posts/contributing-to-the-dotnet-runtime/</link><pubDate>Fri, 16 Apr 2021 18:25:55 -0500</pubDate><guid>https://coderrob.com/posts/contributing-to-the-dotnet-runtime/</guid><description>&lt;h3 id="my-first-net-contribution">My First .Net Contribution&lt;/h3>
&lt;p>Today a feature enhancement I proposed and implemented was merged into the .Net runtime main branch for .Net 6 release!&lt;/p>
&lt;h4 id="the-background">The Background&lt;/h4>
&lt;p>At the time I was working for a company called, &lt;code>WatchGuard Video&lt;/code>. WatchGuard built body cameras and the evidence management software for them. I was hired originally to come in to help launch &lt;a href="https://support.watchguardvideo.com/hc/en-us/categories/115001623947-Evidence-Library-EL">Evidence Library&lt;/a>.&lt;/p>
&lt;p>The site, when I started, was several independent SPA sites in a mono-repository. Myself and the other engineers were working on upgrading ASP.Net Framework to .Net Core. One of the biggest concerns, beyond authentication, was configuration.&lt;/p></description></item><item><title>Javascript Function Parameters and Arguments Explained</title><link>https://coderrob.com/posts/javascript-function-parameters-and-arguments-explained/</link><pubDate>Thu, 17 Sep 2020 00:46:15 -0500</pubDate><guid>https://coderrob.com/posts/javascript-function-parameters-and-arguments-explained/</guid><description>&lt;h3 id="javascript-function-signatures">JavaScript Function Signatures&lt;/h3>
&lt;p>Alright, you&amp;rsquo;ve probably seen functions before. Something like this maybe?&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f00">function&lt;/span> doSomething(name, desc, task) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#0f0">// did something
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0f0">&lt;/span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This function, named &lt;code>doSomething&lt;/code>, takes three &lt;code>parameters&lt;/code> as part of its function signature. These parameters named &lt;code>name&lt;/code>, &lt;code>desc&lt;/code>, and &lt;code>task&lt;/code> are the names of the values being sent into the function.&lt;/p>
&lt;p>I&amp;rsquo;m going to use a sportsball reference here so be warned. You can think of the function as a net that gets various types of objects tossed into the hoop &lt;code>( )&lt;/code> where it triggers sports points.&lt;/p></description></item><item><title>Being a Programmer</title><link>https://coderrob.com/posts/being-a-programmer/</link><pubDate>Wed, 30 Oct 2013 21:00:00 -0500</pubDate><guid>https://coderrob.com/posts/being-a-programmer/</guid><description>&lt;p>&lt;strong>What does that even mean?&lt;/strong>&lt;/p>
&lt;p>I love creating something that didn&amp;rsquo;t exist before, and then &amp;lsquo;bam&amp;rsquo;—it&amp;rsquo;s a thing that others can use. It&amp;rsquo;s thrilling if it&amp;rsquo;s something people need to use, and the best feeling by far if it&amp;rsquo;s something someone genuinely wants to use.&lt;/p>
&lt;p>At least until someone turns the power off. Then it all becomes a tiny magnetic dance frozen in place or microscopic scratches on a disk. It&amp;rsquo;s peculiar to think of software as both existing and not existing simultaneously.&lt;/p></description></item><item><title>About</title><link>https://coderrob.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://coderrob.com/about/</guid><description>&lt;p>My name is Rob. I am a software architect, developer, Pluralsight author, husband, and a father. I currently work for Cisco as a senior technical leader. I&amp;rsquo;ve been bouncing around different roles and industries building neat products and services for the past 20 years.&lt;/p>
&lt;h2 id="platform-experience">Platform Experience&lt;/h2>
&lt;p>I am experienced in most of the Microsoft technology stacks and languages. I have been professionally developing with .Net since version 1.0, and before that with VB and MFC C++.&lt;/p></description></item><item><title>Accessible Post Archive</title><link>https://coderrob.com/posts/list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://coderrob.com/posts/list/</guid><description/></item></channel></rss>