# ICODEALOT > Technical blog about code and software engineering ## Posts - [Automate SQL Report Deployments Like a Pro](https://icodealot.com/posts/automate-sql-report-deployments-like-a-pro/index.md): In this post I will show you how to automate the creation and deployment of Database Tools SQL reports in the cloud like a CI/CD pro. You will learn how you can use Terraform to manage changes to these OCI resources. - [Build Relational Guardrails for Agents with SQL Reports](https://icodealot.com/posts/build-relational-guardrails-for-agents-with-sql-reports/index.md): In this post we will look at one approach to bringing constraints to AI agents that interact with a database running in the cloud. We will take on the role of an MCP server administrator or developer and look at recommended practices for creating SQL reports that give agents precise APIs to run. - [Creating Your First Custom SQL Tools for MCP](https://icodealot.com/posts/creating-your-first-custom-sql-tools-for-mcp/index.md): In this post we look at creating your first custom SQL tools with the OCI Database Tools MCP server. This tutorial assumes you already have an MCP server and that you are ready to create your first custom tool. - [Build Tools That Speak to Data in OCI](https://icodealot.com/posts/build-tools-that-speak-to-data-in-oci/index.md): This post will help you use the OCI Database Tools Runtime Python SDK to build tools that can speak to databases in OCI by executing SQL statements using connections and converting the result-set to a Pandas DataFrame object. - [Make SQL RESTful with OCI Database Tools Runtime](https://icodealot.com/posts/make-sql-restful-with-oci-database-tools-runtime/index.md): In 2026 the Database Tools service introduced a new data plane called Database Tools Runtime supported by all the standard OCI interfaces such as the OCI CLI, SDK, and Terraform provider. This is an introduction to the new data plane with some examples of executing statements against databases in the cloud. - [How To Customize Tool Access Using Roles in Database Tools MCP Servers](https://icodealot.com/posts/how-to-customize-tools-using-roles-in-database-tools-mcp-servers/index.md): The Database Tools MCP server supports role-based access control for tools which allows for users or groups to be granted access to only specific MCP tools. In this example we will look at one way to configure tools with IDCS application roles and what the end-user might see once configured. - [Give Oracle Database access to OCI with Database Tools Identity](https://icodealot.com/posts/give-oracle-database-access-to-oci-with-database-tools-identity/index.md): You can use a Database Tools identity in Oracle Cloud Infrastructure (OCI) to give Oracle Databases access to OCI resources through something called a "resource principal". There are a few configuration requirements and the use case is interesting in general, so let's check it out! - [Tracing Interface Calls by Decorating Objects with a Proxy Object in Java](https://icodealot.com/posts/tracing-interface-calls-by-decorating-objects-with-a-proxy-object-in-java/index.md): You take an instance of some type and decorate it with additional responsibilities at runtime. The decorator acts like a proxy for the instance, forwarding or augmenting requests sent to methods along the way. - [Oracle JDBC Config Provider for OCI Database Tools Service](https://icodealot.com/posts/oracle-jdbc-config-provider-for-oci-database-tools-service/index.md): With Oracle's Java Database Connectivity (JDBC) driver starting with 23ai it is now possible to provide the configuration of a connection to Oracle Database using the opaque identifier of a Database Tools connection. - [So you need an MCP tool, now what?](https://icodealot.com/posts/so-you-need-an-mcp-tool-now-what/index.md): tl/dr: Model Context Protocol (MCP) is a light-weight protocol that attempts to address a specific problem of how to allow 3rd parties (you, me, or anyone) to provide relevant prompts or context to a large language model (LLM) and to allow AI clients to complete well-defined tasks. - [Use OCI Terraform Providers to Create Secrets in a Vault](https://icodealot.com/posts/use-oci-terraform-providers-to-create-secrets-in-a-vault/index.md): In the past few posts I looked at using the Oracle Cloud Infrastructure (OCI) services related to creating database connections in the cloud. Here I want to show how you can build on that by creating secrets in a vault using the OCI provider. - [Create Database Tools Connections With Terraform](https://icodealot.com/posts/create-database-tools-connection-with-terraform/index.md): In this post we will look at setting up a Database Tools connection resource in Oracle Cloud Infrastructure (OCI) using the OCI Terraform provider. Database Tools connections in OCI are first-class resources just like other cloud primitives such as virtual cloud networks (VCN), compute instances, or databases. - [Setup OCI DBTools Connections with an ADB Access Control List](https://icodealot.com/posts/dbtools-connections-with-adb-access-control-list/index.md): TL/DR: To use OCI Database Tools (DBTools) Connections to connect to ADB with a public IP and access control list (ACL), DBTools requires the use of a DBTools Private Endpoint (PE). - [Database Tools Connections](https://icodealot.com/posts/database-tools-connections/index.md): TL/DR: if you are an Oracle Cloud Infrastructure (OCI) customer running Oracle Database or MySQL in OCI, use Database Tools (DBTools) private endpoints and connections to simplify database access in the cloud. - [Modern Switch in Java](https://icodealot.com/posts/modern-switch-in-java/index.md): Whether we are learning to program in an object-oriented language (such as Java) or one where code executes logically from top to bottom, decisions need to be made about what happens next. We can call this branching. - [Hello World Server in Go](https://icodealot.com/posts/hello-world-server-in-go/index.md): Howdy! I'm diving back into Go (golang) for selfish reasons and, in my own time, learning about how Go modules help deal with Hypertext Transfer Protocol (HTTP). Before getting into HTTP in Go, I started with plain old Transmission Control Protocol (TCP) sockets. - [Exporting Basic SVGs From Photoshop](https://icodealot.com/posts/export-basic-shapes-as-svg-from-photoshop/index.md): For simple tasks, like mocking up SVG icons to embed inline on a web page, I don't always want to break out Illustrator, setup a canvas and fiddle with curves. If I am already in Photoshop switching applications takes time and mental energy. - [About older posts](https://icodealot.com/posts/technical-debt-and-contextually-correct-examples/index.md): The past few years have been a period of significant recovery. One in which I have invested in my family and myself. When I started writing "way back when," I figured, "Just write about the stuff you find interesting and see what sticks." - [Update Knockout.js View Models in JavaFX WebViews from Nashorn](https://icodealot.com/posts/update-knockout-js-viewmodels-from-nashorn/index.md): Learn about updating Knockout.js models from Nashorn / JavaFX which is a challenge because the Model and Controller code are not running within the browser. - [Preview of Charting in SQLcl via Oracle JET, Nashorn and JavaFX](https://icodealot.com/posts/preview-of-charting-in-sqlcl-via-oracle-jet/index.md): This is an example of connecting SQLcl and Oracle JET using the Nashorn scripting engine. Oracle JET application templates are deployed behind the scenes and data is loaded interactively from SQLcl sessions. - [Bridge the SQL-Java-JavaScript Divide with Nashorn and Oracle SQLcl](https://icodealot.com/posts/bridge-the-sql-java-javascript-divide-with-sqlcl/index.md): Learn about writing Java classes and JavaScript programs for use with Oracle SQLcl and other Nashorn-based applications that run on the JVM. - [Integrating Vue.js with Oracle JET](https://icodealot.com/posts/integrating-vue-js-with-oracle-jet/index.md): Learn how to integrate the Vue.js library into your Oracle JET applications for an alternative approach to front end HTML to JavaScript data model binding. - [Using the new Oracle JET CLI](https://icodealot.com/posts/using-the-new-oracle-jet-cli/index.md): Follow along with an example using the new Oracle JET CLI including screenshots of the process and the resulting Oracle JET navdrawer web application. - [Infrastructure is Dead, Long Live Infrastructure!](https://icodealot.com/posts/infrastructure-is-dead-long-live-infrastructure/index.md): Some opinions on where an EPM infrastructure consultant might find hope in a dwindling on-prem market. You have some options to consider. - [Learn to Build Oracle JET Native Apps with Electron and Node.js](https://icodealot.com/posts/oracle-jet-native-apps-with-electron-and-node-js/index.md): Oracle JET can be combined with Electron to build native desktop applications using HTML, CSS and JavaScript. Follow along with this post to learn how. - [JSON to SQLite on the Raspberry Pi with Node.js](https://icodealot.com/posts/json-to-sqlite-on-the-raspberry-pi-with-node-js/index.md): Learn how to use Node.js on the Raspberry Pi 3 B to retrieve JSON data from RESTful web services and then insert that data into a SQLite relational database - [Sending HTTP POST Requests to ORDS from Swift](https://icodealot.com/posts/sending-http-post-requests-to-ords-from-swift/index.md): Learn how to send HTTP POST requests to a web application server from iOS applications written in the Swift programming language. - [Calculate SUMPRODUCT in Essbase ASO Using MDX](https://icodealot.com/posts/calculate-sum-product-in-essbase-using-mdx/index.md): In this quick tip we take a look at how to calculate SUMPRODUCT (similar to Excel) but using the MDX scripting language in Essbase for ASO cubes. - [Get Multiple Redis Hashes in Node.js With Your Own MHGETALL](https://icodealot.com/posts/get-multiple-redis-hashes-in-node-js/index.md): Redis currently does not have a built-in MHGETALL command but you can implement one. Learn how to get multiple hashes using pipelining or multi in Node.js. - [Business Rules to Launch Them All](https://icodealot.com/posts/business-rules-to-launch-them-all/index.md): Learn how to launch batch jobs from Business Rules with Hyperion Planning. VB, C, Java, Perl, MaxL Esscmd, ODI, and even .NET have paved the road to now. - [Convert data to Base64 in Node.js](https://icodealot.com/posts/convert-data-to-base64-in-nodejs/index.md): Using the Buffer class built-in to Node.js we look at how to convert data in a file to and from Base64. - [Batch Scripts Can Not Suck](https://icodealot.com/posts/batch-scripts-can-not-suck/index.md): In this post I look at a few ways to improve your batch scripts so they are easier to maintain and hopefully suck less. - [SSH Tunnels in SQL Developer](https://icodealot.com/posts/sql-developer-ssh-tunnels/index.md): Follow the steps in this post to learn how to create SSH tunnels using the latest version of Oracle's SQL Developer. - [Introduction to Version Control for Oracle EPM](https://icodealot.com/posts/intro-to-version-control-for-oracle-epm/index.md): Learn how to use Mercurial version control tools to track changes to source code. This is a beginners tutorial for version control with Oracle EPM. - [Pragmatic Version Control for Oracle EPM](https://icodealot.com/posts/pragmatic-version-control-for-oracle-epm/index.md): You can use time-tested software development tools and processes with Oracle EPM to keep track of source code changes and revisions. - [Node.js Syntax Highlighter](https://icodealot.com/posts/node-js-syntax-highlighter/index.md): Use highlight.js with Node.js to pre-generate syntax-highlighted HTML for code snippets. Note: my preferences have evolved since and I now lean on Prism.js in practice, but the highlight.js workflow below is still useful. - [Dynamic Methods in VBScript](https://icodealot.com/posts/dynamic-methods-in-vbscript/index.md): One challenge that comes up with VBScript is how to make your scripts modular so that you don't have to repeat code in multiple VBScript files. This post looks at dynamically dispatching methods in VBScript to help solve that problem. - [Updated Guidance on Customizing the FDMEE Open Interface Adapter](https://icodealot.com/posts/updated-guidance-on-customizing-the-fdmee-open-interface-adapter/index.md): The FDMEE Open Interface Adapter can be customized and Oracle has provided updated guidance on the process that you should follow. - [Debugging Drill-Through With Node.js](https://icodealot.com/posts/debugging-drill-through-with-node-js/index.md): You can debug HTTP drill-through requests from Oracle EPM products using Node.js. Follow this tutorial to setup an HTTP server in Node.js and debug away. - [Using Windows 8.1 and Internet Explorer 11 with Oracle EPM](https://icodealot.com/posts/using-windows-8-1-and-internet-explorer-11-with-oracle-epm/index.md): IE 11 is not supported with versions of Oracle EPM prior to 11.1.2.4. Check out this post for tips on getting IE11 to work with Oracle EPM. - [Unconfirmed Bug in CREATEBLOCKONEQ](https://icodealot.com/posts/unconfirmed-bug-in-createblockoneq/index.md): There may be an unconfirmed bug in CREATEBLOCKONEQ in Essbase where it creates blocks even when set to OFF. A possible workaround can be found here. - [Planning Date Type to Unix Time](https://icodealot.com/posts/planning-date-type-to-unix-time/index.md): Use Essbase calculation script functions and 86,400 seconds per day to convert Planning Dates to Unix dates. This is useful for various Essbase date calcs. - [Have You Seen Me? (Missing Block)](https://icodealot.com/posts/have-you-seen-me-missing-block/index.md): Essbase calculation scripts that don't produce any values are often the result of missing blocks. Take a look at this post to see how to create blocks.