新しい投稿

検索

お知らせ
· 2025年7月4日

[Video] Genes in DNA Sequences as vector representation using IRIS vector database

Hi Community,

Enjoy the new video on InterSystems Developers YouTube from our Tech Video Challenge:

⏯  Genes in DNA Sequences as vector representation using IRIS vector database

We worked on developing a solution to identify resistance genes in DNA by using the InterSystems IRIS vector database to efficiently store and search vector representations of DNA sequences. This approach was designed to reduce the time required to check if a patient is resistant to certain prescribed antibiotics.

🗣 Presenter: @Filip Kašpar

Stay ahead of the curve! Watch the video and subscribe to keep learning! 👍

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年7月4日 4m read

How to Add Voice and Video Calling to a Flutter App with pre-built SDK

I recently had to add voice and video calling between two people inside a Flutter app we were building. Instead of creating the whole system from scratch like handling audio, video, servers, and network stuff, we wanted something that already does most of the tough work for us.

We checked out a few tools and ended up going with MirrorFly. It covered what we needed: smooth calling, easy integration, and good support.

In this write-up, I’ll walk you through how the setup went, what we needed to get started, and a few things I ran into during the process.

Overview

The MirrorFly Flutter SDK supports:

  • One-to-one voice and video calling
  • Cross-platform (Android and iOS)
  • Call management using Flutter APIs
  • Built-in listeners for call events

This guide assumes you're working with an existing Flutter app.

System Requirements

Android:

  • Android 5.0+ (API 21+)
  • Java 7+
  • Gradle 4.1.0+
  • compileSdk and targetSdk should be 34 or higher

iOS:

  • iOS 12.1+
  • Xcode project must support certain background capabilities (covered below)

Step-by-Step Setup

1. Get a License Key

Create a MirrorFly account and retrieve your license key from the dashboard. You’ll need this to initialize the SDK.

2. Android Integration

Update your root build.gradle:

allprojects {
  repositories {
      ...
      ...
      jcenter()
      maven {
          url "https://repo.mirrorfly.com/release"
      }
  }
}   

In app/build.gradle, confirm:

android {
  compileSdk 34
  defaultConfig {
    minSdkVersion 21
    targetSdkVersion 34
  }
}

3. iOS Integration

At the bottom of your iOS project’s Podfile, add:

post_install do |installer|
  installer.aggregate_targets.each do |target|
    ...
    config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.1'
    config.build_settings['ENABLE_BITCODE'] = 'NO'
    ...
  end
end

Then:

  • Disable Bitcode in Build Settings
  • Add capabilities to the target:
    • App Groups
    • Background Modes → enable:
      • Audio, AirPlay, Picture in Picture
      • Voice over IP
      • Background fetch
      • Remote notifications

4. Flutter Setup

Add this to your pubspec.yaml:

dependencies:
  mirrorfly_plugin: ^1.4.0

Then run:

flutter pub get

Import the package:

import 'package:mirrorfly_plugin/mirrorfly.dart';

5. Initialize the SDK

Call this in main() before runApp():

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Mirrorfly.initializeSDK(
    licenseKey: LICENSE_KEY,
    iOSContainerID: IOS_APP_GROUP_ID,
    flyCallback: (FlyResponse response) {
      runApp(MyApp());
    }
  );
}
  • licenseKey: from your MirrorFly account
  • iOSContainerID: App Group ID for shared storage

6. Logging In

Mirrorfly.login(
  userIdentifier: "user123",
  fcmToken: "your_fcm_token", // optional
  isForceRegister: true,
  flyCallback: (FlyResponse response) {
    if (response.isSuccess) {
      // User registered and logged in
    }
  }
);

Notes:

  • isForceRegister ensures old sessions are cleared if user limit is reached.
  • Only use login() once per session unless logging out first.

Calling Features

Making a Call

Mirrorfly.makeVoiceCall(
  toUserJid: "user123@xmpp.chatsystem.dev.contus.us",
  flyCallBack: (FlyResponse response) {
    if (response.isSuccess) {
      // Call initiated
    }
  }
);
  • toUserJid format: userID@domain

Receiving a Call

MirrorFly handles incoming calls and displays system call UI. Listen to call status:

Mirrorfly.onCallStatusUpdated.listen((event) {
  var callInfo = jsonDecode(event);
  print("Call status: ${callInfo['callStatus']}");
});

You'll receive:

  • callMode (OneToOne / groupCall)
  • userJid
  • callType (Audio / Video)
  • callStatus (Ringing, Connected, Ended, etc.)

Permissions to Watch

Android:

  • RECORD_AUDIO
  • CAMERA
  • POST_NOTIFICATIONS (Android 13+)
  • BLUETOOTH_CONNECT (Android 12+)
  • READ_PHONE_STATE (Android 12+)

iOS:

  • Microphone and Camera permissions must be handled through your Info.plist

Final Thoughts

The SDK does what it promises, but the setup needs close attention especially around permissions and platform-specific tweaks. Once that’s sorted, getting basic calling up and running is pretty smooth. The Flutter plugin gives you access to the essentials without needing a lot of extra code.

If you're planning to build things like group calls or a fully custom UI, you’ll probably need to spend more time digging into the SDK or tapping into the APIs directly.

I’ve taken notes while working through this so if you want a breakdown of the call flow or how to customize the UI, just let me know. Happy to share.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年7月4日 3m read

Exécutez votre solution InterSystems dans votre environnement Kubernetes avec une qualité de service garantie

Une qualité de service (QoS) est attribuée à tous les pods. Trois niveaux de priorité sont attribués aux pods d'un nœud. Ces niveaux sont les suivants :

1) Garanti : Priorité élevée

2) Évolutif : Priorité moyenne

3) Meilleur effort : Priorité faible

Il s'agit d'indiquer au kubelet quelles sont vos priorités sur un nœud donné si des ressources doivent être récupérées. Ce superbe GIF d'Anvesh Muppeda ci-dessous l'explique.

Si des ressources doivent être libérées, les pods avec une QoS « Meilleur effort » seront d'abord évincés, puis ceux avec une QoS « Évolutif », et enfin ceux avec une QoS garantie. L'idée est qu'en évinçant les pods de priorité inférieure, nous récupérerons suffisamment de ressources sur le nœud pour éviter d'avoir à évincer les pods avec une QoS garantie.

Nous souhaitons donc que nos applications critiques fonctionnent avec une qualité de service garantie, et les pods InterSystems en font sans aucun doute partie.

Consultez Open Exchange Application / Github Repo ci-joint pour obtenir un modèle expliquant comment mettre à niveau votre cluster IrisCluster afin de bénéficier d'une qualité de service garantie pour tous vos pods InterSystems.

Jusqu'à présent, vous avez peut-être déployé en spécifiant les ressources dans le podTemplate :

podTemplate:
  spec:
    resources:
      requests:
        memory: "8Gi"
        cpu: "2"
      limits:
        memory: "8Gi"
        cpu: "2"

mais en supposant que vous utilisez les éléments suivants dans votre fichier IKO values.yaml (c'est le comportement par défaut) :

useIrisFsGroup: false 

Vous ignorez alors les initContainers et un éventuel side-car, et votre pod ne bénéficiera que d'une QoS évolutive.

Conformément à la documentation Kubernetes sur la QoS, pour qu'un pod obtienne une classe de QoS garantie :

  • Chaque conteneur du pod doit avoir une limite de mémoire et une demande de mémoire.
  • Pour chaque conteneur du pod, la limite de mémoire doit être égale à la demande de mémoire.
  • Chaque conteneur du pod doit avoir une limite de CPU et une demande de CPU.
  • Pour chaque conteneur du pod, la limite de CPU doit être égale à la demande de CPU.

Cela inclut les initContainers et les side-cars. Pour spécifier les ressources de l'initContainer, vous devez le remplacer :

      podTemplate:
        spec:
          initContainers:
          - command:
            - sh
            - -c
            - /bin/chown -R 51773:51773 /irissys/*
            image: busybox
            name: iriscluster-init
            resources:
              requests:
                memory: "1Gi"
                cpu: "1"
              limits:
                memory: "1Gi"
                cpu: "1"
            securityContext:
              runAsGroup: 0
              runAsNonRoot: false
              runAsUser: 0
            volumeMounts:
            - mountPath: /irissys/data/
              name: iris-data
            - mountPath: /irissys/wij/
              name: iris-wij
            - mountPath: /irissys/journal1/
              name: iris-journal1
            - mountPath: /irissys/journal2/
              name: iris-journal2
          resources:
            requests:
              memory: "8Gi"
              cpu: "2"
            limits:
              memory: "8Gi"
              cpu: "2"

Consultez un exemple complet d'IrisCluster incluant initContainers et side-cars dans l'application Open Exchange ci-jointe.

Vous pouvez également modifier le comportement par défaut d'IKO dans values.yaml comme suit :

useIrisFsGroup: true 

pour éviter les initContainers dans certains cas, mais des complications peuvent survenir et useIrisFsGroup mériterait un article à part entière. Je compte en parler prochainement.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年7月4日 3m read

¡Opciones para desarrolladores Python + Encuesta!

Estoy escribiendo esta publicación principalmente para recopilar un consenso informal sobre cómo los desarrolladores están utilizando Python junto con IRIS, ¡así que por favor responded a la encuesta al final del artículo! En el cuerpo del artículo, daré un poco de contexto sobre cada una de las opciones proporcionadas, así como sus ventajas, pero si lo preferís, podéis hacer una lectura rápida y simplemente responder la encuesta.

Como muchos de vosotros probablemente ya sabéis, Python es actualmente el lenguaje de programación más popular entre los desarrolladores en todo el mundo —y con buena razón. Python es intuitivo, fácil de leer, cuenta con una gran cantidad de bibliotecas y paquetes, y ofrece numerosos recursos para resolver casi cualquier problema. Por estas razones y muchas más, Python suele ser la primera opción natural para los desarrolladores.

Entonces, cuando un desarrollador comienza a trabajar con InterSystems IRIS, puede surgir una pregunta común: “¿Puedo usar Python y aún así aprovechar al máximo IRIS?” ¿La respuesta? “¡Sí!” Este artículo presentará algunas de las formas más comunes en las que se puede usar Python junto con InterSystems IRIS.

Opciones para usar Python con IRIS:

1. Python embebido:
Presentado en 2021, Python embebido permite escribir y ejecutar código Python directamente dentro de ObjectScript. Esto permite el uso conjunto de Python y ObjectScript, integrando Python en el entorno de IRIS sin salir de él. Es una excelente opción para quienes desean aprovechar Python sin abandonar el ecosistema de IRIS.

2. Conectividad ODBC mediante pyODBC:
También podéis conectar aplicaciones externas de Python a IRIS usando ODBC, al estilo de una arquitectura cliente-servidor tradicional. Este es probablemente el método de integración más utilizado, ya que se basa en flujos de trabajo SQL familiares para los desarrolladores Python. El paquete pyODBC es compatible con la especificación DB API 2.0 y permite ejecutar consultas SQL sobre bases de datos IRIS.

3. API Nativa de InterSystems y External Language Server (ELS):
Estas dos opciones ofrecen una integración más flexible entre Python e IRIS:

  • a. API Nativa para Python: permite el acceso directo a características centrales de IRIS como clases persistentes y estructuras globales. Es ideal cuando se necesita trabajar con constructos específicos de IRIS de forma programática desde Python.
  • b. External Language Server (ELS): permite que IRIS invoque código Python que se ejecuta en un proceso separado, o incluso en un servidor distinto. Es especialmente útil cuando el código Python consume muchos recursos (CPU o memoria), o cuando se necesita aislar la ejecución para garantizar estabilidad y escalabilidad.

En resumen:
Python e InterSystems IRIS se complementan muy bien. Ya sea que tengáis poca experiencia con ObjectScript, queráis aprovechar el rico ecosistema de Python, o simplemente prefiráis programar en este lenguaje, existen múltiples caminos de integración. Cada opción ofrece beneficios distintos según tu arquitectura y caso de uso.

¡Gracias por leer este breve resumen sobre cómo usar Python con InterSystems IRIS!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
質問
· 2025年7月4日

How to export a project XML file for deploy with Visual Studio Code?

Hello everybody, 

I would like to export project contents using Visual Studio Code, as well as I do with InterSystems Studio.

However, while attempting the export through the InterSystems extension I get the following error:

- There are no folders in the current workspace that code can be exported to.

These are the step to reproduce my error:

  1. Create and save a new VSCode workspace
  2. Open a local directory 
  3. Go to the InterSystems extension
  4. Open "Projects" panel and right-click on the project you want to export
  5. Click on "Export Project Contents"

Anyone can help me solving this issue?

Thank you in advance 

7件の新着コメント
ディスカッション (7)4
続けるにはログインするか新規登録を行ってください