New post

Find

Announcement
· Feb 19

Beta Testers Needed for our Upcoming InterSystems IRIS Developer Professional Certification Exam

Hello IRIS community,  

InterSystems Certification is developing a certification exam for InterSystems IRIS Developer professionals, and if you match the exam candidate description given below, we would like you to beta test the exam. The exam will be available for beta testing on March 5, 2025, and the beta testing must be completed by April 20, 2025. 

 

What are my responsibilities as a beta tester? 

You must schedule and take the exam by April 20, 2025. The exam will be administered in an online proctored environment free of charge (the standard fee of $150 per exam is waived for all beta testers). The InterSystems Certification team will then perform a careful statistical analysis of all beta test data to set a passing score for the exam. The analysis of the beta test results will take 6-8 weeks, and once the passing score is established, you will receive an email notification from InterSystems Certification informing you of the results. If your score on the exam is at or above the passing score, you will have earned the certification!  

Note: Beta test scores are completely confidential. 

Interested in participating? Read the Exam Details and Instructions below: 

 

Exam Details 

Exam title: InterSystems IRIS Developer Professional 

Candidate description: A back-end software developer who: 

  • writes and executes efficient, scalable, maintainable, and secure code on (or adjacent to) InterSystems IRIS using best practices for the development life cycle, 
  • effectively communicates development needs to systems and operations teams (e.g., database architecture strategy),  
  • integrates InterSystems IRIS with modern development practices and patterns, and  
  • is familiar with the different data models and modes of access for InterSystems IRIS (ObjectScript, Python, SQL, JDBC/ODBC, REST, language gateways, etc.) 

Number of questions: 62 

Time allotted to take exam: 2 hours 

Recommended preparation: Review the content below before taking the exam. 

Classroom Training

Online Learning:  

Recommended practical experience: At least 2 years of experience developing with InterSystems IRIS and a basic understanding of ObjectScript is recommended. 

Exam practice questions 

A set of practice questions is provided here to help familiarize candidates with question formats and approaches. 

Exam format 

The questions are presented in two formats: multiple choice and multiple response. Access to InterSystems IRIS Documentation will be available during the exam.  

DISCLAIMER: Please note this exam has a 2-hour time limit. While InterSystems documentation will be available during the exam, candidates will not have time to search the documentation for every question. Thus, completing the recommended preparation before taking the exam, and searching the documentation only when absolutely necessary during the exam, are both strongly encouraged! 

System requirements for beta testing 

  • Working camera & microphone 
  • Dual-core CPU 
  • At least 2 GB available of RAM memory 
  • At least 500 MB of available disk space 
  • Minimum internet speed: 
    • Download - 500kb/s 
    • Upload - 500kb/s 

 

Exam topics and content 

The exam contains questions that cover the areas for the stated role as shown in the exam topics chart immediately below. All questions are based on InterSystems IRIS v2024.1+.

Topic

Subtopic

Knowledge, skills, and abilities

1. Best practices: Architecture  1.1 Determines database storage strategy in InterSystems IRIS 
  1. Determines which databases should be included in a namespace 
  2. Recommends database architecture based on expected data growth 
  3. Structures data to support global mappings  
  4. Identifies implications of mirroring on application performance and availability 
  5. Identifies implications of configuration settings when designing for scale (buffers, locks, process memory) 
  6. Identifies implications of IRIS upgrades on database architecture 
  7. Identifies implications of security requirements on database architecture 
  8. Identifies costs and benefits of using InterSystems interoperability functionality  
  9. Identifies benefits and tradeoffs for using InterSystems IRIS BI to augment usage of object and relational models 
  10. Identifies secure REST API design best practices 
  1.2. Determines data structures
  1. Differentiates between registered object, serial object, and persistent classes  
  2. Determines indexes to add/update to improve performance 
  3. Describes relationship between globals, objects, and SQL  
  4. Determines when streams are the appropriate data type 
  5. Describes InterSystems IRIS support for JSON and XML 
  1.3. Plans data lifecycle  
  1. Evaluates strategies for data storage and retrieval (e.g., MDX, SQL, object) 
  2. Manages data life cycles (aka CRUD) 
  3. Describes expected application performance as a function of data volumes, users, and processes
2. Best practices: Development lifecycle 2.1 Uses recommended development tools and workflows with InterSystems IRIS
  1. Uses Visual Studio Code to connect to InterSystems IRIS and develop client-side and server-side code 
  2. Uses InterSystems IRIS debugging tools (e.g., uses debugger in VS Code) 
  3. Identifies components required in Compose files used for container development 
  4. Enumerates available development tools (e.g., %SYS.MONLBL, ^PROFILE, and ^TRACE) 
  5. Describes options for automatically documenting code 
  6. Chooses background execution strategy
  2.2 Integrates InterSystems IRIS with CI/CD pipelines  
  1. Describes deployment options for InterSystems IRIS (e.g., containers vs InterSystems IRIS installer) 
  2. Manages changes to CPF file to support continuous deployment 
  3. Uses the %UnitTest framework to write and run unit tests  
  4. Runs integration tests to confirm expectations in other applications 
  5. Runs system checks to check functional and non-functional requirements at production scale 
  6. Identifies implications of promoting changes 
  2.3 Uses source control with InterSystems IRIS  
  1. Describes options for integrating InterSystems IRIS with source control systems 
  2. Mitigates effects of importing an updated class/schema definition
3. Best practices: Data retrieval   3.1 Uses Python with InterSystems IRIS  
  1. Identifies Embedded Python capabilities in InterSystems IRIS 
  2. Describes features of different options for using Python with InterSystems IRIS (e.g., Embedded, Native API, etc.) 
  3.2 Connects to InterSystems IRIS
  1. Configures JDBC/ODBC connections to InterSystems IRIS  
  3.3. Uses SQL with InterSystems IRIS  
  1. Differentiates between embedded SQL and dynamic SQL  
  2. Leverages IRIS-specific SQL features (e.g., implicit join, JSON) 
  3. Interprets query plans
  4. Identifies automatically collected statistics via SQL Statement Index  
  5. Evaluates strategies for table statistics gathering (e.g., import, tune, representative data) 
  6. Evaluates SQL security strategies
  3.4 Creates REST services  
  1. Creates REST services and differentiates between implementation options 
  2. Describes API monitoring and control features available in InterSystems API Manager  
  3. Secures REST services 
  4. Documents REST Services 
4. Best practices: Code 4.1 Writes defensive code  
  1. Chooses strategy for error handling  
  2. Diagnoses and troubleshoots system performance and code execution performance 
  3. Manages and monitors process memory 
  4. Manages processes (including background processes) 
  5. Describes general system limits in IRIS (e.g., max string vs stream, # of properties) 
  4.2 Writes secure code  
  1. Implements database and data element encryption 
  2. Connects securely to external systems 
  3. Prevents SQL injection attacks (e.g., sanitizing, concatenating vs parameterizing)  
  4. Prevents remote code execution 
  5. Leverages InterSystems IRIS security model 
  4.3 Ensures data integrity  
  1. Differentiates between journaling behavior inside vs outside transactions 
  2. Minimizes requirements for journal volumes and performance 
  3. Manages transactions  
  4. Enumerates causes for automatic transaction rollbacks 
  4.4 Implements concurrency controls  
  1. Describes functionality of locking mechanisms with respect to stateful and stateless applications 
  2. Follows best practices when using locks 
  3. Chooses between row locks and table locks 

 

Instructions: 

Please review the following instructions for scheduling and buying an exam:

  1. From our exam store, log in with your InterSystems Single Sign-On (SSO) account.
    1. If necessary, please register for an account.
  2. Select InterSystems IRIS Developer Professional - Beta and click Get Started.
  3. Verify system compatibility as instructed. The Safe Exam Browser download requires administrative privileges on your device.
  4. Run the setup test to ensure the device satisfies the exam requirements.
  5. Schedule your exam – this must be done before checking out. The exam must be taken at least 24 hours after, but within 30 days, of scheduling the exam.
  6. Review the InterSystems Certification Program Agreement.
  7. Confirm your appointment. You will receive an email from Certiverse with your exam appointment details.
  8. You can access your reservations and history through the Exam Dashboard available through the MY EXAMS menu.

Below are important considerations that we recommend to optimize your testing experience:

  • Read the Taking InterSystems Exams and Exam FAQs pages to learn about the test-taking experience.
  • Read the InterSystems Certification Exam Policies.
  • On the day of your exam, log in to Certiverse at least 10 minutes before your scheduled time, launch the exam under MY EXAMS, and wait for the proctor to connect.
  • Please have your valid government ID ready for identification. The proctor will walk you through the process of securing your room and releasing the exam to you. 

You may cancel or reschedule your appointment without penalty as long as the action is taken at least 24 hours in advance of your appointment. The voucher code will reactivate and you can use it to reschedule the exam.

Please contact certification@intersystems.com if you have any questions or need assistance, and we encourage you to share any feedback about the exam, whether positive or negative.

8 Comments
Discussion (8)4
Log in or sign up to continue
InterSystems Official
· Feb 19

Alert: SQL Queries Returning Wrong Results

February 19, 2025 – Alert: SQL Queries Returning Wrong Results

InterSystems has corrected two issues that can cause a small number of SQL queries to return incorrect results. In addition, InterSystems has corrected an inconsistency in date/time datatype handling that may lead to different, unexpected – yet correct – results for existing applications that rely on the earlier, inconsistent behavior.

DP-436825: SQL Queries with Lateral Join May Return Wrong Results

The first issue (DP-436825) only affects SQL queries that use a lateral join, either implicitly or explicitly, on an instance configured with non-default per-process memory limit (“bbsiz” parameter in the .cpf file). A clean install of InterSystems IRIS has a default bbsiz of -1 (so there is no memory limit), while an upgrade from an older version would preserve the previous setting. When such a query uses parallelized execution at runtime, including cases where the system uses parallelized execution, the query may return incorrect results. This issue affects versions 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2, and 2024.3 of the following products:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

The issue also affects other InterSystems products based on the above products including HealthShare® Unified Care Record and Suite: Version 2024.2 Although the Unified Care Record and suite doesn’t make use of SQL queries that use a lateral join in product code, HealthShare customers who upgrade to HealthShare 2024.2 with a non-default per-process memory limit that also write their own SQL queries that use a lateral join may be affected.  

To avoid the issue, use one of the following three options:

  • Remove the per-process memory limit by setting the bbsiz parameter to -1.
  • Use the %NOPARALLEL keyword in queries that include a lateral join.
  • Temporarily disable Adaptive Mode for the instance, which avoids automatic parallel processing of eligible queries.

These all ensure that the query returns correct results. The correction for this defect is identified as DP-436825 and will be included in all future product releases beginning with 2024.1.3 and 2025.1.0.  It is also available via ad hoc distribution.

DP-436998: SQL queries with reverse sort by %ID entering endless loop

The second issue (DP-436998) impacts SQL queries that order by descending row ID, and in which the row ID is a positive (bitmap-compatible) integer and in particular, data-specific circumstances. Under these conditions, the query may enter an endless loop and keep returning the same set of results until it is aborted. This issue affects versions 2022.2, 2022.3, 2023.x, and 2024.x of the following products:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

It also affects other InterSystems products based on the above products including HealthShare® Unified Care Record and Suite: Version 2024.1 and version 2024.2.  Although the Unified Care Record and suite doesn’t make use of SQL queries with reverse sort by %ID in product code, HealthShare 2024.1 and HealthShare 2024.2 customers that write their own SQL queries with reverse sort by %ID may be affected.   The correction for this defect is identified as DP-436998. It will be included in all future product releases beginning with 2023.1.6, 2024.1.3, and 2025.1.0.  It is also available via ad hoc distribution.

DP-436633: SQL Queries Comparing DATE and TIMESTAMP Values

InterSystems recently corrected an inconsistency in how DATE and TIMESTAMP values are compared using the <=, >, and BETWEEN operators. This correction changes the results of particular date and time comparisons. The updated behavior was introduced in version 2023.3 of:

  • InterSystems IRIS® data platform
  • InterSystems IRIS® for Health
  • HealthShare® Health Connect

It also affects other InterSystems products based on the above products including HealthShare® Unified Care Record and Suite: Version 2024.2.   

It applies to all subsequent releases.

With the updated behavior, DATE values are coerced to a TIMESTAMP value prior to the comparison. This conforms to the SQL standard of coercing the less-precise datatype to the most precise datatype. 

For example, with the new behavior (which is standard-compliant), a query predicate “MyTimeStamp > MyDate” evaluates to FALSE when values for these fields correspond to the same calendar date, except when MyTimestamp corresponds exactly to midnight. Previously, the behavior was only fully standard-compliant when the MyTimeStamp field was defined with %PosixTime format, and returned non-compliant results in certain cases when using %Timestamp or certain combinations of special functions and variables.

To ensure predictable comparisons, InterSystems recommends using explicit CAST functions, especially when using CASE statements or SQL functions such as GETDATE(), NVL() and IFNULL(), where the resulting type may not be obvious.

To help assess which statements are affected by the change in behavior, InterSystems has introduced a warning in the query plan, and an optional system flag to make such statements raise an error at runtime. Enabling the flag can be helpful during regression testing of application code, and can offer an additional safety net for user queries at runtime. This informational feature is identified as DP-436633 and will be included in all future product releases beginning with 2024.1.4 and 2025.1.0.

Further Information

If you experience the impact of this defect, contact the Worldwide Response Center (WRC) for assistance.

Discussion (0)2
Log in or sign up to continue
Announcement
· Feb 19

[Video] AI model distillation

Hi Community!

We're happy to share the next video in the series dedicated to Gen AI on our InterSystems Developers YouTube:

⏯ AI model distillation

AI model distillation is a technique used to transfer knowledge from large AI models (teacher models) to smaller, more efficient models (student models). Large models, while highly capable, require significant computational resources, making them costly to train and deploy. Smaller models, on the other hand, are faster, cheaper, and more energy-efficient, making them suitable for applications on devices like phones and laptops.

Watch this video to get acquainted with the process of model distillation, which involves running data through both the teacher and student models, comparing their outputs (logits), and using algorithms to adjust the student model to better match the teacher’s responses. This iterative process helps the smaller model approximate the performance of the larger one while maintaining efficiency. Model distillation is widely used in the AI industry, as seen in versions like ChatGPT Turbo, which are distilled from larger models to optimize performance while reducing resource consumption.

🗣  Presenter: @Nicholai Mitchko, Manager of Solution Partner Sales Engineering, InterSystems

Enjoy watching, and look forward to more videos! 👍

Discussion (0)1
Log in or sign up to continue
Article
· Feb 19 7m read

ObjectScript Class Explorer - Explorando Classes ObjectScript na Notação UML


Olá!

Este artigo é uma pequena visão geral de uma ferramenta que ajuda a entender classes e sua estrutura dentro dos produtos InterSystems: do IRIS ao Caché, Ensemble e HealthShare.

Em resumo, ela visualiza uma classe ou um pacote inteiro, mostra as relações entre as classes e fornece todas as informações possíveis para desenvolvedores e líderes de equipe sem fazê-los ir ao Studio e examinar o código lá.

Se você está aprendendo os produtos InterSystems, revisando muitos projetos ou apenas interessado em algo novo nas soluções de tecnologia InterSystems - você é mais do que bem-vindo para ler a visão geral do ObjectScript Class Explorer!

Introdução aos Produtos InterSystems

O IRIS (anteriormente conhecido como Caché) é um SGBD( Sistema Gerenciador de Banco de Dados)  multi-modelo. Você pode acessá-lo usando consultas SQL ou interagir com objetos e procedimentos armazenados por meio de interfaces disponíveis para várias linguagens de programação. Mas a primeira opção é sempre desenvolver aplicativos na linguagem nativa e integrada do SGBD - ObjectScript (COS).

O Caché suporta classes no nível do SGBD. Existem dois tipos principais de classes: Persistentes (podem ser armazenadas no banco de dados) e Registradas (não são armazenadas no banco de dados e desempenham o papel de programas e manipuladores). Existem também vários tipos de classes especiais: Serial (classes que podem ser integradas em classes Persistentes para criar tipos de dados complexos, como endereços), DataType (para criar tipos de dados definidos pelo usuário), Index, View e Stream.

Apresentando o Class Explorer

O Caché Class Explorer é uma ferramenta que visualiza a estrutura das classes Caché como um diagrama, mostra as dependências entre as classes e todas as informações relevantes, incluindo o código dos métodos, consultas, blocos xData, comentários, documentação e palavras-chave de vários elementos da classe.

Funcionalidade

O Class Explorer usa uma versão estendida da notação UML para visualização, já que o Caché possui um conjunto adicional de entidades que não são suportadas no UML padrão, mas são importantes para o Caché: consultas, blocos xData, muitas palavras-chave para métodos e propriedades (como System, ZenMethod, Hidden, ProcedureBlock e outros), relações pai-filho e um-para-muitos, tipos de classe e assim por diante. 

O Caché Class Explorer (versão 1.14.3) permite que você faça o seguinte:

  • Exiba a hierarquia de pacotes, um diagrama de classes ou um pacote inteiro;
  • Edite a aparência de um diagrama depois que ele for exibido;
  • Salve a imagem atual de um diagrama de classes;
  • Salve a aparência atual de um diagrama e restaure-a no futuro;
  • Pesquise por quaisquer palavras-chave mostradas em um diagrama ou em uma árvore de classes;
  • Use dicas de ferramentas (tooltips) para obter informações completas sobre classes, suas propriedades, métodos, parâmetros, consultas e blocos xData;
  • Visualize o código de métodos, consultas ou blocos xData;
  • Habilite ou desabilite a exibição de quaisquer elementos do diagrama, incluindo ícones gráficos. 

Para melhor compreensão de tudo o que se segue neste artigo, veja como as classes são visualizadas no Class Explorer. Como exemplo, vamos exibir o pacote "Cinema" do namespace "SAMPLES":

    Visão geral de detalhes e recursos

    A barra lateral esquerda contém uma árvore de pacotes. Posicione o cursor sobre o nome do pacote e clique em um botão que aparece à sua direita para exibir o pacote inteiro. Selecione a classe na árvore de pacotes para renderizá-la juntamente com suas classes vinculadas.

    O Class Explorer pode exibir vários tipos de dependências entre classes:

    1. Herança: É mostrada com uma seta preenchida com cor branca apontando na direção da classe herdada;
    2. "Associação" ou relação entre classes: Se um campo de uma das classes contiver um tipo de outra classe, o construtor de diagramas mostrará isso como uma relação de associação;
    3. Relação Pai-Filho e Um-Para-Muitos: As regras de manutenção da integridade dos dados.

    Se você apontar o cursor sobre a relação, as propriedades que criam essa relação serão destacadas:

    Deve-se notar que o Class Explorer não se aprofundará e não desenhará dependências para classes fora do pacote atual. Ele mostrará apenas as classes no pacote atual e, se você precisar limitar a profundidade com que o Class Explorer deve procurar as classes, use a configuração "Nível de dependência":

    A própria classe é exibida como um retângulo dividido em seis seções:

    1. Nome da classe: Se você apontar o cursor para o nome da classe, poderá saber quando ela foi criada e modificada, visualizar o comentário e todas as palavras-chave atribuídas à classe. Um clique duplo no cabeçalho da classe abrirá sua documentação;
    2. Parâmetros da classe: Todos os parâmetros atribuídos com tipos, palavras-chave e comentários. Parâmetros em itálico, assim como quaisquer propriedades, possuem dicas de ferramentas e podem ser focalizados (hover);
    3. Propriedades da classe: São semelhantes aos parâmetros;
    4. Métodos: Qualquer método pode ser clicado para visualizar seu código-fonte. A sintaxe COS será destacada;
    5. Consultas (Queries): São como métodos - clique neles para visualizar o código-fonte;
    6. Blocos xData: Blocos que contêm principalmente dados XML. Clicar neles mostrará o código-fonte formatado no bloco.

    Por padrão, cada classe é exibida com um número de ícones gráficos. O significado de cada ícone pode ser esclarecido clicando no botão Ajuda no canto superior direito da tela. Se você precisar de uma notação UML mais ou menos estrita que é exibida por padrão, bem como a exibição de quaisquer seções de classe, isso pode ser desativado na seção de configurações.

    Se um diagrama for muito grande e desconhecido para você, você pode usar uma função de pesquisa rápida de diagrama. A classe contendo qualquer parte da palavra-chave que você inseriu será destacada. Para pular para a próxima correspondência, basta pressionar Enter ou clicar no botão de pesquisa novamente:

    Finalmente, depois que todas as edições no diagrama forem feitas, todas as relações desnecessárias forem removidas e os elementos forem colocados em suas posições para atingir a aparência desejada, você pode salvá-lo clicando no botão Download no canto inferior esquerdo: 

    Quando você ativa um botão de alfinete (pin) , a posição dos elementos no diagrama do conjunto atual de classes (ou um pacote) será salva. Por exemplo, se você selecionar as classes A e B e, em seguida, salvar a visualização com o botão de alfinete, você verá exatamente a mesma visualização ao escolher as classes A e B novamente, mesmo após reiniciar o navegador ou a máquina. Mas se você escolher apenas a classe A, o layout será o padrão.

    Instalação

    Para instalar o Caché Class Explorer, você só precisará importar o pacote xml da versão mais recente  para qualquer namespace. Assim que a importação for concluída, você poderá notar que o novo aplicativo web chamado hostname/ClassExplorer/ (a barra no final é obrigatória) apareceu.

    Instruções de instalação detalhadas

    1. Baixe o arquivo com a versão mais recente do Caché Class Explorer;
    2. Extraia o arquivo XML chamado Cache/CacheClassExplorer-vX.X.X.xml;
    3. Importe o pacote para qualquer namespace usando uma das seguintes maneiras:
      1. Basta arrastar o arquivo XML para o Studio;
      2. Usando o Portal de Gerenciamento do Sistema: Explorador de Sistema -> Classes -> Importar e especifique o caminho para o arquivo local;
      3. Usando o comando do terminal: do ##class(%Installer.Installer).InstallFromCommandLine(“Path/Installer.cls.xml”);
    4. Leia o log de importação — se tudo estiver OK, você poderá abrir o aplicativo web em http://hostname/ClassExplorer/. Se algo der errado, verifique o seguinte:
      1. Se você tem direitos suficientes para importar classes para este namespace;
      2. Se o usuário do aplicativo web tem privilégios suficientes para acessar diferentes namespaces;
      3. Se você receber o erro 404, basta verificar se adicionou uma barra no final da URL.

    Algumas outras capturas de tela.

    [Captura de tela 1] Pacote DSVRDemo, passando o mouse sobre o nome de uma classe.

    [Captura de tela 2] Pacote DataMining, pesquisando pela palavra-chave "TreeInput" no diagrama.

    [Captura de tela 3] Visualização do código do método na classe JavaDemo.JavaListSample.

    [Captura de tela 4] Visualizando o conteúdo do bloco XData na classe ClassExplorer.Router.

    Você pode experimentar como o Class Explorer funciona no namespace padrão SAMPLES:  demo. . E aqui está uma resenha em vídeo do projeto.

    Quaisquer comentários, sugestões e observações são bem-vindos - por favor, deixe-os aqui ou no repositório do GitHub. Aproveite!

    Discussion (0)1
    Log in or sign up to continue
    Article
    · Feb 19 3m read

    Importer un objet JSON avec une grande string

    Pour l'un de nos clients, j'ai dû intégrer le point de terminaison AFAS imageconnector /imageconnector/{imageId}?format={format}.
    Ce point de terminaison renvoie un message json avec l'image comme propriété de chaîne codée en base64, en plus du type MIME de l'image :

    Discussion (0)1
    Log in or sign up to continue