查找

Artigo
· Set. 24 22min de leitura

Running InterSystems IRIS with Docker: A Step-by-Step Guide - Part 1: From the Basics to Custom Dockerfile

Table of Contents

  1. Purpose of the article
  2. What containers are and why they make sense with IRIS
     2.1 Containers and images in a nutshell
     2.2 Why containers are useful for developers
     2.3 Why IRIS works well with Docker
  3. Prerequisites
  4. Installing the InterSystems IRIS image
     4.1 Using Docker Hub
     4.2 Pulling the image
  5. Running the InterSystems IRIS image
     5.1 Starting an IRIS container
     5.2 Checking container status
     5.3 Executing code in the container terminal
     5.4 Accessing the IRIS Management Portal
     5.5 Connecting the container to VS Code
     5.6 Stopping or removing the container
     5.7 Setting a specific password with a bind mount
     5.8 Using durable %SYS volumes
      5.8.1 What gets stored with durable %SYS
      5.8.2 How to enable durable %SYS
  6. Using Docker Compose
     6.1 Docker Compose example
     6.2 Running Docker Compose
  7. Using a Dockerfile to run custom source code
     7.1 Dockerfile example
     7.2 Docker Compose example
     7.3 Understanding layers, image tagging and build vs. run time
     7.4 Source code and init script
     7.5 Building the image with Dockerfile
     7.6 Running instructions in the containerized IRIS terminal
  8. Conclusion and what’s next


1. Purpose of the article

The InterSystems Developer Community already has plenty of great articles explaining what Docker is, the most important commands, and several use cases for InterSystems IRIS in a containerized environment.

The purpose of this series of articles is a bit different. Since I am a big fan of step-by-step guides, I want to create a comprehensive walkthrough on how to configure and use Docker with InterSystems IRIS, starting with the very basic and gradually move towards more advanced scenarios like multi-namespace instances, interconnected containers, integrations with external systems, and application comprehending an UI.

2. What containers are and why they make sense with IRIS

2.1 Containers and images in a nutshell

Traditionally, running an application required matching the version to your operating system and packaging it for that specific target. At the same time, every application should be packaged to specifically work with a target system. If you wanted an application to run on macOS and Windows, you had to change the application design and package it for the different systems. Docker images and containers are application deployment technologies that solve this problems by letting developers package software once and run it anywhere. 

Docker is a software platform that packages software into containers. A Docker image, or container image, is a standalone, executable file containing all the instructions (libraries, dependencies, and files) to create and run a container. A Docker image is shareable and portable, so you can deploy the same image in multiple locations at once. A Docker container is a runtime environment with all the necessary components needed to run the application code without using host machine dependencies.  

Unlike virtual machines, containers are lightweight. They don’t need a full operating system and runs directly on the host operating system through the Docker Engine using only the binaries and libraries required for the specific application, which makes it more efficient. Multiple isolated containers can be started in parallel on the same machine without interfering with each other.

2.2 Why containers are useful for developers

  • Isolation: run in a clean, reproducible environment without affecting your host system.
  • Reproducibility: ensure your setup works the same way across different machines.
  • Easy setup: launch an IRIS instance in seconds with a single command, without a manual installation.

2.3 Why IRIS works well with Docker

Running InterSystems IRIS in Docker has several advantages:

  • Application run and can be tested in isolated containers,
  • Enable using shared version control systems (such as Git) instead of working directly on server
  • Containerized environment can be replicated at any staging enabling consistency through all the software devilery lifecycle.
  • Your application can easily run on every computer.

3. Prerequisites

To run InterSystems IRIS in a Docker container you must have:

4. Installing InterSystems IRIS image

4.1 Using Docker Hub

Docker Hub is the central registry for Docker images. It provides a vast library of pre-built images you can use as a starting point. InterSystems publishes the official IRIS Community Edition images there, which you can download to run IRIS locally in your container. You can also use Docker Hub to push your own custom images for sharing within your team or distributing to the community. Docker Hub is both available online an embedded into Docker Desktop.

4.2 Pulling the Image

Some common Docker image commands are:

Command Description
docker pull <image> Download an image from Docker Hub
docker images List all local images
docker rmi <image> Remove one or more images

You can find the exact pull command directly on the Docker Hub page of the image:

For the InterSystems IRIS image the command is:

docker pull intersystems/iris-community:latest-cd

Alternatively, you can search for iris-community inside Docker Desktop search bar and click Pull:

Once installed, you should have the InterSystems IRIS image listed among your local images:

5. Running the InterSystems IRIS Image

Once the InterSystems IRIS image has been pulled from Docker Hub, you can run it inside a container. 

The following are common commands for Docker containers:

Command Description
docker run -d <image> Run in detached mode: starts the container in the background and return control to the terminal immediately.
docker run -p <host>:<container> <img> Map host port to container port
docker ps List running containers
docker ps -a List all containers (including stopped)
docker exec -it <container> bash Execute a command inside a running container
docker logs <container> View logs of a container
docker stop <container> Stop a running container
docker start <container> Start a stopped container
docker restart <container> Restart a container
docker rm <container> Remove a container

5.1 Starting an IRIS Container

You can start an InterSystems IRIS Community Edition container named "my-iris" through the Docker Desktop UI simply by clicking the Run button of the image you want to run in the Images panel. For the InterSystems image it is possible to specify a few optional settings, like which ports to expose on your host machine to communicate with the services running inside the container.

This could be done through the menu shown above, considering that:

  • left side → port on the host machine
  • right side → port inside the container

Common IRIS Ports (inside the container)

  • 1972 → Superserver Port: used by IRIS for network protocols (ObjectScript, JDBC, etc.).
  • 52773 → Web Server Port: used by IRIS for the Management Portal (web interface).

If you do not explicitly map the ports, Docker will assign random ports on the host.

Alternatively, you can run the container using the terminal:

docker run --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystems/iris-community:latest-cd

In this example:

  • 9091 on the host is mapped to 1972 inside the container (Superserver).
  • 9092 on the host is mapped to 52773 inside the container (Management Portal).

5.2 Checking container status

After running this command, run docker ps to verify if the container is running properly.

> docker ps
CONTAINER ID   IMAGE                                   COMMAND                 CREATED         STATUS                            PORTS                                                                                        NAMES
907d4c2b4ab5   intersystems/iris-community:latest-cd   "/tini -- /iris-main"   3 seconds ago   Up 2 seconds (health: starting)   0.0.0.0:9091->1972/tcp, [::]:9091->1972/tcp, 0.0.0.0:9092->52773/tcp, [::]:9092->52773/tcp   my-iris

Running containers are listed among Docker Desktop Containers panel as well:

The status of the related images will be "In Use", as shown in Images panel:

5.3 Execute code in the container terminal

Once the container status shows Running, everything is working correctly. 

You can test it by opening the container terminal (click on the container's name inside the Containers panel of Docker Desktop and go to Exec) and typing:

iris session IRIS

This opens an IRIS terminal inside the Docker container, where you can use standard ObjectScript syntax to execute commands and scripts.

5.4 Accessing the IRIS Management Portal of the containerized instance

Next, open your browser and navigate to:

http://localhost:9092/csp/sys/UtilHome.csp

By default, IRIS containers uses the _SYSTEM user with the password SYS. You are required to change the password after logging in.

This gives you full access to the IRIS Management Portalallowing you to manage namespaces, databases, and other IRIS features directly from the web interface.

5.5 Connecting the container to VSCode IDE

You can connect your preferred IDE (such as VS Code or Studio) to the IRIS container using the mapped Superserver port (default 1972 inside the container, e.g., 9091 on the host) and Web Server port (default 52773 inside the container, e.g., 9092 on the host). This allows you to develop and test ObjectScript code directly against the running container.

To connect the container to VSCode:

  • Install the InterSystems ObjectScript Extension Pack
  • Open the InterSystems Server extension
  • Click on three dots and "Edit server"
  •  
  • Click "Edit in settings.json"
  • Add this element to the "intersystems.servers" json:
"docker_iris": {
    "webServer": {
        "scheme": "http",
        "host": "localhost",
        "port": 9092
    },
    "description": "Connection to Docker container."
}
  • Now the server is connected. You can log in with _SYSTEM user.
  • As you can see, the USER namespace is the only available:

5.6 Stopping or removing the container

To stop a running container use the command:

docker stop my-iris

Start the container again

To start the container again use the command

docker start my-iris

Remove (delete) the container

To remove the container instance, but not the image use: 

docker rm my-iris

All data inside the container will be lost unless you’ve mounted volumes (we're talking about this in the next paragraphs).

5.7 Set a specific password using a bind mount

It is possible to set a custom password while starting a container by using a password file. The file will be saved on our host and copied into the container using the bind mount mechanism.

When you use a bind mount, a file or directory on the host machine is mounted from the host into a container, allowing to share source code or build artifacts between a development environment on the Docker host and a container. 

  • Create a file named password.txt containing just your password as a string (pay attention! Take a note with your password, you will need it later). 
  • Copy its path, in this example is C:\InterSystems\DockerTest\password\password.txt
  • Run the following command:
docker run --name my-iris -d --publish 9091:1972 --publish 9092:52773 --volume "C:\InterSystems\DockerTest:/durable" intersystems/iris-community:latest-cd --password-file /durable/password/password.txt 

Once the container is running you can log in with user _SYSTEM and the password you wrote in your password file. 

Inside docker container, you will see a password.txt.done file. The same file will be inside your host folder.

File extension is changed to .done to avoid the password from being left in plain text. This is the standard behavior in InterSystems IRIS with password files. Therefore, after the password is read from password.txt file and the default IRIS user (_SYSTEM) is updated with that password, the file is updated by appending .done and removing the password for security reasons.

You can log in to the Management Portal using your custom password (I told you to note it :D). InterSystems IRIS won't force you to change the password after you log in.

Please note that if the container is removed and then restarted without any mounted durable volume (for more information see the next paragraph), the password won't be read again from password.txt file, since it has been replaced by the password.txt.done. If that's the case, the standard "SYS" password will be used. 

5.8 Start container with a specific durable volume

By default, anything you save inside a running Docker container disappears when you remove it with the command docker rm <container's name> . 

To avoid losing your data, InterSystems IRIS provides the durable %SYS feature. This allows the instance to store all important files on your host machine, so they survive container and instance restarts.

5.8.1 What gets stored with durable %SYS?

Some examples include:

  • Configuration files (iris.cpf, httpd.conf)
  • Web Gateway configs and logs (/csp)
  • System databases (IRIS, USER, IRISSECURITY, IRISTEMP, etc.)
  • Journals, write image file (WIJ), and temporary files
  • Log files (messages.log, SystemMonitor.log, etc.)
  • License key (iris.key)
  • Any other databases you’ve created

5.8.2 How to enable durable %SYS

The first thing to do is picking a folder from your host, like C:\InterSystems\DockerTest

  • On Linux, make sure IRIS can write to it by creating the irisowner user and give him the ownership of the directory:
adduser irisowner
chown -R irisowner:irisowner /InterSystems/DockerTest
  • On Windows you can skip this passage because Docker Desktop will mount the folder with your current Windows user permissions.

Then, mount your host folder and tell IRIS where to write its durable data using the ISC_DATA_DIRECTORY variable:

  --volume "C:\InterSystems\DockerTest:/durable" --env ISC_DATA_DIRECTORY=/durable/iris

The complete instruction to run on the terminal is:

docker run --name my-iris -d --publish 9091:1972 --publish 9092:52773 --volume "C:\InterSystems\DockerTest:/durable" --env ISC_DATA_DIRECTORY=/durable/iris intersystems/iris-community:latest-cd --password-file /durable/password/password.txt

At this point, you can inspect your container and see that a durable folder is mounted and contains the directories iris/ (for the durable %SYS) and password/. On your host, you can see both the directories as well:

If the container is stopped and removed, when you recreate the container with the same Docker Compose command, IRIS will restore its previous state (users, config, logs, databases, etc.) using the data from the iris/ folder, so nothing is lost. You can test this by creating a web application, stopping and removing the container and creating it a second time. Without using the durable %SYS feature, any changes inside %SYS are lost when the container is removed and the instance is started as a new one each time. 

Please note that if you delete the iris/ folder, the next time you start the container IRIS it will be initialized like in a fresh installation because it won't find the previous %SYS data. A brand new iris/ folder will be created.

6. Using Docker Compose 

So far, you have been starting InterSystems IRIS with a single long docker run command. That works, but it quickly gets difficult to manage everything with plain shell commands.

Docker Compose is a YAML configuration file for defining how to run one or more containers. That simplifies the control of your entire application stack, making it easy to manage services, networks, and volumes. With a single command you can create and start all the services from your configuration file.

The following are common commands for Docker compose:

Command Description
docker compose up -d Start all services defined in docker-compose.yml in detached mode (by default, use the docker-compose.yml file in your current folder).
docker compose -f ./path/to/docker-compose.yml up -d Start services from a compose file in another directory.
docker compose down Stop and remove all containers, networks, and volumes created by docker compose up.
docker compose ps List the containers managed by Compose.
docker compose logs View logs from all services defined in the Compose file.
docker compose logs <service> View logs from a specific service (e.g., iris).
docker compose exec <service> bash Open a shell inside a running container managed by Compose.
docker compose stop Stop the running containers, but don’t remove them.
docker compose start Start the previously stopped containers.
docker compose restart Restart all containers defined in the Compose file.
docker compose build Build or rebuild the services defined by a Dockerfile.
docker compose pull Pull the latest image(s) for the services.
docker compose config Validate and view the merged configuration from the Compose file.

6.1 Docker Compose example

To use Docker Compose, you must create a docker-compose.yml file containing all the configurations for the container you want to create and start.

In this way the following command:

docker run --name my-iris -d --publish 9091:1972 --publish 9092:52773 --volume "C:\InterSystems\DockerTest:/durable" --env ISC_DATA_DIRECTORY=/durable/iris intersystems/iris-community:latest-cd --password-file /durable/password/password.txt

can be replaced by the docker-compose.yml below:

# docker-compose.yml     
services:
  iris:
    container_name: my-iris
    image: intersystems/iris-community:latest-cd
    init: true
    volumes:
      # System/persistent data (IRIS installation, databases, etc.)
      # On Windows, you can use either: "C:\\InterSystems\\DockerTest:/durable"
      - C:/InterSystems/DockerTest:/durable
    ports:
      - "9092:52773"  # Management Portal / REST APIs
      - "9091:1972"   # SuperServer port
    environment:
      - ISC_DATA_DIRECTORY=/durable/iris
    # Use the password file to log within the container
    command: --password-file /durable/password/password.txt

6.2 Running Docker Compose 

Open a terminal in the directory where the Docker Compose file is saved (or use the -f option) and run the following command:

docker compose up -d

Your IRIS container will start with the exact configuration specified in Docker Compose file.

In Docker Desktop, you can now see that a compose stack called "dockertest" (it takes the name of the folder in which the Docker Compose is saved) has been created and associated with the container "my-iris":

7. Using a Dockerfile to run custom source code

So far, you have been running InterSystems IRIS directly from the official Docker image. However, we may need to automatically load ObjectScript classes or other custom code within the image while building it. 

A Dockerfile is a text file with instructions for building an image, starting from a base image (like intersystems/iris-community:latest-cd). With a Dockerfile we can add custom source code into the container and run custom commands while building the image. 

7.1 Dockerfile example

The next example provides a Dockerfile that performs the following operations:

  • Start the image from the official InterSystems IRIS image.
  • Copy your application code from src/ folder into the container.
  • Run a script to import classes and initialize the containerized application and save the logs into a log file.
  • Expose the default InterSystems IRIS ports.

7.2 Docker Compose example

You should modify the Docker Compose as well, to specify to build the image from the Dockerfile in the current folder:

# docker-compose.yml     
services:
  iris:
    container_name: my-iris
    build: # this tells Docker to build a new image based on the one specified in the Dockerfile
      context: .        # build the image from local Dockerfile
      dockerfile: Dockerfile
    image: my-modified-iris-image:latest   # give the new image a new tag to avoid overriding the base image
    init: true
    volumes:
      # System/persistent data (IRIS installation, databases, etc.)
      # On Windows, you can use either: "C:\\InterSystems\\DockerTest:/durable"
      - C:/InterSystems/DockerTest:/durable
    ports:
      - "9092:52773"  # Management Portal / REST APIs
      - "9091:1972"   # SuperServer port
    environment:
      - ISC_DATA_DIRECTORY=/durable/iris
    # Use the password file to log within the container
    command: --password-file /durable/password/password.txt

7.3 Understanding layers, image tagging and build vs. run time

In Docker, as explained here: What is an image?, there are two important principles to keep in mind:

  1. Images are immutable: Once an image is created, it can't be modified. You can only make a new image or add changes on top of it.
  2. Container images are composed of layers: Each layer represents a set of file system changes that add, remove, or modify files.

New layers are added to an image when the instructions specified within a Dockerfile are executed. These layers will be shown in the image information as well.

With that in mind, it is really important to distinguish what Docker does at build time (when it creates an image from a Dockerfile) and at run time (when it starts a container from that image).

Each of these Dockerfile instruction are executed on build time

  • COPY: files are copied into the image
  • RUN: executes commands and saves the results as new image layers
  • ENTRYPOINT: doesn't change the filesystem but define the default process that will be launched at run time
  • EXPOSE: sets metadata about which ports the image intends to use

At run time, Docker doesn’t rebuild the image but adds a container layer on top of it. All changes made while the container is running (like new files, edits, logs) go into this temporary layer.

From the last provided Docker Compose example:

build: # this tells Docker to build a new image based on the one specified in the Dockerfile
  context: .        # build the image from local Dockerfile
  dockerfile: Dockerfile
image: my-modified-iris-image:latest   # give the new image a new tag to avoid overriding the base image

These instructions tell Docker to create a new image called "my-modified-iris-image:latest" (this is called tag) by pulling the base image and modifying it as described in the Dockerfile. Tagging the new image with a distinct name is really important. If we avoid putting a tag on the newly created image, the base image will be overridden by the new one. The official image will be still available on Docker Hub, but this local version will shadow it and every project referring to that tag will now unknowingly use the customized image, containing several new layers.

To avoid this, always use a distinct tag to create a new separate image while keeping the official base image clean and reusable. 

    7.4 Source code and init script

    At this point we should create at least one class and place it inside the src/ folder. The class will be copied into the container and imported through the iris.script file, which contains all the instructions to import the classes and initialize the application while building the image.

    Create a new directory called src/DockerStepByStep in your project folder and create the following class file:

    Class DockerStepByStep.cheers Extends %RegisteredObject
    {
    
    ClassMethod sayHi() As %Status
    {
        Set sc = $$$OK
        w "Hi mom!",!
        Return sc
    }
    
    }

    In the root of your project, create a file called iris.script:

    // Unexpire passwords for dev mode
    zn "%SYS"
    Do ##class(Security.Users).UnExpireUserPasswords("*")
    
    // Load classes from durable source
    zn "USER"
    // Import classes
    set importPath = "/opt/irisapp/src"
    write "Loading classes at '", importPath, "' ...", !
    set errors = ""
    do $System.OBJ.Import(importPath,"cuk",,.errors)
    if errors = 0 { write "Classes loaded successfully", ! } else { write errors, " errors occurred while loading classes!", ! }
    
    halt

    7.5 Build Image with Dockerfile

    For the first run you can use the following command to build the image from Dockerfile (the --build flag forces Docker to rebuild the image from your Dockerfile):

    docker-compose up --build

    For other runs, if Dockerfile has not been modified, you can simply run: 

    docker-compose up -d

    Once the image building is running, you will see this logs in the terminal:

    PS C:\InterSystems\DockerTest> docker-compose up --build
    [+] Building 21.5s (13/13) FINISHED
     => [internal] load local bake definitions                                                                     0.0s
     => => reading from stdin 530B                                                                                 0.0s
     => [internal] load build definition from Dockerfile                                                           0.0s
     => => transferring dockerfile: 1.73kB                                                                         0.0s
     => [internal] load metadata for docker.io/intersystems/iris-community:latest-cd                              10.0s
     => [internal] load .dockerignore                                                                              0.0s
     => => transferring context: 2B                                                                                0.0s 
     => [1/6] FROM docker.io/intersystems/iris-community:latest-cd@sha256:93488df381f5868649e7bfc33a9083a3e86a22d  0.9s 
     => => resolve docker.io/intersystems/iris-community:latest-cd@sha256:93488df381f5868649e7bfc33a9083a3e86a22d  0.0s 
     => [internal] load build context                                                                              0.0s 
     => => transferring context: 147B                                                                              0.0s
     => [2/6] WORKDIR /opt/irisapp                                                                                 0.0s
     => [3/6] COPY src src                                                                                         0.1s 
     => [4/6] COPY iris.script .                                                                                   0.1s
     => [5/6] RUN mkdir -p /opt/irisapp/logs                                                                       0.3s
     => [6/6] RUN iris start IRIS &&     iris session IRIS < iris.script > /opt/irisapp/logs/build.log 2>&1 &&     4.5s 
     => exporting to image                                                                                         4.5s 
     => => exporting layers                                                                                        3.3s 
     => => exporting manifest sha256:3ce316cefa21a3707251c4287005a15b02e6dc0151b24baf2a82f76064792250              0.0s 
     => => exporting config sha256:00238e19edef86b29149d2eb89ff75f4d1465ba0d9a2ac4494a14d3bd3746a94                0.0s 
     => => exporting attestation manifest sha256:3579cab5c8accc7958090276deb60bd7dbbc2ecbf13af8e7fa8c4ff2dfe91028  0.0s 
     => => exporting manifest list sha256:17b969c340f57d611cc7603287cc6db50cffd696258a72b5648ece0a919676ac         0.0s 
     => => naming to docker.io/intersystems/iris-community:latest-cd                                               0.0s 
     => => unpacking to docker.io/intersystems/iris-community:latest-cd                                            0.9s 
     => resolving provenance for metadata file                                                                     0.0s 
    [+] Running 3/3
     ✔ intersystems/iris-community:latest-cd  Built                                                                0.0s 
     ✔ Network dockertest_default             Created                                                              0.1s 
     ✔ Container my-iris                      Created                                                              0.2s 

    At step 6/6, the iris.script file is executed into the containerized IRIS instance and logs are saved at path /opt/irisapp/logs/build.log.

    To view logs you can run the instruction:

    docker exec -it my-iris cat /opt/irisapp/logs/build.log

    You should see the following records that inform you about the result of class compilation:

    Node: buildkitsandbox, Instance: IRIS
    
    USER>
    
    USER>
    
    %SYS>
    
    %SYS>
    
    %SYS>
    
    %SYS>
    
    USER>
    
    USER>
    
    USER>
    
    USER>
    Loading classes at '/opt/irisapp/src' ...
    
    USER>
    
    USER>
    
    Load of directory started on 09/16/2025 07:46:28
    Loading file /opt/irisapp/src/DockerStepByStep/cheers.cls as udl
    
    Compilation started on 09/16/2025 07:46:28 with qualifiers 'cuk'
    Class DockerStepByStep.cheers is up-to-date.
    Compilation finished successfully in 0.005s.
    
    Load finished successfully.
    
    USER>
    Classes loaded successfully
    
    USER>
    
    USER>

    On Docker Desktop, you can see that a new image calle "my-modified-iris-image" has been created and is running alongside the base official image.

    If you inspect the images, you will see that the custom one is composed of 31 layers, rather than the 25 layers of the original. The new layers correspond to the instructions executed at build time by the Dockerfile:

    7.6 Run instructions in containerized IRIS terminal

    To test the classes, you can activate the iris terminal within the containerized IRIS instance. To do so, execute the following instruction:

    docker exec -it my-iris iris session IRIS

    At this point you can invoke the ClassMethod from the USER namespace with the command:

    do ##class(DockerStepByStep.cheers).sayHi()

    Finally, you should see this output:

    PS C:\InterSystems\DockerTest> docker exec -it my-iris iris session IRIS
       
    Node: 41c3c7a9f2e4, Instance: IRIS
    
    USER>do ##class(DockerStepByStep.cheers).sayHi()
    Hi mom!

    8. Conclusion and what’s next

    We’ve walked through the full cycle of getting InterSystems IRIS running in Docker:

    • pulling the image
    • starting and configuring containers
    • persisting data with durable %SYS
    • building custom images with your own code and scripts

    This is enough to start experimenting with IRIS in a containerized environment and use it for development.

    A GitHub repo with all the files discussed in the final part (Docker Compose, Dockerfile, iris.script, etc..) is available.

    Stay tuned for the next article!

    4 Comments
    Discussão (4)4
    Entre ou crie uma conta para continuar
    Artigo
    · Set. 24 3min de leitura

    Celebrando uma Força Criativa na Comunidade de Desenvolvedores

    Toda comunidade próspera tem membros cuja energia, criatividade e comprometimento ajudam a transformá-la em algo extraordinário. Na Comunidade de Desenvolvedores da InterSystems, um desses membros é @Henry Pereira — desenvolvedor, colaborador de código aberto, vencedor de concursos e um verdadeiro defensor do poder da colaboração.

    👏 Vamos analisar mais de perto a jornada notável de Henry e seu legado contínuo no ecossistema InterSystems.

    A história de Henry com os produtos da InterSystems começou há mais de 20 anos, quando, ainda jovem estagiário, trabalhou pela primeira vez com o InterSystems Caché (nada menos que a versão 4) e escreveu bastante código MUMPS. A vida o levou para outras direções por um tempo, mas em 2016, o destino — e a tecnologia — o trouxeram de volta. Ao ingressar na BPlus Tech em 2 de fevereiro daquele ano, Henry rapidamente redescobriu as tecnologias da InterSystems e ficou impressionado com o quanto elas haviam evoluído. Apenas três dias depois, enquanto procurava por projetos de código aberto, ele descobriu a Comunidade de Desenvolvedores e se inspirou no trabalho de @Dmitry Maslennikov, cujo código ajudou a moldar a abordagem de Henry ao Caché ObjectScript.

    A primeira contribuição de Henry para o ecossistema de desenvolvedores foi o CosFaker, um projeto inicialmente inspirado em uma biblioteca JavaScript, mas que logo evoluiu para algo único. Foi também o tema do seu primeiro artigo na comunidade. A partir daí, Henry passou a se envolver cada vez mais em concursos, colaborações e projetos de código aberto.

    Um destaque foi sua participação no projeto RestForms ao lado de @Eduard Lebedyuk e @Alberto Fuentes, o que se mostrou especialmente significativo em um momento desafiador de sua vida pessoal. Outro momento marcante ocorreu em 2021, quando Henry participou sozinho do Concurso de Segurança da InterSystems com seu projeto iris-disguise.

    Nos últimos anos, Henry competiu como parte da equipe dos Mosqueteiros com @José Pereira (“o cérebro”) e @Henrique Dias (“o coração”), enquanto se autodenominava com humor de “a coceira no nariz”. Seu projeto iris-medicopilot ganhou o segundo lugar no Concurso de Pesquisa de Vetores, GenAI e ML, trazendo a Henry visibilidade profissional e interesse de clientes do mundo real na tecnologia de pesquisa de vetores.

    Henry valoriza profundamente o calor humano, a receptividade e o profissionalismo da Comunidade de Desenvolvedores, destacando a ausência de hostilidade e o alto nível de organização. Ele é fã do programa de gamificação Global Masters e se impressiona continuamente com as ideias e inovações brilhantes produzidas nos concursos da comunidade.

    O conselho do Henry para os novatos? Envolvam-se. Contribuam, participem e tratem cada projeto como uma experiência de aprendizado e uma demonstração pessoal.

    Além da programação, Henry passa os fins de semana tocando guitarra em uma banda, valoriza o tempo com os filhos e serve ativamente à comunidade local, especialmente aos jovens. A cada ano, ele se desafia a aprender uma nova linguagem de programação, uma prova de sua curiosidade insaciável. Sua família e sua fé o mantêm com os pés no chão, lembrando-o da importância do descanso e do crescimento.

    A jornada de Henry, desde seu primeiro código para MUMPS até concursos internacionais, da reinvenção pessoal à liderança comunitária, incorpora o espírito da Comunidade de Desenvolvedores da InterSystems. Por meio de suas contribuições técnicas, espírito colaborativo e presença sincera, ele se tornou uma força criativa e uma inspiração para todos que têm o privilégio de trabalhar ao seu lado.

    🙏 Junte-se a nós para celebrar o Henry por sua dedicação, engenhosidade e o carinho que ele traz à Comunidade de Desenvolvedores.

    2 Comments
    Discussão (2)1
    Entre ou crie uma conta para continuar
    Discussão
    · Set. 24

    Picking up an Interop Business Host setting programmatically

    Hi all,

    I needed to pick up the username from a set of credentials configured for a business operation in an interop production, and it turned out to take a few steps, so I'm sharing my method here, in the dual hope that someone has an easier way to do it, or failing that, that it is useful to someone.

    Best,

    Otto

    /// Fetch the user name from the credentials configured for a production item.
    /// Parameters:
    ///  productionName - The name of the production where the config iterm lives.
    ///  configItemName - The name of the config item that holds the credential setting.
    ///  settingName - Defaults to "Credentials". Provide if different.
    ///  userName - Output parameter.
    /// Sample call, omitting 'settingName' to use the default:
    ///  set status = ##(MyClass).GetUserNameFromCredentials("Acme.Production", "My Operation", , .name)
    ClassMethod GetUserNameFromCredentials(productionName As %String, configItemName As %String, settingName As %String = "Credentials", Output userName As %String) As %Status
    {
       try {
          set userName = ""
          
    // Find the id of the requested config item.
          &sql(select %ID into :configItemId
             from Ens_Config.Item
             where Production = :productionName
                and Name = :configItemName
          )
          if SQLCODE throw ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, "Config item '" _ configItemName _ "' not found in production '" _ productionName _ ".")
          
    // Open the config item.
          set configItem = ##class(Ens.Config.Item).%OpenId(configItemId)
          if (configItem = "") throw ##class(%Exception.General).%New(,5001,,"Failed to open config item '" _ configItemName _ "' in production '" _ productionName _ ".")
          
    // Try to fetch the name of the credentials.
          if ('configItem.GetSetting(settingName, .credentials)) throw ##class(%Exception.General).%New(,5001,,"Setting '" _ settingName _ "' not found for config item '" _ configItemName _ "' in production '" _ productionName _ ".")
          if (credentials = "") throw ##class(%Exception.General).%New(,5001,,"Setting '" _ settingName _ "' not configured for config item '" _ configItemName _ "' in production '" _ productionName _ ".")
          
    // Look up the corresponding user name, setting the output parameter 'userName'.
          &sql(select Username into :userName
             from Ens_Config.Credentials
             where %ID = :credentials
          )
          if SQLCODE throw ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, "'" _ credentials _ "' not found in credentials table.")
       
    catch ex {
          set status = ex.AsStatus()
       }
       return $get(status, $$$OK)
    }
    4 Comments
    Discussão (4)2
    Entre ou crie uma conta para continuar
    Pergunta
    · Set. 24

    Digital Marketing Agency - UHRS IT Services Pvt. Ltd.!

    UHRS (Unique High Rank Solution) IT Services Pvt. Ltd., established in 2014, is a leading IT services provider in India, specializing in SEO, SMO, ORM, Local and Mobile SEO, Video Optimization, Web Design, Web Development, PPC Campaigns, Digital Marketing, and Content Marketing. Since our inception in 2014, we have been dedicated to delivering comprehensive and innovative solutions to clients worldwide.

    🌟 Our Vision

    We aim to be a leader in providing quality IT solutions, satisfying both domestic and international clients. Our focus is on consistent innovation, ensuring that our digital marketing strategies align with the latest industry trends and Google algorithms to maximize online reach and visibility. Visit Our Official Website: https://www.uhrsitservices.com/

    🚀 💼 What We Offer – Services Overview

    UHRS offers powerful digital marketing and web services to help businesses grow online. Whether you're a small startup or a big company, they have something for everyone. Here’s what they do best:


    🔍 1. Search Engine Optimization (SEO)

    Helps your website appear at the top of Google search results.

    • On-Page SEO – Improving content, meta tags, and site structure.
    • Off-Page SEO – Building backlinks and online authority.
    • Local SEO – Getting your business found on Google Maps and in your city.
    • Mobile SEO – Making sure your website ranks well on phones too.
    • Google Penalty Recovery – Fixing websites affected by Google updates.

    📱 2. Social Media Optimization (SMO)

    Grows your brand on platforms like Facebook, Instagram, Twitter, and LinkedIn.

    • Create and manage social media pages
    • Increase likes, shares, and followers
    • Engage your audience with creative posts

    💬 3. Online Reputation Management (ORM)

    Protects and improves how people see your brand online.

    • Push down negative reviews or links
    • Boost positive content
    • Monitor your brand mentions

    💰 4. Pay-Per-Click (PPC) Advertising

    Instant traffic with paid ads on Google, YouTube, or Facebook.

    • Google Ads setup and management
    • Budget-friendly ad campaigns
    • Targeted ads for more conversions

    🌐 5. Web Design & Development

    Creates stunning websites that are fast, mobile-friendly, and easy to use.

    • Custom website design
    • E-commerce websites
    • WordPress development
    • Responsive for all devices

    ️ 6. Content Marketing

    Drives traffic and builds trust through useful content.

    • Blog writing
    • SEO articles
    • Press releases
    • Video content optimization

    Visit Our These Profiles Also :


    https://www.blogger.com/profile/09594697103535116575
    https://sites.google.com/view/uhrsitservices/home
    https://uhrsitservices.weebly.com/
    https://vimeo.com/uhrsitservices
    https://edex.adobe.com/community/member/jfZT90gWn
    https://medium.com/@uhrsitservices.seo
    https://uhrsitservices.wordpress.com/
    https://www.dailymotion.com/uhrsitservices
    https://gravatar.com/uhrsitservices
    https://issuu.com/uhitservices
    https://creators.spotify.com/pod/profile/uhrs-itservices
    https://www.slideshare.net/uhrsitservices
    https://creators.spotify.com/pod/profile/uhrs-itservices
    https://www.slideshare.net/uhrsitservices
    https://www.4shared.com/u/86nfQXId/uhrsitservices.html
    https://uhrsitservices.mystrikingly.com/
    https://www.tripadvisor.com/Profile/uhrsitservices
    https://www.behance.net/uhrsitsitservices
    https://sourceforge.net/u/uhrsitservices/profile
    https://www.pexels.com/@uhrs-itservices-2154184796/
    https://www.dreamstime.com/uhrsitservicesseo_info
    https://www.goodreads.com/user/show/192259842-uhrs-itse...
    https://habr.com/ru/users/uhrsitservices/
    https://hubpages.com/@uhrsitservice
    https://www.wattpad.com/user/uhrsitservices
    https://www.coursera.org/learner/uhrsitservices
    https://gitlab.com/uhrsitservices
    https://www.discogs.com/user/uhrsitservices
    https://www.indiegogo.com/individuals/38695270
    https://loop.frontiersin.org/people/3146077/bio
    https://stackoverflow.com/users/31131828/uhrsitservices
    https://www.yumpu.com/user/uhrsitservices.seo
    https://giphy.com/channel/uhrsitservices
    https://www.reddit.com/user/uhrsitservices/
    https://www.last.fm/user/uhrsitservices
    https://substack.com/@uhrsitservices
    https://genius.com/uhrsitservices
    https://www.diigo.com/user/uhrsitservices
    https://www.reverbnation.com/artist/uhrsitservices
    https://www.ameba.jp/profile/general/uhrsitservices/
    https://pastebin.com/u/uhrsitservices
    https://knowyourmeme.com/users/uhrs-itservices
    https://www.spreaker.com/user/uhrsitservices--18579829
    https://hub.docker.com/u/uhrsitservices
    https://connect.garmin.com/modern/profile/e5ce9539-8eaf...
    https://uhrsitservices.gumroad.com/
    https://www.producthunt.com/@uhrsitservices
    https://sketchfab.com/uhrsitservices
    https://public.tableau.com/app/profile/uhrs.itservices/...
    https://community.atlassian.com/user/profile/1ccf4f10-c...
    https://www.dpreview.com/members/7526371776/overview
    https://www.ifixit.com/User/4845055/UHRS+IT+Services
    https://creativemarket.com/users/uhrsitservices
    https://beacons.ai/uhrsitservices
    https://www.nairaland.com/uhrsitservices
    https://www.tumblr.com/uhrsitservices
    https://www.houzz.com/pro/uhrsitservices/__public
    https://www.pixiv.net/en/users/118183143
    https://www.codecademy.com/profiles/uhrsitservices
    https://www.blurb.com/user/uhrsitservic?profile_preview...
    https://list.ly/uhrsitservices
    https://pxhere.com/en/photographer-me/4696070
    https://devpost.com/uhrsitservices
    https://secure.smore.com/n/75t2s-uhrs-it-services
    https://www.mobygames.com/user/1135189/uhrsitservices/
    https://www.demilked.com/author/uhrsitservices/
    https://www.weddingbee.com/members/uhrsitservices/
    https://www.elephantjournal.com/profile/uhrsitservices/
    https://www.empowher.com/users/uhrsitservices
    https://pantip.com/profile/8973210
    https://beforeitsnews.com/business/2025/07/digital-mark...
    https://hearthis.at/uhrsitservices/
    https://files.fm/uhrsitservices/info
    https://onedio.com/profil/uhrsitservices
    https://camp-fire.jp/profile/uhrsitservices/projects
    https://www.walkscore.com/people/790757774399/uhrsitser...
    https://hypothes.is/users/uhrsitservices
    https://www.openlearning.com/u/uhrsitservices-szl9la/
    https://www.tripadvisor.in/Profile/uhrsitservices
    https://creativemornings.com/individuals/uhrsitservices
    https://newspicks.com/user/11620572/
    https://uhrsitservices.mn.co/members/35069347
    https://www.haikudeck.com/presentations/uhrsitservices
    https://joy.bio/uhrsitservices
    https://www.fundable.com/uhrs-itservices
    https://chng.it/2kKKQN6WRK
    https://www.italymagazine.com/user/379996
    https://wakelet.com/@uhrsitservices
    https://www.credly.com/users/uhrsitservices
    https://pinshape.com/users/8576376-uhrsitservices#desig...
    https://www.jigsawplanet.com/uhrsitservices
    https://www.divephotoguide.com/user/uhrsitservices
    https://www.cake.me/me/uhrsitservices
    https://bbpress.org/forums/profile/uhrsitservices/
    https://os.mbed.com/users/uhrsitservices/
    https://medal.tv/u/uhrsitservices
    https://www.outdooractive.com/en/member/uhrs-itservices...
    https://photozou.jp/user/top/3417538
    https://www.slideserve.com/uhrsitservices
    https://recordsetter.com//user/UHRSITServices
    https://coolors.co/u/uhrsitservices
    https://photoclub.canadiangeographic.ca/profile/21660264
    https://www.komoot.com/user/5102602519683
    https://www.youthkiawaaz.com/author/uhrsitservices-seog...
    https://www.ozbargain.com.au/user/571140
    https://www.mountainproject.com/user/202092933/uhrs-its...
    https://www.sqlservercentral.com/forums/user/uhrsitserv...
    https://manybooks.net/user/uhrsitservices
    https://www.affilorama.com/member/uhrsitservices
    https://www.storeboard.com/uhrsitservices
    https://data.world/uhrsitservices
    https://www.tripline.net/uhrsitservices/
    https://www.inkitt.com/uhrsitservices
    https://www.catchafire.org/profiles/3308504/about
    https://lu.ma/user/uhrsitservices
    https://ridemonkey.bikemag.com/members/uhrsitservices.1...
    https://writeupcafe.com/author/uhrsitservices
    https://www.ucg.org/user/10019983
    https://forum.codeigniter.com/member.php?action=profile...
    https://www.infragistics.com/community/members/e5199a32...
    https://kuula.co/profile/uhrsitservices
    https://uhrsitservices.postach.io/
    https://hanson.net/users/uhrsitservices
    https://rapidapi.com/user/uhrsitservices
    https://timessquarereporter.com/profile/uhrsitservices
    https://www.holidify.com/profile/1340399
    https://www.royalroad.com/profile/778458
    https://www.accountingweb.co.uk/profile/uhrsitservices
    https://www.callupcontact.com/b/businessprofile/UHRS_IT...
    https://notionpress.com/author/1322294
    https://activepages.com.au/profile/uhrsitservices
    https://www.proko.com/@uhrsitservices/activity
    https://www.allsprt.com/user/uhrsitservices/
    https://www.triphobo.com/profile/uhrs-itservices/687e06...

    Discussão (0)1
    Entre ou crie uma conta para continuar
    Anúncio
    · Set. 24

    Bonus tecnológicos para el Concurso de .Net, Java, Python, y JavaScript de InterSystems

    ¡Hola, desarrolladores!

    Aquí tenéis los bonus tecnológicos para el Concurso de .Net, Java, Python, y JavaScript de InterSystems, que os darán puntos extra en la votación:

    • XEP API para Java, .NET – 2
    • SDK Nativo para Java, .NET, Python, node.js – 2
    • PEX Interoperability para Java, .NET, Python – 3
    • Java persister – 2
    • ADONET y .NET Entity Framework – 2
    • Uso de contenedores Docker – 2
    • Demo online – 2
    • Implementar una Idea de la Comunidad InterSystems – 4
    • Encontrar un bug en las Ofertas de Lenguajes .Net, Java, Python, y JavaScript con InterSystems InterSystems IRIS – 2
    • Primer artículo nuevo en la Comunidad de Desarrolladores – 2
    • Segundo artículo nuevo en la Comunidad de Desarrolladores – 1
    • Primera participación – 3
    • Vídeo en YouTube – 3

    Ved los detalles a continuación.

    XEP API para Java, .NET – 2

    XEP es una librería de InterSystems que introduce tecnología de persistencia de alto rendimiento para jerarquías de objetos en Java o .NET. Usadla y conseguid 2 puntos extra por Java y/o .NET (máx. 4 puntos). Leed más sobre JAVA ZEPNET XEP.

    SDK Nativo para Java, .NET, Python, node.js – 2 puntos

    Los SDK Nativos de InterSystems IRIS son interfaces ligeras que permiten a aplicaciones en PythonJava.NET, y Node.js acceder a potentes recursos de InterSystems IRIS. Usadlos y conseguid 2 puntos extra por cada lenguaje implementado (máx. 8 puntos). Documentación.

    PEX Interoperability para Java, .NET, Python – 3 puntos

    El framework Production EXtension (PEX) ofrece la posibilidad de usar lenguajes Java, .NET y Python para desarrollar producciones de interoperabilidad. Usadlo y conseguid 3 puntos extra por cada lenguaje implementado (máx. 9 puntos). Documentación. Here is a pex-demo application.

    The Production EXtension (PEX) framework provides a choice of external languages Java, .NET and Python that you can use to develop interoperability productions. Use it and collect 3 extra points for for every language(Python, Java, .Net) implemented (9 max). Documentation. Aquí tenéis una demo de aplicación de pex

    Java Persister -2 points

    El Persister de InterSystems IRIS para Java está diseñado para ingerir flujos de datos y persistirlos en una base de datos a gran velocidad. Conseguís 2 puntos extra al implementarlo en vuestra solución. Aquí está la Documentación.

    ADONET y .NET Entity Framework – 2 puntos

    InterSystems permite acceder a los datos de clases persistentes a través de ADONET. Implementadlo en vuestra aplicación para conseguir 2 puntos extra. Documentación.
    Lo mismo podéis lograr con .NET Entity Framework en IRIS (2 puntos). Documentación.

    Uso de contenedores Docker – 2 puntos

    La aplicación consigue la bonificación “Docker container” si utiliza InterSystems IRIS ejecutándose en un contenedor Docker. Aquí está la plantilla más sencilla con la que empezar.

    Demo online de vuestro proyecto – 2 puntos
    Collect 2 more bonus points if you provision your project to the cloud as an online demo at any public hosting.  

    Implement Community Opportunity Idea - 4 points

    Implementad cualquier idea del portal de Ideas de la Comunidad de InterSystems que tenga el estado «Community Opportunity». Esto os dará 4 puntos adicionales de bonificación.

    Encontrad un bug en las ofertas de lenguajes .Net, Java, Python, y JavaScript con InterSystems InterSystems IRIS – 2 puntos

    Queremos una adopción más amplia de las ofertas de java, python, .NET y node.js de InterSystems, así que os animamos a informar de los bugs que encontréis durante el desarrollo de vuestras aplicaciones de lenguajes externos con IRIS para poder corregirlos. Por favor, enviad los bugs de Java, Python, .NET y Node.js e indicad cómo reproducirlos. Podéis conseguir 2 puntos de bonificación por el primer bug reproducible en cada lenguaje (Java, .NET, Node.js, Python), hasta un máximo de 8 puntos.

    Primer artículo nuevo en la Comunidad de Desarrolladores – 2 puntos

    Escribid un artículo completamente nuevo en la Comunidad de Desarrolladores que describa las características de vuestro proyecto y cómo trabajar con él. Conseguiréis 2 puntos por el artículo.

    Segundo artículo nuevo en la Comunidad de Desarrolladores – 1 punto

    Podéis conseguir 1 punto extra por el segundo artículo nuevo o por una traducción relacionada con la aplicación. El tercero y siguientes no darán más puntos, pero sí atraerán la atención hacia vuestro proyecto.

    Primera participación – 3 puntos

    Conseguid 3 puntos de bonificación si participáis por primera vez en los concursos de InterSystems Open Exchange.

    Vídeo en YouTube – 3 puntos

    Haced nuevos vídeos en YouTube que muestren vuestro producto en acción y conseguid 3 puntos de bonificación por cada uno.

    La lista de bonificaciones puede cambiar. ¡Permaneced atentos!

    ¡Mucha suerte en la competición!

    Discussão (0)1
    Entre ou crie uma conta para continuar