56,966 blogs · [ { "id": "01a0d8ba-50c8-70ab-8f76-6820c2ce5e50", "title": "Make APEXlang Easy: Makefiles and Merge-Safe Imports", "url": "https://hartenfeller.dev/blog/makefiles-for-apex-projects", "published_at": "2026-09-23T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669805ff98", "title": "Oracle Free image bumps aren't upgrades; how to patch the data dictionary anyway", "url": "https://hartenfeller.dev/blog/patch-oracle-free-data-dictionary", "published_at": "2026-08-12T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c26698ec2ae7", "title": "Programmatic Tool Calling in the Oracle Database with MLE JavaScript", "url": "https://hartenfeller.dev/blog/programmatic-tool-calling-oracle-mle", "published_at": "2026-07-29T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266999cb4e1", "title": "Letting Coding Agents Lint Their Own PL/SQL with dbLinter", "url": "https://hartenfeller.dev/blog/dblinter-for-agents", "published_at": "2026-07-14T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c26699a299bf", "title": "Run Oracle APEX 26.1 Locally", "url": "https://hartenfeller.dev/blog/run-apex-26-1-locally", "published_at": "2026-05-15T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669a1ba8df", "title": "UC AI Chat Plug-In Beta", "url": "https://hartenfeller.dev/blog/uc-ai-chat-plugin-beta", "published_at": "2026-05-11T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669adffce7", "title": "Best Practices for LLM Tools or Function Calling for Oracle Developers", "url": "https://hartenfeller.dev/blog/ai-tools-best-practice-oracle", "published_at": "2026-05-07T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669b421672", "title": "Mixing APEX Universal Theme Colors with the mix-color function", "url": "https://hartenfeller.dev/blog/apex-mix-universal-theme-colors", "published_at": "2026-03-25T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669b576dba", "title": "UC AI v26.1: Multi-Agent Systems, Prompt Profiles & Responses API for PL/SQL", "url": "https://hartenfeller.dev/blog/uc-ai-v26-1", "published_at": "2026-03-17T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669b9460d6", "title": "Teaching AI coding assistants Oracle APEX", "url": "https://hartenfeller.dev/blog/teaching-ai-coding-assistants-apex", "published_at": "2026-02-19T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669c000c85", "title": "Upgrading uc-local-apex-dev from 23ai to 26ai without data loss", "url": "https://hartenfeller.dev/blog/upgrade-to-26ai-for-uc-local-apex-dev", "published_at": "2026-01-08T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669c518b74", "title": "UC AI v25.7: Embeddings, xAI, OpenRouter and Toon", "url": "https://hartenfeller.dev/blog/plsql-ai-sdk-uc-ai-25-7", "published_at": "2025-12-09T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669ca47bcb", "title": "This blog is now on Astro thanks to Antigravity!", "url": "https://hartenfeller.dev/blog/blog-is-now-astro", "published_at": "2025-12-08T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669cbda2bb", "title": "Toon for Oracle: A Token-Efficient Data Format for LLMs", "url": "https://hartenfeller.dev/blog/oracle-toon-implementation", "published_at": "2025-11-18T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669d749869", "title": "Oracle APEX Reactive Markdown Plug-in #JoelKallmanDay", "url": "https://hartenfeller.dev/blog/apex-reactive-markdown-plugin", "published_at": "2025-10-15T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669e28b294", "title": "Build Real AI Solutions with Oracle PL/SQL (No 23ai Required)", "url": "https://hartenfeller.dev/blog/real-ai-solutions-oracle-plsql", "published_at": "2025-09-17T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669ef30991", "title": "How to Run Open GPT Models Locally and Integrate Them with Oracle APEX", "url": "https://hartenfeller.dev/blog/open-and-local-AI-models-in-oracle", "published_at": "2025-08-12T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669fc9ac42", "title": "You should try having a local database with APEX", "url": "https://hartenfeller.dev/blog/you-should-have-local-apex", "published_at": "2025-07-29T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c2669fea6131", "title": "Demystifying the SQLcl MCP Server", "url": "https://hartenfeller.dev/blog/demystifying-sqlcl-mcp-server", "published_at": "2025-07-17T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a0ca9323", "title": "Easily query testdata with Oracle APEX and the power of SQL Macros", "url": "https://hartenfeller.dev/blog/apex-testdata-and-sql-macros", "published_at": "2025-05-22T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a0ff9731", "title": "Why I create presentations in HTML", "url": "https://hartenfeller.dev/blog/presentations-in-html", "published_at": "2025-03-24T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a1068e41", "title": "Putting Claude Code to the Test", "url": "https://hartenfeller.dev/blog/testing-claude-code", "published_at": "2025-02-27T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a194bf42", "title": "SQLcl with JavaScript on macOS using GraalVM", "url": "https://hartenfeller.dev/blog/sqlcl-js-graalvm-macos", "published_at": "2025-01-07T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a259a596", "title": "Year in review: 2024", "url": "https://hartenfeller.dev/blog/year-2024-in-review", "published_at": "2024-12-30T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a2ba95de", "title": "How to fix containerized Oracle 23ai Database not starting on Mac", "url": "https://hartenfeller.dev/blog/containerized-oracle-db-wont-start", "published_at": "2024-11-08T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a2d189b5", "title": "Alfred workflow to supercharge Oracle APEX development #JoelKallmanDay", "url": "https://hartenfeller.dev/blog/apex-alfred-dev-workflow", "published_at": "2024-10-16T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a35549ea", "title": "Oracle APEX 24.1 Template Component Improvements", "url": "https://hartenfeller.dev/blog/apex-24-1-template-component-improvements", "published_at": "2024-06-18T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a425e7b5", "title": "Minimize all windows on Mac OS", "url": "https://hartenfeller.dev/blog/mac-minimize-all-windows", "published_at": "2024-06-17T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a46c8e47", "title": "Upgrading from Oracle 23c FREE to 23ai", "url": "https://hartenfeller.dev/blog/upgrade-oracle-23c-to-23ai-docker", "published_at": "2024-05-06T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a5454526", "title": "How to add global application search to your APEX app", "url": "https://hartenfeller.dev/blog/apex-global-application-search", "published_at": "2024-04-15T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a645178c", "title": "How to contribute to an open-source Oracle APEX Plug-in", "url": "https://hartenfeller.dev/blog/oracle-apex-contribute-open-source-plug-in", "published_at": "2024-01-16T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a74408dd", "title": "Advent of Code 2023 in Oracle - Day 7: Camel Cards", "url": "https://hartenfeller.dev/blog/advent-of-code-oracle-2023-day7", "published_at": "2023-12-07T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a7856876", "title": "Advent of Code 2023 in Oracle - Day 1 and 2", "url": "https://hartenfeller.dev/blog/advent-of-code-oracle-2023-day1-2", "published_at": "2023-12-02T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a81adc8b", "title": "Oracle APEX 23.2 Workflows: A First Look", "url": "https://hartenfeller.dev/blog/apex-23-2-workflows-first-look", "published_at": "2023-10-18T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a87d2f25", "title": "Oracle APEX Template Components with Web Components #JoelKallmanDay", "url": "https://hartenfeller.dev/blog/apex-template-component-web-comp", "published_at": "2023-10-11T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a95b0877", "title": "View Transitions in Oracle APEX", "url": "https://hartenfeller.dev/blog/apex-view-transitions", "published_at": "2023-09-02T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a9db8606", "title": "Mastering Web Components: A Comprehensive Step-by-Step Guide", "url": "https://hartenfeller.dev/blog/web-components-step-by-step", "published_at": "2023-08-10T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266a9fb3380", "title": "APEX Template Component Competition is live now", "url": "https://hartenfeller.dev/blog/apex-template-component-competition-live", "published_at": "2023-08-01T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266aa0942ba", "title": "Reusable, and Translatable: Oracle APEX Text Messages", "url": "https://hartenfeller.dev/blog/oracle-apex-text-messages", "published_at": "2023-07-06T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266aa37fd32", "title": "Oracle APEX AG-Grid Plug-In 0.3 (beta)", "url": "https://hartenfeller.dev/blog/apex-ag-grid-plugin-v0.3", "published_at": "2023-04-25T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266aa7df748", "title": "Creating an Offline-Ready SvelteKit Application Using SQLite (Part 2): Messaging and Client Tables", "url": "https://hartenfeller.dev/blog/sveltekit-offline-sqlite-2", "published_at": "2023-04-20T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266ab1a39b1", "title": "Introduction to Template Components in Oracle APEX 23.1", "url": "https://hartenfeller.dev/blog/oracle-apex-template-components-introduction", "published_at": "2023-04-18T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266abead581", "title": "Creating an Offline-Ready SvelteKit Application Using SQLite (Part 1): Setting up the Database", "url": "https://hartenfeller.dev/blog/sveltekit-offline-sqlite-1", "published_at": "2023-04-09T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266ac211329", "title": "SvelteKit with SQLite: Uploading, Storing and Retrieving Images", "url": "https://hartenfeller.dev/blog/sveltekit-image-upload-store", "published_at": "2023-03-03T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266ad0572c6", "title": "DIY Authentication and Authorization in SvelteKit 1 with SQLite", "url": "https://hartenfeller.dev/blog/sveltekit-diy-authentication-authorization", "published_at": "2023-02-08T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266ad951aec", "title": "SvelteKit 1 with SQLite: Displaying, Changing and Searching Data", "url": "https://hartenfeller.dev/blog/sveltekit-with-sqlite", "published_at": "2023-01-30T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266ae15cb5f", "title": "Advent of Code 2022 in Oracle - Day 10", "url": "https://hartenfeller.dev/blog/advent-of-code-in-oracle-day-10", "published_at": "2022-12-10T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266af0f036f", "title": "Advent of Code 2022 in Oracle - Day 7", "url": "https://hartenfeller.dev/blog/advent-of-code-in-oracle-day-7", "published_at": "2022-12-07T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266af3b9ad4", "title": "Advent of Code 2022 in Oracle - Day 5", "url": "https://hartenfeller.dev/blog/advent-of-code-in-oracle-day-5", "published_at": "2022-12-05T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266af5891b8", "title": "Advent of Code 2022 in Oracle - Day 3", "url": "https://hartenfeller.dev/blog/advent-of-code-in-oracle-day-3", "published_at": "2022-12-03T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266afa5a6cf", "title": "Advent of Code 2022 in Oracle - Day 2", "url": "https://hartenfeller.dev/blog/advent-of-code-in-oracle-day-2", "published_at": "2022-12-02T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b019d08e", "title": "Advent of Code 2022 in Oracle - Day 1", "url": "https://hartenfeller.dev/blog/advent-of-code-in-oracle-day-1", "published_at": "2022-12-01T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b061bec8", "title": "Oracle APEX anchored inline popups for data input", "url": "https://hartenfeller.dev/blog/apex-anchored-inline-popups", "published_at": "2022-11-18T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b09255aa", "title": "Oracle APEX AG-Grid Plug-In 0.2 (beta)", "url": "https://hartenfeller.dev/blog/apex-ag-grid-plugin-v0.2", "published_at": "2022-11-15T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b116e31d", "title": "Ode to APEX_T_VARCHAR2 #JoelKallmanDay", "url": "https://hartenfeller.dev/blog/ode-to-apex-t-varchar2", "published_at": "2022-10-11T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b12d4d12", "title": "Alfred workflow to quickly navigate Visual Studio Code workspaces", "url": "https://hartenfeller.dev/blog/alfred-vscode-workflow", "published_at": "2022-06-25T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b14636f0", "title": "Dynamic click handling with APEX actions in 22.1", "url": "https://hartenfeller.dev/blog/apex-actions-links-22-1", "published_at": "2022-06-01T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b1f6f925", "title": "How to use Map in Oracle PL/SQL", "url": "https://hartenfeller.dev/blog/maps-oracle-plsql", "published_at": "2022-04-25T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b262c643", "title": "Upgrade tolerant way of setting the path to Oracle SQLcl with Homebrew", "url": "https://hartenfeller.dev/blog/sqlcl-homebrew-macos", "published_at": "2021-12-20T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b2835ee0", "title": "GitHub Actions Plugin for Cronicle", "url": "https://hartenfeller.dev/blog/github-actions-cronicle", "published_at": "2021-09-30T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b315cc6c", "title": "How to make a website reachable over IPv6 on Linux", "url": "https://hartenfeller.dev/blog/make-website-ipv6-ready", "published_at": "2021-08-23T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b327cf4a", "title": "Selfhost Plausible with a preexisting PostgreSQL Database", "url": "https://hartenfeller.dev/blog/selfhosted-plausible-existing-postgres", "published_at": "2021-07-29T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b3356bb4", "title": "The cost of HTTPS connections - improve site speed by self hosting fonts", "url": "https://hartenfeller.dev/blog/selfhosting-fonts-performance", "published_at": "2021-06-01T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b3e524b5", "title": "The APEX Slideover Plug-In", "url": "https://hartenfeller.dev/blog/apex-slideover-plugin", "published_at": "2021-05-13T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b404e490", "title": "APEX Security: only hiding buttons is not secure", "url": "https://hartenfeller.dev/blog/apex-security-hiding-buttons", "published_at": "2021-03-22T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b46c8bc2", "title": "How to change the default tap highlight color for Chrome mobile", "url": "https://hartenfeller.dev/blog/chrome-mobile-highlight-color", "published_at": "2021-02-17T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b4a0bac9", "title": "APEX 20.2: improve Dropzone UX with CSS", "url": "https://hartenfeller.dev/blog/apex-dropzone-ux", "published_at": "2020-10-29T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b4e94962", "title": "APEX Security: Why Sequential Primary Keys Can Be A Risk", "url": "https://hartenfeller.dev/blog/apex-security-sequences-risk", "published_at": "2020-07-30T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b5a05ba4", "title": "10 semantic HTML tags to better structure your website", "url": "https://hartenfeller.dev/blog/underused-semantic-html-tags", "published_at": "2020-06-15T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b5c77522", "title": "APEX: Highlight important values in tables with chips", "url": "https://hartenfeller.dev/blog/apex-highlight-values-chips", "published_at": "2020-06-08T00:00:00+00:00" }, { "id": "01a08781-a984-7116-ab4c-c266b60c5165", "title": "Oracle: Generate DML scripts for images / blobs", "url": "https://hartenfeller.dev/blog/oracle-dml-script-images-blob-values", "published_at": "2020-06-01T00:00:00+00:00" } ] posts Claim your blog
Back to phartenfeller
Blog · corpus.blog/blogs/hartenfeller.dev/posts

phartenfeller

hartenfeller.dev

2026

2025

2024

2023

2022

2021

2020