Sergei Shutov · Sep 17, 2019 go to post

In addition to talks mentioned by Luca, I will be hosting an Experience Lab "Containerising Apps with IRIS" where you will be able to build and publish your own container with IRIS-based application: Tuesday 1:30PM and Wednesday 12:00PM, you need to pre-register but there are still spots available for both time slots.

Sergei Shutov · Dec 16, 2019 go to post

Hi Nikita,

> A need to change how the self-update mechanism works or shut it down completely.
If a package is distributed via package manager, its self-update should be completely removed. It should be a responsibility of package manager to alert the user that new version of package is available and to install it.

> Thus, create an additional pipeline (or split the codebase) for 2 WebTerminal versions: ZPM's one and a regular one with all the tests and
so on.
Some package managers allow to apply patches to software before packaging it, but I don't think it's the case for ZPM at the moment. I believe you will need to do a separate build for ZPM/non-ZPM versions of your software. You can either apply some patches during the build, or refactor the software so that it can run without auto updater if it's not installed.

Sergei Shutov · Dec 22, 2019 go to post

Despite being disappointing, this is actually a correct result - you would get the same with OS level tools

Sergei Shutov · May 1, 2016 go to post

Hi Mike,

So, do you have a license installed? What does Management Portal tell you about the license?

If you only have  a single user license, make sure that both Terminal and Studio use the same IP address to connect to Cache. By default Terminal will connect using interprocess communication instead of TCP/IP, and Studio could use your external IP address, so the best way to make sure you use the same IP address is to define a new "remote" server with IP address of 127.0.0.1 and use it for both Terminal and Studio.

Hope this helps

=Sergei

Sergei Shutov · Sep 5, 2016 go to post

All subscripts will be calculated before merge command will start global merge, so looks like you hit this command several (at least 2) times within a second. Since you don't have $JOB as a subscript or data node it also could be that it's done from different processes.

On the other hand, it's considered a good code practice to assign $h to a variable somewhere at the top of the method, and use that variable instead of $h throughout the code.

Consider this code for example:

if (DAYNUM-$H>0) && (WKS>2) do ....
if (DAYNUM-$H<=0) && (WKS>2) do ....

You want to check if date is in future and do something different if it is. You would expect that only one branch of code would ever run; however in extremely rare circumstances when this code runs around midnight $h could change between first and second if statements and run both code branches, screwing up your database unpredictably.

Another good practice is to pass "current date" as method argument instead of assigning $h inside a method. This way it's much easier to test methods.

Sergei Shutov · Nov 1, 2016 go to post

Cache Studio will only work with Cache database. It will not work with GTM. If you want to develop in Studio, you need to install Vista to your Cache instance.

Sergei Shutov · Mar 28, 2017 go to post

What does it output when you run it with IgnoreErrors=1 in the Ignoring Errors: log lines? Sometimes it reports multiple errors there (like 5000,5202) -- so by looking at code you'll need to add those in your list: "5000,5202,5000,5373"

Sergei Shutov · May 10, 2017 go to post

Try to add Recurse="true" to your import statement:

 <Import File="${SourceFile}" Recurse="true"/>

Sergei Shutov · May 24, 2017 go to post

You should definitely store your storage schema in VCS. When you first compile and install your solution into an environment, it doesn't really matter -- as you said, storage will be generated automatically during compilation. However, this will cause major issues when you'll have to upgrade your environment to a newer version of your class and keep the data.

If you had a class definition in Version 1 of your system with properties Address, Zipcode your storage schema will look like

node=$LB($ClassName,Address,Zipcode)

If in version 2 you add another property, BusinessPhone, and you kept your schema, new storage definition will look like

node=$LB($ClassName,Address,Zipcode,BusinessPhone)

And all old data will still be valid, just its BusinessPhone property will be empty

However if you didn't save your schema, new storage will be alphabetically sorted as this:

node=$LB($ClassName,Address,BusinessPhone,ZipCode)

And all old data will have its ZipCode as BusinessPhone now!

I encountered this problem a couple of times, when class definition was exported before it was compiled (and storage schema was not updated), and it was not easy to fix: you need to iterate across the whole global and rewrite it, trying to guess if it's an old data or a new one.

Hope this helps

Sergei

Sergei Shutov · Aug 8, 2017 go to post

Hi Nael,

I'd suggest to "print" from IE to PDF first, using CutePDF as a default printer, and then use Adobe Reader or similar tool to print to printer. That should require less scripting of IE and more manageable solution overall.

Regards

Sergei

Sergei Shutov · Aug 8, 2017 go to post

Looks like you are trying to get your property from Collection instead of object itself. You likely forgot to call .GetAt(i) method before referencing .value.

Sergei Shutov · Nov 28, 2017 go to post

I would add support for both strings and streams, similar to what we have for other interchange formats (XML, JSON etc). This is pretty much what their reference implementation on the website does as well. Since this is a binary format, you need to be careful with character encoding.

Sergei Shutov · Aug 13, 2018 go to post

I believe it's enough to have [Final] keyword set in deployed mode to give a developer a hint that this class should not be extended.

If you want to enforce this behaviour, I would add a check into each method as a first line , something like

if $this.%ClassName(1)'="My.Class" quit $$$ERROR(50000,"don't extend this class")

Since all code will be deployed, developers will not be able to remove this check easily.

You can also try to add a method-generator, I believe when you have a deployed class with method generator it will not be able to compile a subclass without method generator's source (though I'm not sure).

Sergei Shutov · Feb 14, 2019 go to post

One thing to consider is that Community Edition has a restriction on how many additional namespaces and databases you can have (and that's exactly zero). So while it may be nice to be able to have 3rd party tool in it's own database, it would also be nice to be able to use it from within USER and %SYS.

Sergei Shutov · Aug 21, 2019 go to post

Hi Jude,

For questions like this you should use TRC https://trc.intersystems.com/ -- this is likely related to your environment setup which shouldn't be shared publicly and there are not many Trak people on the Developer community anyway.

Cheers

Sergei

Sergei Shutov · Dec 12, 2019 go to post

The whole purpose of package manager is to get rid of individual installer/updater scripts written by individual developers and replace them with package management utility. So that you have a standard way of installing, removing and updating your packages. So I don't quite understand why this question is raised in this context -- of course package manager shouldn't support custom installers and updaters. It might need to support Projections eventually because as you said it's a part of language, but definitely not for installing purposes.

Sergei Shutov · Dec 6, 2020 go to post

Hi Ahmad,

IRIS has multiple ways to get operational statistics, most recent addition being /api/monitor REST service (docs) which you can use either from our pre-packaged SAM solution (docs) or from your own setup of Prometheus/Grafana or similar tools