Robert Cemper · Sep 21, 2018 go to post

Sorry Kevin,
I concentrated on CPIPE.

my code was Written for a FOR p=1:1:254 loop to find unused IP addresses in a specific subnet.

in your case, ping might be something like  set ping= "ipconfig"

Robert Cemper · Sep 21, 2018 go to post

if it's grey your local instance on Windows is not started.
There is no cube on *X as far as I know

Robert Cemper · Sep 20, 2018 go to post

Journal is definitely a valuable source.
BUT: It documents Global changes. It doesn't know about objects nor rows in tables.

Robert Cemper · Sep 20, 2018 go to post

Kevin

You can also use a Command Pipe (docs) and read directly from your OS using IPconfig  (on Windows) or ifconfig (in Linux/ Unix)

You just do the usual OPEN + USE and READ whatever comes back.

As an example a handcrafted ping routine

zping ;
 k empty
 s pipe="|CPIPE|"
 close pipe
 s ping="ping 10.10.12."_p
 open pipe:(ping):10 w $t," ",p,!
 for  {
 use pipe read line
 use 0
 set empty=$s($l(line):0,1:$i(empty)) q:empty>3
 write:empty<2 line,!
 }
Robert Cemper · Sep 20, 2018 go to post

you see the local installation.

You have to set your preferred instance to your mac installation.
(have no mac and no idea how your virtual box talks outside)

Robert Cemper · Sep 20, 2018 go to post

with ^OBJ.DSTIME you get the registered changes.
It is up to you to process it and to generate whatever format or style you prefer when and how often you like

So it's nothing ready and YOU have to write some code and manage it. 

DeepSee does nothing for you.

Robert Cemper · Sep 20, 2018 go to post

According to your explanation - the feature you are looking for is available in Caché

For the use with DeepSee there was a class parameter introduced to allow synchronization  of tables.

DSTIME = 1 creates a log in ^OBJ.DSTIME to trace INSERT, UPDATE and DELETE of rows / objects.
see the general description and details on ^OBJ.DSTIME

Robert Cemper · Sep 19, 2018 go to post

This is a design feature.

Ensemble was designed to work on a worldwide base independent of time zones, daylight saving nonsense and other local time deviations with a consistent monotone growing sequence of time.
So the use of UTC is spread everywhere across the code and there is just no single place to switch it on or off.

So if you want to see logs and other info in local time your only chance is to rewrite the pages or to modify the original code in ENSLIB without any guaranty for eventual unexpected side effects.

My personal opinion: It's not worth the effort.

Robert Cemper · Sep 17, 2018 go to post

eXecute command is sensible to variable scoping
in addition control of allowed operates is required.
this small method gives you an easy to maintain code.

ClassMethod Operate(var1 = ""op As %String = "",var2 = "") As %Boolean {
 goto $case(op
         ,"<":lt
         ,">":gt
         ,"=":eq
         ,"<>":ne
         ,:fail
         )
fail quit 0
lt   quit var1 < var2
gt   quit var1 > var2
eq   quit var1 = var2
ne   quit (var1 '= var2)
}

.

and you are free to use any naming of your operator you allow ( & , $ , @, GOOFY, DAISY, DUFFY, DONALD, .. )

Robert Cemper · Sep 17, 2018 go to post

Assuming you create your Output by WRITE variable
the most simple solution would be to change it to   WRITE """"_variable_""""

if your variable can contain quotes that need to be escaped WRITE """"_$REPLACE(variable,"""","""""")_""""
may fit your needs.

More sophisticated you may hide the quoting in some macro definition.

Robert Cemper · Aug 29, 2018 go to post

That's it,  Alex is right

USER>set list=$lb(7,8 ,9)
USER>zzdump list
 
0000: 03 04 07 03 04 08 03 04 09                              .........
USER>set $li(list,2,2)=$lb()
USER>zzdump list
 
0000: 03 04 07 01 03 04 09                                    .......
USER>zw list
list=$lb(7,,9)
Robert Cemper · Aug 29, 2018 go to post

I recently had a problem with a provider not allowing PASV anymore. without notice

Just a guess
 

Robert Cemper · Aug 28, 2018 go to post
set list = $lb("stri,ng", $c(0), 2)
   ,p=0
for  set p=$LISTFIND(list,$C(0),p) quit:'p  set $LIST(list,p)=""
Robert Cemper · Aug 28, 2018 go to post

The path in  JSINCLUDES and  CSSINCLUDES looks somewhat suspicious to me.

you use a path relative to the location of your page.
verify (eg. with Chrome) that your libraries really get loaded

Robert Cemper · Aug 28, 2018 go to post

you mix up 2 variants of indirection

W @B
S @("C="_B)

These both are ARGUMENT indirections, where the arguments of WRITE or SET are replaced.

But

S C=@B

is a NAME indirection where the name of a variable or global is expected.
$P(A,S,2) is definitely no a variable or global name.

Docs on Indirection is quite verbose and shows the limits. 

Most important: this is a runtime feature and not a compile-time feature!

Robert Cemper · Aug 27, 2018 go to post

You can achieve this using TRANSACTIONS in combination with ISOLATION LEVELS

BUT: as with the  LOCK in COS you depend on the other players to take notice of your isolation.  
If they don't care you are lost since this is no absolute locking.
COS has the option to lock your record ahead - but you depend on the other participants.

An other option is to use ROWVERSION  to protect your record. (optimistic locking)
If someone has changed your record under cover you get alerted on the fact.

Robert Cemper · Aug 27, 2018 go to post

instead of eXecute you may use Indirection

set @("mylist="_result)

.

It's a matter of taste  :
take care for ProcedureBlock = 0 ;  as for eXecute ; just in case 

Robert Cemper · Aug 27, 2018 go to post

Only out of curiosity:

What do you get back if you just do "return list"     without toString() ?
Whatever structure CacheListBuilder may have 

Robert Cemper · Aug 19, 2018 go to post

You may create your private row count by group. 

Class DC.any [ Abstract ]
{
ClassMethod MyVid(group = "") As %String [ SqlName = MyVid, SqlProc ]
{
 if group="" kill %myVid quit 0  ;;initialize it
  quit $I(%myVid(group))
}

 .

how to use it:

SELECT DC.MyVid(company) RowNumber, Company,Company->Name, Name
FROM Sample.Employee where DC.MyVid()=0 /* static condition for init */
order by 2

 .

looks like this:

RowNumber

Company

Name

Name

1

1

O' KwalLateral Group Ltd.

Moon,Mary Q.

2

1

O' KwalLateral Group Ltd.

Ximines,Alice Z.

3

1

O' KwalLateral Group Ltd.

Malynko,Greta H.

4

1

O' KwalLateral Group Ltd.

Lubbar,Emily Q.

1

2

InterPlex Holdings Inc.

Tesla,Kenny W.

2

2

InterPlex Holdings Inc.

Jones,Valery N.

3

2

InterPlex Holdings Inc.

Baker,Samantha D.

1

3

GlobaSys LLC.

Quixote,Marvin C.

2

3

GlobaSys LLC.

Xerxes,Violet Y.

3

3

GlobaSys LLC.

Adams,Kim W.

4

3

GlobaSys LLC.

Ubertini,Roberta N.

5

3

GlobaSys LLC.

Jackson,Buzz V.

6

3

GlobaSys LLC.

Clinton,Keith C.

7

3

GlobaSys LLC.

Isaksen,Juanita T.

8

3

GlobaSys LLC.

Solomon,Imelda Z.

1

4

SynerMatix Associates

Humby,Olga A.

2

4

SynerMatix Associates

Orwell,Maureen R.

3

4

SynerMatix Associates

O'Donnell,Ed Q.

4

4

SynerMatix Associates

Orlin,Mary D.

5

4

SynerMatix Associates

Vanzetti,Pam V.

6

4

SynerMatix Associates

Noodleman,Chris O.

Robert Cemper · Aug 8, 2018 go to post

Thanks Ben,

that's excellent news. Checkpointing is a feature I was missing already in Caché.
I see no urgency in timing yet as we are still a starting phase.    

Robert Cemper · Aug 6, 2018 go to post

- check available disks space for CACHETEMP  (initial size)
- check access rights of the account starting Caché

Robert Cemper · Aug 3, 2018 go to post

|| is the concatenation operator in SQL

1||1 results in 11 as you have seen

'1||1'   in single quotes should do it

Robert Cemper · Aug 2, 2018 go to post

for cleaning up:

/// to get rid of old versions
/// select OBJ.DSTIME_DelVersion('Table',Version)
/// 
ClassMethod DelVersion(Table As %String = " "Version As %Integer = 0) As %Integer [ SqlProc ]
{
 Quit:'$l(Table) '$$$OK
 Kill ^OBJ.DSTIME(Table,+Version)
 Quit $$$OK
}