Search

Clear filter
Discussion
Vadim Aniskin · Feb 24, 2023

Dark version of InterSystems Developer Community

Hi everybody! Many developers prefer a dark version of applications. Not surprisingly, @Guillaume.Rongier7183 posted an idea of making a dark version for the Developer Community. So we look forward to hearing from you. Please send us your feedback by using this Poll on the Ideas Portal, and by voting and commenting on the relevant idea. Thank you in advance for your votes and have a good day! if it's not the default I won't care Third choice could be phrased better: I suggest "Doesn't matter, I will use Community regardless of interface color." Thank you so much, John!I really appreciate your advice. Please ensure that any dark version uses our white logo as the default color is invisible in dark mode. @Guillaume.Rongier7183 Thank you for your idea. We got several comments on this idea here and on the Ideas Portal. We discussed this idea with developers to estimate the resources needed. We got 3 votes supporting this idea, and based on poll results 56% of users answered that they'll not use the Dark version. Based on this input we move this idea to the status "Future consideration". We'll discuss the Dark version again during Community portal development planning. Thank for the feedback. I think I will continue to use my sunglasses to check the community at night for a while
Article
Alex Woodhead · Jun 13, 2023

LangChain on InterSystems PDF documentation

Yet another example of applying LangChain to give some inspiration for new community Grand Prix contest. I was initially looking to build a chain to achieve dynamic search of html of documentation site, but in the end it was simpler to borg the static PDFs instead. Create new virtual environment mkdir chainpdf cd chainpdf python -m venv . scripts\activate pip install openai pip install langchain pip install wget pip install lancedb pip install tiktoken pip install pypdf set OPENAI_API_KEY=[ Your OpenAI Key ] python Prepare the docs import glob import wget; url='https://docs.intersystems.com/irisforhealth20231/csp/docbook/pdfs.zip'; wget.download(url) # extract docs import zipfile with zipfile.ZipFile('pdfs.zip','r') as zip_ref: zip_ref.extractall('.') # get a list of files pdfFiles=[file for file in glob.glob("./pdfs/pdfs/*")] Load docs into Vector Store import lancedb from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import LanceDB from langchain.document_loaders import PyPDFLoader from langchain.embeddings.openai import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.prompts.prompt import PromptTemplate from langchain import OpenAI from langchain.chains import LLMChain embeddings = OpenAIEmbeddings() db = lancedb.connect('lancedb') table = db.create_table("my_table", data=[ {"vector": embeddings.embed_query("Hello World"), "text": "Hello World", "id": "1"} ], mode="overwrite") documentsAll=[] pdfFiles=[file for file in glob.glob("./pdfs/pdfs/*")] for file_name in pdfFiles: loader = PyPDFLoader(file_name) pages = loader.load_and_split() # Strip unwanted padding for page in pages: del page.lc_kwargs page.page_content=("".join((page.page_content.split('\xa0')))) documents = CharacterTextSplitter().split_documents(pages) # Ignore the cover pages for document in documents[2:]: documentsAll.append(document) # This will take couple of minutes to complete docsearch = LanceDB.from_documents(documentsAll, embeddings, connection=table) Prep the search template _GetDocWords_TEMPLATE = """Answer the Question: {question} By considering the following documents: {docs} """ PROMPT = PromptTemplate( input_variables=["docs","question"], template=_GetDocWords_TEMPLATE ) llm = OpenAI(temperature=0, verbose=True) chain = LLMChain(llm=llm, prompt=PROMPT) Are you sitting down... Lets talk with the documentation "What is a File adapter?" # Ask the queston # First query the vector store for matching content query = "What is a File adapter" docs = docsearch.similarity_search(query) # Only using the first two documents to reduce token search size on openai chain.run(docs=docs[:2],question=query) Answer: '\nA file adapter is a type of software that enables the transfer of data between two different systems. It is typically used to move data from one system to another, such as from a database to a file system, or from a file system to a database. It can also be used to move data between different types of systems, such as from a web server to a database. "What is a lock table?" # Ask the queston # First query the vector store for matching content query = "What is a locak table" docs = docsearch.similarity_search(query) # Only using the first two documents to reduce token search size on openai chain.run(docs=docs[:2],question=query) Answer: '\nA lock table is a system-wide, in-memory table maintained by InterSystems IRIS that records all current locks and the processes that have owned them. It is accessible via the Management Portal, where you can view the locks and (in rare cases, if needed) remove them.' Will leave as a future exercise to format an User interface on this functionality Amazing... Can we do the same against DC pages? Impressive, and I have some UI ideas. But your example doesn't use IRIS in any way, right? Correct. There is no use of IRIS though the example could be extended to profile metadata from classes. With generative AI the line between Class Dictionary and Documentation could be less distinct. The example doesn't make use of vector metadata yet. The documentation has description of settings, and a deployment has a cpf / api to allude setting values, so maybe it is possible for AI to describe the nature of a deployment or support further information regarding messages / application / event log. ( Deliberately suggesting too many options for a single competition candidate to attempt to take on ) 💡 This article is considered as InterSystems Data Platform Best Practice.
Question
Naveenkumar M · Nov 1, 2022

APIs to get the data in InterSystems Cache

Do we have REST API documentation to retrieve the data available in InterSystems Cache. I am looking for APIs that will help me to pull the data available in InterSystems Cache. Hi Naveenkumar, I think the first look does a great job of walking through this. Hope this is helpful: https://docs.intersystems.com/iris20222/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_rest The "Full Stack Tutorial" link on https://developer.intersystems.com/ is another source of help for building REST APIs. Also there are a plenty of examples in OpenExchange, which you can try via ZPM (IRIS package manager): https://openexchange.intersystems.com/?search=REST&sort=d.desc
Announcement
Anastasia Dyubaylo · Dec 7, 2022

[Video] InterSystems IRIS Cloud SQL

Hi Developers, Enjoy watching the new video on InterSystems Developers YouTube: ⏯ InterSystems IRIS Cloud SQL @ Global Summit 2022 Learn how to deploy a fully managed, scalable, and secure InterSystems IRIS SQL engine in the cloud in under a minute. We'll show you how to get up and running quickly through the InterSystems Cloud Portal — import your schemas and data and connect easily using InterSystems JDBC, ADO.NET, DB-API, and ODBC client drivers. Presenters: 🗣 Richard Guidice, Senior Cloud Engineer, InterSystems🗣 @Steven.LeBlanc, Product Specialist, InterSystems Enjoy it and stay tuned! 👍
Article
Lucas Enard · Nov 27, 2022

Easy CSV TO FHIR - InterSystems Contest

Hello everyone, I’m a French student in academical exchange for my fifth year of engineering school and here is my participation in the FHIR for Women's Health contest. This project is supposed to be seen as the backend of a bigger application. It can be plugged into a Front End app and help you gather information from your patients. It will read your data in local and use a Data Transformation to make it into a FHIR object before sending it to the included local FHIR server. I wanted to participate because Women's Health is a really important topic that must be discussed more. Using my work you can easily transform any CSV file into a FHIR resource to gather information from your patient on any important subject. It could be used to gather information on pregnant women, then these data ( stored in FHIR in IRIS ) could be analyzed to see if there is any problem or complication. They can also be reviewed by a doctor for example. See [my GitHub](https://github.com/LucasEnard/Contest-FHIR) and the Open Exchange post linked to this article. Or see the ReadMe here : # 1. Contest-FHIR This is a full python IRIS production that gather information from a csv, use a DataTransformation to make it into a FHIR object and then, save that information to a FHIR server. This use interop as well as FHIR. The objective is to help people understand how easy it is to use FHIR. I didn't have the time to create a csv about women's health, but you can easily imagine this application using a csv on Women's Health. - [1. Contest-FHIR](#1-contest-fhir) - [2. Prerequisites](#2-prerequisites) - [3. Installation](#3-installation) - [3.1. Installation for development](#31-installation-for-development) - [3.2. Management Portal and VSCode](#32-management-portal-and-vscode) - [3.3. Having the folder open inside the container](#33-having-the-folder-open-inside-the-container) - [4. FHIR server](#4-fhir-server) - [5. Walkthrough](#5-walkthrough) - [5.1. Messages and objects](#51-messages-and-objects) - [5.2. Business Service](#52-business-service) - [5.3. Business Process](#53-business-process) - [5.4. Business Operation](#54-business-operation) - [5.5. Conclusion of the walkthrough](#55-conclusion-of-the-walkthrough) - [6. Creation of a new DataTransformation](#6-creation-of-a-new-datatransformation) - [7. What's inside the repo](#7-whats-inside-the-repo) - [7.1. Dockerfile](#71-dockerfile) - [7.2. .vscode/settings.json](#72-vscodesettingsjson) - [7.3. .vscode/launch.json](#73-vscodelaunchjson) # 2. Prerequisites Make sure you have [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) and [Docker desktop](https://www.docker.com/products/docker-desktop) installed. If you work inside the container, as seen in [3.3.](#33-having-the-folder-open-inside-the-container), you don't need to install fhirpy and fhir.resources. If you are not inside the container, you can use `pip` to install `fhirpy` and `fhir.resources`. Check [fhirpy](https://pypi.org/project/fhirpy/#resource-and-helper-methods) and [fhir.resources](https://pypi.org/project/fhir.resources/) for morte information. # 3. Installation ## 3.1. Installation for development Clone/git pull the repo into any local directory e.g. like it is shown below: ``` git clone https://github.com/LucasEnard/fhir-client-python.git ``` Open the terminal in this directory and run: ``` docker-compose up --build ``` This will create the IRIS Framework and the FHIR Server. Once you are done building enter the Management portal, open the interop tab, open the Production and start it. Now you will see that the CSV was automatically read from your local files and added to the FHIR server. This app will periodically read any csv inside the "csv" folder and will send it to the FHIR server, doing the Data Transformation needed. ## 3.2. Management Portal and VSCode This repository is ready for [VS Code](https://code.visualstudio.com/). Open the locally-cloned `fhir-client-python` folder in VS Code. If prompted (bottom right corner), install the recommended extensions. ## 3.3. Having the folder open inside the container You can be *inside* the container before coding if you wish. For this, docker must be on before opening VSCode. Then, inside VSCode, when prompted (in the right bottom corner), reopen the folder inside the container so you will be able to use the python components within it. The first time you do this it may take several minutes while the container is readied. If you don't have this option, you can click in the bottom left corner and `press reopen in container` then select `From Dockerfile` [More information here](https://code.visualstudio.com/docs/remote/containers) ![Architecture](https://code.visualstudio.com/assets/docs/remote/containers/architecture-containers.png) By opening the folder remote you enable VS Code and any terminals you open within it to use the python components within the container. # 4. FHIR server To complete this walktrough we will use a fhir server. This fhir server was already build-in when you cloned and build the container. The url is `localhost:52773/fhir/r4` # 5. Walkthrough Complete walkthrough of the Python IRIS production. ## 5.1. Messages and objects Objects and messages will hold the information between our services,processes and opeartions. In the `obj.py` file we have to create a dataclass that match the csv, this will be used to hold the information before doing the DataTransformation. In our example the organization.csv csv looks like this, ``` active;name;city;country;system;value true;Name1;city1;country1;phone;050678504 false;Name2;city2;country2;phone;123456789 ``` Therefore, the object will look like this, ```python @dataclass # > This class represents a simple organization class BaseOrganization: active:bool = None name:str = None city:str = None country:str = None system:str = None value:str = None ``` In the `msg.py` file, we will have two type of request, the first one hold information of an organization before the DataTransformation and the second one can hold the information of the organization after the DataTransformation. ## 5.2. Business Service In the `bs.py` file we have the code that allows us to read the csv and for each row of the csv ( so for each organization ), map it into an object we created earlier. Then, for each of those row ( organization ) we create a request and send it to our process to do the DataTransformation. ```python # We open the file with open(self.path + self.filename,encoding="utf-8") as csv: # We read it and map it using the object BaseOrganization from earlier reader = DataclassReader(csv, self.fhir_type ,delimiter=";") # For each of those organization, we can create a request and send it to the process for row in reader: msg = OrgaRequest() msg.organization = row self.send_request_sync('Python.ProcessCSV',msg) ``` ## 5.3. Business Process In the `bp.py` file we have the DataTransformation, converting a simple python object holding little information to a FHIR R4 object. Here are the steps to do a DataTransformation using embedded python on our simple organization, ```python # Creation of the object Organization organization = Organization() # Mapping of the information from the request to the Organization object organization.name = base_orga.name organization.active = base_orga.active ## Creation of the Address object and mapping of the information ## from the request to the Address object adress = Address() adress.country = base_orga.country adress.city = base_orga.city ### Setting the adress of our organization to the one we created organization.address = [adress] ## Creation of the ContactPoint object and mapping of the ## information from the request to the ContactPoint object telecom = ContactPoint() telecom.value = base_orga.value telecom.system = base_orga.system ### Setting the telecom of our organization to the one we created organization.telecom = [telecom] # Now, our DT is done, we have an object organization that is a # FHIR R4 object and holds all of our csv information. ``` After that, our mapping is done and our DT is working. Now, we can send this newly created FHIR R4 resource to our FhirClient that is our operation. ## 5.4. Business Operation In the `bo.py` file we have the FhirClient, this client creates a connection to a fhir server that will hold the information gathered through the csv. In this example, we use a local fhir server who doesn't need an api key to connect. To connect to it we have to use in the on_init function, ```python if not hasattr(self,'url'): self.url = 'localhost:52773/fhir/r4' self.client = SyncFHIRClient(url=self.url) ``` Now, when we receive a message/request, we can, by finding the resource type of the resource we send with our request to the client, create an object readable by the client, and then save it to the fhir server. ```python # Get the resource type from the request ( here "Organization" ) resource_type = request.resource["resource_type"] # Create a resource of this type using the request's data resource = construct_fhir_element(resource_type, request.resource) # Save the resource to the FHIR server using the client self.client.resource(resource_type,**json.loads(resource.json())).save() ``` It is to be noted that the fhir client works with any resource from FHIR R4 and to use and change our example, we only need to change the DataTransformation and the object the holds the csv information. ## 5.5. Conclusion of the walkthrough If you have followed this walkthrough you now know exactly how to read a csv of a represetation of a FHIR R4 resource, use a DataTransformation to make it into a real FHIR R4 object and save it to a server. # 6. Creation of a new DataTransformation This repository is ready to code in VSCode with InterSystems plugins. Open `/src/python` to start coding or using the autocompletion. **Steps to create a new transformation** To add a new transformation and use it, the only things you need to do is add your csv named `Patient.csv` ( for example ) in the `src/python/csv` folder. Then, create an object in `src/python/obj.py` called `BasePatient` that map your csv. Now create a request in `src/python/msg.py` called `PatientRequest` that has a variable `resource` typed BasePatient. The final step is the DataTransformation, for this, go to `src/python/bp.py` and add your DT. First add `if isinstance(request, PatientRequest):` and then map your request resource to a fhir.resource Patient. Now if you go into the management portal and change the setting of the `ServiceCSV` to add `filename=Patient.csv` you can just start the production and see your transformation unfold and you client send the information to the server. **Detailled steps to create a new transformation** If you are unsure of what to do or how to do it here is a step by step creation of a new transformation : Create the file `Patient.csv` n the `src/python/csv` folder and fill it with: ``` family;given;system;value FamilyName1;GivenName1;phone;555789675 FamilyName2;GivenName2;phone;023020202 ``` Our CSV hold a family name, a given name and a phone number for two patients. In `src/python/obj.py` write : ```python @dataclass class BasePatient: family:str = None given:str = None system:str = None value:str = None ``` In `src/python/msg.py` write: ```python from obj import BasePatient @dataclass class PatientRequest(Message): resource:BasePatient = None ``` In `src/python/bp.py` write: ```python from msg import PatientRequest from fhir.resources.patient import Patient from fhir.resources.humanname import HumanName ``` In `src/python/bp.py` in the `on_request` function write: ```python if isinstance(request,PatientRequest): base_patient = request.resource patient = Patient() name = HumanName() name.family = base_patient.family name.given = [base_patient.given] patient.name = [name] telecom = ContactPoint() telecom.value = base_patient.value telecom.system = base_patient.system patient.telecom = [telecom] msg = FhirRequest() msg.resource = patient self.send_request_sync("Python.FhirClient", msg) ``` Now if you go into the management portal and change the setting of the `ServiceCSV` to add `filename=Patient.csv` you can just stop and restart the production and see your transformation unfold and you client send the information to the server. ![Settings](https://user-images.githubusercontent.com/77791586/170278879-02eb4303-51af-45ba-93bf-393e9ff5ed94.png) # 7. What's inside the repo ## 7.1. Dockerfile The simplest dockerfile to start a Python container. Use `docker-compose up` to build and reopen your file in the container to work inside of it. ## 7.2. .vscode/settings.json Settings file. ## 7.3. .vscode/launch.json Config file if you want to debug. Great example how to convert an CSV file to FHIR. Thanks for the contribution.
Announcement
Anastasia Dyubaylo · Dec 23, 2022

[Video] Introduction to Analytics with InterSystems IRIS

Hey Developers, Enjoy watching the new video on InterSystems Developers YouTube: ⏯ Introduction to Analytics with InterSystems IRIS Get an introduction to the analytics capabilities of InterSystems IRIS data platform and InterSystems IRIS for Health. Learn about the embedded analytics tools and third-party tools supported by InterSystems IRIS and see how you can use these tools for your own analytics needs. Dive in and stay tuned! 👍
Announcement
Anastasia Dyubaylo · Dec 30, 2022

[Video] InterSystems Cloud Services Overview

Hi Developers, Enjoy watching the new video on InterSystems Developers YouTube: ⏯ InterSystems Cloud Services Overview See how InterSystems Cloud Services provide targeted, low-barrier solutions to a wide range of issues. Learn how you can simplify your infrastructure, accelerate application development, and reduce the overhead in daily operations and maintenance using these services. Enjoy watching and stay tuned! 👍 whata great overview of our new Cloud offerings ... well done :)
Announcement
Anastasia Dyubaylo · Jan 6, 2023

[Video] What is InterSystems FHIR Server

Hi Community, Watch this video to learn about InterSystems FHIR Server, the turnkey FHIR data solution that empowers FHIR application developers to focus on building life-changing healthcare applications: ⏯️ What is InterSystems FHIR Server Subscribe to InterSystems Developers YouTube to stay tuned for more!
Article
Anastasia Dyubaylo · May 26, 2023

What is InterSystems SSO and how it's used

Hi Community, You probably have already seen this abbreviation SSO on different InterSystems sites: Community, Learning Portal, Global Masters, etc. It basically stands for Single Sign-On. This means that you need only one set of login and password and you can access all the Developer Ecosystem resources. Thus, you create your account once and then use it everywhere in the InterSystems Ecosystem. Just look at the top menu with all the interesting resources that will help you grow professionally and personally: Use it well!
Announcement
Anastasia Dyubaylo · May 30, 2023

InterSystems Grand Prix Contest 2023

Hi Developers, The annual competition for InterSystems IRIS developers is fast approaching! We're super excited to invite you all to join the Grand Prix contest for building open-source solutions using InterSystems IRIS data platform! 🏆 InterSystems Grand Prix Contest 2023 🏆 Duration: June 12th - July 9th, 2023 Prize pool: $26,000 The topic InterSystems Grand Prix is our annual programming contest to find the best application that uses InterSystems IRIS. We welcome applications on any topic! Present any application which uses InterSystems IRIS as a backend (API or database) with any type of InterSystems IRIS API or data model. You are welcome to improve your applications which you presented in the InterSystems contest series last year and submit them for the Grand Prix. And you are welcome to submit a 100% new application. General Requirements: Accepted applications: new to Open Exchange apps or existing ones, but with a significant improvement. Our team will review all applications before approving them for the contest. The application should work either on IRIS Community Edition or IRIS for Health Community Edition. Both could be downloaded as host (Mac, Windows) versions from Evaluation site, or can be used in a form of containers pulled from InterSystems Container Registry or Community Containers: intersystemsdc/iris-community:latest or intersystemsdc/irishealth-community:latest . The application should be Open Source and published on GitHub. The README file to the application should be in English, contain the installation steps, and contain either the video demo or/and a description of how the application works. Only 3 submissions from one developer are allowed. Contest Prizes: 1. Experts Nomination – winners will be selected by the team of InterSystems experts: 🥇 1st place - $7,000 🥈 2nd place - $5,000 🥉 3rd place - $3,000 🏅 4th place - $2,000 🏅 5th place - $1,000 🌟 6-10th places - $200 🌟 11-20th places - $100 2. Community winners – applications that will receive the most votes in total: 🥇 1st place - $3,000 🥈 2nd place - $2,000 🥉 3rd place - $1,000 ✨ Global Masters badges for all winners included! Note: If several participants score the same amount of votes, they all are considered winners, and the money prize is shared among the winners. Important Deadlines: 🛠 Application development and registration phase: June 12, 2023 (00:00 EST): Contest begins. July 2, 2023 (23:59 EST): Deadline for submissions. ✅ Voting period: July 3, 2023 (00:00 EST): Voting begins. July 9, 2023 (23:59 EST): Voting ends. Note: Developers can improve their apps throughout the entire registration and voting period. Who Can Participate? Any Developer Community member, except for InterSystems employees (ISC contractors allowed). Create an account! Developers can team up to create a collaborative application. Allowed from 2 to 5 developers in one team. Do not forget to highlight your team members in the README of your application – DC user profiles. Helpful Resources: ✓ How to work with InterSystems IRIS (for beginners): Build a Server-Side Application with InterSystems IRIS Learning Path for beginners ✓ For beginners with ObjectScript Package Manager (ZPM): How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and ZPM ✓ How to submit your app to the contest: How to publish an application on Open Exchange How to submit an application for the contest ✓ Sample IRIS applications: intersystems-iris-dev-template iris-embedded-python-template interoperability-embedded-python isc-cloud-sql-python-demo rest-api-template integratedml-demo-template iris-fhir-template iris-fullstack-template iris-interoperability-template iris-analytics-template Need Help? Join the contest channel on InterSystems' Discord server or talk with us in the comment to this post. We can't wait to see your projects! Good luck 👍 By participating in this contest, you agree to the competition terms laid out here. Please read them carefully before proceeding. Another amazing and rich contest :-) Thank you amazing team! Looking forward to the submissions! An example idea for Grand Prix entry:Demonstration of a "Language Interface" (chat interface) to replace the functionality of a traditional online shop ( HTML UI ) Use IRIS to hold a product catalogue (Images, Description, Cost, Stock) Use IRIS to present the "Language Interface". Can support via Embedded Python User Experience: Describe what you want instead of search Filter products based on preferences identified in conversation Automatically locate products via catalogue meta data from conversation content CSP or other web Session for current Shopping basket (Item, Quantity, Total) Persist and reuse preferences identified from previous shopping chats Can current ISC interns participate? (not during work hours) Developers!Only two days left to the start of the contest!Get ready to upload your apps! Hi @Jingyu.Lee ! We didn't do this before. I sent you an email. Hey Devs! ❗️ We extend the contest period until July 9th More time for your app! Don't miss your chance to win 😉 Hey Devs! The recording of the "Kick-off webinar Grand Prix 2023" is on InterSystems Developers YouTube! 🔥 Hey Developers!One application has been already added to the contest!🤩 oex-mapping by @Robert.Cemper1003 Upload your apps and join the contest! Dear Developers! Please use technology bonuses to collect more votes and get closer to winning the main prize. 🥳 Happy coding!✌ The links to InterSystems IRIS community Editions are updated. The application should work either on IRIS Community Edition or IRIS for Health Community Edition. Both could be downloaded as host (Mac, Windows) versions from Evaluation site, or can be used in a form of containers pulled from InterSystems Container Registry or Community Containers: intersystemsdc/iris-community:latest or intersystemsdc/irishealth-community:latest . Thanks for reporting! Hey, Community! One more application has been added to the contest! appmsw-warm-home by @MikhailenkoSergey Check it out! Hi Devs!Registration for 🏆 InterSystems Grand Prix Contest 2023 🏆 ends next week) Hurry up to upload your app!😎 FYI: you can also edit the application during the voting time). Hey, Devs! Another application has been added to the contest! RDUH Interface Analyst HL7v2 Browser Extension by Rob Ellis Tips for those who haven't applied yet) 😎 You can upload an old app from previous contests, just update it a bit (add a new feature). Happy coding! Developers! Four new applications have been added to the contest!🤩 oex-vscode-snippets-template by @John.Murray IRIS FHIR Transcribe Summarize Export by Ikram ShahIntegratedMLandDashboardSample by @珊珊.喻 irisapitester by @Daniel.Aguilar Only 2 days left to the end of the registration phase!Don't miss your chance to join the competition!🚀 Devs! Only a few hours left until the end of the registration phase! Hurry up and upload your apps to join the contest! Hi Irina,I've been trying to submit DevBox into the competition but I'm not getting a submit option for it. Figured it out!
Announcement
Anastasia Dyubaylo · Jul 5, 2023

Looking for an InterSystems Developer and Startup Evangelist

InterSystems is currently looking for a U.S.-based Developer and Startup Evangelist! Are you a strong developer who loves writing, speaking and teaching other developers about technology while taking a meaningful role in shaping the experience they have with the platform itself? Join InterSystems and help us delight developers within the open source community. You will be the subject matter expert and evangelist for modern developers, focused on the end-to-end experience through the entire development cycle, and ensure that we meet the needs of current and future developers. As the InterSystems Developer and Start Up Evangelist, your mission is to educate and engage early adopters and the broader developer community around the InterSystems IRIS data platform and back it up with practical examples. That means doing whatever it takes to bring them into our developer community of developers and keep them actively and happily building within it while learning from their experiences. This is a role that will allow you to contribute to building real software and also take a public-facing role representing the platform to developer communities. It is part marketing, part engineering and part community building with a healthy sprinkle of education and public relations. Job Responsibilities Expand the number of active and influential open source projects using InterSystems’ technology Create and deliver impactful content (sample code, blog posts, presentations, etc.) that help developers learn concepts and build successful apps and integrations on our data management platform. Develop performance indicators and results for awareness and engagement, and create a reporting cadence. Collaborate across the organization to create videos, courses, or exercises to meet the needs of new-to-InterSystems developers. Support various development events/hackathons and evangelize our IRIS Data Platform Skills & Experience 5+ years in software engineering at top companies. 2+ years in developer relations/advocacy/evangelism A track record of speaking, presenting and teaching highly technical topics. Continual learner who thrives on figuring out new technology. Broad understanding of the open source software space. Superior oral and written communication skills in English. Experience with a mix of database technologies (SQL/relational, NoSQL/document, key-value, unstructured). Experience in a variety of programming languages Willingness to travel and ability to work autonomously. Bachelors in a STEM related field Bonus points for having experience with InterSystems technology >> APPLY HERE <<
Article
Evgeniy Potapov · Jul 10, 2023

InterSystems Reports. Formulas, parameters, labels

In this article, we will explore the use of parameters, formulas and labels in Logi Report Designer (formerly Logi JReport Designer). What are they for and how to create them? Using the basic functionality of InterSystems Reports Designer, parameters, formulas and labels, you can significantly improve the detail and information content of the generated report. In addition, these tools allow you to automate some of the processes, which greatly speeds up and facilitates the creation of reports. Let's analyze each tool separately now. Parameters are individually configurable variables. They can store both static and dynamic data. For a dynamic parameter, you can set your own SQL query, which will be independent of the SQL query of the main dataset. In this way, you can output data without creating multiple datasets, thus keeping your design organized and clean. Parameters can be used both as a part of functions and SQL queries and as an independent indicator with the following syntax: “@YourParameter”. This quality is simply indispensable when the accuracy and detail of data are required. A static parameter is a predefined value or a list of values ​​used as a condition or filter on the output. A static parameter can also be used in SQL queries, functions and labels using the same syntax: “@YourParameter”. Formulas are fully programmable functions in the Java language. This powerful tool greatly expands the possibilities of analytics, allowing you to perform complex calculations and set logical conditions for the output data. Formulas are created in the built-in Java IDE inside Logi with a built-in set of functions for working with such data types as Array, Date / Time, Financial, Math, String, etc. Formulas can work with all data available in InterSystems Reports. The built-in IDE understands parameters, calculated fields, and even other formulas. A label is a text widget. It serves to display any lowercase characters and variables. Its purpose speaks for itself: it is used in headers and footers, as a custom legend for a chart or table, in a word, and wherever data need to be titled. Just like all other InterSystems Reports tools, the label is a very flexible widget. It can be placed anywhere on the page, inside a graph or table. Here we will look at examples of the most basic use of these tools. We will create a parameter that returns the number of developers out of the total number of members of the InterSystems community. In order to create a parameter, you need to click on the Catalog Manager button in the upper left corner of the toolbar. In the window that opens, on the left, select the Parameters item, then click on the “New Parameter” button in the upper left corner. The parameter creation window will open. In the first line, we need to set the parameter name. It is recommended to choose a name that reflects the purpose of the parameter as accurately as possible and at the same time is short enough. It is necessary because during the development process, you will create an abundance of different parameters, and there is a risk of overloading the lists of parameters and functions. In this article, we will analyze the dynamic parameter, so in the second line in the Value Setting we will select Bind with Single Column. In the next Data Source line, we will choose the table from which the selection will occur. In our case, it is Members. Then in the Bind Column, we will select the columns from which we will return the value. There isn't a separate column that can count the number of developers for us in the Members table. Yet, thanks to the ability to set a special SQL query, we can establish a condition for this particular selection. To do that, scroll down the list of properties, find the line Import SQL and click on it. A request creation window will appear. It has already pre-recorded the selection string of the members_count column - the total number of participants. We only need to add the condition “where Developer = 1”. We can check the request by clicking on the Check button, and if it is successful, you should click OK. After completing the previous steps, click OK in the parameter creation window, and the new Developer_member parameter will appear in the directory on the left. At this point, close the Catalog Manager window and try the newly created parameter. To do that, drag it to the report page and click View. After completing this step, you will be prompted to accept the value of the parameter taken from the current database, so click OK. Ready! Now we can see how many people in the community are developers. This setting will automatically get updated every time the data changes. Now we will create a formula. This formula will calculate the percentage of developers compared to the total number of participants. To do that, you should repeat the same steps we took when creating the parameter. Let me remind you. Click on the Catalog Manager, select Formulas, and then New Formula in the upper left corner. Before the formula creation window appears, we will be prompted to enter a name for the formula. After that, the IDE will open for you to write code in Java. Built in InterSystems Reports, the compiler allows you to write short functions without defining classes and methods. In order to calculate the percentage, we need to divide our new parameter by the total number of members and multiply by 100. We have already created the CountTotalMembers indicator. We did it with the tool called InterSystems Adaptive Analytics (powered by AtScale). You can find out more about it here (link). Thus, we got the following formula. Pay attention to the function allowing you to write comments to the code. Well-documented code will make it easier for others to work with your formulae. After writing, you can check if the resulting code has any errors by clicking the checkmark button on the toolbar. Toolwill check whether the syntax is correct and whether the specified parameters are present. After the function has been tested, it can be saved. To make that happen, click the Save button, and the formula will appear in the catalog. Following the parameter example, our next step will be to drag the new formula onto the page and find out the share of developers in the total number of participants. This function can be utilized as an indicator for graphs and tables. I will give you an example of using our new formula in a bar graph. You can learn more about charts and how to create them here (link). In this example, I used a new formula and derived the proportion of developers over the past five months. It's a bar graph, with the formula developers_to_members on the y-axis and the dimension month_year_num on the x-axis. It turned out a very visual trend and we did it in just a few minutes. Now it is time to look at the labels. They are embedded into the report page from the Insert tab with the Label button. A window to enter the text will appear on the page. The built-in functionality allows you to edit many parameters for the new Label. In this article, we used this widget to enhance our new table. There are a lot of parameters placed on the panel on the right that can help you design a label. To make them appear, select the Label widget. To set the borders for the widget, scroll down to the Border category. Select all 4 borders: Bottom Line, Left Line, Right Line, and Top Line, and set all of them to Solid. In order to fill the background, you need to scroll through the properties to the Color category and select the desired shade. The same can be done in the Format tab on the toolbar at the top. If you wish to select the font size, stay on the same Format tab, click the drop-down menu with sizes, and pick the desired one. It can also set the font type and the location of the text inside the widget. For more precise positioning relative to other widgets, use the coordinates the Label has inside the page. By default, sheet sizes are in inches. The positioning settings are located in the Geometry category on the widget's properties panel on the left. In this article, we tried to cover three basic features of InterSystems Reports (powered by Logi Report). That is why by now, we expect you to know how to create formulae, parameters, and labels with great confidence. Great article! @Jean.Millette / @Timothy.Leavitt - are we leveraging all of these features in our use of InterSystems Reports? Hi, I think you missed some links references: Btw, great article! :)
Announcement
Vadim Aniskin · Jul 19, 2023

The 2nd InterSystems Idea-A-Thon

Hi Developers! We’re happy to invite you to the contest dedicated to your bright ideas related to InterSystems technology: 🎁 The 2nd InterSystems Idea-A-Thon 🎁 Post an idea according to the topic of this Idea-A-Thon between August 01 and August 21 and receive a guaranteed prize. Both InterSystems employees and Community Members are invited to participate! >> SUBMIT YOUR IDEA HERE << Topic: 💡 Run solutions fast, safe, and green with InterSystems IRIS 💡 The topic is based on a presentation made by @Jeffrey.Fried during the InterSystems Global Summit 2023: InterSystems IRIS What's New, What's Next - YouTube So, this Idea-A-Thon is announced for ideas that, once implemented, will improve speed and reliability, and reduce carbon footprint for solutions based on InterSystems IRIS. Will be accepted ideas that help to: improve the performance of solutions, decrease required hardware resources for their implementation, reduce workdays for development, testing, implementation, user training, and other ideas related to the Idea-A-Thon topic. 👉 To join our Idea-A-Thon, please submit an idea(-s) on the InterSystems Ideas portal. Accepted ideas should: be created during the Idea-A-Thon period by a user registered on the InterSystems Ideas portal (you can log in via InterSystems SSO); not be part of other already existing ideas - only new ideas are allowed; not describe the existing functionality of InterSystems Products or Services; contain, in addition to the title, a detailed description of the idea and a clear explanation of why the idea fits the Idea-A-Thon topic - at least 3-5 sentences; be posted in English; be accepted as meaningful by InterSystems experts All ideas will be subject to moderation. Clarification of an idea might be requested. Ideas that meet the requirements will receive special "Idea-A-Thon" status. Who can participate? We invite EVERYONE to join our new Idea-A-Thon. Both InterSystems employees and Community Members are welcome to participate and submit their ideas. Prizes 1. Participant prize - authors of all accepted ideas will get: 🎁 Wireless Charging Mouse Pad 2. Expert award - the 3 best ideas will be selected by InterSystems experts. Winners will get: 1st place - 🎁 Apple Watch SE / Fairphone Fairbuds XL headphones 2nd place - 🎁 Speaker bundle JBL Pulse 5 / Apple AirPods Pro 2nd Generation / LEGO Star Wars R2-D2 3rd place - 🎁 LEGO Porsche 911 / Beeline Bike GPS Computer - Velo 2 3. Community Award - an idea with the most votes will get: 🎁 LEGO Porsche 911 / Beeline Bike GPS Computer - Velo 2 Note: InterSystems employees can only get the participation prize. Expert and Community awards can only be won by non-InterSystems members of the Community. Contest period ⚠️ Idea Submission: August 1 - 21 ✅ Voting for ideas: August 1 - 27 🎉 Winners announcement: August 28 We encourage you to share your ideas on the Ideas portal during this period. Registered members can participate by voting and providing comments on published ideas. Note: only votes from active Community users who have made at least one post on the Developer Community are counted for the Community Award. So, Post your idea(s) on the InterSystems Ideas portal, and stay tuned for your idea's status updates: >> SUBMIT YOUR IDEA HERE << Important note: All prizes are subject to availability and shipping options. Some items may not be available for international shipping to specific countries, in this case, an equivalent alternative will be provided. We will let you know if a prize is not available and offer a possible replacement. Prizes cannot be delivered to residents of Crimea, Russia, Belarus, Iran, North Korea, Syria, or other US-embargoed countries. Thanks for adopting/adapting my recent suggestion for a new Global Masters Reward. Not all of us are citizens of the Apple universe. Read more about these headphones here. @John.Murray Thank you for your advice, we are improving the list of prizes so that they are of interest to all participants. Hi Developers! The 2nd InterSystems Idea-A-Thon just started! Don't forget to submit your ideas according to the requirements and topic of the Idea-A-Thon, answer questions from InterSystems experts on your ideas, comment and vote for the ideas you like best ;) I'll second this! I'm not an Apple person either. I really like my Samsung Galaxy watch. For Android users, that may be a good alternative to an Apple watch. Just out of curiosity, what's the wireless charging mouse pad? All of the other prizes have a specific brand and model listed, but not that one. Hi David! Thank you for your question. I provide a description and photos below: This cork fast wireless charging mouse pad is perfect for any desk. Simply put your compatible smartphone on the wireless charging spot while using the mouse pad and save desk space. 11.81" W x 7.88" H x .12" DIncludes a 39-inch USB-A-to-Type-C charging cableThrough a partnership with 1% For The Planet, one percent of sales are donated to environmental nonprofits that looks like a very cool idea :) Thank you @Benjamin.Spead Hi Developers! For 1 week of the contest, participants have already posted 20 bright ideas 💡 Thank you! 👏 Vote and comment on these ideas, and submit your ideas to the contest! Hi developers! We are pleased to announce that the winners of the 2nd InterSystems Idea-A-Thon will receive not only great awards: Expert awards: 1st place 🎁 Apple Watch SE / Fairphone Fairbuds XL headphones 2nd place 🎁 Speaker bundle JBL Pulse 5 / Apple AirPods Pro 2nd Generation / LEGO Star Wars R2-D2 3rd place 🎁 LEGO Porsche 911 / Beeline Bike GPS Computer - Velo 2 Community Award 🎁 LEGO Porsche 911 / Beeline Bike GPS Computer - Velo 2 but also new unique Global Masters badges. We have already 27 brilliant ideas qualified for the 2nd Idea-A-Thon contest, but only 11 authors can win, because: - some authors posted several ideas - some ideas have been published by InterSystems employees, who can only receive participant prizes, not winner awards. >> SUBMIT YOUR IDEA HERE << And win a prize and get a new unique Global Masters badge. Note: please explain in the idea description why it fits the 2nd Idea-A-Thon topic: 💡 Run solutions fast, safe, and green with InterSystems IRIS 💡 Hello Developers!Last call for submitting your ideas! 3 days left until the end of our Idea-A-Thon.⏰➡️ And don't forget to upvote and comment on the ideas you like! Hi Community!👋 We have 💡29 brilliant ideas💡 submitted for the 2nd Idea-A-Thon. Thank you all for your ideas!👏 ➡️Vote for ideas you like to define the Community Award winner. 🏆 ➡️ Stay tuned for the announcement of the winners next week!🏆
Article
Muhammad Waseem · Sep 6, 2023

InterSystems IRIS Flask Blog application

Hi CommunityIn this article, I will introduce my application IRIS-FlaskBlog.IRIS-FlaskBlog Application is a real-world application that leverages the functionality of Flask web framework, SQLALchemy ORM, and InterSystems IRIS. The application contains user registration and authentication with the help of Flask-Login python library, a responsive user interface to create and edit posts. Application Features User registration and authentication Creation of a data structure with SQLALcemy model classes Responsive user interface to create, edit, and delete posts Like and add comments to the post Search based on the user and based on the tags Used Technologies Flask: A micro web framework for Python that allows you to build web applications quickly and efficiently.Conduit SQLAlchemy: An Object-Relational Mapping (ORM) library that provides a high-level, Pythonic interface for interacting with databases. InterSystems IRIS: A high-performance, data platform that combines a powerful database with integration, analytics, and AI capabilities. Installation Clone/git pull the repo into any local directory git clone https://github.com/mwaseem75/IRIS-FlaskBlog.git Open a Docker terminal in this directory and run: docker-compose build Run the IRIS container: docker-compose up -d Application Flow In the docker, ENTRYPOINT [ "python", "app.py" ] is defined which will initiate the application (The ENTRYPOINT instruction is used to configure the executables that will always run after the container is initiated) # app.py # import create_app from website package from website import create_app # import configuration parameters from website.myconfig import * if __name__ == "__main__": # Get db parameters and creating to create_app in order to create DB database_uri = f'iris://{DB_USER}:{DB_PASS}@{DB_URL}:{DB_PORT}/{DB_NAMESPACE}' app = create_app(database_uri) app.run('0.0.0.0', port="4040", debug=False) The above code invokes create_app() function and then runs the application on port 4040create_app() function is defined in __init__.py file from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager from .myconfig import * db = SQLAlchemy() def create_app(database_uri): #Import flask application app = Flask(__name__) app.config['SECRET_KEY'] = "iris-FlaskBlogKey" # assigning db parameters app.config['SQLALCHEMY_DATABASE_URI'] = database_uri #create and push an application context onto the application context stack app.app_context().push() from .views import views from .auth import auth from .models import User app.register_blueprint(views, url_prefix="/") app.register_blueprint(auth, url_prefix="/") db.init_app(app) with app.app_context(): #Create database db.create_all() # Assign Login View login_manager = LoginManager() login_manager.login_view = "auth.login" login_manager.init_app(app) @login_manager.user_loader def load_user(id): return User.query.get(int(id)) return app The above code creates the database by invoking SQLAlchemy create_all() function which will create the database structure defined in the models.py file from . import db from flask_login import UserMixin from sqlalchemy.sql import func #creates tags_accosication table tags_table = db.Table( 'tags_association', db.Column('post_id', db.ForeignKey('post.id'), primary_key=True), db.Column('tag_id', db.ForeignKey('tag.id'), primary_key=True), ) #Users table class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(150), unique=True) username = db.Column(db.String(150), unique=True) password = db.Column(db.String(150)) date_created = db.Column(db.DateTime(timezone=True), default=func.now()) posts = db.relationship('Post', backref='user', passive_deletes=True) comments = db.relationship('Comment', backref='user', passive_deletes=True) likes = db.relationship('Like', backref='user', passive_deletes=True) def __repr__(self): return f'{self.username}' #Posts Table class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(250)) content = db.Column(db.Text) date_created = db.Column(db.DateTime(timezone=True), default=func.now()) author = db.Column(db.Integer, db.ForeignKey( 'user.id', ondelete="CASCADE"), nullable=False) comments = db.relationship('Comment', backref='post', passive_deletes=True) likes = db.relationship('Like', backref='post', passive_deletes=True) tags = db.relationship('Tag', secondary=tags_table, backref=db.backref('posts', lazy='dynamic')) def __repr__(self): user = User.query.filter_by(id=self.author).first() return f'{user.username}' #Tags table class Tag(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(150)) def __repr__(self): return f'{self.name}' #Comments table class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) text = db.Column(db.String(500), nullable=False) date_created = db.Column(db.DateTime(timezone=True), default=func.now()) author = db.Column(db.Integer, db.ForeignKey( 'user.id', ondelete="CASCADE"), nullable=False) post_id = db.Column(db.Integer, db.ForeignKey( 'post.id', ondelete="CASCADE"), nullable=False) #Like table class Like(db.Model): id = db.Column(db.Integer, primary_key=True) date_created = db.Column(db.DateTime(timezone=True), default=func.now()) author = db.Column(db.Integer, db.ForeignKey( 'user.id', ondelete="CASCADE"), nullable=False) post_id = db.Column(db.Integer, db.ForeignKey( 'post.id', ondelete="CASCADE"), nullable=False) Application Database SQLALchemy will create below tables: user: To store User information post: To store Posts related data tags: To store Tags against the post tags_association: To store links between Posts and Tags comments: To save post comments by users like: To store likes details by users To view table details, navigate to http://localhost:52775/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen?$NAMESPACE=USER# For more details please visit IRIS-FlaskBlog application pageThanks Hi Muhammad, Your video is available on InterSystems Developers YouTube: ⏯️ Intersystems IRIS Flask Blog application Thanks @Iryna_Mologa Hi @Muhammad.Waseem 👋Thank you for implementing Example of Flask application with SQLAlchemy IRIS idea from InterSystems Ideas portal. 👏 Thanks @Vadim.Aniskin and IS Ideas portal for providing this opportunity
Announcement
Anastasia Dyubaylo · Dec 25, 2024

[Video] InterSystems IRIS Cloud Document

Hey Community, Enjoy the new video on InterSystems Developers YouTube: ⏯ InterSystems IRIS Cloud Document @ Global Summit 2024 This session will highlight the document model capabilities of a new cloud service we are introducing. The document model enables developers to store data with a flexible schema structure and still query the data through an industry standard query interface via SQL. 🗣 Presenter: @Stefan.Wittmann, Product Manager, InterSystems Enjoy watching, and look out for more videos! 👍