Jani Hurskainen · Feb 25, 2025 go to post

Thanks for the background.

The following is for the documentation team:

From: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.U…

Case-sensitive: variable names (other than the ObjectScript system variables) are case-sensitive. Names of packages, classes, and class members, names of routines and their entry points, names of include files and macros are also all case sensitive.

This is plain wrong. The package and class names are case in-sensitive as you can read in this message thread and in the compilation example below:

Compilation started on 02/25/2025 10:16:38 with qualifiers 'bckru'
Compiling class Foo.Class1
Compilation finished successfully in 0.056s.

ERROR #5093: Name conflict on class 'foo.Class2' because package 'Foo' has the same name but differs in case.

ERROR #5092: Name conflict on class 'Foo.class1' because class 'Foo.Class1' has the same name but differs in case.
Jani Hurskainen · Feb 25, 2025 go to post

VS Code (extension) checks that too:

Compilation started on 02/25/2025 10:16:38 with qualifiers 'bckru'
Compiling class Foo.Class1
Compilation finished successfully in 0.056s.

ERROR #5093: Name conflict on class 'foo.Class2' because package 'Foo' has the same name but differs in case.
Jani Hurskainen · Feb 11, 2025 go to post

How to take control of your own code snippets:

The "old school" way: keep a "tidy" public or private repository from where you can easily import the code into any namespace with $system.OBJ.ImportDir

The "new school" way: organize the code into a public or private IPM module (or modules). In case of public code host the module(s) in https://openexchange.intersystems.com/?zpm=1 Remember to be explicit about the license!

Select top level package name (try to follow the de-facto naming rules) and organize the code there as you see best (use sub packages and classes).

I don't know about public collections of functions but browse and follow-up the https://openexchange.intersystems.com/

Jani Hurskainen · Jan 17, 2025 go to post

In addition they have to by case-insensitive unique.

IMO this is s strange way of saying the name is case insensitive.

If foo, Foo and FOO are consider the same name then the name is case insensitive.

If foo, Foo and FOO are consider different names then the name is case sensitive.

Jani Hurskainen · Jan 17, 2025 go to post

Err ... class names are not case sensitive?

ERROR #5092: Name conflict on class 'Package.subpackage.classname' because class 'Package.subpackage.ClassName' has the same name but differs in case.

Is there a related configuration option(s)?

Jani Hurskainen · Dec 31, 2024 go to post

I just added a column to show completion of parts in the exercises

  • -  no part
  • 1 only part 1  (silver star)
  • 2 only part 2 (another silver star)
  • 3 1+2 both parts completed (gold star)

The option 2 is redundant. Part 2 only unlocks when part 1 has been solved.

Jani Hurskainen · Dec 23, 2024 go to post

Did you noticed the top level schemas import even more schemas? E.g. VSDService.xsd imports ../ConnectorContext.xsd that imports ConnectorCommon.xsd and so on.

I know nothing about IRIS WSDL support but I suspect you have to have all the types from bottom-up.

Jani Hurskainen · Dec 12, 2024 go to post

I'm definitely and permanently fallen behind and used already most of my annual skill+time puzzle quota. So I'm not expecting to solve more than 7 or 8 first days. However you'll get a small story about my learnings here when I'm done ;)

Jani Hurskainen · Dec 9, 2024 go to post

Great! After I have upgraded it too we can have a session about my IPM usage scenario if you're still interested. I guess the session could take place on early January.

Jani Hurskainen · Nov 22, 2024 go to post

I feel your pain. It's very frustrating to work with systems like that 😟I'd recommend to put as much "pressure" as possible on the upstream system to fix their MSH18. Or course that might not be a realistic option in your case.

Jani Hurskainen · Nov 18, 2024 go to post

Currently we have in-house ObjectScript code to convert a JSON configuration file into OAuth2.ServerDefinition, OAuth2.Client et al. objects.

Jani Hurskainen · Nov 18, 2024 go to post

Related: how do I configure locale with CPF? I didn't find an option. Currently we are running:

do ##class(Config.NLS.Locales).Install("finw")
set ^SYS("NLS", "Config", "Collation")="Finnish3"

with iris terminal.

Jani Hurskainen · Nov 14, 2024 go to post

I'm not sure if there is other options too but how about to convert the dates into strings? In select use to_char() and in insert use to_date():

select
-- date to string with to_char()
to_char(current_date, 'YYYY-MM-DD') as date1,
-- string to date with to_date
to_date('2024-11-14','YYYY-MM-DD') as date2
Jani Hurskainen · Nov 5, 2024 go to post

I finally figured this out with a help of a colleague! I just had to create a user that I can use for authentication in publish operation. AFAICS now everything works as expected.

The difference in authentication of zpm-registry's /package and /packages paths confused me untiI I read the source code.

Essentially my problem here was this was the first time I run into these web applications and IRIS authentication model.

Jani Hurskainen · Nov 4, 2024 go to post

Unfortunately the company doesn't have open-source culture (yet) so the answer is no.

However I have got an assignment a while ago to argument why the company should open-source software components. So if you or anyone where here have good arguments please share 😉 I do have my own list of arguments already but more the merrier!

Jani Hurskainen · Nov 4, 2024 go to post

Thanks for asking - I have not yet solved this (I have prioritized other things).

The overall work flow is clear but I'm struggling with this step on self-hosted remote registry:

repo -n local -r -url http://localhost:52773/registry/ -user test -pass PassWord42

How do I configure the authentication? I.e. how do I know the values for -user and -pass? AFAIK this is explained nowhere.

A side note for the community registry:

I recall I have seen the instructions how to self-register to the community registry (probably written by you 😉) but I didn't saved the link and now I can't find it anymore.

I'm expecting the front page at:

https://pm.community.intersystems.com/

would have clear description and instructions in the the similar way than the official (?) registry:

https://pm.intersystems.com/

Jani Hurskainen · Nov 1, 2024 go to post

Now I have this kind of workaround:

<!-- unit testing workaround -->
<Invoke Phase="Test" Class="Company.UnitTest.IPM" Method="Load" CheckStatus="true">
  <Arg>${root}/test</Arg>
</Invoke>
<Invoke Phase="Test" Class="Company.UnitTest.IPM" Method="RunTestPackage" CheckStatus="true">
  <Arg>CompanyTests</Arg>
</Invoke>
<Invoke Phase="Unconfigure" Class="%SYSTEM.OBJ" Method="DeletePackage" CheckStatus="true">
  <Arg>CompanyTests</Arg>
</Invoke>

The amount of boilerplate is tolerable.

Test cases are located in ${root}/test.

Company.UnitTest.IPM is just an IPM "compatible" facade for our framework.

Now I can run test -o my-company-module. This has been working fine so far, fingers crossed there is no nasty surprises just waiting around the corner ...

Jani Hurskainen · Nov 1, 2024 go to post

I had a look into the IPM source code and I guess the correct places where the testing action happens are:

  • %ZPM.PackageManager.Developer.Processor.UnitTest (OnPhase method)
  • %ZPM.PackageManager.Developer.UnitTest.Manager

However I got a quite confused how I would be able to inject my own Processor.UnitTest and/or UnitTest.Manager there and what are those pParams that are passes everywhere.

Jani Hurskainen · Oct 30, 2024 go to post

Nexus is not listed in https://oras.land/adopters/ but OCI support is mentioned e.g. here: https://www.sonatype.com/blog/sonatype-nexus-repository-as-a-container-…

Open Container Initiative (OCI) support

Sonatype Nexus Repository supports the Open Container Initiative
for creating open industry standards on container formats and runtime specifications. This lightweight, open governance structure provides guidance and continued growth across all leaders in the container industry.