Clear filter
Question
Evgeny Shvarov · Apr 24, 2016
Hi!
Suppose I have full access to InterSystems IRIS database instance A and want to export a consistent part of the data and import it into another InterSystems IRIS instance B. Classes are equal.
What are the most general and convenient options for me?
TIA! Thank you Kenneth!But what if you need a part of data? Say the records only from current year or from particular customer?And what if you need not all the classes, but part of them - what globals should I choose to export?I believe in this cases we should use SQL to gather data. The question is how to export/import it. If so, create a new database on instance A and then use GBLOCKCOPY to copy from the existing database to the new one. Then just move the new database to instance B.That can help sometimes. Thank you. Just move - you mean unmount and download cache.dat file?Is this a one-time migration of data from instance A to instance B?My question is a request for general approaches. But my task now is to extract some part of consistent data from the large database to use it as test data in my local database for development purposes. One approach would be to use %XML.DataSet to convert SQL results into XML:
Set result=##class(%XML.DataSet).%New()
Do result.Prepare("SELECT TOP 3 ID, Name FROM Sample.Person")
Do result.Execute() 1
Do result.WriteXML("root",,,,,1)
Outputs:
<root>
<s:schema id="DefaultDataSet" xmlns="" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<s:element name="DefaultDataSet" msdata:IsDataSet="true">
<s:complexType>
<s:choice maxOccurs="unbounded">
<s:element name="SQL">
<s:complexType>
<s:sequence>
<s:element name="ID" type="s:long" minOccurs="0" />
<s:element name="Name" type="s:string" minOccurs="0" />
</s:sequence>
</s:complexType>
</s:element>
</s:choice>
</s:complexType>
<s:unique name="Constraint1" msdata:PrimaryKey="true">
<s:selector xpath=".//SQL" />
<s:field xpath="ID" />
</s:unique>
</s:element>
</s:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DefaultDataSet xmlns="">
<SQL diffgr:id="SQL1" msdata:rowOrder="0">
<ID>96</ID>
<Name>Adam,Wolfgang F.</Name>
</SQL>
<SQL diffgr:id="SQL2" msdata:rowOrder="1">
<ID>188</ID>
<Name>Adams,Phil H.</Name>
</SQL>
<SQL diffgr:id="SQL3" msdata:rowOrder="2">
<ID>84</ID>
<Name>Ahmed,Edward V.</Name>
</SQL>
</DefaultDataSet>
</diffgr:diffgram>
</root>
There is also %SQL.Export.Mgr class, which does SQL export. Thank you, Ed. And I can import the result on Instance B with class .... ? %XML.Reader and %SQL.Import.Mgr respectively. I am glad to see that you subsequently posted this as a new question here and it has already received an answer. You could use %GOF for export and %GIF for import from Terminal. These tools export block level data. The ultimate size of the export will be much less than other tools Is this a one-time migration of data from instance A to instance B?If so, create a new database on instance A and then use GBLOCKCOPY to copy from the existing database to the new one. Then just move the new database to instance B If it is more complex to determine the data set, because you have specific parameters in mind it makes sense to select the data via SQL and insert the selected record into the other instance via SQL. You can either use linked tables, which allows you to write this simple logic in Caché Object Script, or you can write a simple Java application and go directly via JDBC. Obviously, any supported client-side language can solve this challenge, Java is just one option.In case you have to migrate data where the model includes foreign-key constraints, you have to use the %NOCHECK keyword in your SQL INSERT statement: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_insertThis approach is definitely more work than just exporting/importing the data, but it allows to easily add simple logic with some benefits, e.g. anonymization, batch-loading and parallelization. Depending on your use case some of these topics may be relevant. Hi,Another option is try to use the SQL Data Migration Wizard. You can copy just the data and or create the schema as well.To select the data from a specific Year, Customer, etc. you can create a view on the source side and then use the migration wizard to migrate to importe the data.I hope it helps.Fábio. Hi All,I need urgent help,I want to export the values from Global to CSV file.Values are in global are :^Global1(1)="1,2,3,4"^Global1(2)="5,6,7,8"...^Global1(n)="n,n,n,n"I want output in CSV File as:1,2,3,45,6,7,8...n,n,n,nI made a class:ClassMethod ExportNewSchemaGlobals(pFile){ Set ary("^Global1")="" Set pFile = "C:/Test.csv" Set ary = ##class(%Library.Global).Export(,.ary,pFile)}But its not giving expected Output. Cannot make an answer on my own question. Anyway, here are some answers from Russian forum:DbVisualizer and Caché Monitor can export/import InterSystems Caché data partially via SQL queries.There is also %Global class wrapper for %GI, %GIF,..etc routines which can help to export/import global nodes partially. Documentation. Renamed post to IRIS as the content is relevant to IRIS as well. This could be useful to the other versions of IRIS as well. Folks who use IRIS for Health, Health Connect, and HealthShare might find this useful. If the two systems are at network reach you could use ECP and Remote Database(s).
Then the logic could be rather easily scripted with all the power of ObjectScript at hand. Indeed, thank you @Scott.Roth! I wish ECP setup could be as useful as it sounds I wouldn't know why setting up ECP isn't easy.Super easy by the Management Portal, but it can also be scripted.For 'useful' I'd say: just skim through your globals and copy or merge whatever you need. In 2021 I published my article IRIS easy ECP workbenchwith a related a Docker based demo on OEX.All you need is the ECP enabled license for containers or Platform IndependentCommunity version is not ECP enabled
Article
Alexey Maslov · Dec 24, 2019
It seems that everyone who is moving from Caché to IRIS have noticed this small change among other, more noticeable ones. But have you noticed that temporary globals mapping rules have been changed as well?
As to Adoption Guide ("InterSystems IRIS 2019.1 Document Version: 2.42 32 Adoption Guide for Caché & Ensemble customers. C. Application Development"), there are some differences in reserved global names patterns. Here are those that concern IRISTEMP:
Caché / Ensemble
InterSystems IRIS
Comment
^CacheTemp*
<none>
You are free to define a preferred global name pattern for temporary globals and map it to IRISTEMP. For compatibility purposes, ^CacheTemp* will continue to be mapped to IRISTEMP automatically.
But if you take a look at your namespace using some global explorer (e.g., the standard one, available with System Management Portal), you may notice some other globals, e.g. many of them that matches ^IRIS.Temp* pattern. Having been curious to get a full list, I've got it with ^%NSP utility redirecting its output to file:
set x="/tmp/map.txt" open x:("NW"):1 else write "not writable "_x
use x do SHOW^%NSP close x
<... view locally or download map.txt file from IRIS server ...>
set x="/tmp/map.txt" open x:("NW"):1 close x:("D") ; delete the file
Here is an extract from map.txt file that concerns IRISTEMP global mappings only:
Namespace: QMS
Default globals location: directory /opt/bases/i-qms-d/ (local)
Default % routines location: directory /opt/iris/mgr/ (local)
*********************************************************************
Global name/Range Dirset Target directory
---------------------------------------------------------------------
[%utility] -> /opt/iris/mgr/iristemp/
*> /opt/iris/mgr/iristemp/
[CacheTemp:CacheTemq)-> /opt/iris/mgr/iristemp/
*> /opt/iris/mgr/iristemp/
[IRIS.Temp:IRIS.Temq)-> /opt/iris/mgr/iristemp/
*> /opt/iris/mgr/iristemp/
[mtemp:mtemq) -> /opt/iris/mgr/iristemp/
*> /opt/iris/mgr/iristemp/
=====================================================================
[<global>] shows redirection scheme for one global;
[<global1>:<global2>] shows redirection scheme for a
range between 2 globals; a square bracket [] means that
left or right margin is inclusive, while a parenthesis
means that the margin is exclusive.
An empty parenthesis before or after ':', that is
(: or :) , means that the redirection scheme is
effective from the start of alphabet space, or till
its end, respectively
A subscript mapping is missing if it is the same as
the default mapping of the global. The default mapping
of a global is missing if it is the same as the default
global dataset.
-> implicit
*> lock target
So, there are a few additions to "Adoption Guide" table:
Caché / Ensemble
InterSystems IRIS
Comment
^%utility
^%utility
Used by some CLI utilities.
<none>
^IRIS.Temp*
Used by IRIS internally. Avoiding such names for application globals seems to be a reasonable precaution.
^mtemp*
^mtemp*
Seems to be still in use by IRIS SQL, while they were mentioned as legacy many years ago.^mtempSomeLegacyAppCode* can be in use as well.
Hope this help somebody on the way to InterSystems IRIS.
Merry Christmas and Happy New Year everyone!
Announcement
Evgeny Shvarov · Jan 2, 2020
Hi Developers!
Happy New Year!
And I'm pleased to share the notes on the new DC Release. What comes?
New design for Articles
Voice over for Articles
Format painter feature for editor
New private messages informer, Github profile and other minor enhancements
See the details below, here we go!
New Articles Design
We made articles special. Articles really need more focus, more of your attention cause sometimes (we hope) it contains a lot of technical wisdom which expects special attention. So we tried to make you comfortable reading articles. We made the font different, and we removed all the ads and announcements from the side. I hope it makes a difference: Example 1, Example 2. Read them all! And in Spanish ;)
Voice Over for Articles
Sometimes we don't have the option to read the article but can listen to it. Sometimes we don't have time for reading but can listen to it during the ride or morning running. Sometimes listening is just better than reading - you decide!
And we introduced the option of 'articles listening' with the release! Each article now has the small audio player on top (or the link to generate audio):
You are able to download it or use the embedded player.
Listen to them all!
And it works for Spanish too!
Format Painter
With this release, we introduced a format painter which gives you an option to copy the format in one place and implement it to another section of text which is a very useful option for WYSIWYG editor.
Minor Enhancements
We introduced a "New Direct Message" informer which appears on top near your name when you get a new Direct Message.
Member page updated: Github, Open Exchange, and LinkedIn profiles introduced:
See all the solved tasks last month.
Please check the new kanban and submit your requests and bug reports!
Happy new year!
Thanks for all the improvements! Very useful!
Esther Thanks, Esther!
Discussion
Raj Singh · Jan 6, 2020
Happy new year! I’m Raj Singh, InterSystems’ product manager for Developer Experience and I’d love your feedback on how you use IDEs today and your thoughts for the future.
We understand you depend on a solid, intuitive and flexible IDE from InterSystems - whether you are an ObjectScript expert or new to it; whether ObjectScript is at the core of your applications, or you develop more in Java, Python, C# or Node.js. ObjectScript has proven to be a powerful and productive paradigm that gives you an edge over other platforms, and with that comes our responsibility to provide developer tools to support your work.
Our long-standing IDE, Studio, will continue to be the principal IDE for shops with the most sophisticated ObjectScript requirements, but many users will be working in an increasingly heterogeneous language environment in the future.
With the introduction of InterSystems IRIS and its deeper commitment to language “freedom of choice”, it’s time once again to take stock of InterSystems’ IDEs. Last year we paused and took a step back to study the IDE landscape and formulate a plan that would embrace our ever expanding language options – you can now do even more with Java, C#, Python and Node.js as well as ObjectScript – without forgetting that ObjectScript is as powerful as ever. In doing so we’ve become extremely excited about Visual Studio Code. Increasingly, the highest quality and most innovative developer productivity tools are being built on the that platform, and according to the 2019 Stack Overflow survey, over half of developers use Visual Studio Code already.
As we develop plans to support InterSystems development on Visual Studio Code, we’d like your input. What do you like or dislike about using Studio or Atelier today? What external tools (source control, testing, etc.) do you wish you could integrate more tightly with InterSystems IRIS? Have you tried ObjectScript development with 3rd party VS Code extensions (Serenji or vscode-objectscript)? Do you expect to be writing code in a web-based editor five years from now?
Feel free to comment below or direct message me. As always, the voice of our customers plays a major role in this important process. Hi Raj,
I use different IDE's and combinations :
- Caché Studio without any extensions for development where i am self-employed and no other developers are involved
- Caché Studio with Serenji source control from Gerorge James for a particular customer where i am one of the developers
- Visual Studio Code with the vscode-objectscript extention from Dmitry Maslennikov for another customer where i am one of the developers.
I like Caché Studio since I use it from day 1, because it is build-in so no need to configure anything. I use the 'projects' feature a lot, and export my projects regularly as a sort of 'light' source control. (I even edit my html and js files in Studio, even when they contain no COS code at all.)
But when developing in teams a good build-in source control is essential, so that's why i also use the other options. I am still learning Visual Studio Code but it seems the way for the future. Thanks for sharing Danny! I'm not using IRIS yet. Having options is good, especially for those coming from other development languages and/or not primarily focused on ObjectScript. Hopefully Studio continues to be supported, even better, receives future updates.
I have no issues working in Studio. I'm primarily developing with ObjectScript and XSLT. I've also used Studio for JavaScript, CSP, and web development (mixed with ObjectScript).
I'm not using Atelier now, but used it at a few previous jobs in team environments. Linking and using it with Git was very easy. After primarily using Studio for many years, adjusting to Atelier wasn't a steep learning curve. Initially there were things I switched back to Studio for, like "Find in files". But after a few updates and getting used to it, it was comfortable, flow felt logical.
I haven't used VS Code for ObjectScript. I tried it recently as a potential replacement for UltraEdit/Studio. I found it cumbersome, no toolbars, not intuitive...for me. I suspect if I were to dive in with it, as I had to with Atelier, it would feel better. Scott, could you give some more details about your experience with VSCode, privately directly to me or publicly here? What do you expect, and what would help you decide to use VSCode instead of Studio? Thanks Scott. In case I was vague on the point, but let me say that Studio will definitely be supported.
p.s. I'm an old UltraEdit user too! Hello Raj,
I'm fine with Studio, but... what are the chances of:
* Native Studio support for Linux and macOS.
* Default studio editor support for up-to-date language syntaxes like recent ECMAScript revisions.
* API allowing access to ObjectScript AST, parser and lexer as well. (this might be out-of-context for this discussion, but still it could help the community creating transpilable languages).
* Integrated and full featured terminal with support for special characters including colors.
* Improved debug support for jobs or simply multiple job debugging (this would make it easier to debug HTTP requests).
* Studio editor API that allows users to add new language syntaxes, like JSX, TypeScript, Flow, etc.
? Excellent list Rubens. In fact all of these are possible with VS Code.
I'm curious what you would do with API access to the ObjectScript AST, parser and lexer? For example, some months ago there was a discussion about how to bring functional programming to ObjectScript. I think this could be possible if we had a way to transpile functional-oriented code to pure ObjectScript. Dmitriy, I have very limited experience with VSCode, none using it with Cache coding. I looked at using it to replace UltraEdit/UEStudio and Notepad ++. I use those daily for XML, HTML file formatting, base64 decoding, file comparisons, CSS and JavaScript.
Using VSCode instead of Studio isn't an option for me at this time, team uses Studio with source hooks. If that changed, I'd be open to using it side by side with Atelier to compare. I've read many of your post and other's on using VSCode for Cache development. I assumed that path was being taken as the future of Atelier was unsure, and suggested at times that it had no future, other than support for what was already there. When your team uses Studio with source hooks, it's even easier to move to VSCode. VSCode supports source control class hooks, and even some types of actions from menu. You can the latest beta release, to get more features.
VSCode can also be used to edit files directly on a server, almost the same way as Studio. Just at the moment it does not check any changes on the server, and uses your opened files as a source of truth.
Hi @Raj.Singh5479 !
We recently introduced a new post type - Discussion, I changed this announcement to Discussion - I think this is more relevant.
Discussion is the type of posting where you want a conversation, input, discussions on the topic.
What do you like or dislike about using Studio or Atelier today?
Like: Studio is fast. My REPL cycle is very short.
Dislike:
Studio in synchronous so after every connection issue I need to restart it. REST based IDE don't have this problem and it's great.
Version pinning (need 2019.4 Studio to connect to 2019.4 server).
What external tools (source control, testing, etc.) do you wish you could integrate more tightly with InterSystems IRIS?
We should offer APIs, so any tool can be integrated.
Have you tried ObjectScript development with 3rd party VS Code extensions (Serenji or vscode-objectscript)?
I use VSCode extension. With direct server edit it's good. Subjectively slower that Studio but now it's comparable.
Like: The interface is way more modern. Crossplatform.
Dislike: XDatas are unformatted. Only one server connection. No BPL editor.
Do you expect to be writing code in a web-based editor five years from now?
Not really. Our IDEs don't take that much space. And REPL timings would go up. Studio :
Like :
It's fast
Find in files directly on the server side
Intuitive
Debugging is not perfect but manageable
Dislike :
Only on windows
No easy to use with other third party file or software
Atelier :
Like :
Easy to use with source control
Dislike :
File synchronization with server especially BPL, DT, RecorMap
Complicate to configure
Slow
VS Code with Dmitriy's plugin
Like :
Modern UI
Crossplatform
Lite
Intuitive with no file synchronization concern
Fast
Dislike :
Can't edit, manage CSP files
No find in file on server side
Debugging not easy to use
Serenji :
I haven't tried it yet because you need to install some classes on the server side, but sound very promising for debugging.
Conclusion :
My main IDE is VSCode with Dmitriys's plugin and some times Studio for find in files, csp managment and debugging.
Do you expect to be writing code in a web-based editor five years from now?
Yes, why not, already a lot of people do it on Jupyter Notebook. Hi Raj,
Just like others in the community, I use different IDE's.
I like the Caché Studio; it's fast, reliable, and useful for debugging.
My favorite IDE right now it's VSCode with the vscode-objectscript extension from Dmitry Maslennikov. To work with Docker, Github, and other extensions that make my workflow faster.
I tried to use Atelier, but comparing with others that I mentioned above, it's the last IDE for me.
Do you expect to be writing code in a web-based editor five years from now?
No, I agree with @Eduard.Lebedyuk answer.
Regards,
Henrique
Only one server connection.
At the moment it is possible to have multiple folders configured for each own server, and tied up with .code-workspace file. I see you already use server-side editing, so, you can just extend your file. And the link for the info, how to configure it.
Curiously, what do you expect from XData? Could you fill the issue, so, for any other ideas as well? Could you explain a bit, how would you like to see work with CSP files? For me, when you working with own local instance, you can just open csp folder in VSCode, and edit as a usual file, InterSystems will compile it automatically with the next request. I think it would be possible to add CSP editor only as part of Server-side editing feature.
Server-side search, not yet available, because, search engine not yet publicly released. I've already implemented server-side search when server-side editing enabled, and you can test it with the latest beta version of vscode-objectscript, and only with Code-Insiders version, and with flag --enable-proposed-api daimor.vscode-objectscript
Could you add your expectations from debugging feature, as an issue here?
So workspace per server and multiple namespaces per workspace?
Curiously, what do you expect from XData?
Filed. It is interesting that you are asking this as we have tried, for well over a year, via various mediums, at various levels within Intersystems, to get an answer as to the future of IDE's given that previous announcements and responses from WRC state that both Atelier and Studio are end-of-life.
We have never received a response even after Evgeny pinged such a request to John fried and others after some posts.
Your statements seem to indicate that Studio is not end-of-life so it would be nice to have some clarification as even WRC are saying non-critical fixes or changes will not be done. You also indicate work being done on VSCode integration, again any details would be appreciated.
The reason for wanting to know is that is difficult to commit to a particular toolset or plan changes to DevOps etc... if the future of the tools to be used is unknown, the actual answer and whether it is an individuals or companies preference is immaterial, it is simply that an answer is required but everyone has been reluctant for a long time now to commit to anything.
Coming back to your questions, we use Studio with our own version control based on StudioHooks and some use of Serenji for debugging.
We have tried Atelier but noone liked using it and we have worked in VSCode via Dmitry's plugin and have also tried the Serenji plugin both of which were generally a good experience but migration would require changes to development processes and version control.
We are likely to move to a GIT based Version control and whether this is intergrated with Studio or VSCode will likely depend on Intersystems commitment to the IDE though I suspect there would be a preference to stick with Studio as it is familiar and has integration to Cube etc... though as we continue to do more Web based development in VSCode this may change. Something like this, you can have many serverN folders, with own settings.json there, configured for any server.
{
"folders": [
{
"name": "root",
"path": ".",
},
{
"name": "server1",
"path": "server1",
},
{
"uri": "isfs://server1",
"name": "server1",
},
{
"uri": "isfs://server1?ns=%25SYS",
"name": "server1 sys",
},
{
"name": "server2",
"path": "server2",
},
{
"uri": "isfs://server2",
"name": "server2",
},
{
"uri": "isfs://server2?ns=%25SYS",
"name": "server2 sys",
},
{
"name": "server3",
"path": "server3",
},
{
"uri": "isfs://server3",
"name": "server3",
},
{
"uri": "isfs://server3?ns=%25SYS",
"name": "server3 sys",
}
],
"settings": {
"objectscript.serverSideEditing": true
}
} I've already published a beta version with support for CSP editing, It would be cool, if you could test it and give some feedback. Not sure if it's already included, but just wanted to know if we're going to be able to view and develop business processes using BPL, or data transformations, etc...in their graphical way. If this is meant to be a real modern alternative to Studio, support all the IRIS components is a must... Otherwise we'll have to be changing from one IDE to the other... which is not practical and prone to errors.
Announcement
Derek Robinson · Jan 21, 2020
InterSystems Learning Services is excited to announce the upcoming launch of Data Points! This podcast will feature conversations with experts about new and exciting features of InterSystems products, as well as cutting-edge topics in the tech industry today.
You can subscribe to the podcast right now, ahead of the first episode in February! Subscribe on:
Apple Podcasts
Spotify
Stitcher
Google Play
Great. I am looking forward to it.
Article
Alberto Fuentes · Mar 2, 2020
Hi all!
I'd like to share the code we used in a hands-on session in the last InterSystems Iberia Summit (Spain) about developing a simple Angular app using InterSystems IRIS as backend.
In this sample we will:
Import data from a public dataset and store it in InterSystems IRIS.
Create automatic REST APIs using RESTForms2.
Build an Angular 8 app to consume the data from the InterSystems IRIS backend.
Full instructions are available in the GitHub repository. Hi Alberto,
I think file "/tmp/RESTForms2-master/src/Form/Installer.cls" is missing in the package.
Bellow the erro when try to start the container:
And the print of content of folder "\backend\src\Form":
Hi Cristiano,
Backend image is built using this Dockerfile.
In this case, it is downloading RESTForms2 using wget and then loading it into IRIS. The download is done in the Dockerfile using wget https://github.com/intersystems-community/RESTForms2/archive/master.tar.gz
Make sure in your logs that you had no errors while downloading RESTForms using wget.
Announcement
Evgeny Shvarov · Mar 2, 2020
Hi Developers!
In February we introduced into Developers Community:
Autosaved drafts;
Open Exchange linkage;
PDF attachments;
Weekly Unanswered questions digest;
language-specific search;
bug fixes and small enhancements.
See the details below.
Autosaved drafts
Sometimes when we create a long post directly on Developers Community we can accidentally close the page or browser and lose the draft text. This release comes with the feature of the autosaved draft. Every 10 seconds DC autosaves the draft you are working with and if you close the page it will suggest you restore the draft when you click Create Post again.
Open Exchange Linkage
Starting from this release your member profile page has the direct link to your Open Exchange profile and shows your published applications.
E.g. here is the @Peter.Steiwer's members page:
PDF attachments
"You asked about it - and we did it!" This release comes with the option to attach pdf file to any post. There is a special control that gives you the option to upload a PDF file from you machine and DC will host it:
And you can give it a description.
Example.
Weekly Unanswered questions digest
Starting from the current release we introduce a new weekly Unanswered Questions Digest which will be sent on Wednesdays. It will contain questions that either don't have any reply or have replies but no accepted as an answer by its author. Questions are split by categories.
You can subscribe or unsubscribe from it in your Member->Subscriptions settings:
Language-specific search
We fixed it. With this release if you search for something in the English community all the results will be for the English-speaking site. And the search on the Spanish community will give you the posts only in Spanish.
Small enhancements
We also fixed a few issues and did a couple of minor enhancements, like additional "Creation Date" sorting for posts to show the posts feed in a publishing date order, not last reply order:
Also if you forgot to give a reply an "Accepted" sign we made a special filter for your questions "Without accepted answer":
Here is the full kanban of solved issues in February 2020. Here is the planned kanban for March 2020.
Submit your ideas, bug fixes, contribute to Developers Community and stay tuned! Wow!! Very useful enhancements! This Developers Community seems veeery professional
Thanks a lot for your work!
Esther Thank you, Esther!
Announcement
Evgeny Shvarov · Mar 4, 2020
Hi Developers!
Here are the release notes of changes we made to InterSystems Open Exchange since the previous release in December 2019. What's new?
Email notifications and subscriptions;
Better UI/UX for application publishing process;
Mobile UI for tablets and phones.
See the details below.
Email notifications and subscriptions
Starting with this release you'll be able to receive email notifications about the releases of applications in Open Exchange. You can set up these settings via Profile->Subscription menu:
There are several levels of subscription:
1. Everything
If this is in the mode "ON" you will receive all the notifications of the site.
But you can alter it and subscribe only for companies, members or applications in which you are interested.
2. Application subscription
You can subscribe to the application's releases on the application page - click Follow in the top right corner to subscribe or cancel the subscription:
In your Profile->Subscription page you can check what subscriptions for applications you have at the moment and alter it. Change the category filter to App and see all the current subscriptions:
2. Member subscription
If you want to get notifications for all applications a particular Open Exchange developer releases you can subscribe to this Open Exchange member. Click on the author's page and Choose 'Follow' to subscribe to all the releases of the member's applications:
And with the similar filter in your Profile->Subscription page you can see developers you are subscribed for and alter it:
3. Company subscription
Same as with Open Exchange members you are able to subscribe to all the releases of the apps of the particular company. Open Company's profile and click Follow:
And you can alter the list of companies you subscribed for in your Subscription settings:
If you don't want to receive any emails turn off with Everything filter or click on "Unsubscribe from everything" in the email notifications from Open Exchange.
Better UI/UX for the application publishing process
We received the feedback from you that the new UI is not obvious that you need to send the application fro approval after saving all the changes.
We made this button more obvious now in the new release of Open Exchange.
When you save the draft of the application you will see the "Send for approval" button in the top-right corner.
Click it to follow up with the application version and release notes and send it for the approval chain.
Please share your feedback to make the publishing process easier and robust.
Mobile UI for tablets and phones
It should be just great! Check it on your mobile!
We also made a few small enhancements and bugfixes - check the kanban here. Here is the new kanban, and don't hesitate to share your feedback, bug reports and enhancement requests!
Stay tuned!
Announcement
Evgeny Shvarov · Mar 27, 2020
Hi Developers!
We are going to establish a series of InterSystems IRIS Online Programming contests this year.
In March we started with ObjectScript CLI and here is the schedule of topics for the next few months:
April - InterSystems IRIS with REST API
May - InterSystems IRIS Native API application: use Python, JS, .NET, Java native APIs in your application to use IRIS
June-July - InterSystems IRIS AI/ML solutions. IntegratedML as a bonus
August - InterSystems IRIS for Health FHIR application
September - InterSystems IRIS Full-stack application: IRIS as a server and UI on any framework and any form: and web, desktop, mobile UI
October - Interoperability solutions for InterSystems IRIS and InterSystems IRIS for Health
November - Analytics Solution using InterSystems IRIS
December - Multi-model solution using InterSystems IRIS
All applications should be runnable with InterSystems IRIS in a docker container.
In addition to Experts and Community votes, we'll introduce technology points where you will get extra points for using ZPM, Unit tests, CI, etc.
This agenda is subject to change.
Please, introduce your ideas of topics and suggestions for the contest.
Stay tuned! That sounds great!!Excited to see incredible new apps
July - InterSystems IRIS IntegratedML.
Is only IntegratedML based apps applicable? Or can participants use apps based on a whole stack of technologies available for orchestrating AI/ML solutions on InterSystems IRIS Data Platform, such as PythonGateway, RGateway, JuliaGateway, Spark, Native API for Python and PMML? Eduard, thanks for the comment!
I updated the topic. Now the July contest is expanded to any AI/ML solution with InterSystems IRIS. How about the topic: Interoperability Adapter for InterSystems IRIS? Great idea, Ed! Maybe for August. Three more topics added:
August - Interoperability Adapters for InterSystems IRIS and InterSystems IRIS for Health
September - Multi-model solution using InterSystems IRIS
October - Interoperability Solution using InterSystems IRIS
The schedule is subject to change, stay tuned!
But these topics will appear! So ask your questions and be prepared! Interoperability is one word and not a portmanteau btw. fixed, thanks! Didn't get about portmanteau though. The schedule is updated.
In May we'll have Native API contest - documentation.
And AI contest will happen in June 2020. Hello all, is the contest for May started? where can i find details about it? Not yet! Stay tuned, we'll announce it this week.
Announcement
Anastasia Dyubaylo · Mar 20, 2020
Hi Developers,
Please welcome the new video from Global Summit 2019 on InterSystems Developers YouTube:
⏯ InterSystems IRIS Cloud Roadmap
This video outlines "what's new and what's next" for InterSystems support of cloud deployment. We will discuss our current product offerings and reference architectures, and talk about some capabilities that are on the drawing board.
🗣 Presenter: @Luca.Ravazzolo, Product Manager, InterSystems
Additional materials to this video you can find in this InterSystems Online Learning Course.
➡️ In addition, check out the Cloud Deployment Resource Guide.
Enjoy and stay tuned! 👍🏼
Announcement
Evgeny Shvarov · Mar 22, 2020
Hi Community!
The registration phase for InterSystems Online Programming Contest ends today and we will start the voting week!
Now we have 20 applications - so you have a set of applications to choose from!
How to vote?
This is easy: you will have one vote, and your vote goes either in Experts nomination or in Community nomination.
Experts Nomination
If you are InterSystems Product Manager, or DC moderator, or Global Master from Expert level end above - your vote goes for Experts nomination.
Community Nomination
If you ever contributed to DC (posts or replies) and this was not considered as spam you are able to vote for the applications in Community nomination.
Voting
Voting takes place on Open Exchange Contest page and you need to sign in to Open Exchange - you can do it with your DC account credentials.
If you changed your mind, cancel the choice and give your vote to another application - you have 7 days to choose.
Contest participants are allowed to fix the bugs and make improvements to their applications during the voting week, so don't miss and subscribe to application releases!
How to test
According to the requirements, developers should use Docker version of InterSystems IRIS Community edition or InterSystems IRIS Community Edition for Health.
So every solution could be launched as:
$ git clone https://github.com/repository
$ cd repository
$ docker-compose up -d
$ docker-compose exec iris iris session iris
And then you'll see the IRIS Terminal where you can follow the application instruction to test its functionality.
Winner criteriaChoose the application you like most. But the general criteria are:
Idea and value - the app makes the world a better place or makes the life of a developer better at least;
Functionality and usability - how well and how much the application/library does;
The beauty of code - has a readable and qualitative ObjectScript code.
Give the vote to the best solution on InterSystems IRIS! You decide! How to test
According to the requirements, developers should use Docker version of InterSystems IRIS Community edition or InterSystems IRIS Community Edition for Health.
So every solution could be launched as:
$ git clone https://github.com/repository
$ cd repository
$ docker-compose up -d
$ docker-compose exec iris iris session iris
And then you'll see the IRIS Terminal where you can follow the application instruction to test its functionality.
Winner criteriaChoose the application you like most. But the general criteria are:
Idea and value - the app makes the world a better place or makes the life of a developer better at least;
Functionality and usability - how well and how much the application/library does;
The beauty of code - has a readable and qualitative ObjectScript code.
The post is updated accordingly. Ok!
After the first day of the voting we have:
Expert Nomination, Top 3
BlocksExplorer - 2
IDP DV - 1
sql-builder - 1
______________
The leaderboard.
Community Nomination, Top 3
sql-builder - 6
isc-generate-db - 4
declarative-objectscript - 3
______________
The leaderboard.
Developers! Support the applications you like!
Participants! Improve and promote your solutions! Hey Developers,
Here are the results after 2 days of voting:
Expert Nomination, Top 3
BlocksExplorer - 2
ISC DEV - 2
IDP DV - 1
➡️ The leaderboard.
Community Nomination, Top 3
sql-builder - 6
isc-generate-db - 5
BlocksExplorer - 4
➡️ The leaderboard.
So, the voting continues! Full speed ahead! Voting for the IRIS Programming Contest goes ahead!
And here're the results at the moment:
Expert Nomination, Top 3
BlocksExplorer - 4
sql-builder - 3
isc-utils - 3
➡️ The leaderboard.
Community Nomination, Top 3
sql-builder - 9
isc-generate-db - 6
BlocksExplorer - 5
➡️ The leaderboard.
Who will lead tomorrow? Make your bets! Hey Developers!
3 days left before the end of voting!
Please check out the Contest Board and vote for the applications you like! 👍🏼 Please check out today's voting results:
Expert Nomination, Top 3
BlocksExplorer - 4
sql-builder - 3
isc-utils - 3
➡️ The leaderboard.
Community Nomination, Top 3
sql-builder - 10
BlocksExplorer - 6
isc-generate-db - 6
➡️ The leaderboard.
Support the best apps with your votes!
Happy weekends! Hi Developers!
And this is the last day fo Voting in InterSystems Online Contest before we know the names of the winners!
Please check out today's voting results:
Expert Nomination, Top 3
ISC DEV - 8
BlocksExplorer - 7
isc-utils - 7
➡️ The leaderboard.
Community Nomination, Top 3
sql-builder - 10
BlocksExplorer - 10
isc-generate-db - 6
➡️ The leaderboard.
Make your choice!
Announcement
Anastasia Dyubaylo · Dec 20, 2019
Hi Community,
Please welcome the new Global Summit 2019 video on InterSystems Developers YouTube Channel:
⏯ InterSystems IRIS Containers for Developers
This video aims to demystify the process of working with InterSystems IRIS containers in development scenarios. We will walk through setting up Docker, InterSystems IRIS in a container, and connecting Studio, Atelier, and the VS Code plugin. Examples will be on Windows, but are transferable to Mac.
Takeaway: You will learn how easy it is to set up and use InterSystems IRIS for development purposes on a Windows or Mac laptop.Presenter: @Sean.Klingensmith, Software Developer, InterSystems
Learn more in this InterSystems Online Learning Course.
Enjoy watching the video! 👍🏼
Article
Eduard Lebedyuk · Feb 11, 2020
Asymmetric cryptography is a cryptographic system that uses pairs of keys: public keys which may be disseminated widely, and private keys which are known only to the owner. The generation of such keys depends on cryptographic algorithms based on mathematical problems to produce one-way functions. Effective security only requires keeping the private key private; the public key can be openly distributed without compromising security.
In such a system, any person can encrypt a message using the receiver's public key, but that encrypted message can only be decrypted with the receiver's private key.
Robust authentication is also possible. A sender can combine a message with a private key to create a short digital signature on the message. Anyone with the sender's corresponding public key can combine the same message and the supposed digital signature associated with it to verify whether the signature was valid, i.e. made by the owner of the corresponding private key. (C) Wikipedia.
In this article, I would demonstrate how asymmetric encryption can be used with InterSystems IRIS and JavaScript.
We will build the app with a delegated authentication, that would encode credentials on a JS client and verify them inside InterSystems IRIS. This is more of a showcase for delegated authentication and asymmetric encryption than a recommended approach - OAuth authorization is much more robust and recommended for production use.
First of all, let's store our keys:
Class REST.Keys
{
Parameter PUBLICKEY = "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4
gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----";
Parameter PRIVATEKEY = "-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----";
}
Use Managed Key Infrastructure to store keys in production systems.
Now let's go for REST brokers, we need two:
Public, to serve our public key
Private for authorization
Abstract broker:
Class REST.Abstract Extends %CSP.REST
{
Parameter UseSession As BOOLEAN = 1;
Parameter HandleCorsRequest = 1;
Parameter CHARSET = "UTF8";
}
Public broker (published as /auth/public REST app with unauthorized access):
Class REST.Public Extends REST.Abstract
{
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/key" Method="GET" Call="GetKey"/>
</Routes>
}
ClassMethod GetKey()
{
#dim sc As %Status = $$$OK
write ##class(REST.Keys).#PUBLICKEY
quit sc
}
}
And private broker (published as /auth/private REST app with Password and Delegated access):
Class REST.Private Extends REST.Abstract
{
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/random" Method="GET" Call="GetRandom"/>
</Routes>
}
ClassMethod GetRandom()
{
#dim sc As %Status = $$$OK
write $random(100)
quit sc
}
}
That's it. /random is a protected call.
And here is our ZUAUTHENTICATE routine, it accepts authorization in an XAUTH header, where value is RSA encrypted <user>$c(10)<pass>$c(10)<timestamp>.
ZAUTHENTICATE(ServiceName,Namespace,Username,Password,Credentials,Properties) PUBLIC {
#include %occStatus
quit $$$OK
}
GetCredentials(ServiceName,Namespace,Username,Password,Credentials) Public {
#include %occErrors
#include %occStatus
#dim separator As %Char = $c(10)
#dim %request As %CSP.Request
set ciphertext = %request.GetCgiEnv("HTTP_XAUTH")
quit:ciphertext="" $$$ERROR($$$GeneralError, "No XAuth header")
set text = $SYSTEM.Encryption.RSADecrypt($system.Encryption.Base64Decode(ciphertext), ##class(REST.Keys).#PRIVATEKEY,"",2)
quit:text="" $$$ERROR($$$GeneralError, "Unable to decrypt")
quit:$l(text, separator)'=3 $$$ERROR($$$GeneralError, "Wrong plaintext structure")
set time = $p(text, separator, 3)
set limit = 10
set diff = $system.SQL.DATEDIFF("s", $tr(time,"TZ", " "), $SYSTEM.Util.LocalWithZTIMEZONEtoUTC($H))
quit:diff>limit $$$ERROR($$$GeneralError, "Old request:" _ diff)
set Username = $p(text, separator, 1)
set Password = $p(text, separator, 2)
quit $$$OK
}
Note that the REST package must be mapped to %SYS namespace.
Now for a client. We're using the JSEncrypt library for RSA encryption and sending two requests - first to get the key and second (authorized request) to get a random value from our private broker.
<!doctype html>
<html>
<head>
<title>InterSystems IRIS - JavaScript RSA Encryption</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js"></script>
<script type="text/javascript">
function getKey()
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
document.getElementById('pubkey').value = xmlHttp.responseText;
}
var url = '/auth/public/key';
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
};
function doAuth() {
// Encrypt with the public key...
var encrypt = new JSEncrypt();
encrypt.setPublicKey(document.getElementById('pubkey').value);
var encrypted = encrypt.encrypt(document.getElementById('user').value + "\n" + document.getElementById('pass').value + "\n" + new Date().toISOString());
var xmlHttp = new XMLHttpRequest();
var url = '/auth/private/random';
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
document.getElementById('randomVal').innerHTML = xmlHttp.responseText;
}
xmlHttp.open("GET", url, true);
xmlHttp.setRequestHeader("XAuth", encrypted)
xmlHttp.send(null);
}
</script>
</head>
<body>
<label for="pubkey">Public Key</label><br/>
<textarea id="pubkey" rows="15" cols="65"></textarea><input type="button" value="Get Key" onclick="getKey();" /><br/>
User:<br>
<input id="user" type="text" name="user" value="_SYSTEM"><br>
Pass:<br>
<input id="pass" type="password" name="pass" value="SYS"><br><br>
<input type="button" value="Auth" onclick="doAuth();" />
<br/><br/>
<label>Random: </label><label id="randomVal"></label><br/>
</body>
</html>
With this, we successfully encrypted our plaintext on a client and decrypted it with InterSystems IRIS.
Get the code here. typo: zuauthenticat -> zauthenticate I think this " OAuth authorization is much more robust and recommended for production use. " should be emphasized a bit more :) This might lead to people getting the idea that rolling their own encryption related code is an acceptable idea :/
Announcement
Evgeny Shvarov · Feb 1, 2020
Hi Developers!
In January we introduced into Developers Community:
New postings type - Discussions;
No more answers - only comments-replies;
bug fixes and small improvements.
See the details below.
Discussions
We had requests for this type of posts - when it is not an article, it's not a question which needs a discreet answer, but a discussion where you want to know people's opinions. It can be combined with polls. So, we introduced it and people already contribute discussions.
Answers Conversion to Comments
A lot of people were confused with Answers: when you reply to the question, is it an answer or comment? If the comment is really an answer topic starter couldn't accept it. Search in answers or in comments?
We solved it - all answers are now comments, but you can accept comments as an answer to the question. And no more doubts about replying to a question. See the discussion.
Bug fixes
We fixed a few bugs when you didn't get email notifications on some comments. We also fixed a few smaller bugs and improved the performance.
Here is the full kanban of solved issues in January 2020. Here is the planned kanban for February 2020.
Submit your ideas, bug fixes, contribute to Developers Community and stay tuned!
Announcement
Derek Robinson · Feb 14, 2020
You may have seen earlier this week that we launched a brand-new learning podcast called Data Points! There are three episodes released, one of which was a really interesting discussion with Thomas Dyar — a product specialist here at InterSystems focused on machine learning. Take a listen and reach out if you're interested in exploring more about IntegratedML!
You can check out the other two episodes — one on InterSystems IRIS and one on Kubernetes — by going to https://datapoints.intersystems.com. That page also has links to subscribe on Spotify, Apple Podcasts, and more!