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
- Log in to post comments
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
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
Done: Not so easy with external cam.
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
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:
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
Latest Studio is 2024.1.2
it is not tied to IRIS Versions anymore
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
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=""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 '<input type=file>' 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>
I also struggled over that strange offset. and dropped the approach
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?
Well, you have to do it yourself.
Suggestion: Keep a list of the indices processed and skip all followers
For the list you need a small Stored Procedure that you add to
your SQL SELECT in the WHERE clause.
CREATE PROCEDURE SQLUSER.DUPL(value VARCHAR, id INTEGER)
RETURNS INTEGER
LANGUAGE OBJECTSCRIPT
{
set used=$d(^||dupl(value))
set ^||dupl(value,id)=$i(^||dupl(value))
quit used
}And in the SELECT
SELECT id, sickindex, . . . . .
FROM your.data
WHERE DUPL(sickindex,id) < 1As a side effect, you create a list of affected indices.
I used a PPG to avoid the need to clear it before use.
If you are interested in the duplicate, you need to change the global name
and add some cleanup before use
Hi Jean,
Taking a look into ##class(%Library.PosixTime) you see that you shouldn't be concerned on efficiency
It's pretty obvious that the implementation is missing a selectable precision.
so
Is similar effective as
It's not perfect but will be correct and lasting for almost the next 8000 years 😉
In SMP (System Management Portal), you step to EXLORER and then step into SQL
where you select your TABLE. and can rebuild index
.png)
Furthermore, every persistent class has by default
• classmethod %BuildDeferredIndices
• classmethod %BuildIndices
• classmethod %BuildIndicesAsync
Next variant : use $SYSTEM.OBJ.ValidateIndices()
Details described here Fix broken index 8 years ago, still valid
Due to limited practice in ZEN I transferred your example to straight CSP and JS
<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>
in upload.csp I just added this BUTTON to the end ot the main form
<button onclick="window.close()" style="width: 100px; height: 40px; font-size: 18px;"> Exit </button>
</form>1. Use $$DIR^TRACE(dir) you haven't set a suitable directory
2. Use $$ON^TRACE(5352) ; the job you want to trace ==> open file
3: USE $$OFF ^TRACE(5352) to stop trace ==> close file
4.Now ^TRACE should show the file
I traced my own studio session:
START:1810291850,0,%SYS.BINDSRV,2,1 STACK: [ 0] D - SuperServer+112^%SYS.SERVER +1 STACK: [ 1] D - SuperConnect+34^%SYS.DBSRV +1 STACK: [ 2] D - Dispatch+14^%SYS.BINDSRV +1 DO:1812736542,0,%SYS.BINDSRV,39 ARG:[ 0] INT: 0 ARG:[ 1] INT: 1 ARG:[ 2] INT: 1 DO:1812736624,0,%SYS.BINDSRV,625 ARG:[ 0] INT: 0 ARG:[ 1] INT: 0 DO:1812736631,0,%SYS.BINDSRV,258 ARG:[ 0] INT: 0 ARG:[ 1] INT: 0 QUIT:1812736638,291 DO:1812736642,0,%SYS.BINDSRV,627
Not sure for Caché 2017
BUT
Has ^TRACE in %SYS
with enough $v(..) and $ZU(..) to look promising
W $ZU(5) %SYS %SYS>D ^TRACE TRACE utility for Cache. You can signal a process to write a record of all procedure, function, or subroutine calls to a file. Then use this utility to interpret and display the trace. The trace file is named: CacheTrace_'pid'.txt Use $$DIR^TRACE(dir) to set the directory where the file(s) should be written (process must have create/write access to the directory). $$DIR^TRACE() returns the current directory for trace files. Use $$ON^TRACE(pid) to start the trace and $$OFF^TRACE(pid) to end the recording. Then just run ^TRACE to see the results. Process ID for trace file:
So %SYS>d ^TRACE might be a useful start
This utility traces the execution of a process. Traced processes write events to a trace file with details about the routine line where the event occurred and, if applicable, the global reference. The events available for tracing correspond to the metrics availabe in performance monitoring tools (PERFMON, %SYS.MONLBL etc). Raw data is written to iristrace_<pid>.txt in the configured directory, and is then parsed and displayed by this utility. Trace file directory: not set Trace file size limit: unlimited Trace events selected: RtnLoad, GloRef, BlockWait, NCacheMiss, DirBlkRd UpntBlkRd, BpntBlkRd, DataBlkRd, BdataBlkRd, MapBlkRd, OthBlkRd 1) Configure Trace 2) Trace Process (Foreground) 3) Start Background Trace 4) Stop Background Trace 5) Display Trace Files 6) Delete All Trace Files Option?
If I understand it right, you do not just expect a tracking down to some point,
but also a history of all up and down you did from a certain starting point.
Similar to a TCP traceroute
The feedback button is not available for Python and for Node.js.
These were my 1st broken examples
AH, That was meant by feedback
Which is easy now, as it wasn't a bug but an explicit feature
Suggested Idea: Keep documentation in sync with reality .. ? 🤭
It might be great to remove the related refences also
from official documentation
Py
https://docs.intersystems.com/components/csp/docbook/Python-Native/v1.0.0/irisnative.iris.html#irisnative.iris.function
Also Class reference for 2025.1
https://docs.intersystems.com/iris20251/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25Net.DB.Iris#Function
like this:
Calls a function (label^routine), passing zero or more arguments and returning the function's return value. Trailing arguments may be omitted, causing default values to be used for those arguments.
This method throws an exception when an error condition is encountered.
|
routineName |
input |
The name of the routine that implements the function to be called. |
|
functionName |
input |
The name of the function to be invoked. |
|
args |
input... |
The arguments to be passed to the method. |
|
return |
The value returned by the functionName function. |
Thank you for the explanation. @Vitaliy Serdtsev 🙂👍
This matches my investigations
quite an interesting hidden feature.
Though testing with _SYSTEM/SYS and %All, this had no visible impact
It is exactly 1 method that breaks in all 4 Nativ packages
And with %All the rest is available anyhow and working fine.
BUT eventually %All is not All enough
Thanks for the input.
A good idea to put the demo in a separate repo
It is just not directly obvious from OEX
works fine, and module.xml looks good. Review placed
trx this Docs %ETN for Error Logging
>> Naming in ObjectScript has a historic background
In the beginning, the grand-grandfather of IRIS was a full-stack operating system
And it was running on machines with only 64 KBytes of memory
So saving space in memory was the highest virtue of a developer then.
Consequently, all names were as short as short could be.
Typically using single-character named variables.
And A was different from a to widen the available scope
Over the years, this was kept for backward compatibility and to decrease the fear of upgrades
And I have seen customers running 40+ year old code also in IRIS without any bit changed.