<?xml version="1.0" encoding="UTF-8"?>
      <urlset xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <url>
          <loc>https://philna.sh/</loc>
          <lastmod>2026-04-03T03:18:10.360Z</lastmod>
          <priority>1.00</priority>
        </url>
        <url>
          <loc>https://philna.sh/speaking/</loc>
        </url>
        <url>
          <loc>https://philna.sh/speaking/history/</loc>
        </url>
        <url>
          <loc>https://philna.sh/speaking/details/</loc>
        </url>
        <url>
          <loc>https://philna.sh/live/</loc>
        </url>
        <url>
          <loc>https://philna.sh/blog/</loc>
        </url>
        <url><loc>https://philna.sh/blog/page/2/</loc></url><url><loc>https://philna.sh/blog/page/3/</loc></url><url><loc>https://philna.sh/blog/page/4/</loc></url><url><loc>https://philna.sh/blog/page/5/</loc></url><url><loc>https://philna.sh/blog/page/6/</loc></url>
        <url><loc>https://philna.sh/blog/2026/03/05/talking-tips/</loc><lastmod>2026-03-05T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2026/01/28/trusted-publishing-npm/</loc><lastmod>2026-01-31T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2026/01/11/javascript-date-calculation/</loc><lastmod>2026-01-11T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2025/04/08/how-to-create-vector-embeddings-in-python/</loc><lastmod>2025-04-08T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2025/01/14/troubles-with-multipart-form-data-fetch-node-js/</loc><lastmod>2025-01-14T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2025/01/09/html-content-retrieval-augmented-generation-readability-js/</loc><lastmod>2025-01-09T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2024/12/30/shallow-clones-versus-structured-clones/</loc><lastmod>2024-12-30T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2024/09/25/how-to-create-vector-embeddings-in-node-js/</loc><lastmod>2024-09-25T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2024/09/18/how-to-chunk-text-in-javascript-for-rag-applications/</loc><lastmod>2024-09-18T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2024/08/22/fetch-streams-api-for-faster-ux-generative-ai-apps/</loc><lastmod>2024-08-22T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2023/09/14/javascript-array-grouping-methods/</loc><lastmod>2023-09-14T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2023/09/05/nodejs-supports-dotenv/</loc><lastmod>2023-09-05T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2023/07/13/easy-and-accessible-pagination-links-for-your-astro-collections/</loc><lastmod>2023-07-13T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2023/05/01/build-bots-on-bluesky-with-typescript/</loc><lastmod>2023-05-16T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2023/03/13/create-a-cli-chatbot-with-chatgpt-api-and-node-js/</loc><lastmod>2023-03-13T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2023/02/02/yaml-document-from-hell-javascript-edition/</loc><lastmod>2023-02-02T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2022/12/07/better-two-factor-authentication-experiences-with-web-otp/</loc><lastmod>2022-12-07T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2022/11/23/alias-your-mastodon-username-to-your-own-domain-with-jekyll/</loc><lastmod>2022-11-23T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2022/11/09/how-to-use-the-bitly-api-in-ruby/</loc><lastmod>2022-11-09T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2021/04/11/dont-ever-write-your-own-function-to-parse-url-parameters/</loc><lastmod>2021-04-11T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2021/03/15/restart-app-not-tunnel-ngrok-nodemon/</loc><lastmod>2021-03-15T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2021/02/22/display-dates-in-your-users-time-zone/</loc><lastmod>2021-02-22T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2020/08/06/how-to-stream-file-downloads-in-node-js-with-got/</loc><lastmod>2020-08-06T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2020/04/14/ngrok-for-vscode/</loc><lastmod>2020-04-14T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2020/03/23/responsive-twitch-embed/</loc><lastmod>2020-03-23T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2020/03/17/the-story-of-a-midly-popular-ruby-gem/</loc><lastmod>2020-03-17T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2020/03/04/mistakes-treating-paths-as-strings/</loc><lastmod>2020-03-04T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2020/01/29/how-to-find-cfps-for-developer-conferences/</loc><lastmod>2020-01-29T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2020/01/15/test-signed-cookies-in-rails/</loc><lastmod>2020-01-15T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2019/08/26/how-not-to-sort-an-array-in-javascript/</loc><lastmod>2019-08-26T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2019/01/10/how-to-start-a-node-js-project/</loc><lastmod>2019-01-10T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2019/01/03/2018-in-review/</loc><lastmod>2019-01-03T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/10/23/service-workers-beware-safaris-range-request/</loc><lastmod>2018-10-23T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/09/27/techniques-for-animating-on-the-canvas-in-react/</loc><lastmod>2018-09-27T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/09/04/implementing-one-time-passwords-in-crystal/</loc><lastmod>2018-09-04T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/08/21/git-commands-to-keep-a-fork-up-to-date/</loc><lastmod>2018-08-21T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/05/27/spring-clean-your-dev-machine/</loc><lastmod>2018-05-27T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/04/25/web-share-api-with-web-components/</loc><lastmod>2018-04-25T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/03/18/css-first-of-class/</loc><lastmod>2018-03-18T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/02/25/gzip-file-ruby/</loc><lastmod>2018-02-25T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2018/01/08/permissions-on-the-web-suck/</loc><lastmod>2018-01-08T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/07/12/two-tests-you-should-run-against-your-ruby-project-now/</loc><lastmod>2017-07-12T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/07/04/experimenting-with-the-background-fetch-api/</loc><lastmod>2017-07-04T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/06/12/speed-up-bundle-install-with-this-one-trick/</loc><lastmod>2017-06-12T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/03/22/always-install-bundler-alongside-ruby-with-rbenv/</loc><lastmod>2017-03-22T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/03/14/the-web-share-api/</loc><lastmod>2017-03-14T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/02/13/doing-things-wrong/</loc><lastmod>2017-02-13T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/02/09/toast-to-es2015-destructuring/</loc><lastmod>2017-02-09T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/01/27/on-fixing-a-favicon/</loc><lastmod>2017-01-27T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/01/12/dev-tools-tricks-store-objects-and-elements-as-variables-in-the-console/</loc><lastmod>2017-01-12T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2017/01/04/git-back-to-the-future/</loc><lastmod>2017-01-04T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2016/09/05/a-community-offers-to-help/</loc><lastmod>2016-09-05T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2016/08/17/install-a-service-worker-declaratively/</loc><lastmod>2016-08-17T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2016/08/01/august-is-ios-month/</loc><lastmod>2016-08-01T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2016/06/28/asset-pipelines-with-jekyll-assets/</loc><lastmod>2016-06-28T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2016/06/20/critique-my-swift-on-exercism/</loc><lastmod>2016-06-20T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2016/06/13/the-surprise-multipart-form-data/</loc><lastmod>2016-06-13T00:00:00.000Z</lastmod></url><url><loc>https://philna.sh/blog/2016/05/18/this-site-isnt-finished/</loc><lastmod>2016-05-18T00:00:00.000Z</lastmod></url>
      </urlset>