41554 blogs · [ { "id": "01a0879c-6ea1-71ea-864a-9eb4f612a777", "title": "dataValue and serializedValue in OpenAPI 3.2", "url": "https://lornajane.net/posts/2026/datavalue-and-serializedvalue-in-openapi-3-2", "published_at": "2026-08-31T08:00:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4f6f4839e", "title": "From Wordpress to Static Site Generator", "url": "https://lornajane.net/posts/2026/from-wordpress-to-ssg", "published_at": "2026-08-20T11:00:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4f7b068b9", "title": "Using mitmproxy reverse mode for API testing", "url": "https://lornajane.net/posts/2026/using-mitmproxy-reverse-mode", "published_at": "2026-06-29T19:06:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4f7cdb2f5", "title": "Selectively ignore lines in git diff", "url": "https://lornajane.net/posts/2026/selectively-ignore-lines-in-git-diff", "published_at": "2026-03-04T07:57:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4f8813ffb", "title": "Git renames are not renames", "url": "https://lornajane.net/posts/2026/git-renames-are-not-renames", "published_at": "2026-01-28T09:29:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4f976dead", "title": "Manage Diagrams in AsciiDoc on GitHub", "url": "https://lornajane.net/posts/2026/manage-diagrams-in-asciidoc-on-github", "published_at": "2026-01-25T21:22:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4f97c1ba7", "title": "Tag Kinds in OpenAPI 3.2", "url": "https://lornajane.net/posts/2025/tag-kinds-in-openapi-3-2", "published_at": "2025-12-08T08:32:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4f99f2da7", "title": "Nested tags in OpenAPI 3.2", "url": "https://lornajane.net/posts/2025/nested-tags-in-openapi-3-2", "published_at": "2025-12-04T20:53:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fa5a777e", "title": "Notification Contexts Matter", "url": "https://lornajane.net/posts/2025/notification-contexts-matter", "published_at": "2025-11-16T21:13:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4face496d", "title": "Quick local API docs with Scalar", "url": "https://lornajane.net/posts/2025/quick-local-api-docs-with-scalar", "published_at": "2025-09-17T20:05:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4faf8f16b", "title": "API Specificity with Overlays and Enums", "url": "https://lornajane.net/posts/2025/api-specificity-with-overlays-and-enums", "published_at": "2025-07-21T07:48:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fb73f9fc", "title": "Safe Screensharing Setup", "url": "https://lornajane.net/posts/2025/safe-screensharing-setup", "published_at": "2025-06-10T16:32:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fb9c464d", "title": "Publish to GitHub pages with Sphinx", "url": "https://lornajane.net/posts/2025/publish-to-github-pages-with-sphinx", "published_at": "2025-06-05T08:59:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fc57bc57", "title": "Just Enough Docs", "url": "https://lornajane.net/posts/2025/just-enough-docs", "published_at": "2025-04-28T17:12:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fd516e3d", "title": "Right-Size Your RESTful API: More Flexibility Without GraphQL", "url": "https://lornajane.net/posts/2025/better-rest-before-graphql", "published_at": "2025-03-26T10:31:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fd88fcba", "title": "Markdown/Mermaid output for OpenAPI Arazzo", "url": "https://lornajane.net/posts/2025/markdown-mermaid-output-for-openapi-arazzo", "published_at": "2025-03-12T16:01:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fe84f48a", "title": "From HTTP to OpenAPI with Optic", "url": "https://lornajane.net/posts/2025/from-http-to-openapi-with-optic", "published_at": "2025-02-17T10:07:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4fed10625", "title": "Preview OpenAPI as HTML using Scalar", "url": "https://lornajane.net/posts/2025/preview-openapi-as-html-using-scalar", "published_at": "2025-02-14T14:49:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4ffb2581d", "title": "Presenting with pdfpc", "url": "https://lornajane.net/posts/2025/presenting-with-pdfpc", "published_at": "2025-02-11T12:08:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb4ffc91c47", "title": "Querying the GitHub GraphQL API", "url": "https://lornajane.net/posts/2025/querying-the-github-graphql-api", "published_at": "2025-01-27T12:48:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5006401d6", "title": "Save edits to OpenAPI as an Overlay", "url": "https://lornajane.net/posts/2025/save-edits-to-openapi-as-an-overlay", "published_at": "2025-01-09T12:18:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50085b13c", "title": "Run GitHub Actions on Subdirectories", "url": "https://lornajane.net/posts/2025/run-github-actions-on-subdirectories", "published_at": "2025-01-07T13:39:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb500a4c872", "title": "OpenAPI Overlays to avoid API oversharing", "url": "https://lornajane.net/posts/2024/openapi-overlays-to-avoid-api-oversharing", "published_at": "2024-12-12T11:37:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5015de5fd", "title": "Use multi-line values in GitHub Actions", "url": "https://lornajane.net/posts/2024/use-multi-line-values-in-github-actions", "published_at": "2024-11-25T10:25:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb501794a91", "title": "How to structure and share code examples", "url": "https://lornajane.net/posts/2024/how-to-structure-and-share-code-examples", "published_at": "2024-11-18T09:28:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb502459e32", "title": "Pretty-print JSON with jq", "url": "https://lornajane.net/posts/2024/pretty-print-json-with-jq", "published_at": "2024-11-01T17:20:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50342d8a5", "title": "Open Standards for APIs", "url": "https://lornajane.net/posts/2024/open-standards-for-apis", "published_at": "2024-10-09T07:21:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50433bad9", "title": "Lint APIs with Redocly CLI", "url": "https://lornajane.net/posts/2024/lint-apis-with-redocly-cli", "published_at": "2024-08-05T06:58:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb504b9a517", "title": "API Description Pipelines", "url": "https://lornajane.net/posts/2024/pipelines-api-descriptions", "published_at": "2024-06-18T20:54:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50584e36e", "title": "Checking Links in Docs-As-Code Projects", "url": "https://lornajane.net/posts/2024/checking-links-in-docs-as-code-projects", "published_at": "2024-04-27T16:48:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50631b348", "title": "Reviewdog filter settings with GitHub Actions", "url": "https://lornajane.net/posts/2024/reviewdog-filter-settings-with-github-actions", "published_at": "2024-03-25T08:10:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb507297395", "title": "Short tech writing style guide for developers", "url": "https://lornajane.net/posts/2024/short-tech-writing-style-guide-for-developers", "published_at": "2024-01-24T09:18:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb507ae05a9", "title": "API Linting Levels", "url": "https://lornajane.net/posts/2024/api-linting-levels", "published_at": "2024-01-11T00:05:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb507cf0353", "title": "Add OpenAI flags to OpenAPI descriptions", "url": "https://lornajane.net/posts/2023/add-openai-consequential-to-openapi", "published_at": "2023-11-28T09:48:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb507ed5dd0", "title": "When to version bump your OpenAPI description", "url": "https://lornajane.net/posts/2023/when-to-version-bump-your-openapi-description", "published_at": "2023-11-20T13:10:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5083c9d29", "title": "API docs previews with Redoc and Netlify", "url": "https://lornajane.net/posts/2023/api-docs-previews-with-redoc-and-netlify", "published_at": "2023-11-08T09:18:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb508f47659", "title": "Selective prose linting with Vale's glob switch", "url": "https://lornajane.net/posts/2023/selective-prose-linting-with-vales-glob-switch", "published_at": "2023-08-23T10:55:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5095f0cd7", "title": "Visualise OpenAPI with Blockly", "url": "https://lornajane.net/posts/2023/visualise-openapi-with-blockly", "published_at": "2023-06-20T11:57:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50a3f64e9", "title": "Tips for better documentation with OpenAPI", "url": "https://lornajane.net/posts/2023/tips-for-better-documentation-with-openapi", "published_at": "2023-06-12T12:30:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50a538d60", "title": "Raising the Next Generation of DevRel", "url": "https://lornajane.net/posts/2023/raising-the-next-generation-of-devrel", "published_at": "2023-03-08T20:42:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50a85fb32", "title": "Improve Existing OpenAPI Descriptions", "url": "https://lornajane.net/posts/2023/overlay-improvements-to-openapi", "published_at": "2023-02-28T18:04:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50b688568", "title": "Manager's Secret Second Calendar", "url": "https://lornajane.net/posts/2023/managers-secret-second-calendar", "published_at": "2023-02-26T16:33:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50bd07f18", "title": "Generating a nice-looking PDF with Pandoc", "url": "https://lornajane.net/posts/2023/generating-a-nice-looking-pdf-with-pandoc", "published_at": "2023-01-03T10:33:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50c09f07b", "title": "Sphinx extensions for developer portals", "url": "https://lornajane.net/posts/2022/sphinx-extensions-for-developer-portals", "published_at": "2022-11-08T09:27:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50c5811be", "title": "Internal DevRel: Colleague Enablement", "url": "https://lornajane.net/posts/2022/internal-devrel-colleague-enablement", "published_at": "2022-09-26T14:09:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50c7fff2f", "title": "Outline your writing to ease the creative process", "url": "https://lornajane.net/posts/2022/outline-your-writing-to-ease-the-creative-process", "published_at": "2022-04-11T08:39:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50d7732ca", "title": "Who are you writing that commit message for?", "url": "https://lornajane.net/posts/2022/who-are-you-writing-that-commit-message-for", "published_at": "2022-03-31T19:55:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50e1bc5ff", "title": "Weekly Planning with Obsidian", "url": "https://lornajane.net/posts/2022/weekly-planning-with-obsidian", "published_at": "2022-02-16T13:01:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50ebae45c", "title": "Keeping your finger on the (digital) pulse", "url": "https://lornajane.net/posts/2022/keeping-your-finger-on-the-digital-pulse", "published_at": "2022-02-15T18:25:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb50f50cd5a", "title": "Open Source and Business", "url": "https://lornajane.net/posts/2022/open-source-and-business", "published_at": "2022-02-12T18:03:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb51002a798", "title": "VSCode setup for technical writers", "url": "https://lornajane.net/posts/2022/vscode-setup-for-technical-writers", "published_at": "2022-01-05T14:23:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5105fec94", "title": "What Happened to your Blog?", "url": "https://lornajane.net/posts/2021/what-happened-to-your-blog", "published_at": "2021-12-12T20:20:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb510abfd25", "title": "Sphinx front matter and template variables", "url": "https://lornajane.net/posts/2021/sphinx-front-matter-and-template-variables", "published_at": "2021-09-10T20:47:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb510d6dcf8", "title": "Use Database Connection Strings with Laravel 8", "url": "https://lornajane.net/posts/2021/use-database-connection-strings-with-laravel-8", "published_at": "2021-08-18T07:56:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb511d69c9e", "title": "Hold Attention on the Virtual Stage", "url": "https://lornajane.net/posts/2021/hold-attention-on-the-virtual-stage", "published_at": "2021-08-08T21:37:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5123e7e11", "title": "Define Navigation Structure in a Sphinx Project", "url": "https://lornajane.net/posts/2021/define-navigation-structure-in-a-sphinx-project", "published_at": "2021-06-13T18:11:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5133d4a11", "title": "Considering Developer Relations as a Career Move", "url": "https://lornajane.net/posts/2021/considering-developer-relations", "published_at": "2021-05-24T10:02:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb513a09f27", "title": "Best Things About Developer Advocacy", "url": "https://lornajane.net/posts/2021/best-things-about-devrel", "published_at": "2021-04-26T19:07:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb513dc1ff2", "title": "Measuring Repo Community Health with GitHub's API", "url": "https://lornajane.net/posts/2021/measuring-github-community-health", "published_at": "2021-04-14T08:19:00+00:00" }, { "id": "01a0879c-6ea1-71ea-864a-9eb5146585cc", "title": "From Spreadsheet to Database with ddlgenerator", "url": "https://lornajane.net/posts/2021/from-spreadsheet-to-database-with-ddlgenerator", "published_at": "2021-03-22T16:33:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab97696c50bf", "title": "Intro to RPi Pico with Mini Memory Game", "url": "https://lornajane.net/posts/2021/intro-to-rpi-pico-with-mini-memory-game", "published_at": "2021-02-08T21:49:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9769e631f6", "title": "Lab Book Meets Bullet Journal", "url": "https://lornajane.net/posts/2021/lab-book-meets-bullet-journal", "published_at": "2021-01-31T21:39:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976abd0d73", "title": "Digital Developer Relations: Past and Future", "url": "https://lornajane.net/posts/2020/digital-developer-relations-past-and-future", "published_at": "2020-12-23T09:24:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976ba33909", "title": "What's New in OpenAPI 3.1", "url": "https://lornajane.net/posts/2020/whats-new-in-openapi-3-1", "published_at": "2020-12-14T09:54:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976c015e0e", "title": "Bystanders Guide to Repository Maintenance", "url": "https://lornajane.net/posts/2020/bystanders-guide-to-repository-maintenance", "published_at": "2020-12-04T20:20:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976cc2d094", "title": "Making SDKs a Value-Added Experience", "url": "https://lornajane.net/posts/2020/making-sdks-a-value-added-experience", "published_at": "2020-11-16T10:18:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976ce3a581", "title": "DevContainers, VSCode and GitHub Codespaces", "url": "https://lornajane.net/posts/2020/devcontainers-vscode-and-github-codespaces", "published_at": "2020-11-15T13:31:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976d5ba9e9", "title": "Ubuntu Command for Mic Mute with Pulsemixer", "url": "https://lornajane.net/posts/2020/ubuntu-command-for-mic-mute-with-pulsemixer", "published_at": "2020-11-12T17:27:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976d9cadd9", "title": "Keyboard-only Web Browser", "url": "https://lornajane.net/posts/2020/keyboard-only-web-browser", "published_at": "2020-10-22T12:53:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976dbef8f9", "title": "Combine Multiple Field Tags in Go", "url": "https://lornajane.net/posts/2020/combine-multiple-field-tags-in-go", "published_at": "2020-10-21T08:46:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976e397e79", "title": "Adding Tables of Contents to Markdown", "url": "https://lornajane.net/posts/2020/adding-tables-of-contents-to-markdown", "published_at": "2020-10-18T19:34:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976efba565", "title": "Package Webpages as Apps with Nativefier", "url": "https://lornajane.net/posts/2020/package-webpages-as-apps-with-nativefier", "published_at": "2020-09-15T10:22:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976f99380b", "title": "Create .desktop files for Ubuntu", "url": "https://lornajane.net/posts/2020/create-desktop-files-for-ubuntu", "published_at": "2020-09-13T10:21:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab976fab9669", "title": "Sharing Screen and Camera from Android to Linux", "url": "https://lornajane.net/posts/2020/sharing-screen-and-camera-from-android-to-linux", "published_at": "2020-08-17T08:38:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab97702de5e2", "title": "An Intro to Your ESP8266", "url": "https://lornajane.net/posts/2020/an-intro-to-your-esp8266", "published_at": "2020-08-08T19:54:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9770994738", "title": "Creating a Simple OpenAPI Spec", "url": "https://lornajane.net/posts/2020/creating-a-simple-openapi-spec", "published_at": "2020-08-06T12:44:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9770bd2545", "title": "Using Environments in Postman", "url": "https://lornajane.net/posts/2020/using-environments-in-postman", "published_at": "2020-07-23T15:55:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9770bdfaec", "title": "Planets and Webhooks: a simple Flask app", "url": "https://lornajane.net/posts/2020/planets-and-webhooks-a-simple-flask-app", "published_at": "2020-07-22T13:50:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9771963446", "title": "Neopixel Shelf", "url": "https://lornajane.net/posts/2020/neopixel-shelf", "published_at": "2020-07-18T16:47:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9772835afd", "title": "Add a Screenshot Button to Streamdeck with Golang", "url": "https://lornajane.net/posts/2020/add-a-screenshot-button-to-streamdeck-with-golang", "published_at": "2020-07-06T09:09:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab97731587d1", "title": "Accessing Nested Config with Viper", "url": "https://lornajane.net/posts/2020/accessing-nested-config-with-viper", "published_at": "2020-06-25T20:28:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9773b5c6c2", "title": "Use a Local Version of a Library in Go", "url": "https://lornajane.net/posts/2020/use-a-local-version-of-a-library-in-go", "published_at": "2020-06-15T08:51:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9773db69bb", "title": "OBS Studio, Ubuntu 20.04 and a Wacom Tablet", "url": "https://lornajane.net/posts/2020/obs-ubuntu-20-04-and-a-wacom-tablet", "published_at": "2020-05-31T19:31:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977469ffa4", "title": "Eye Contact Owl", "url": "https://lornajane.net/posts/2020/eye-contact-owl", "published_at": "2020-05-26T19:11:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab97756802b2", "title": "Custom OpenAPI Style Rules with Spectral", "url": "https://lornajane.net/posts/2020/custom-openapi-style-rules-with-spectral", "published_at": "2020-05-21T14:54:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977665ff36", "title": "The python-is-python2 package on Ubuntu Focal Fossa", "url": "https://lornajane.net/posts/2020/the-python-is-python2-package-on-ubuntu-focal-fossa", "published_at": "2020-04-24T18:15:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9776df01bb", "title": "A First Netlify Function in Golang", "url": "https://lornajane.net/posts/2020/a-first-netlify-function-in-golang", "published_at": "2020-04-15T10:20:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977706a3c4", "title": "Wget Direct to S3 with Golang Streams", "url": "https://lornajane.net/posts/2020/wget-direct-to-s3-with-golang-streams", "published_at": "2020-04-08T15:30:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9777a4eb22", "title": "HTTPMock for Testing a Golang API Client", "url": "https://lornajane.net/posts/2020/httpmock-for-testing-a-golang-api-client", "published_at": "2020-03-30T19:08:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9778698c7d", "title": "Remove Accidental Content from Git Commit", "url": "https://lornajane.net/posts/2020/remove-accidental-content-from-git-commit", "published_at": "2020-03-15T20:24:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9778f5b217", "title": "Teach Your API Test Platform to Send Callbacks", "url": "https://lornajane.net/posts/2020/teach-your-api-test-platform-to-send-callbacks", "published_at": "2020-02-18T15:50:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab9778f65bc2", "title": "Make Thumbnails of PDF Pages with ImageMagick", "url": "https://lornajane.net/posts/2020/make-thumbnails-of-pdf-pages-with-imagemagick", "published_at": "2020-02-16T15:06:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977931c296", "title": "Instant Test API Platforms with Prism", "url": "https://lornajane.net/posts/2020/instant-test-api-platforms-with-prism", "published_at": "2020-01-23T11:17:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977a08e3be", "title": "Grab Annotations from a PDF with pypdf2", "url": "https://lornajane.net/posts/2020/grab-annotations-from-a-pdf-with-pypdf2", "published_at": "2020-01-15T20:37:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977af4b436", "title": "Raspberry Pi SenseHat Night Clock", "url": "https://lornajane.net/posts/2019/raspberry-pi-sensehat-night-clock", "published_at": "2019-12-28T09:36:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977be22a75", "title": "Counting Duplicate Commit Messages", "url": "https://lornajane.net/posts/2019/counting-duplicate-commit-messages", "published_at": "2019-12-16T16:24:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977cb84d3e", "title": "Ruby for non-Rubyists with Snap", "url": "https://lornajane.net/posts/2019/ruby-for-non-rubyists-with-snap", "published_at": "2019-10-07T08:52:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977db2cc42", "title": "Sniglet is a Font for Avoiding Font Loading Mistakes", "url": "https://lornajane.net/posts/2019/sniglet-is-a-font-for-avoiding-font-loading-mistakes", "published_at": "2019-09-16T19:45:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977e854af1", "title": "OpenAPI Description using API key and secret", "url": "https://lornajane.net/posts/2019/openapi-description-using-api-key-secret", "published_at": "2019-08-15T17:10:00+00:00" }, { "id": "01a0879c-6ea2-71f5-80c9-ab977f31f16f", "title": "The Laravel Synchronous Queue", "url": "https://lornajane.net/posts/2019/the-laravel-synchronous-queue", "published_at": "2019-05-20T14:43:00+00:00" } ] posts Claim your blog
Back to lornajane
Blog · corpus.blog/blogs/lornajane.net/posts

lornajane

lornajane.net

2026

2025

2024

2023

2022

2021

2020

2019