Robert Cemper · Aug 9, 2022 go to post

ALL code needs compiling. You just don't recognize it.
<tab> as the first separator indicates that you to want to store a local commandline.

WRITE<space>123 executes immediately while

WRITE<tab>123  stores a line labeled WRITE with a nonsense code 123

WRITE<tab>WRITE<apace>123  creates a useful command line that you may run by

DO<space>WRITE
This just explains what is happening. But this is not a programming tutorial.

Robert Cemper · Aug 9, 2022 go to post

It's an ages-old story dating back almost 50 years.
At that time code was not compiled but interpreted (as Python shell today)
the code was kept in the local partition and <tab> signaled that this is to be kept and not executed immediately.  Also, somelabel<tab> worked like that.
Today it is compiled undercover, but not kept.  Similar to the origin.

Robert Cemper · Aug 8, 2022 go to post

that's because the browser or this horrible web editor converts <tab> to <blank>
this is just core MUMPS style for writing .INT code


AUMHSCRTC:USER>a<tab>SET x=1
AUMHSCRTC:USER><tab>WHILE x<10 {
AUMHSCRTC:USER><tab>WRITE !," Looping",x
AUMHSCRTC:USER><tab>SET x=x+1
AUMHSCRTC:USER><tab>}
AUMHSCRTC:USER><tab>WRITE !,"DONE"
AUMHSCRTC:USER>do a

Robert Cemper · Aug 8, 2022 go to post

you are mixing things.
#1) working:
1.1 yo talk to login + authentication
1.2 you talk to command prompt that stores your code locally. 
#2) not working
 authentication from script is not supported, the rest goes nowhere
#3) not working examples
both assume that
3.1 you enter the code in Studio, VSCode, ...and COMPILE  it.
3.2 you call the compiled code from the command line

Robert Cemper · Aug 4, 2022 go to post

DATEDIFF only compares the YEAR numbers. So:
    write  $system.SQL.DATEDIFF("yy",$h-250,+$h)   >>>> 1
because of comparing 2021 to 2022
but it definitely is less than 1 year
and it depends on the actual day of the year 

Robert Cemper · Aug 3, 2022 go to post

To my experience, it is a 5 CONNECTIONS limit overruling the whole licensing code.
implemented in the most restrictive way you can think of.
My bypass was to apply for a demo license (container) and non-castrated image.
It's evident to me that the Community License is just for ****** censored ******
not for adult applications.   
I feel  - not amused (brit.) - about this company. @Andreas Dieckow 
*edited*

Robert Cemper · Jul 29, 2022 go to post

Hi @Scott Roth !
from my ~260+ reviews, I can confirm to you that Docker provides just the vanilla platform for 
demonstration and prepares genal settings (eg.REST)  and shuffles demo data.
But in 98% of those cases, the effective code is installed by ZPM.  
And if ZPM is not installed there is one of those famous 1-liners to install it  (with enough privileges).
To me, docker-compose is just a comfortable way to mix up ports, and volumes, to integrate the container with the environment outside the container.
I'm rather sure our well known Docker Experts have a related cookbook ready for publishing
(there was just no contest to win a prize for it and make money)
The real info on what to copy where is mostly in Dockerfile., which is called by docker-compose.

Robert Cemper · Jul 29, 2022 go to post

Out of curiosity.
For my review analysis, I try to read the STARS In OpenExchange review pages.
The display is generated by Drupal based on some frames running JS scripts in the browser, filled with data from a DB in background that I have no access to.
Is there a chance by using BeautifulSoup to analyze this dynamic content?
 

Robert Cemper · Jul 14, 2022 go to post

in ObjectScript it might be
list("A","x")=""
list("B","y")=""
list("C","z")=""

and you pass it by reference 
do method(.list)
and consume is using $ORDER() or $QUERY()

Robert Cemper · Jul 14, 2022 go to post

and of course any TRIGGER on DELETE will give you more options
e.g. LOG^%ETN()   to dump the full call stack

Robert Cemper · Jul 8, 2022 go to post

Hi @Yaron Munz 
In 1978 when DSM-11 was first released there was no $QUERY() but $NEXT(). doing the job.
Could have been in MUMPS.4B as well.(?)

Robert Cemper · Jul 5, 2022 go to post

So in worst case you just deal with 27 "locations"  for the next years.
Though I have no idea how overseas areas are handled in FR and NL (you are closest).
Good luck !yes
 

Robert Cemper · Jul 5, 2022 go to post

Hi @Marcel den Ouden 

I did something similar a few years back for an ISC internal project.
I required 2 tables to achieve this
- mapping of the location to timezone code  (geographic coordinates are often misleading, STATIC)
- rules and offset from UTC (daylight Saving Y/N, the window when to apply,...) might be flexible
- $ZTZ is your friend and the Docs are really excellent also for special cases

A further complication is mobile use.
example:
- You go to Summit in Seattle. (UTC-7)
- you need to arrange a concall with a customer in Amsterdam (UTC+2) (CEST!)
- and meeting in Nov. (UTC+1)  back to normal time
- And you need to know the time zone used by your notebook (local or home or other?)

For the notebook, I used some JavaScript as the app was written in ZEN (10 yrs.back)
and it was mine and I could control it.
see more in my Article Global Time Management
 

Robert Cemper · Jul 5, 2022 go to post

I took a look into Caché 2018.
%DisplayFormatted is still useless for your case.
It calls the method %Display() which allows having a different delimiter:
It just doesn't use or support it. It is forgotten until today.
So default $C(9) "TAB" is used.
You may need to open the output file yourself and then 
use it with a %Next Loop writing it line by line. 
So you may also control your headers.

It looks like this method was not foreseen to be used in real applications.
 

Robert Cemper · Jul 5, 2022 go to post

in addition,  you may force your column headers in the SQL statement

set sql = "select ID as ""row"", name as ""myname"" from MyClass"

Robert Cemper · Jul 5, 2022 go to post

reading the content of  Docs:

I''d susggest you use either

     set type=100

or the correct case as suggested by documentations

    set type="CSV"
 

Robert Cemper · Jul 5, 2022 go to post

Thanks for this video  and get moving faces to the mostly invisible actors in DC, OEX, GM
It would be great to have a link to a personal video also in DC accounts.  

???

Robert Cemper · Jul 4, 2022 go to post

From your description, it is obvious that you write ALL global streams just to default ^CacheStream.

To separate them you may set individual Globals for streaming (e.g depending on use-case)

Class %Library.GlobalBinaryStream has this parameter + property:
/// Default location: can be overridden at run-time
Parameter STOREGLOBALNAME = "^CacheStream"; /// Root is Global Location (name and top subscripts)
Property StoreRoot As %String(MAXLEN = 5000) [ InitialExpression = {..#STOREGLOBALNAME}, Private ]; Property rollback As %String [ MultiDimensional, Private ];

You can change this default using the method
Method %LocationSet(value As %String) As %Status
{
 Do ..Clear()
 Set ..StoreRoot=value,i%%Location=value
 Quit $$$OK
}