Robert Cemper · Mar 3, 2023 go to post

If you are not afraid of using basic COS functionality:
your reload method raises a LOCK ^myRELOAD  
and drops it with completion LOCK -^myRELOAD

Your check utility does the same but with a timeout LOCK ^myRELOAD:0
if it fails - signaled by $TEST=0  you loop and hang around and retry
for success $TEST=1 you go on but release your successful LOCK immediately
not to block anyone else.
 

Robert Cemper · Mar 1, 2023 go to post

According to your JSON model, I would assume this to start:
(sory had no chance to test myself)

Class Test.GEOMETRIEPOINT Extends (%SerialObject, %JSON.Adaptor, %XML.Adaptor) 
{

Property "GEO_TAB_COORDONNES" As list Of %Float;
}

Class Test.GEOMETRIELINE Extends (%SerialObject, %JSON.Adaptor, %XML.Adaptor)
{

Property "GEOMETRIE_LINE" As list Of GEOMETRIEPOINT;
}

Class Test.POLYGON Extends (%Persistent,%JSON.Adaptor, %XML.Adaptor)
{

Property "GEOMETRIE_POLYGON" As list Of GEOMETRIELINE;
{
Robert Cemper · Feb 24, 2023 go to post

You have to blame the designers of the language back in the 60ties of last century.
it was even an ANSI Standart then.
And it is backward compatible and the code of the 60ties still can run unchanged!

Robert Cemper · Feb 21, 2023 go to post

it's an interesting line:

patient0 = Patient.parse_obj(patients_resources.search(family='familyname',given='givenname1').first().serialize())

I miss some checks if the search was successful.
Because NONE indicates a missing content.
If search(family='familyname',given='givenname1')
fails you receive NONE and this can't be serialized.  
COS would just return NullString """
 

Robert Cemper · Feb 20, 2023 go to post
  • if you have access to the CSP or ZEN page you may just check the user name in
    method OnPreHTTP or similar, and redirect him to the moon.
  • if can't touch the page then rename it and create a filter page that does a server-side
    redirect for everyone except the banned user.

    .

Robert Cemper · Feb 20, 2023 go to post

Fully agree:
Package was used for the chapter of OEX from day zero!.
Instead of semantic discussions, it would be much more important to take care of 
quality and completeness and easy-to-evaluate examples for the community.
Every member of the community is a customer. To my understanding this is major
point of being different do other code exchange and discussion platforms.
I have checked almost all packages (except the commercials) and most contributors 
seem to share this understanding. Though I have to admit that there are also less
service-minded contributors that just don care about issues and PRs.
A community of white sheep only is an illusion.
I've seen too much to have such dreams 

Robert Cemper · Feb 20, 2023 go to post

You are correct module.xml indicates IPM/ZPM usage and that's OK.
But "Packages" is much wider since it also includes those parts that do not contain installable code or data to load but (if well prepared) a bunch of additional information like (hopefully) user guides, installation guides, description of the purpose of the packages, as well as screenshots, examples, ..... 
All this is not part of the IPM module. for good reasons.
I would feel "module" as a downgrade of the excellent work the contributors provided to the community.

Robert Cemper · Feb 19, 2023 go to post

in iris.script for NSP %SYS add

set par("AutheEnabled")=64
set tSC=##class(Security.Applications).Modify("/csp/sys",.par)

the disadvantage:
You are UnknowUser and might need to add the required Roles as well.

set role="%All"
set tSC=##class(Security.Users).AddRoles("UnknownUser",.role,1)

----------------------
my personal approach is to have a fixed port for SMP
and save my   _SYSTEM / SYS in browser with autofill.
 

Robert Cemper · Feb 19, 2023 go to post

this shows how $QS could be used for a partial global listing
it only checks the second subscript and writes the value for a match

SAMPLES>k ^rcc
SAMPLES>f i=12:1:19 s ^rcc($j,i)="SUB1=J,"_i
SAMPLES>f i=12:1:15 f j=14,17 s ^rcc($j,j,i)="SUB1="_j_",SUB2="_i
 
SAMPLES>zw ^rcc
^rcc(9372,12)="SUB1=J,12"
^rcc(9372,13)="SUB1=J,13"
^rcc(9372,14)="SUB1=J,14"
^rcc(9372,14,12)="SUB1=14,SUB2=12"
^rcc(9372,14,13)="SUB1=14,SUB2=13"
^rcc(9372,14,14)="SUB1=14,SUB2=14"
^rcc(9372,14,15)="SUB1=14,SUB2=15"
^rcc(9372,15)="SUB1=J,15"
^rcc(9372,16)="SUB1=J,16"
^rcc(9372,17)="SUB1=J,17"
^rcc(9372,17,12)="SUB1=17,SUB2=12"
^rcc(9372,17,13)="SUB1=17,SUB2=13"
^rcc(9372,17,14)="SUB1=17,SUB2=14"
^rcc(9372,17,15)="SUB1=17,SUB2=15"
^rcc(9372,18)="SUB1=J,18"
^rcc(9372,19)="SUB1=J,19"
 
set glob="^rcc",last=14,start=13

SAMPLES>print
a        for  {
         set glob=$q(@glob,1,val) quit:glob=""
         set sub=$qs(glob,3)
         if sub=start write glob," >> ",val,!
         else  if sub]start,sub']last write glob," >> ",val,!
         else  write glob,!
         }

SAMPLES>d a
^rcc(9372,12)
^rcc(9372,13)
^rcc(9372,14)
^rcc(9372,14,12)
^rcc(9372,14,13) >> SUB1=14,SUB2=13
^rcc(9372,14,14) >> SUB1=14,SUB2=14
^rcc(9372,14,15)
^rcc(9372,15)
^rcc(9372,16)
^rcc(9372,17)
^rcc(9372,17,12)
^rcc(9372,17,13) >> SUB1=17,SUB2=13
^rcc(9372,17,14) >> SUB1=17,SUB2=14
^rcc(9372,17,15)
^rcc(9372,18)
^rcc(9372,19)
 
Robert Cemper · Feb 10, 2023 go to post

Hi @Julius Kavay 
Sorry to see you leaving. Though I understand your concerns.
I will miss your high-quality contributions that are based on a long and successful experience!
Let's stay in contact

 

Robert Cemper · Feb 10, 2023 go to post


Hi @Stefan Cronje !
I share many of the concerns you raised:

  • aged and outdated and dead packages
  • extra points are given for PR and Merges, but most PS are ignored
  • besides my own 402 reviews only 80 others
  • no options for a release-related  review
  • enough dead links
  • missing an ISC-controlled repo  
Robert Cemper · Feb 6, 2023 go to post

quite interesting.
OEX was unreachable just now for some time
and now my previous voting is gone.
no problem, I still remember.
It's a warning to other early voters.

Robert Cemper · Feb 6, 2023 go to post

I would have been surprised if you knew ZZQ
It's my personal customized COS command for DO $SYSTEM.SQL.Shell()
But I'm also aware you are selling and pushing PY.  OK
And I use happily COS and its predecessor for 45 years which made ISC big
And I dislike black painting its values.

Robert Cemper · Feb 6, 2023 go to post

@Guillaume Rongier 
your terminal example is just poor , (sorry!)  pauvre
I do it his way, easy to read and easy to follow, (your notation)

SAMPLES>zzq
SQL Command Line Shell
----------------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter q to quit, ? for help.
SAMPLES>>  << entering multiline statement mode >>
        1>>CREATE TABLE test.formation (
        2>>    name varchar(50) NULL,
        3>>    room varchar(50) NULL
        4>>)
        5>>go
1.      CREATE TABLE test.formation (
            name varchar(50) NULL,
            room varchar(50) NULL
        )
 
0 Rows Affected
statement prepare time(s)/globals/lines/disk: 0.0122s/1724/14836/0ms
          execute time(s)/globals/lines/disk: 0.4004s/68198/594881/177ms
                          cached query class: %sqlcq.SAMPLES.cls47
---------------------------------------------------------------------------
SAMPLES>>  << entering multiline statement mode >>
        1>>INSERT INTO test.formation
        2>>(name, room)
        3>>VALUES('formation1', 'salle1')
        4>>go
1.      INSERT INTO test.formation
        (name, room)
        VALUES('formation1', 'salle1')
 
1 Row Affected
statement prepare time(s)/globals/lines/disk: 0.0113s/2622/28346/0ms
          execute time(s)/globals/lines/disk: 0.0009s/13/143/0ms
                          cached query class: %sqlcq.SAMPLES.cls48
---------------------------------------------------------------------------
SAMPLES>>q
SAMPLES>
Robert Cemper · Feb 6, 2023 go to post

This is just cool!
I tried it with my Stream example using xDBC  and no fake mimic.

Robert Cemper · Feb 4, 2023 go to post

Before IRIS there was a trial version. But always only the latest.
There was also no community.  as we know it today.
What you look for is more than 10 years back ! 

Robert Cemper · Jan 27, 2023 go to post

this might do it:

Class User.Scott 
{
ClassMethod Clean(infile, outfile) As %Status
{
  set in=##class(%Stream.FileCharacter).%New()
  do in.LinkToFile(infile)
  set out=##class(%Stream.FileCharacter).%New()
  set out.Filename=outfile
  do in.Rewind()
  while 'in.AtEnd {
    set line=in.ReadLine()
    set last=($e(line,*)="|")
    if last set sc=out.WriteLine(line)
    else  set sc=out.Write(line)
  }
  do in.%Close()
  set sc=out.%Save()
  quit sc
}
}
Robert Cemper · Jan 27, 2023 go to post

Just to understand your requirements correctly.
- a linebreak  $c(13,10)  would only be acceptable if it follows a segment terminator "|" 
- IF YES Is this just a pipe | or a double pipe || as in your example?
This could be a processing rule to check the last chars of the line
and ignoré the linebreak at a mismatch.   
 

Robert Cemper · Jan 23, 2023 go to post

In IRIS you have in SMP the option to run your Query in background and bypass the timeout.

Robert Cemper · Jan 23, 2023 go to post

it still exists:

ClassMethod Build(f As %Integer)
{
 s a="#" f i=F:-1:1 w ?i,a,! s a=a_"##"
}
Robert Cemper · Jan 23, 2023 go to post

Just forget my contribution.
I'm not interested in digging for secrets!
I leave that to Indiana Jones    
my code is deleted ! it's not my type of fun

Robert Cemper · Jan 23, 2023 go to post

Hmm!
Where did you see the enclosing quotes? 
they are invisible in my browser.

Robert Cemper · Jan 22, 2023 go to post

FOUND SOMETHING !

in SMP IRIS you see this header as in Caché / Ensemble

but click to more  has a surprise in IRIS

Select foreground and you get all %session, .... that you look for.
Recorded with SPOOL , device 2
 
%CSPsc=1
%ROWCOUNT=0
%ROWID=""
%SNGetQueryStats=1
%SYSLOG=1
%application=<OBJECT REFERENCE>[356@%CSP.UI.Portal.Application]
%caller=""
%class="%CSP.UI.Portal.SQL.Home"
%method="InvokeInstanceMethod"
%msg=""
%obj=<OBJECT REFERENCE>[362@%ZEN.Component.html]
%objlasterror=""
%page=<OBJECT REFERENCE>[20@%CSP.UI.Portal.SQL.Home]
%request=<OBJECT REFERENCE>[1@%CSP.Request]
%response=<OBJECT REFERENCE>[2@%CSP.Response]
%sc=1
%session=<OBJECT REFERENCE>[3@%CSP.Session]
%sqlcontext=<OBJECT REFERENCE>[433@%Library.ProcedureContext]
%tStatement=<OBJECT REFERENCE>[369@%SQL.Statement]
%zenContext="method"
%zenThreadId=39
SQLCODE=0
rs=""
<Private variables>
$zp=14828
$io="|TCP|58771"

Reverse engineering of the SMP page uncovered this new checkbox to me.
Could be it is documented somewhere
HTH