
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Duncan Leung</title>
      <link>https://www.duncanleung.com/blog</link>
      <description>📚 Learning, 👨🏻‍💻 Building, 📝 Documenting...</description>
      <language>en-us</language>
      <managingEditor>duncan@leungs.email (Duncan Leung)</managingEditor>
      <webMaster>duncan@leungs.email (Duncan Leung)</webMaster>
      <lastBuildDate>Sun, 22 Jun 2025 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://www.duncanleung.com/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://www.duncanleung.com/blog/claude-code-global-mcp-config</guid>
    <title>Setting up Global MCP Configuration for Claude Code</title>
    <link>https://www.duncanleung.com/blog/claude-code-global-mcp-config</link>
    <description>Learn how to configure MCP (Model Context Protocol) servers globally for Claude Code, making them available across all your projects.</description>
    <pubDate>Sun, 22 Jun 2025 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>claude-code</category><category>mcp</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/eslint-v9-typescript</guid>
    <title>Preparing for ESLint v9: TypeScript Integration Changes</title>
    <link>https://www.duncanleung.com/blog/eslint-v9-typescript</link>
    <description>A guide to the upcoming changes in ESLint v9 regarding TypeScript integration, including migration notes.</description>
    <pubDate>Thu, 18 Jul 2024 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>eslint</category><category>typescript</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/image-scrolling-loading</guid>
    <title>Tackling &#39;on load&#39; Scrolling in Chat Applications</title>
    <link>https://www.duncanleung.com/blog/image-scrolling-loading</link>
    <description>How to solve one of the most frustrating UX issues in chat applications: ensuring automatic scrolling works correctly when images load asynchronously.</description>
    <pubDate>Tue, 16 Apr 2024 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category><category>DOM</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/useref-resize-observer-react-dynamic-measurements</guid>
    <title>Why useRef Doesn&#39;t Work for Dynamic Element Measurements</title>
    <link>https://www.duncanleung.com/blog/useref-resize-observer-react-dynamic-measurements</link>
    <description>Why useRef alone is insufficient for dynamic measurements, and how to combine it with ResizeObserver and useState for responsive UI.</description>
    <pubDate>Tue, 16 Apr 2024 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category><category>DOM</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/missing-initial-state-firebase-auth-proxy-nextjs-vercel</guid>
    <title>Proxy Firebase Auth with NextJS on Vercel</title>
    <link>https://www.duncanleung.com/blog/missing-initial-state-firebase-auth-proxy-nextjs-vercel</link>
    <description>Solving Firebase Auth redirect issues on Vercel by implementing a proxy solution to handle SAML SSO authentication and resolve missing initial state errors.</description>
    <pubDate>Sat, 23 Sep 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>firebase</category><category>authentication</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/go-idiom-accept-interfaces-return-types</guid>
    <title>Go Idioms: Accept Interfaces, Return Types</title>
    <link>https://www.duncanleung.com/blog/go-idiom-accept-interfaces-return-types</link>
    <description>Understanding the Go idiom of accepting interfaces and returning concrete types to write flexible, reusable, and maintainable code.</description>
    <pubDate>Fri, 30 Jun 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/allocating-memory-go</guid>
    <title>Allocating Memory in Go</title>
    <link>https://www.duncanleung.com/blog/allocating-memory-go</link>
    <description>Understanding memory allocation in Go, including stack vs heap allocation, escape analysis, and how Go handles pointer returns from functions.</description>
    <pubDate>Wed, 28 Jun 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/methods-in-go</guid>
    <title>Methods in Go</title>
    <link>https://www.duncanleung.com/blog/methods-in-go</link>
    <description>Understanding Go methods, the difference between value and pointer receivers, embedding for composition, and how interfaces work with methods.</description>
    <pubDate>Wed, 28 Jun 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/slices-in-go</guid>
    <title>Slices in Go</title>
    <link>https://www.duncanleung.com/blog/slices-in-go</link>
    <description>Understanding Go slices, their underlying array structure, creation and modification mechanics, and the implications when passing slices to functions.</description>
    <pubDate>Mon, 26 Jun 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/go-json-encoding-and-decoding</guid>
    <title>JSON Encoding and Decoding in Go</title>
    <link>https://www.duncanleung.com/blog/go-json-encoding-and-decoding</link>
    <description>A guide to JSON serialization and deserialization in Go, covering type mappings, HTTP responses, and practical examples with the net/http package.</description>
    <pubDate>Mon, 19 Jun 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/go-function-arguments-passed-by-value</guid>
    <title>Go Function Argument Passing Behavior</title>
    <link>https://www.duncanleung.com/blog/go-function-arguments-passed-by-value</link>
    <description>How Go passes function arguments by value and the implications for different data types: integers, pointers, slices, strings, and structs.</description>
    <pubDate>Thu, 08 Jun 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/tailwind-css-unknown-at-rule</guid>
    <title>Tailwind CSS Unknown at Rule</title>
    <link>https://www.duncanleung.com/blog/tailwind-css-unknown-at-rule</link>
    <description>Fixing VSCode warnings for Tailwind CSS directives by creating custom CSS data configuration files for proper syntax recognition.</description>
    <pubDate>Wed, 11 Jan 2023 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>tailwind</category><category>css</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/nvm-commands-cheatsheet</guid>
    <title>NVM Commands Cheatsheet</title>
    <link>https://www.duncanleung.com/blog/nvm-commands-cheatsheet</link>
    <description>A comprehensive cheatsheet for Node Version Manager (NVM) commands including installation, version switching, aliasing, and management.</description>
    <pubDate>Fri, 23 Dec 2022 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>nodejs</category><category>nvm</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/understand-go-golang-interfaces</guid>
    <title>Understanding Interfaces in Go</title>
    <link>https://www.duncanleung.com/blog/understand-go-golang-interfaces</link>
    <description>A guide to understand Go interfaces through a power socket and electrical device analogy, covering duck typing and interface implementation.</description>
    <pubDate>Thu, 23 Dec 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/recover-accidental-git-push-force</guid>
    <title>Recover from a git push --force</title>
    <link>https://www.duncanleung.com/blog/recover-accidental-git-push-force</link>
    <description>How to recover from an accidental git push --force by using git reflog to find the previous commit and restore the branch to its original state.</description>
    <pubDate>Thu, 16 Dec 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>git</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/next-js-typescript-svg-any-module-declaration</guid>
    <title>Using SVGs with Next.js 11 and TypeScript</title>
    <link>https://www.duncanleung.com/blog/next-js-typescript-svg-any-module-declaration</link>
    <description>Fixing TypeScript ESLint errors when using SVGs with Next.js 11 by creating custom module declarations and configuring TypeScript properly.</description>
    <pubDate>Sat, 10 Jul 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>typescript</category><category>nextjs</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/go-basic-data-structures-types-pointers-structs-arrays-slices-int-float-string</guid>
    <title>Basic Data Structures in Go</title>
    <link>https://www.duncanleung.com/blog/go-basic-data-structures-types-pointers-structs-arrays-slices-int-float-string</link>
    <description>Understanding Go data structures and their memory layout including integers, floats, arrays, pointers, structs, strings, and slices.</description>
    <pubDate>Fri, 09 Jul 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/find-kill-process-port-3000-mac</guid>
    <title>Find and Kill Process on Port 3000</title>
    <link>https://www.duncanleung.com/blog/find-kill-process-port-3000-mac</link>
    <description>How to find and kill processes running on specific ports like 3000 on macOS using lsof and kill commands.</description>
    <pubDate>Wed, 30 Jun 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>macos</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/iterating-index-strings-runes-go-golang</guid>
    <title>Indexing Strings and Runes in Go</title>
    <link>https://www.duncanleung.com/blog/iterating-index-strings-runes-go-golang</link>
    <description>Understanding the difference between indexing strings as bytes versus runes in Go, and when to use each approach for proper Unicode handling.</description>
    <pubDate>Wed, 16 Jun 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/husky-prettier-eslint-precise-commits-lint-staged-pre-commit-pre-push</guid>
    <title>Setting Up Husky, Prettier, and ESLint with precise-commits and lint-staged</title>
    <link>https://www.duncanleung.com/blog/husky-prettier-eslint-precise-commits-lint-staged-pre-commit-pre-push</link>
    <description>Automatically format and lint code with Git hooks using Husky, Prettier, ESLint, precise-commits and lint-staged for pre-commit and pre-push workflows.</description>
    <pubDate>Sat, 12 Jun 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>eslint</category><category>prettier</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/golang-readers-writers</guid>
    <title>The io.Reader and io.Writer Interfaces in Go</title>
    <link>https://www.duncanleung.com/blog/golang-readers-writers</link>
    <description>Understanding the io.Reader and io.Writer interfaces in Go, and how accepting an io.Writer parameter makes your code flexible across files, HTTP responses, stdout, and in-memory buffers.</description>
    <pubDate>Mon, 03 May 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>backend</category><category>go</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/eslint-mixed-javascript-typescript-files-codebase</guid>
    <title>ESLint on TypeScript and JavaScript Files</title>
    <link>https://www.duncanleung.com/blog/eslint-mixed-javascript-typescript-files-codebase</link>
    <description>Setting up ESLint to parse and lint a mixed JavaScript and TypeScript codebase using overrides configuration for different file types.</description>
    <pubDate>Wed, 06 Jan 2021 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>eslint</category><category>typescript</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/accessing-material-ui-theme-object-emotion-styled-component-css-prop</guid>
    <title>Accessing Material UI Theme Object in Emotion JS</title>
    <link>https://www.duncanleung.com/blog/accessing-material-ui-theme-object-emotion-styled-component-css-prop</link>
    <description>A guide to access and utilize Material-UI theme objects within Emotion styled components and CSS props, with practical implementation examples.</description>
    <pubDate>Thu, 22 Oct 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category><category>material-ui</category><category>emotion</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/aws-set-up-email-billing-alert</guid>
    <title>Configuring AWS Email Billing Alerts with CloudWatch</title>
    <link>https://www.duncanleung.com/blog/aws-set-up-email-billing-alert</link>
    <description>A detailed guide to setting up automated email billing alerts in AWS using CloudWatch metrics and SNS notifications for cost monitoring.</description>
    <pubDate>Wed, 17 Jun 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>aws</category><category>cloudwatch</category><category>monitoring</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/serverless-securing-authenticate-aws-api-gateway-endpoints-cognito-iam-api-key</guid>
    <title>Securing AWS API Gateway Endpoints (Cognito, IAM, API Keys)</title>
    <link>https://www.duncanleung.com/blog/serverless-securing-authenticate-aws-api-gateway-endpoints-cognito-iam-api-key</link>
    <description>A guide to implement authentication and authorization in AWS API Gateway, covering Cognito User Pools, IAM roles, and API keys with practical examples.</description>
    <pubDate>Sat, 30 May 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>aws</category><category>serverless</category><category>security</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/serverless-set-breakpoint-locally-debug-aws-lambda</guid>
    <title>Set Breakpoints to Locally Debug AWS Lambda</title>
    <link>https://www.duncanleung.com/blog/serverless-set-breakpoint-locally-debug-aws-lambda</link>
    <description>A step-by-step guide to setting up and using breakpoints for local debugging of AWS Lambda functions, improving serverless development workflow.</description>
    <pubDate>Thu, 28 May 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>aws</category><category>serverless</category><category>debugging</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/serverless-pseudo-parameters-reference-another-lambda</guid>
    <title>Reference AWS Lambda API Endpoints in serverless.yml</title>
    <link>https://www.duncanleung.com/blog/serverless-pseudo-parameters-reference-another-lambda</link>
    <description>A detailed guide to using Serverless Framework pseudo parameters for referencing Lambda functions and other AWS resources in your serverless applications.</description>
    <pubDate>Sun, 10 May 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>aws</category><category>serverless</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/visual-studio-code-yml-custom-serverless-tag</guid>
    <title>Add Custom AWS YAML Tags in VS Code</title>
    <link>https://www.duncanleung.com/blog/visual-studio-code-yml-custom-serverless-tag</link>
    <description>Learn how to set up VS Code to properly recognize and validate custom YAML tags used in Serverless Framework configuration files.</description>
    <pubDate>Fri, 08 May 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>vscode</category><category>serverless</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/react-state-rerender-useeffect</guid>
    <title>Understanding useEffect: Each Render Has Its Own Props, State, and Effects</title>
    <link>https://www.duncanleung.com/blog/react-state-rerender-useeffect</link>
    <description>A mental model for useEffect — moving past the lifecycle (mount/update/unmount) mindset to thinking about effects as a way to synchronize side effects with React state and props.</description>
    <pubDate>Tue, 05 May 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category><category>hooks</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/switch-multiple-aws-profile-aws-cli-serverless</guid>
    <title>Switching AWS Profiles for Serverless CLI</title>
    <link>https://www.duncanleung.com/blog/switch-multiple-aws-profile-aws-cli-serverless</link>
    <description>A guide to set up and switch between multiple AWS profiles when working with AWS CLI and Serverless Framework projects.</description>
    <pubDate>Tue, 05 May 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>aws</category><category>serverless</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/how-to-teach-programming-the-importance-of-mental-models</guid>
    <title>How to Teach Programming (and other things)</title>
    <link>https://www.duncanleung.com/blog/how-to-teach-programming-the-importance-of-mental-models</link>
    <description>Exploring effective programming education through mental models, with practical strategies for building conceptual understanding and improving outcomes.</description>
    <pubDate>Thu, 30 Apr 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>programming</category><category>learning</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/select-contentful-locale-gatsby-context-graphql-variable</guid>
    <title>Select Gatsby Contentful Locale Data in GraphQL</title>
    <link>https://www.duncanleung.com/blog/select-contentful-locale-gatsby-context-graphql-variable</link>
    <description>A detailed guide to implementing dynamic locale selection in Gatsby using Contentful, GraphQL variables, and React Context for internationalized content.</description>
    <pubDate>Mon, 27 Apr 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>graphql</category><category>gatsby</category><category>i18n</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/typescript-type-guards</guid>
    <title>Using TypeScript Type Guards</title>
    <link>https://www.duncanleung.com/blog/typescript-type-guards</link>
    <description>A guide to use TypeScript type guards for runtime type checking and type narrowing in your TypeScript applications.</description>
    <pubDate>Fri, 17 Apr 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>typescript</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/typescript-array-map-over-union-array-type</guid>
    <title>Array .map() over TypeScript Array Union Types</title>
    <link>https://www.duncanleung.com/blog/typescript-array-map-over-union-array-type</link>
    <description>A guide to properly handling array map operations with union types in TypeScript, including type inference and type safety considerations.</description>
    <pubDate>Thu, 16 Apr 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>typescript</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/python-environment-variables</guid>
    <title>Load Python Environment Variables</title>
    <link>https://www.duncanleung.com/blog/python-environment-variables</link>
    <description>A guide to manage Python environment variables using dotenv, including best practices for configuration and security.</description>
    <pubDate>Mon, 06 Apr 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>python</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/testing-react-helmet-document-head-meta-tag-react-testing-library</guid>
    <title>Testing Document Head Meta Tags</title>
    <link>https://www.duncanleung.com/blog/testing-react-helmet-document-head-meta-tag-react-testing-library</link>
    <description>A detailed guide to testing React Helmet document head meta tags using React Testing Library, including setup, best practices, and common testing patterns.</description>
    <pubDate>Tue, 18 Feb 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>testing</category><category>jest</category><category>react-testing-library</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/typescript-generics-conditional-types-emotion-as-prop</guid>
    <title>Conditional Types to Infer Props from Emotion `as` Prop</title>
    <link>https://www.duncanleung.com/blog/typescript-generics-conditional-types-emotion-as-prop</link>
    <description>A guide to implement TypeScript generics and conditional types for type-safe Emotion components with dynamic as props, including practical patterns and examples.</description>
    <pubDate>Mon, 17 Feb 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>typescript</category><category>emotion</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/why-slow-plugin-typescript-eslint-performance-issues</guid>
    <title>Why typescript-eslint Performance is Slow</title>
    <link>https://www.duncanleung.com/blog/why-slow-plugin-typescript-eslint-performance-issues</link>
    <description>A deep dive into TypeScript ESLint plugin performance issues, exploring common bottlenecks and providing solutions for improved linting speed.</description>
    <pubDate>Mon, 10 Feb 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>eslint</category><category>typescript</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/how-to-setup-eslint-eslintrc-config-difference-eslint-config-plugin</guid>
    <title>Setting Up ESLint: Understanding Config Files and Plugins</title>
    <link>https://www.duncanleung.com/blog/how-to-setup-eslint-eslintrc-config-difference-eslint-config-plugin</link>
    <description>A guide to set up ESLint, explaining the differences between ESLint config files and plugins, with detailed configuration examples and best practices.</description>
    <pubDate>Tue, 28 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>eslint</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/profile-measure-find-remove-slow-eslint-rules</guid>
    <title>Profile and Remove Slow ESLint Rules</title>
    <link>https://www.duncanleung.com/blog/profile-measure-find-remove-slow-eslint-rules</link>
    <description>A detailed guide to profiling, measuring, and optimizing slow ESLint rules, with practical techniques for improving linting performance.</description>
    <pubDate>Thu, 16 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>eslint</category><category>optimization</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/typescript-module-declaration-svg-img-assets</guid>
    <title>TypeScript Module Declaration for SVG Assets</title>
    <link>https://www.duncanleung.com/blog/typescript-module-declaration-svg-img-assets</link>
    <description>A guide to create TypeScript module declarations for SVG and image assets, including webpack configuration and type definitions.</description>
    <pubDate>Wed, 15 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>typescript</category><category>webpack</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/aws-amplify-aws-exports-js-typescript</guid>
    <title>AWS Amplify TypeScript aws-exports.js</title>
    <link>https://www.duncanleung.com/blog/aws-amplify-aws-exports-js-typescript</link>
    <description>A guide to properly typing and integrating AWS Amplify configuration files in TypeScript projects, with focus on aws-exports.js setup.</description>
    <pubDate>Mon, 13 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>aws</category><category>typescript</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/storybook-decorators-emotion-theme-provider</guid>
    <title>Set Up Storybook Decorators - Emotion Theme Provider</title>
    <link>https://www.duncanleung.com/blog/storybook-decorators-emotion-theme-provider</link>
    <description>A guide to implementing Emotion Theme Provider decorators in Storybook, including troubleshooting common issues and best practices for theme management.</description>
    <pubDate>Fri, 10 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>storybook</category><category>emotion</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/storybook-decorators-react-intl-provider</guid>
    <title>Set Up Storybook Decorators - React Intl Provider</title>
    <link>https://www.duncanleung.com/blog/storybook-decorators-react-intl-provider</link>
    <description>A guide to configure React-Intl Provider decorators in Storybook for internationalization testing, including setup and best practices.</description>
    <pubDate>Fri, 10 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>storybook</category><category>i18n</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/import-svg-storybook-webpack-loader</guid>
    <title>Import SVG Components in Storybook</title>
    <link>https://www.duncanleung.com/blog/import-svg-storybook-webpack-loader</link>
    <description>A detailed guide to setting up Webpack loaders in Storybook for importing and using SVG files as React components.</description>
    <pubDate>Wed, 08 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>storybook</category><category>webpack</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/emotion-css-prop-jsx-pragma-storybook</guid>
    <title>Use Emotion CSS Prop in Storybook</title>
    <link>https://www.duncanleung.com/blog/emotion-css-prop-jsx-pragma-storybook</link>
    <description>A guide to configure Emotion CSS prop with JSX Pragma in Storybook, including setup, troubleshooting, and best practices.</description>
    <pubDate>Mon, 06 Jan 2020 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>emotion</category><category>storybook</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/git-sync-remote-upstream-fork</guid>
    <title>Sync a Git Remote Fork with Upstream</title>
    <link>https://www.duncanleung.com/blog/git-sync-remote-upstream-fork</link>
    <description>A step-by-step guide to keeping your Git fork in sync with the original upstream repository, including remote tracking and branch management.</description>
    <pubDate>Wed, 18 Dec 2019 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>git</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/testing-validation-schema-formik-form</guid>
    <title>Testing ValidationSchema Formik Forms</title>
    <link>https://www.duncanleung.com/blog/testing-validation-schema-formik-form</link>
    <description>A detailed guide to testing Formik form validation schemas using Jest and React Testing Library, covering validation rules, error handling, and test patterns.</description>
    <pubDate>Tue, 03 Dec 2019 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>testing</category><category>jest</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/python-name-main-pattern</guid>
    <title>What is, if __name__ == &quot;__main__&quot;:</title>
    <link>https://www.duncanleung.com/blog/python-name-main-pattern</link>
    <description>An in-depth explanation of the __name__ == __main__ pattern in Python, why it exists, and how to use it effectively in your modules.</description>
    <pubDate>Mon, 02 Dec 2019 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>python</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/set-up-python-pyenv-virtualenv-poetry</guid>
    <title>Setting Up Python: pyenv, pyenv-virtualenv, poetry</title>
    <link>https://www.duncanleung.com/blog/set-up-python-pyenv-virtualenv-poetry</link>
    <description>A guide to set up a modern Python development environment using pyenv for version management and Poetry for dependency management.</description>
    <pubDate>Wed, 27 Nov 2019 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>python</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/fixing-netlify-build-fail</guid>
    <title>Fixing Netlify Build Fail - error #98123 WEBPACK</title>
    <link>https://www.duncanleung.com/blog/fixing-netlify-build-fail</link>
    <description>A practical guide to diagnosing and resolving common Netlify build failures, including deployment issues and continuous integration troubleshooting.</description>
    <pubDate>Tue, 26 Nov 2019 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>netlify</category><category>devops</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/hacktoberfest-oc-meetup</guid>
    <title>Hacktoberfest Orange County Meetup</title>
    <link>https://www.duncanleung.com/blog/hacktoberfest-oc-meetup</link>
    <description>Recap of the Hacktoberfest Orange County meetup — open source contributions, community engagement, and collaborative coding experiences.</description>
    <pubDate>Tue, 16 Oct 2018 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>hacktoberfest</category><category>events</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/testing-formik-form-onsubmit</guid>
    <title>Testing Formik &#39;onSubmit&#39; with Jest</title>
    <link>https://www.duncanleung.com/blog/testing-formik-form-onsubmit</link>
    <description>A detailed guide to testing Formik form submission handlers using Jest and React Testing Library, including async submissions and validation testing.</description>
    <pubDate>Mon, 15 Oct 2018 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>testing</category><category>jest</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/fixing-react-warning-synthetic-events-in-setstate</guid>
    <title>Fixing React Warning: Synthetic Events in setState()</title>
    <link>https://www.duncanleung.com/blog/fixing-react-warning-synthetic-events-in-setstate</link>
    <description>Understand and resolve React synthetic event warnings in setState, with best practices for event handling and state updates.</description>
    <pubDate>Mon, 14 Aug 2017 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/react-pure-render-this-binding-patterns</guid>
    <title>Pure render() &#39;this&#39; Binding Patterns in React</title>
    <link>https://www.duncanleung.com/blog/react-pure-render-this-binding-patterns</link>
    <description>A deep dive into React pure render optimization and method binding patterns, exploring different approaches for improving component performance.</description>
    <pubDate>Wed, 02 Aug 2017 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category><category>performance</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/webpack-build-react-production-windows</guid>
    <title>webpack: Building React For Production on Windows</title>
    <link>https://www.duncanleung.com/blog/webpack-build-react-production-windows</link>
    <description>A guide to configuring Webpack for building optimized React production bundles on Windows, including environment-specific settings and common pitfalls.</description>
    <pubDate>Mon, 31 Jul 2017 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category><category>webpack</category>
  </item>

  <item>
    <guid>https://www.duncanleung.com/blog/avoiding-react-setstate-pitfalls</guid>
    <title>Avoiding React setState() Pitfalls</title>
    <link>https://www.duncanleung.com/blog/avoiding-react-setstate-pitfalls</link>
    <description>A guide to avoiding common pitfalls when using setState in React, including asynchronous updates, batching, and state management patterns.</description>
    <pubDate>Sat, 15 Jul 2017 00:00:00 GMT</pubDate>
    <author>duncan@leungs.email (Duncan Leung)</author>
    <category>react</category>
  </item>

    </channel>
  </rss>
