Search

Clear filter
Announcement
Anastasia Dyubaylo · Sep 26, 2022

InterSystems Developer Ecosystem Team

Hey Community, We're very pleased to present to you our brand new About Us pages! Please welcome: 📍 Our Team 📍 InterSystems Developer Ecosystem Overview So... Let's meet the Team! These are the people that make the magic happen ✨ Please feel free to contact us – we are here to make the Community a better place for developers! In addition, don't miss your chance to get to know all our regional teams: ES DC team PT DC team JP DC team CN DC team FR DC team And... 🤩 Let's meet our InterSystems Developer Ecosystem overview page! Here you can see a clear and simple overview of our related portals and resources where you can find lots of exciting and helpful stuff: How to find these pages? Go to the "About Us" section from the top menu: Hope you enjoy our brand new pages! Feel free to share your feedback in the comments ;)
Announcement
Anastasia Dyubaylo · Mar 8, 2023

[Video] InterSystems Deployment Options

Hi Developers, Enjoy watching the new video on InterSystems Developers YouTube: ⏯ InterSystems Deployment Options @ Global Summit 2022 Choosing the right deployment environment for your application built with InterSystems technologies means making informed decisions on a range of topics: Container, virtual machine, or bare metal? On-premise, hosted, private cloud, or public cloud? Linux or Windows Horizontal scaling, vertical scaling, or both? Platform high availability or synchronous mirroring? Disaster recovery required or not. In this this session, you'll hear real-world feedback about current best practices, the thinking behind it, and how InterSystems can help you make deployment decisions that mean your system will be effective, scalable, and resilient. 🗣 Presenter: @Ray.Wright, Principal Technology Architect, InterSystems Enjoy it and stay tuned! 👍
Announcement
Anastasia Dyubaylo · May 29, 2023

[Video] Observability with InterSystems IRIS

Hey Developers, Watch this video to learn about observability of your InterSystems IRIS application with InterSystems System Alerting and Monitoring (SAM) and modern DevOps tooling: ⏯ Observability with InterSystems IRIS @ Global Summit 2022 🗣 Presenter: @Robert.Kuszewski, Product Manager, Developer Experience, InterSystems Subscribe to InterSystems Developers YouTube to stay tuned!
Discussion
Evgeny Shvarov · Apr 4, 2023

InterSystems SQL Cheat Sheet

Hi developers! As you know InterSystems IRIS besides globals, object, document and XML data-models also support relational where SQL is expected as a language to deal with the data. And as in other relational DBMS InterSystems IRIS has its own dialect. I start this post to support an SQL cheatsheet and invite you to share your favorites - I'll update the content upon incoming comments. Here we go! List all the tables in database: SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' Credit to @Dmitry.Maslennikov Create table with current date and current time as defaults: CREATE TABLE CUSTOMER ( ID INTEGER PRIMARY KEY NOT NULL, NAME VARCHAR(100) NOT NULL, PASSWORD VARCHAR(20) NOT NULL, LAST_UPDATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, REGISTRATION_DATE DATE DEFAULT CURRENT_DATE NOT NULL ); notice functions CURRENT_TIMESTAMP and CURRENT_DATE are without parenthesis. Create stored procedure/function that uses ObjectScript inside: CREATE OR REPLACE FUNCTION IRIS_VERSION() RETURNS VARCHAR LANGUAGE OBJECTSCRIPT { Return $ZV } Call Stored procedure/function: select IRIS_VERSION() as "Version" Call internal functions. Return IRIS Version: Select $version Return current namespace: Select $namespace Run SQL from file (credit @Raj.Singh5479 ): DO $SYSTEM.SQL.Schema.ImportDDL("c:\InterSystems\mysqlcode.txt",,"IRIS") Run SQL from file using python terminal(credit @Dmitry.Maslennikov): irissqlcli iris://_SYSTEM:SYS@localhost:1972/USER < c:\InterSystems\mysqlcode.txt Open SQL shell in terminal(credit @Chad.Severtson): USER>:sql Open SQL shell in webterminal (credit @Nikita.Savchenko7047 ): SAMPLES > /sql SAMPLES:SQL > select top 5 * from Cinema.Film ID Category Description Length PlayingNow Rating TicketsSold Title 1 1 A post-modern excursion into family dynamics and Thai cuisine. 130 1 PG-13 47000 Her Spicy Brothers 2 1 A gripping true story of honor and discovery 121 1 R 50000 Einstein's Geisha 3 1 A Jungian analysis of pirates and honor 101 1 PG 5000 A Kung Fu Hangman 4 1 A charming diorama about sibling rivalry 124 1 G 7000 Holy Cooking 5 2 An exciting diorama of struggle in Silicon Valley 100 1 PG 48000 The Low Calorie Guide to the Internet SAMPLES: SQL > /sql SAMPLES > write "COS!" cos! Add yours? nice! Thanks ... I didn't know you could do things like Select $zversion :) here it s in practice for those interested: USER>d $system.SQL.Shell() SQL Command Line Shell ---------------------------------------------------- The command prefix is currently set to: <<nothing>>. Enter <command>, 'q' to quit, '?' for help. [SQL]USER>>select $zversion 1. select $zversion Expression_1 IRIS for Windows (x86-64) 2022.1.2 (Build 574U) Fri Jan 13 2023 15:08:27 EST 1 Rows(s) Affected statement prepare time(s)/globals/cmds/disk: 0.1884s/34,356/143,526/0ms execute time(s)/globals/cmds/disk: 0.0007s/0/394/0ms cached query class: %sqlcq.USER.cls1 is there no quicker way to list all database tables? Like the postgresql \t? in irissqlcli, you can use \dt or .tables Try ":sql" instead of d $system.SQL.Shell() Holy cow @Chad.Severtson, that's really cool! Do you know when that was added / where I can find more information? I don't see it in the docs on SQL Shell (https://docs.intersystems.com/iris20221/csp/docbook/Doc.View.cls?KEY=GSQL_shell). Also, what is the ":" shorthand for and where else can it be used? Would be nice to have Run SQL from a file: DO $SYSTEM.SQL.Schema.ImportDDL("c:\InterSystems\mysqlcode.txt",,"IRIS") or irissqlcli iris://_SYSTEM:SYS@localhost:1972/USER < c:\InterSystems\mysqlcode.txt :py for embedded python @Dmitry.Maslennikov - thank you! Docs reference? Do you know what the ":" syntax is? Hey @Benjamin.Spead, You can find out more about the alias capability of iris session here: Using the Terminal Interactively | Using the Terminal | InterSystems IRIS Data Platform 2022.3 It's quite useful. You can even provide parameter substitution with $1, $2, etc. USER>:? :<number> Recall command # <number> :? Display help :py Do $system.Python.Shell() :mdx Do $system.DeepSee.Shell() :sql Do $system.SQL.Shell() :tsql Do $system.SQL.TSQLShell() :alias Create/display aliases :clear Clear history buffer :history Display command history :unalias Remove aliases HTH wow. Didn't know we have that! And aliases can be setup and transferred too? E.g. like a package (IPM)? Creating Aliases for Commonly Used Commands from docs:If you are using a UNIX® or Linux system, you can provide a list of alias definitions which the Terminal will set automatically at the start of every session. Define these aliases (one per line) in a file named .iris_init in the home directory.never tried this. I rarely work on *X or [SQL]USER>> run filename.sql You can also save the current query [SQL]USER>>save filename.sql Another very cool aspect of the feature :) So it looks like this is just a built-in alias which ships with InterSystems IRIS. Nice work @Evgeny.Shvarov those typical things you want to do quickly and never remember and have to read the docs :-) holy cow #2 :-) so much precious info on this thread! seriously! it's amazing how much knowledge there is to be gleaned within this community :) It has been around for a few years.Personally, I hesitate to use the alias capability lest I find myself in an environment without them! Thanks, Luca! Just a note... LAST_UPDATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, This field will only define the LAST_UPDATED field at INSERT, not for an UPDATE. You probably want something like: LAST_UPDATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) NOT NULL, This will cause LAST_UPDATED to be set at INSERT and UPDATE to the current timestamp to microsend precision. Thank you @Jeffrey.Drumm !!!
Announcement
Vadim Aniskin · May 10, 2023

InterSystems Ideas News #6

Hey Community! Welcome to the 6th edition of the InterSystems Ideas news bulletin! This time you can read about: ​​​​✓ Ideas implemented last month by Community members ✓ How to create a new idea on InterSystems Ideas ✓ New ideas created recently The Hall of Fame was updated with the names of Community Members who implemented Community Opportunity ideas: Add IRIS as a supported database for Apache Superset by @Herman.Slagman7521 was implemented by @Dmitry.Maslennikov Please add google oauth authorization to login to the management portal by @Aleksandr.Kolesov was implemented by @Yuri.Gomes 👏Thank you for implementing these ideas👏 The new article "How to create a new idea on InterSystems Ideas" describes the idea creation process step by step. Read it when adding new idea to the portal. And to round up this newsletter, here is the list of new ideas posted since the previous news bulletin 1. Dump SQL tables by @Evgeny.Shvarov 2. Java Hibernate support for IRIS by @Dmitry.Maslennikov 3. Add legitimate special symbol-separator for ObjectScript variable names by @Evgeny.Shvarov 4. allow cancel "Pending approval" by @Robert.Cemper1003 5. provide a switch to Hide/Unhide posts. or fix Re-Publish by @Robert.Cemper1003 6. Traceroutes to Java Gateway Display by @Scott.Roth 7. On Developer Community put animated GIFs behind a play/pause button by @John.Murray 8. Community in numbers on a GEO Dashboard by @Yuri.Gomes 9. Unit testing in VSCode by @Robert.Barbiaux 10. Saving Searched Criteria within Message Search by @Scott.Roth 11. Featured Article or Question by @Yuri.Gomes 👏Thank you for posting new ideas👏 Stay tuned for the next InterSystems Ideas news bulletin! In the meantime post new ideas for public discussion, vote for existing ideas, and comment on them on our InterSystems Ideas Portal! Hi Developers! 👋The idea "IRIS classes for OpenAI API" was implemented recently. @Francisco.López1549 thank you for implementing this idea and welcome to "Hall of Fame" page of Ideas Portal! 👏
Article
Yuri Marx Pereira Gomes · Feb 23, 2023

IoT with InterSystems IRIS

IoT (Internet of Things) is a network of interconnected things, including vehicles, machines, buildings, domestic devices or any other thing with embedded TCP/IP remote connection available, allowing it to receive and send execution instructions and data. Each thing provides one or more services to the IoT network. For instance, smart light bulbs provide services of turning off and turning on the lights; smart air conditioners maintain the environment temperature; smart cameras send notifications when capturing movement. Yet, all those devices can operate together to provide building security, for example.When the camera detects movement, the lights turn on. The orchestration of those processes that can deliver business and integrated services, such as building security, is done by a server software controller. It can receive and send data and instructions from a dozen smart devices to a TCP/IP network (like the Internet) to operate these things as major services. There are two options of protocols used by things and server software to interoperate data and instructions: MQTT (Message Queuing Telemetry Transport) and REST (Representational State Transfer) API. The first one is more common because it has a simpler structure. Some devices have limited memory and processor features and don’t have enough resources to use REST. Thus, this article will detail how to implement the server-side software to interoperate the IoT using MQTT. About MQTT MQTT is a lightweight, publish-subscribe, machine to machine network protocol for message queue/message queuing service. It is designed for connections with remote locations that have devices with resource constraints or limited network bandwidth. It must run over a transport protocol that provides ordered, lossless, bi-directional connections—typically, TCP/IP. It is an open OASIS standard and an ISO recommendation (ISO/IEC 20922). See more on https://en.wikipedia.org/wiki/MQTT. The MQTT protocol has two actors to interoperate data between things: the message broker and the clients. The first one is a server software used to receive and publish messages to be produced or consumed by one or more clients. The last ones are the smart devices and server softwares used to provide major services using the thing’s services, such as a server software to provide a building automation service, or a software to control the traffic in the city using smart semaphores and public cameras services. MQTT Broker There are various MQTT message brokers on the market, but the most popular one is the Eclipse Mosquitto (https://mosquitto.org/), so we will use it in our example.The MQTT Broker is similar to JMS or MQ brokers. It is an intermediate employed to receive messages and post them into topics. Thus, the connected clients can subscribe to one or more topics to produce or consume messages from those topics. The topics allow the clients (software and devices) to do their job in an uncoupled and asynchronous way. It means that each client observes a message and takes action if necessary. They can also post new messages themselves. For instance, if a thermostat sends a message indicating high temperature in the topic “building A”, the air conditioning installed in that building and listed in the topic “building A” can take this message from there and turn itself on to reduce the temperature. However, it is common to see server-side software with business rules automated to turn on the air conditioning when the temperature reaches a specific value. The MQTT broker can also guarantee message delivery if it is configured to retain the messages when down and restore them when on again. Other advantages of the MQTT Broker include (from Wikipedia): Eliminating vulnerable and insecure client connections, if configured to do so. Being able to easily scale from a single device to thousands of gadgets. Managing and tracking all client connection states, including security credentials and certificates, if configured to do so. Reducing network strain without compromising the security, if configured to do so (when working with a cellular or satellite network). MQTT messages There are 3 types of messages: Connect: establish a connection between the broker and clients in a TCP/IP session. Disconnect: disconnect the server and the client from a TCP/IP session. Publish: put a message into a topic and send a copy of that message to each client that subscribed to the topic. Check out an example of messages in action: InterSystems IRIS support to IoT and MQTT protocol According to the InterSystems IRIS documentation, the currently supported version is MQTT 3.1. This MQTT specification is defined as an OASIS standard, MQTT Version 3.1.1. The Interoperability module from IRIS defines an Inbound (to consume MQTT messages) and an Outbound (to produce MQTT messages) MQTT Adapter. It is possible to develop custom business services and operations using these adapters, or you can use the built-in business service and operation, EnsLib.MQTT.Service.Passthrough and EnsLib.MQTT.Operation.Passthrough, respectively. If you want to use the MQTT protocol outside of an interoperability production, you can use the lower-level %Net.MQTT classes. The MQTT classes use the Eclipse Paho MQTT C Client Library. To create a Business Service to consume MQTT messages Class packagename.NewService1 Extends Ens.BusinessService { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Inbound"; Method OnProcessInput(pInput As EnsLib.MQTT.Message, pOutput As %RegisteredObject) As %Status { set tsc=$$$OK set messageContent = pInput.StringValue …. Quit tsc } } To create a Business Operation to produce/send MQTT messages Class packagename.NewOperation1 Extends Ens.BusinessOperation { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Outbound"; Parameter SETTINGS = "-SendSuperSession"; Method OnMessage(pRequest As packagename.Request, Output pResponse As packagename.Response) As %Status { #dim tSC As %Status = $$$OK #dim e As %Exception.AbstractException Try { Set message = ##class(EnsLib.MQTT.Message).%New() Set message.Topic = ..Adapter.Topic Set jsonValue = {} Set jsonValue.message = "Response message” Set message.StringValue = jsonValue.%ToJSON() Set tSC=..Adapter.Send(message.Topic,message.StringValue) Set pResponse = ##class(packagename.Response).%New() Set pResponse.message = “Message response” } Catch e { Set tSC=e.AsStatus() } Quit tSC } Settings for the Inbound and Outbound MQTT Adapter Both Business Service and Business Operation can be configured with the following parameters (source: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=EMQTT_reference): Client ID: This is the string that identifies this client to the broker. It must be ASCII-encoded and contain between 1 and 23 characters. Connect Timeout: This is the connection timeout. Connecting to a busy server may take some time, so this timeout can be used to avoid a premature connection failure. It specifies the number of seconds to wait before a connection attempt fails. Credentials Name: This is the ID name of the set of credentials values used to access the MQTT broker. The username and password defined in your Credentials item must be ASCII-encoded. It is not needed if the broker does not require login credentials. Keep Alive: Specifies the maximum number of seconds to pass between messages sent by the client to the broker. QOS: This determines the quality of service required. It can have either of these two values: 0 - QOSFireAndForget: Do not wait for a response from the broker and 1 - QOSWaitForDelivery: Wait for a response from the broker and issue an error if the broker does not respond. Retained: This is the flag that indicates to the broker whether the message should be retained. Topic: This is the name of the topic to which you wish to publish or subscribe. The topic must be ASCII-encoded. The topic is typically a hierarchical string with levels of subtopics separated by a / (forward slash). In a subscription, a topic can have wildcards as a topic level. URL: This is the URL of the broker with which you wish to communicate. The scheme is either “tcp” or “ssl” followed by the domain name and the port delimited by a “:”, for example, “tcp://BIGBADAPPLE.local:1883”. Typically TLS-enabled endpoints are configured with a port of 8883, but this is not mandatory. Download and Install the Sample application The IRIS IoT Sample is a simple application to show you how to consume (receive) and produce (send) MQTT messages using an Interoperability Production. To get it, go to https://openexchange.intersystems.com/package/IoT-Sample. Now, execute the next steps. 1. Clone/git pull the repo into any local directory $ git clone https://github.com/yurimarx/iris-iot-sample.git 2. Open the terminal in this directory and run: $ docker-compose build 3. Run the IRIS container with your project: $ docker-compose up -d If you want to install it using ZPM, follow the next steps: 1. Open IRIS Namespace with Interoperability Enabled.2. Open Terminal and call: USER>zpm "install iris-iot-sample" Run the Sample Application. 1. Open the production and start it. It will begin observing the MQTT topic /DeviceStatusInputTopic and produce responses to the MQTT topic /DeviceStatusOutputTopic. Check out: 2. Use an MQTT client to send a message and test the production. To do it, go to https://chrome.google.com/webstore/detail/mqttbox/kaajoficamnjijhkeomgfljpicifbkaf on your Google Chrome browser. It is the Chrome Plugin MQTTBox. Just click Add to Chrome and then Add App. 3. In your Google Chrome browser go to chrome://apps/ and select MQTTBox (if required, click Open Anyway). 4. Click Create MQTT Client button. 5. Configure the MQTT connection with these settings: Client name: Local Protocol: mqtt / tcp Host: localhost:1883 Username: admin Password: admin All other settings stay the default values. 6. Configure the MQTT topics to send and receive MQTT messages: Topic to publish: /DeviceStatusInputTopic Topic to subscribe: /DeviceStatusOutputTopic Payload: { "deviceId":"Air Conditioner Level 1", "statusDate":"2023-01-07 14:03:00", "status": 0 } 7. Click the button Subscribe to check the messages on the topic /DeviceStatusOutputTopic. 8. Click the button Publish to send a message to /DeviceStatusInputTopic and see the results produced by IRIS production on /DeviceStatusOutputTopic. 9. Check out the message processing session on IRIS Management Portal Visual Trace The Sample Application source code The Dockerfile ARG IMAGE=intersystemsdc/irishealth-community ARG IMAGE=intersystemsdc/iris-community FROM $IMAGE WORKDIR /home/irisowner/irisbuild ARG TESTS=0 ARG MODULE="iris-iot-sample" ARG NAMESPACE="USER" RUN --mount=type=bind,src=.,dst=. \ iris start IRIS && \ iris session IRIS < iris.script && \ ([ $TESTS -eq 0 ] || iris session iris -U $NAMESPACE "##class(%ZPM.PackageManager).Shell(\"test $MODULE -v -only\",1,1)") && \ iris stop IRIS quietly The latest version of InterSystems IRIS Community is used to create a docker instance of InterSystems IRIS with a namespace called USER. The docker-compose file version: '3.6' services: mosquitto: image: eclipse-mosquitto:2 container_name: mosquitto user: root volumes: - ./mosquitto/config/:/mosquitto/config/ - ./mosquitto/log/:/mosquitto/log/ - ./mosquitto/data/:/mosquitto/data/ ports: - 1883:1883 - 9001:9001 iris: build: context: . dockerfile: Dockerfile restart: always command: --check-caps false ports: - 1972 - 52795:52773 - 53773 volumes: - ./:/irisdev/app Two docker container instances are now created, and up and running. The first one is for the MQTT broker (mosquitto service), based on the Eclipse Mosquitto product, and the second one is for the MQTT server-side software, responsible for consuming and producing MQTT messages in order to provide Device Monitoring services.The mosquitto docker instance is configured in the file /mosquitto/config/mosquitto.conf. The port, message persistence, security and log questions are defined there. The file /mosquitto/config/password.txt determines the user as admin with the password admin too. However, it is encrypted by the command mosquitto_passwd -U password.txt (you can read more about this at https://mosquitto.org/man/mosquitto_passwd-1.html). The iris.script file zn "%SYS" Do ##class(Security.Users).UnExpireUserPasswords("*") zn "USER" Do ##class(EnsPortal.Credentials).SaveItem(0, "mosquitto_cred","mosquitto_cred","admin","admin","") zpm "load /home/irisowner/irisbuild/ -v":1:1 halt This file creates the credentials for the business service and business operation. Login to the MQTT Broker and run the ZPM file module.xml. The module.xml This file is used to compile the source code on the server and to install the sample application when using ZPM. <?xml version="1.0" encoding="UTF-8"?> <Export generator="Cache" version="25"> <Document name="iris-iot-sample.ZPM"> <Module> <Name>iris-iot-sample</Name> <Description>A simple IRIS interoperability application - for IoT using MQTT.</Description> <Version>1.0.8</Version> <Packaging>module</Packaging> <Dependencies> <ModuleReference> <Name>sslclient</Name> <Version>1.0.1</Version> </ModuleReference> </Dependencies> <SourcesRoot>src</SourcesRoot> <Resource Name="dc.irisiotsample.PKG"/> <SystemRequirements Version=">=2020.1" Interoperability="enabled" /> </Module> </Document> </Export> On the SourceRoot tag there are source packages to be compiled. The DeviceStatus persistent class Class dc.irisiotsample.DeviceStatus Extends %Persistent { Property deviceId As %String; Property statusDate As %TimeStamp; Property status As %Boolean; Storage Default { <Data name="DeviceStatusDefaultData"> <Value name="1"> <Value>%%CLASSNAME</Value> </Value> <Value name="2"> <Value>deviceId</Value> </Value> <Value name="3"> <Value>statusDate</Value> </Value> <Value name="4"> <Value>status</Value> </Value> </Data> <DataLocation>^dc.irisiotsample.DeviceStatusD</DataLocation> <DefaultData>DeviceStatusDefaultData</DefaultData> <IdLocation>^dc.irisiotsample.DeviceStatusD</IdLocation> <IndexLocation>^dc.irisiotsample.DeviceStatusI</IndexLocation> <StreamLocation>^dc.irisiotsample.DeviceStatusS</StreamLocation> <Type>%Storage.Persistent</Type> } } This class is used to persist the DeviceStatus in an SQL table. The DeviceStatusRequest class Class dc.irisiotsample.DeviceStatusRequest Extends Ens.Request { Property deviceId As %String; Property statusDate As %TimeStamp; Property status As %Boolean; Storage Default { <Data name="DeviceStatusRequestDefaultData"> <Subscript>"DeviceStatusRequest"</Subscript> <Value name="1"> <Value>deviceId</Value> </Value> <Value name="2"> <Value>statusDate</Value> </Value> <Value name="3"> <Value>status</Value> </Value> </Data> <DefaultData>DeviceStatusRequestDefaultData</DefaultData> <Type>%Storage.Persistent</Type> } } This class is employed to exchange data between interoperability components. The DeviceStatusService Class dc.irisiotsample.DeviceStatusService Extends Ens.BusinessService { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Inbound"; Method OnProcessInput(pInput As EnsLib.MQTT.Message, pOutput As Ens.StringResponse) As %Status { set tsc=$$$OK set DeviceStatusValue = ##class(%DynamicAbstractObject).%FromJSON(pInput.StringValue) set DeviceStatus = ##class(dc.irisiotsample.DeviceStatusRequest).%New() set DeviceStatus.deviceId = DeviceStatusValue.deviceId set DeviceStatus.statusDate = DeviceStatusValue.statusDate set DeviceStatus.status = DeviceStatusValue.status set tsc =..SendRequestSync("DeviceStatusProcess", DeviceStatus, .Response, -1, "Device Status Process") set pOutput = Response quit tsc } } The parameter adapter is indicating the use of the MQTT adapter when it comes to receiving MQTT messages. The method OnProcessInput receives the MQTT message on pInput and sends it to the Business Process, calling the method SendRequestSync as a synchronous message. The DeviceStatusProcess Class dc.irisiotsample.DeviceStatusProcess Extends Ens.BusinessProcess { Method OnRequest(request As dc.irisiotsample.DeviceStatusRequest, Output response As Ens.StringResponse) As %Status { Set tsc = 1 Set response = ##class(Ens.StringResponse).%New() Set DeviceStatus = ##class(dc.irisiotsample.DeviceStatus).%New() Set DeviceStatus.deviceId = request.deviceId Set DeviceStatus.status = request.status Set DeviceStatus.statusDate = request.statusDate Set tsc = DeviceStatus.%Save() If $$$ISOK(tsc) { Set tsc =..SendRequestSync("DeviceStatusOperation", request, .pResponse, -1, "Device Status Operation") Set response.StringValue = "Device id "_pResponse.deviceId_" has the status "_pResponse.status } Else { Set response.StringValue = "Error on save the device status" Set SuspendMessage = 1 } quit tsc } Storage Default { <Type>%Storage.Persistent</Type> } } This class receives the message from the business service, saves it to the database, and calls the DeviceStatusOperation to send (produce) a message with the results. The DeviceStatusOperation Class dc.irisiotsample.DeviceStatusOperation Extends Ens.BusinessOperation { Parameter ADAPTER = "EnsLib.MQTT.Adapter.Outbound"; Parameter SETTINGS = "-SendSuperSession"; Method NotifyDeviceStatus(pRequest As dc.irisiotsample.DeviceStatusRequest, Output pResponse As dc.irisiotsample.DeviceStatusResponse) As %Status { #dim tSC As %Status = $$$OK #dim e As %Exception.AbstractException Try { Set message = ##class(EnsLib.MQTT.Message).%New() Set message.Topic = ..Adapter.Topic Set jsonValue = {} Set jsonValue.message = "Device "_pRequest.deviceId_" has status "_pRequest.status Set message.StringValue = jsonValue.%ToJSON() Set tSC=..Adapter.Send(message.Topic,message.StringValue) Set pResponse = ##class(dc.irisiotsample.DeviceStatusResponse).%New() Set pResponse.deviceId = pRequest.deviceId Set pResponse.status = pRequest.status } Catch e { Set tSC=e.AsStatus() } Quit tSC } XData MessageMap { <MapItems> <MapItem MessageType="dc.irisiotsample.DeviceStatusRequest"> <Method>NotifyDeviceStatus</Method> </MapItem> </MapItems> } } This class receives a message from the Business Process and produces an MQTT message to a topic with the process response. The DeviceStatusProduction Class dc.irisiotsample.DeviceStatusProduction Extends Ens.Production { XData ProductionDefinition { <Production Name="dc.irisiotsample.DeviceStatusProduction" LogGeneralTraceEvents="false"> <Description></Description> <ActorPoolSize>2</ActorPoolSize> <Item Name="DeviceStatusService" Category="" ClassName="dc.irisiotsample.DeviceStatusService" PoolSize="1" Enabled="true" Foreground="false" Comment="" LogTraceEvents="false" Schedule=""> <Setting Target="Adapter" Name="ClientID">InterSystemsIRIS</Setting> <Setting Target="Adapter" Name="Topic">/DeviceStatusInputTopic</Setting> <Setting Target="Adapter" Name="Url">tcp://mosquitto:1883</Setting> <Setting Target="Adapter" Name="CredentialsName">mosquitto_cred</Setting> </Item> <Item Name="DeviceStatusProcess" Category="" ClassName="dc.irisiotsample.DeviceStatusProcess" PoolSize="1" Enabled="true" Foreground="false" Comment="" LogTraceEvents="false" Schedule=""> </Item> <Item Name="DeviceStatusOperation" Category="" ClassName="dc.irisiotsample.DeviceStatusOperation" PoolSize="1" Enabled="true" Foreground="false" Comment="" LogTraceEvents="false" Schedule=""> <Setting Target="Adapter" Name="ClientID">InterSystemsIRIS</Setting> <Setting Target="Adapter" Name="Topic">/DeviceStatusOutputTopic</Setting> <Setting Target="Adapter" Name="Url">tcp://mosquitto:1883</Setting> <Setting Target="Adapter" Name="CredentialsName">mosquitto_cred</Setting> </Item> </Production> } } This class configures the Business Service, the Business Process, and the Business Operation with the required parameters, and puts these components to work together. The main configured parameters are: URL: to set the MQTT Broker address. Topic: the queue to receive and send MQTT messages. DeviceStatusInputTopic for the business service and DeviceStatusOutputTopic for the Business Operation. CredentialsName: set the credentials with the username and password to connect with the MQTT broker. ClientID: it is a logical name assigned for the InterSystems IRIS and required by the broker to identify MQTT clients. As you can see, the IRIS interoperability adapter for MQTT is a very easy and powerful tool for consuming and producing MQTT messages and automating the business flow when it comes to IoT devices. So, enjoy it. Very good article, Yuri. Wonder when Intersystems will support AMQP protocol, to integrate seamlessly with ASB (Azure Service Bus) Thanks! Yaron, I'd appreciate if you submit it as an idea This is cool. Thank you very much. This gives you the opportunity to do a "Smart Home"" server in COS :-) - funny. Many thanks Thanks Yuri for this article and app. As MQTTBox doesn't work for me (no longer compatible), I'm using MQTT Explorer app to send messages :https://apps.apple.com/app/apple-store/id1455214828 Thanks! Of course MQTT Explorer also works on Windows, Ubuntu and any Linux platforms. http://mqtt-explorer.com/ https://github.com/thomasnordquist/MQTT-Explorer/releases
Announcement
Vadim Aniskin · Dec 14, 2022

InterSystems Ideas News #2

Hello Community! Welcome to the new edition of the InterSystems Ideas News! Learn what we've been up to this past couple of weeks. Curious about what is going on with all the great ideas you've been submitting to our InterSystems Ideas Portal? Here is the current status breakdown: ✓ 58 ideas are being triaged by InterSystems Product Managers. ✓ 43 ideas can be implemented by Developer Community members. ✓ 11 ideas are being implemented by InterSystems. ✓ 2 ideas are already implemented by InterSystems. ✓ 9 ideas are implemented by Developer Community members. To make it clearer what stages your ideas are going through here is the diagram: And to round up this newsletter, here is a list of ideas posted after Idea-A-Thon Improve Ukrainian translation in IRIS Code example Full Code Debugger Promote video contest Create a tool for IRIS BI to test all the pivots and dashboards if they still work after changes made Improve Spanish translation in IRIS Add IRIS as a supported database for Apache Superset For community articles, let admins (and possibly article authors) pin particular comments to the top Add address standardization to Normalization (using Project US@ standards) A tiny reminder, you can filter ideas by status, post new ideas for public discussion, vote for existing ideas, and comment on them on our InterSystems Ideas Portal! Stay tuned for the next InterSystems Ideas news bulletin and get creative in the meantime! Hello Community! Several users have asked me why the number of ideas in some statuses they see in the InterSystems Ideas is different from the number I mentioned in the news bulletin.I will try to explain it in this comment. Experts analyze your ideas daily. Thus, the status of analyzed or implemented ideas changes. In general, the number of ideas in the "Needs review" status is decreasing. And the number of ideas implemented by InterSystems and ideas that can be implemented by members of the Developer Community is increasing. Have a nice day. Vadim. Hello Community! I want to inform you that InterSystems Ideas now has a Portal Guide. The Portal Guide contains: information about the Ideas Portal goal, a complete list of ideas statuses, some links related to the portal. Please share your thoughts here or @Vadim.Aniskin about what else we can add there. Have a nice day, Vadim.
Announcement
Vadim Aniskin · Feb 27, 2023

InterSystems Ideas News #4

Hey Community! Welcome to the 4th edition of the InterSystems Ideas News bulletin! Here's what you can expect from it: Support your teammates with their ideas and votes. Users implemented ideas and gained tech bonuses for a contest. Dark version for InterSystems Developer Community: Yay or Nay? Recently added ideas. The most important piece of news is that in the last programming contest, 5 participants got extra points for implementing ideas from the InterSystems Ideas portal! Here they are: Developer(s) Application name Implemented idea @Lorenzo.Scalese OpenAPI-Suite Add a wizard similar to the SOAP wizard to generate a REST client from OpenAPI specification @José.Pereira @Henrique.GonçalvesDias @Henry.HamonPereira iris-tripleslash Add a project that helps to generate unittests for an ObjectScript class @MikhailenkoSergey gateway-sql, apptools-admin Create a UI for convenient and easy transfer of projects (classes, globals, applications, users, roles, privileges, grants, namespace mapping, SQLgateways, libraries, etc.) to other system instances for fast deployment. We added a new filter "My organization". From now on, people from the same company can filter the ideas and votes of people from the same organization. The other day, @Guillaume.Rongier7183 posted an idea concerning adding a dark theme for the Developer Community. We would appreciate your feedback on this idea via "polls" on the Ideas Portal home page, or by voting and commenting on this idea. Recently added ideas Dark version of InterSystems Community Add job location for job opportunities section on DC Searchable Index of New Features Set password through environment variable Schedule the article publication on DC site Support JSON on DC text editor Support linux bash language on DC text editor Change data capture from IRIS to kafka using SQL commands Cross-production Interoperability Messages, Service and Operation Additional Data Types for ISC Products Automatic XML Formatting of XData in DTL, BPL and Rulesets Assert CodeAssist prompting IRIS classes for OpenAI API Display UserValues contents on message property tab IRIS as a service Allow graphical editing of Interoperability components BPL, DTL and Business Rules in VS Code Add Source control for all the IRIS interoperability components Audit Lookuptables Add a "watch list" to WRC tickets (problems, issues) Connect InterSystems Documentation and Developer Community Publish the InterSystems IRIS Native SDK for Node.js on npm As usual, post your ideas on InterSystems Ideas, vote and comment on existing ideas, and implement Community Opportunity ideas. And stay tuned for our next News bulletin! ![awesome](https://media0.giphy.com/media/v1.Y2lkPTc5MGI3NjExNTZjMGNhYmQ5NmY2Y2NlOWNhYTkwYjQwN2QyZTc5Nzg0MGQyZGQ3NSZjdD1n/mXnO9IiWWarkI/giphy.gif)
Announcement
Vadim Aniskin · Mar 29, 2023

InterSystems Ideas News #5

Hi Developers! Welcome to the 5th issue of the InterSystems Ideas News! This time you can read about: ​​​​✓ Hall of Fame - a new page on the Ideas Portal ✓ Integration with Global Masters - get points for your ideas ✓ List of ideas that are planned for implementation 11 developers have already implemented ideas from the Ideas Portal. We created a new dedicated page on InterSystems Ideas to pay tribute to these heroes. The Hall of Fame lists: names of implemented ideas, developers who implemented ideas, implementation names with links to more information. You can implement one of Community Opportunity ideas and your name will be in the Hall of Fame! About a month ago, developers who submitted product ideas started getting points for these ideas. We would like to share that since 22 February, the authors have received a total of 18,200 Global Masters points for the following ideas 15 product ideas that were posted, promoted, or implemented: Cross-production Interoperability Messages, Service and Operation by @Stefan.Cronje1399 Additional Data Types for ISC Products by @Stefan.Cronje1399 Change data capture from IRIS to kafka using SQL commands by @Yuri.Gomes Allow graphical editing of Interoperability components BPL, DTL and Business Rules in VS Code by @Steve.Pisani Examples to work with IRIS from Django by @Evgeny.Shvarov Install python and java libraries from ZPM and Installation Manifest (%Installer) by @Yuri.Gomes Set password through environment variable by @Dmitry.Maslennikov Add a project that helps to generate unittests for an ObjectScript class by @Evgeny.Shvarov Create a UI for convenient and easy transfer of projects (classes, globals, applications, users, roles, privileges, grants, namespace mapping, SQLgateways, libraries, etc.) to other system instances for fast deployment. by @MikhailenkoSergey Add a wizard similar to the SOAP wizard to generate a REST client from OpenAPI specification by @Jaime.Lerga Public API for access to shared memory by @Alexey.Maslov Fold code on loops and If's on studio by @Heloisa.Paiva Chat bot to help with TrakCare customization/settings by Sumana Gopinath Iterative build of TrakCare configuration/code tables utilising FHIR and HL7 Messaging. by Linda McKay BPL, DTL, Business Rule Editor in VSCode by @Cristiano.Silva Post your great ideas and get points for them! And to round up this newsletter, here is the list of ideas that are planned for implementation Publish the InterSystems IRIS Native SDK for Node.js on npm by @John.Murray Move users, roles, resources, user tasks, Mappings (etc) to a seperate Database, other than %SYS, so these items can be mirrored by @Sean.O'Connor1391 Please add google oauth authorization to login to the management portal by @Aleksandr.Kolesov InterSystems Ideas - Long Term by @Vinay.Purohit3109 BPL, DTL, Business Rule Editor in VSCode by @Sawyer.Butterfield Add Favorites in GM by @Irène.Mykhailova LIMIT OFFSET support for IRIS SQL by @Dmitry.Maslennikov Introduce WITH into IRIS SQL engine by @Evgeny.Shvarov Security settings for mirror configurations by @Evgeny.Shvarov A modern management portal to manage InterSystems IRIS by @Evgeny.Shvarov copy/sync system configurations and user accounts between IRIS instances by @Evgeny.Shvarov Jupyter Notebook by Guest Stay creative, post your great ideas on InterSystems Ideas, vote and comment on existing ideas! Hi Community! I want to say special thanks to the developers who implemented the ideas from InterSystems Ideas: @Lorenzo.Scalese@Robert.Cemper1003 @MikhailenkoSergey @Dmitry.Maslennikov @Evgeniy.Potapov @Henry.HamonPereira @Henrique.GonçalvesDias @José.Pereira @Yuri.Gomes @Evgeny.Shvarov @Guillaume.Rongier7183 Your names are on the special Hall of Fame page! ![thanks](https://media4.giphy.com/media/H69HqujvQ7ENwLya1z/giphy.gif?cid=ecf05e47stt2863o5txnz2a6ylix8ntp8chi3waeiii53wf2&rid=giphy.gif&ct=g) Many thanks
Announcement
Evgeny Shvarov · Mar 7, 2017

InterSystems GitHub Topics

Hi! Recently GitHub introduced topics for the projects. So you can change your InterSystems related projects introducing the topics to let it be categorized, more visible and searchable. Here is the list of good examples for your projects (some of them are clickable already): intersystems, intersystems-cache, intersystems-ensemble, intersystems-healthshare, healthshare, intersystems-iknow, iknow, intersystems-deepsee, deepsee, cache-objectscript, csp, intersystems-zen, zen. If you have any good ideas for topics or already using something, please introduce it here in the comments? Better with a working link. Thank you in advance! It's called topics. Tag is a git pointer to a commit (usually to mark release point). Thanks Eduard! Fixed and changed ) If you are looking for the projects with Caché ObjectScript with sources in UDL you can find it with cacheobjectscript-udl topic on Github. And if you have some open projects on Github with sources in UDL please mark it with cacheobjectscript-udl topic? Thank you in advance!
Announcement
Evgeny Shvarov · Apr 13, 2017

InterSystems Atelier Welcome Video!

Hi, Community!You are very welcome to watch just uploaded InterSystems Atelier Welcome video on the InterSystems Developers YouTube Channel! Subscribe and stay tuned!
Article
Benjamin De Boe · Sep 19, 2017

Horizontal Scalability with InterSystems IRIS

Last week, we announced the InterSystems IRIS Data Platform, our new and comprehensive platform for all your data endeavours, whether transactional, analytics or both. We've included many of the features our customers know and loved from Caché and Ensemble, but in this article we'll shed a little more light on one of the new capabilities of the platform: SQL Sharding, a powerful new feature in our scalability story. Should you have exactly 4 minutes and 41 seconds, take a look at this neat video on scalability. If you can't find your headphones and don't trust our soothing voiceover will please your co-workers, just read on! Scaling up and out Whether it's processing millions of stock trades a day or treating tens of thousands of patients a day, a data platform supporting those businesses should be able to cope with those large scales transparently. Transparently means that developers and business users shouldn't worry about those numbers and can concentrate on their core business and applications, with the platform taking care of the scale aspect. For years, Caché has supported vertical scalability, where advancements in hardware are taken advantage of transparently by the software, efficiently leveraging very high core counts and vast amounts of RAM. This is called scaling up, and while a good upfront sizing effort can get you a perfectly balanced system, there's an inherent limit to what you can achieve on a single system in a cost-effective way. In comes horizontal scalability, where the workload is spread over a number of separate servers working in a cluster, rather than a single one. Caché has supported ECP Application Servers as a means to scale out for a while already, but InterSystems IRIS now also adds SQL sharding. What's new? So what's the difference between ECP Application Servers and the new sharding capability? In order to understand how they differ, let's take a closer look at workloads. A workload may consist of tens of thousands of small devices continuously writing small batches of data to the database, or just a handful of analysts issuing analytical queries each spanning GBs of data at a time. Which one has the largest scale? Hard to tell, just like it's hard to say whether a fishing rod or a beer keg is largest. Workloads have more than one dimension and therefore scaling to support them needs a little more subtlety too. In a rough simplification, let's consider the following components in an application workload: N represents the user workload and Q the query size. In our earlier examples, the first workload has a high N but low Q and the latter low N but high Q. ECP Application Servers are very good at helping support a large N, as they allow partitioning the application users across different servers. However, it doesn't necessarily help as much if the dataset gets very large and the working set doesn't fit in a single machine's memory. Sharding addresses large Q, allowing you to partition the dataset across servers, with work also being pushed down to those shard servers as much as possible. SQL Sharding So what does sharding really do? It's a SQL capability that will split the data in a sharded table into disjoint sets of rows that are stored on the shard servers. When connecting to the shard master, you'll still see this table as if it were a single table that contains all the data, but queries against it are split into shard-local queries that are sent to all shard servers. There, the shard servers calculate the results based on the data they have stored locally and send their results back to the shard master. The shard master aggregates these results, performs any relevant combination logic and returns the results back to the application. While this system is trivial for a simple SELECT * FROM table, there's a lot of smart logic under the hood that ensures that you can use (almost) any SQL query and a maximum amount of work gets pushed to the shards to maximize parallelism. The shard key, which defines which rows go where, is where you anticipate typical query patterns. Most importantly, if you can ensure that tables often JOINed together are sharded along the same keys, the JOINs can be fully resolved at the shard level, giving you the high performance you're looking for. Of course this is only a teaser and there is much more to explore, but the essence is what's pictured above: SQL sharding is a new recipe in the book of highly scalable dishes you can cook up with InterSystems IRIS. It's complementary to ECP Application Servers and focuses on challenging dataset sizes, making it a good fit for many analytical use cases. Like ECP app servers, it's entirely transparent to the application has a few more creative architectural variations for very specific scenarios. Where can I learn more? Recordings from the following Global Summit 2017 sessions on the topic are available on http://learning.intersystems.com: What's Lurking in Your Data Lake, a technical overview of scalability & sharding in particular We Want More! Solving Scalability, an overview of relevant use cases demanding for a highly scalable platform See also this resource guide on InterSystems IRIS on learning.intersystems.com for more on the other capabilities of the new platform. If you'd like to give sharding a try on your particular use case, check out http://www.intersystems.com/iris and fill out the form at the bottom to apply for our early adopter program, or watch out for the field test version due later this year. Great article! awesome But what will this do with Object storage/access or (direct) global storage/access ? Is this data SQL-only ? Hi Herman,We're supporting SQL only in this first release, but are working hard to add Object and other data models in the future. Sharding any globals is unfortunately not possible as we need some level of abstraction (such as SQL tables or Objects) to hook into in order to automate the distribution of data and work to shards. This said, if your SQL (or soon Object) based application has the odd direct global reference to a "custom" global (not related to a sharded table), we'll still support that by just mapping those to the shard master database.Thanks,benjamin Can we infer form this that sharding can be applied to globals that have been mapped to classes (thus providing SQL access)? Hi Warlin,I'm not sure whether you have something specific in mind, but it sort of works the other way around. You shard a table and, under the hood, invisible to application code, the table's data gets distributed to globals in the data shards. You cannot shard globals.thanks,benjamin Let's say I have an orders global with the following structure:^ORD(<ID>)=customerId~locationId.....And I create a mapping class for this global: MyPackage.OrderCan I use sharding over this table? To my understanding the structure of your global is irrelevant in this context.If you want to use sharding forget about ALL global access.You only access works over SQL ! (at least at the moment, objects may follow in some future)It's the decision of the sharing logic where and how data are stored in globals.If you ignore this and continue with direct global access you have a good chance to break it. I understand the accessing part but by creating a class mapping I'm enabling SQL access to the existing global. I guess that the question is more in line on whether sharding will be able to properly partition (shard) SQL tables that are the result of global mapping? Are there any constraints on how the %Persistent class (and the storage) is defined in order for it to work with sharding? Should they all use %CacheStorage or can they use %CacheSQLStorage (as with mappings)? If you have a global structure that you mapped a class to afterwards, that data is already in one physical database and therefore not sharded or shardable. Sharding really is a layer in between your SQL accesses and the physical storage and it expects you not to touch that physical storage directly. So yes you can still picture how that global structure looks like and under certain circumstances (and when we're not looking ;-) ) read from those globals, but new records have to go through INSERT statements (or %New in a future version), but can never go against the global directly.We currently only support sharding for %CacheStorage. There's been so many improvements in that model over the past 5-10 years that there aren't many reasons left to choose %CacheSQLStorage for new SQL/Object development. The only likely reason would be that you still have legacy global structures to start from, but as explained above, that's not a scenario we can support with sharding. Maybe a nice reference in this context is that of one of our early adopters who was able to migrate their existing SQL-based application to InterSystems IRIS in less than a day without any code changes, so they could use the rest of the day to start sharding a few of their tables and were ready to scale before dinner, so to speak. With the release of InterSystems IRIS, we're also publishing a few new great online courses on the technologies that come with it. That includes two on sharding, so don't hesitate to check them out!
Announcement
Simon Player · Sep 12, 2017

InterSystems IRIS Data Platform

Modern businesses need new kinds of applications — ones that are smarter, faster, and can scale more quickly and cost-effectively to accommodate larger data sets, greater workloads, and more users.With this in mind, we have unveiled InterSystems IRIS Data Platform™, a complete, unified solution that provides a comprehensive and consistent set of capabilities spanning data management, interoperability, transaction processing, and analytics. It redefines high performance for application developers, systems integrators, and end-user organizations who develop and deploy data-rich and mission-critical solutions. ​InterSystems IRIS Data Platform provides all of the following capabilities in a single unified platform:Data ManagementAn ultra-high performance, horizontally scalable, multi-model database stores and accesses data modeled as objects, schema-free data, relational data, and multi-dimensional arrays in a single, highly efficient representation. It simultaneously processes both transactional and analytic workloads in a single database at very high scale, eliminating latencies between event, insight, and action, and reducing the complexities associated with maintaining multiple databases. InteroperabilityA comprehensive integration platform provides application integration, data coordination, business process orchestration, composite application development, API management, and real-time monitoring and alerting capabilities to support the full spectrum of integration scenarios and requirements. AnalyticsA powerful open analytics platform supports a wide range of analytics, including business intelligence, predictive analytics, distributed big data processing, real-time analytics, and machine learning. It is able to analyze real-time and batch data simultaneously at scale, and developers can embed analytic processing into business processes and transactional applications, enabling sophisticated programmatic decisions based on real-time analyses. The analytics platform also provides natural language processing capabilities to extract meaning and sentiment from unstructured text, allowing organizations to streamline processes that reference customer emails, knowledge databases, social media content, and other unstructured text data. Cloud DeploymentAutomated “cloud-first” deployment options simplify public cloud, private cloud, on-premise, and virtual machine deployments and updates. You can learn more about this new data platform by visiting our online learning page Simon Player,Director of Development, Data Platforms and TrakCare. Hi , Did we have iris cube like cache and ensemble or iris is different. please explain me how to work with iris i am really confused about iris. Here is a lot of information on Intersystems IRIS to reduce confusion.Your InterSystems sales rep will have more.
Announcement
Josh Lubarr · Oct 19, 2017

InterSystems Documentation Satisfaction Survey

Hi, Community!We are pleased to invite you to participate in the InterSystems Documentation Satisfaction survey. As part of ongoing efforts to make our content more usable and helpful, Learning Services wants your feedback about InterSystems documentation. The survey covers many different areas of documentation, and you can complete it in about five minutes. The deadline for responses is October 30. Also, responses are anonymous. The survey is over, thanks! And also you can earn 300 points in Global Masters for the survey completion.
Announcement
Developer Community Admin · Dec 2, 2015

InterSystems Atelier Field Test

InterSystems Atelier Field Test is now available.Supported customers who have credentials to access the WRC can find the client download here:https://wrc.intersystems.com/wrc/BetaPortalCloud2.csp Thank you for your work! Atelier field test is really cool. Just two questions: - Is there any chance to extend 15 days period of test? It would be great (I can't test it full time). - Can we access to Atelier Ensemble Test server with Studio? I've tried, but I couldn't. It would be very helpful to compare working with Atelier and Studio at the same time with the same code. Kind regards! Since you work on the client with Atelier, and only use the server for deployment/compilation/debugging, it does not matter if you need to restart the server every two days, and it allows bug fixes to be deployed automatically. If you export to XML from Atelier and use source control on a system using Studio, then you should see the code automically refresh in Studio when you open the file. The test is not limited to two weeks. That was simply the expiration on the license. We updated the beta facility with a new version and a more generous license. Happy coding! I can confirm that it doesn't matter when my cloud instance goes away, I just go back to the portal and deploy the new version and bugs that I found over the last few weeks are usually simply fixed. Is there a way to force my "instance" to expire/update without waiting the two weeks? What's the right support channel to use for the cloud-based Atelier FT server? I log in at https://wrc.intersystems.com/wrc/BetaPortalCloud.csp and click the "Launch Server" button. The button disappears immediately and is replaced by text saying "Your Atelier Server has been launched, it will run for the next (expired)." and when I click on the xxx-.isc.appsembler.com/csp/sys/UtilHome.csp URL I am offered I get a page reading " No Application Configured This domain is not associated with an application. " John - The WRC is handling any calls with regard to the beta cloud portal. I saw this and reached out to the cloud provider as the issue is coming from their side. I will let you know as soon as I hear back. Hi Bill,When will the official release be out? Have been waiting since the 2015 after our 2014 conference when we heard it would by done by end of 2015? Really exited not to work on Windows anymore and also not using studio in remote connections as it chews bandwidth and tends to be really slow. Please read the announcement here: https://community.intersystems.com/post/announcement-about-cach%C3%A9-20162-and-20163-field-test-programs We have been holding updates of Atelier to finish refactoring to conform to the changes outlined there. Kits are being published for 16.2 today and a new Atelier kit will be available in "Check for Updates" today or tomorrow. Any progress on this yet? My 1.0.90 Atelier's "Check for Updates" still tells me it finds none. I've already updated my 2016.2 FT instance to the latest you've published (build 721), so I expect my Atelier won't play well with that until it gets updated too. A new kit will be posted this week, probably today. Updated just now and received build 232. Thanks.