Robert Cemper · Oct 7, 2025 go to post

As you say, IT SEEMS.
And I used it quite intensively. until it was blocked with <PROTECT> by 2024.1
see this Discussion  WARNING: Bug in IRIS Native API
It was intentionally https://community.intersystems.com/post/warning-bug-iris-native-api#comment-282334

Some documentation was adjusted, but not the internal Class Reference
https://docs.intersystems.com/iris20252/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25Net.DB.Iris#Function

It was quite some effort to rewrite all my 9 Native API examples
for Py,. JS, ObjectScript to make them work again

Robert Cemper · Oct 7, 2025 go to post

The Demo on OEX has been reworked
Using a more attractive display for JSON objects
and removing Functions that are not supported anymore.
In addition, I was able to update the version delivered by IPM 

Robert Cemper · Oct 6, 2025 go to post

3 variants come to my mind

  1. writing to ErrorLog  Do LOG^%ETN()
  2.  write to Systrem message.log
     set %evgeny=$io
     open 1 use 1 write !,"Was in my REST code",! close 1
     use %evgeny
  3. If you have a terminal session  LOCK  ^%EVGENY --- And into your code, add this simple loop 
  4.  for  LOCK +^%EVGENY QUIT:$TEST   HANG 0.5

    Now your method loops, and you can attach with any external debugger. Releasing the LOCK from Terminal does the "un-freeze"

Robert Cemper · Sep 28, 2025 go to post

Simplified:  %CSP.Page is a collection of methods and event handlers without any own properties.
Related data are kept outside in %CSP.Request and %CSP.response.
But you may mimic InitialExpressions by using PARAMETERS 

Robert Cemper · Sep 27, 2025 go to post

I've been offering my reports on reviews for more than four years now,
as a personal service to the DC community, to show recent reviews.
And this covers any new review I can detect, not just add-ons to my own 700+ positive reviews
I started it long before the quality reports you mention were even proposed and implemented.

And even at my advanced age, I'm not willing to leave my audience in the lurch
until I'm explicitly forced by DC+OEX managers with a reasonable explanation.
In addition, the quality reports you address have neither a selectable overview
nor any kind of summary or view of progress. 

Robert Cemper · Sep 26, 2025 go to post

DSW definitely offers a strong improvement in graphics.
THOUGH you require some externally installed tools/libraries.

My intention here was to make it IRIS-only and all internal,
concentrating on the actions behind the scene. (query, tables, cubes) 
The charts are more eye-catcher for the visualization 

Robert Cemper · Sep 25, 2025 go to post

I understand that using the IRIS Native API is the important feature.
Is this also valid for IRIS Native API for ObjectScript ????.  
No doubt it is EXTERNAL on a different instance,
talking to the same interface as Java, NodeJS, Python, .NET
facing the same limitations  (Functions !)

Robert Cemper · Sep 25, 2025 go to post

Release notes version 1.0.0

Based on the very positive feedback, I have added a new functionality.
It is now possible to also take a snapshot from a remote system.
The only requirement is to append an URL-Parameter formatted like this:

?SERVER=IP-Address[:SuperServerPort[:Username[:Password]]]

defaults: port=1972 user=_SYSTEM pw=SYS
Example 

http://localhost:42773/csp/user/ZX.dbdash.cls?SERVER=192.168.0.11:11972:SuperUser:SYS
Robert Cemper · Sep 24, 2025 go to post

From Class Docs:
• classmethod ExportAllClassesIndividual(dirname As %String = "", qspec As %String = "", ByRef errorlog As %String, Charset As %String = "", Package As %String = "*", SubDir As %Boolean = 0) as %Status

Export all the classes as individual XML files to a directory.

This method loops through all the classes, exporting each one as an individual XML file named after the classname to the directory dirname. If you specify a Package, then it exports only this package. If SubDir is true,, the method exports sub-packages as subdirectories.

Now the directory is your list of classes and equal sizes of files 
might most likely mean identical content. Or you do a text compare

Robert Cemper · Sep 24, 2025 go to post

You are right. $system.OBJ.Export~whatever is oriented to the Namespace

BUT:
There still seems to be no limitation to map a specific database file
to more than 1 namespace. e.g. USER and MERGER (here Read Only)
Then $system.OBJ.Export~whatever takes what it finds in MERGER.
It's quite a dirty approach and only meant for READING the code, therefore, ReadOnly

In any case, it's safer just to copy the (most likely static) DB of interest
and use it in MERGER
 

Robert Cemper · Sep 22, 2025 go to post

Hi @Asaf Sinay 

It was just by accident that I completed my untypical use of DeepSee:
After >12 years, I  took some time to get in again.
But I should say Documentation and Examples are excellent to get up to speed.
👍

Robert Cemper · Sep 8, 2025 go to post

Maybe a problem to understand your expectations:

  • In the browser, there runs HTML and JavaScript
  • on the server side you have ObjectScript, MVbasic, TSQL, Python,  ...

What's your expectation ?  

Robert Cemper · Sep 8, 2025 go to post

short:
certificates signaled some technical potential.
in practice, social skills in service were more important

Robert Cemper · Sep 5, 2025 go to post

Docker Windows Desktop Console  helps me a lot to see what's in and
to clean old unwanted containers, images, volumes(!!) 

from command line docker system prune is the way to go

Robert Cemper · Sep 5, 2025 go to post

MIRROR in IRIS is a mirror just of globals:

If you look for a general file mirror, it's a subject of storage sellers that make money with

Robert Cemper · Sep 4, 2025 go to post

the PPG  ^||...  is deleted latest by termination or the partion
the ^mtemp* will be killed by reboot of IRIS.
As both are not under your direct control better KILL  it manually
PPG ^||.. is more promising being bound to process
as it has less risk of concurrency issues

Robert Cemper · Sep 4, 2025 go to post

Read the class code of %Stream.TmpCharacter Method %OnNew()
and you see  ^CacheStream is the default if no other Global uses in %New,

example: ....set stream=##class(%Stream.TmpCharacter).%New("^||temp.Stream")
would store it in a process private global  (NO JOURNAL!) just during your session
or ^mtemp,Stream  writes it to IRISTEMP also without JOURNAL:
 

Robert Cemper · Sep 2, 2025 go to post

When I started in business, quite back in the last century, certifications were not common practice.
Only certificates from European Universities, with just a few from IBM were accepted.
Recruiters were impressed, but managers were more sceptical about.

Having collected a bunch of certificates, this was some disappointment to me.

My later boss explained it to me:

The certificates show that you are strong in learning and delivering tests
Here, we have to provide fast and stable code. This counts.
I had a Dr. Math. from the University that, after 4 weeks of training, was
   not able to write 17 correct running lines of assembly language.
What worth does its certificate have for me ?

This was 53 years ago, and I decided on less noise on paper and more work success

Times are different today

Robert Cemper · Aug 26, 2025 go to post
  • Hiked/enjoyed nature
    • Yes
  • Traveled somewhere new
    • Yes
  • Watched a movie or series
    • Yes
  • Read a book
    • Yes, many ~ 1500 pages
  • Earned points and redeemed a reward on Global Masters 🏆
    • Earned points but didn't redeem 
  • Spent time with family or friends
    • Yes
  • Moved to a different location of living
    • Yes
  • Did a lot of manual work to enable that move
    • Yes
Robert Cemper · Aug 26, 2025 go to post

Correct!  |"NS"|  is not allowed as a Class reference.
BUT:   It is a valid syntax for .INT/.MAC  Rooutine   do label^|"NS"|routine
And %objlasterror never shows the class, but the generated .int or .obj you  run.
It's rather a comfort of the COS compiler that your class name matches the .int

Robert Cemper · Aug 16, 2025 go to post

I'm fully in Sync with @Dmitry Maslennikov 
Uniqueness is the TOP priority. 
Though you can switch it off for rare cases by the class parameter 
 MANAGEDEXTENT.

Concerning access speed, naming is not really relevant.
Top level of global storage is a sorted hierarchical directory structure that points to the globals.
So, on average, any global has - with actual storage speed -  the same access time.
And global directory is mostly permanently cached in Global buffers.
BTW: You can list this directory using ^$GLOBAL()

set dir="^$GLOBAL("""")"
for  write dir,! set dir=$QUERY(@dir) quit:dir=""
Robert Cemper · Aug 15, 2025 go to post

Just as you, I start my CSP also from good old Studio

the EXIT button is inside <bod>y<form> ....<button>..   </form></body>
in upload
 

<!-- Copyright (c) 2001 InterSystems Inc. ALL RIGHTS RESERVED. -->
<csp:class description="Demo of how to upload a file from the browser.">
<html>

<head>
</head>

<body bgcolor="#CCCCFF">

<!-- display standard sample template using a custom tag -->
<isc:SAMPLE title="Upload a file Sample">
This sample uses an '&lt;input type=file&gt;' element in a form to upload a file
from the web browser to CSP. Pick a file and hit the submit button to try it.
</isc:SAMPLE>

<!-- HTML Form to submit the file. You must specify the enctype="multipart/form-data" -->
<!-- for this to work -->
<form enctype="multipart/form-data" method="post" action="upload.csp">
	Enter a file to upload here: <input type=file size=30 name=FileStream>
	<p>
	<ul><input type="submit" value="Upload file"></ul>
	<p>
	<button onclick="window.close()" style="width: 100px; height: 40px; font-size: 18px;"> Exit </button>
</form>

<!-- As form is submitted to this page look to see if we have the stream in the %request object -->
<csp:if condition='($data(%request.MimeData("FileStream",1)))'>
	<hr><br>
	Submitted filename: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).FileName))#</b><br>
	Size of file: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).Size))#</b><br>
	Mime Section: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).MimeSection))#</b><br>
	Type of stream: <b>#(..EscapeHTML($classname(%request.MimeData("FileStream",1))))#</b><br>
	Content Type: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).ContentType))#</b><br>
	<br>
	First 200 characters of stream:<br>
	<ul>
	<script language="Cache" runat="server">
		New bytes
		Set bytes=%request.MimeData("FileStream",1).Read(200)
		Set bytes=##class(%CSP.Utils).DecodeData(bytes)
		Write bytes,!
	</script>
	</ul>
</csp:if>

</body>
</html>

while your calling JS script is best located in <head>......</head>

<html>
<head>
<title>Demo for David</title>
<script language="JavaScript" type="text/javascript">
function importExtract()
{
	var url='upload.csp' ;
	var options = 'popup,status=yes,scrollbars=yes,resizable=yes,width=750,height=250' ;
	newwindow=window.open(url,'UPLOAD',options);
    newwindow.focus();
	alert('back');
	}
</script>
</head>
<body>
<h3>Demo for David</h3>
<Input type="button" value="Import Client Consultation Extract"
         onclick="importExtract();"/>
</body>
</html>
Robert Cemper · Aug 15, 2025 go to post

Strange.
Did you try to load 'upload.csp' directly and just isolated? 
window.close() is the most basic function in JS in any browser.
If that fails, your browser might have a problem.
Do you run some sick PopUp blocker or similar in your browser?