Eduard Lebedyuk · May 12, 2020 go to post

You can use Java Gateway and this project.

On a first overview this looks like a container specification with standard crypto algorithms. So you can definitely implement it in InterSystems IRIS. I have done Xades implementation for InterSystems IRIS and it's doable (500 sloc total).

Eduard Lebedyuk · May 9, 2020 go to post

Idea for contestants.

Julyter Notebooks kernel for InterSystems ObjectScript.

Recently I developed bidirectional integration for Jupyter Notebooks. It allows you to create intelligent Business Processes with Python activities. Here's the code (it uses Native API for Python and there's less than a 1000 sloc in the whole integration). Here's some screenshots:

However, as you see currently only BPLs with Python are supported.

The idea for the app is simple - to do the reverse - add the ability for Julyter Notebooks to execute InterSystems ObjectScript code.

Why? It's a great tool for quick prototyping and demos!

How? Using Native API develop a wrapper kernel for InterSystems ObjectScript. Essentially all you need to do is to execute arbitrary string of code and return result. Check WebTerminal source code (by @Nikita Savchenko) to see how a similar application works.

Docs:

Eduard Lebedyuk · May 4, 2020 go to post

As second argument defaults to 1 and third can be skipped you can write just:

if $e(chunk)=""""{
}
Eduard Lebedyuk · Apr 30, 2020 go to post

There's a workaround for import:

  Set dynObj = {}.%FromJSON(jsonStream)
  Set hexStream = dynObj.%Get("hex_stream",,"stream")
  Set base64Stream = dynObj.%Get("base64_stream",,"stream")
 
  Set dynObj."hex_stream" = ""
  Set dynObj."base64_stream" = ""
  Do dynObj.%Remove("hex_stream")
  Do dynObj.%Remove("base64_stream")
 
  Set newObject = ..%New()
  Set newObject.HexStream = hexStream
  Set newObject.Base64Stream = base64Stream
 
  Set tSC = newObject.%JSONImport(dynObj)
Eduard Lebedyuk · Apr 30, 2020 go to post

Try

$$$TRACE("LastChecked value is: '" _ LastChecked _ "', compare: " _ (LastChecked="undefined"))
Eduard Lebedyuk · Apr 30, 2020 go to post

You can add this to your code

$$$TRACE("LastChecked value is: '" _ LastChecked _ "'")

to get LastChecked value.

Eduard Lebedyuk · Apr 30, 2020 go to post

Does not work for me:

d ##class(dc.test).Test()
^dc.testD=5
^dc.testD=5
 
PYTHON>w $zv
IRIS for Windows (x86-64) 2020.1 (Build 215U) Mon Mar 30 2020 20:14:33 EDT
Eduard Lebedyuk · Apr 29, 2020 go to post

Without reports suggested by other users there's not much I can tell you.

What are global buffer sizes on prod/dev machines?

Preheat global cache by looping over data global and compare the timings after that.

List of utilities/reports that should help you:

  • pButtons – all info you  might need, open the ticket with WRC with this info.
  • mgstat –main metrics
  • PERFMON – get most used globals/routines
  • GLOSTAT – system metrics
  • %SYS.MONLBL – line by line code profiling
  • GLOBUFF – global buffer analysis

Check this series of articles by @Murray.Oldfield.

Eduard Lebedyuk · Apr 29, 2020 go to post

it's composite primary key, and I have good reasons for it.

Which are?

Can you compare the performance to index opening:

s p=##class(digi.packet).IDKEYOpen("packet", 5237)
Eduard Lebedyuk · Apr 29, 2020 go to post

Any particular reason your id is not an integer?

I'd think it's a parent-child relationship but why a parent id is a string?

Eduard Lebedyuk · Apr 29, 2020 go to post

but an approach could be with one client request end it, and return a new one

What for? Ending the session means the client exited. You can add additional user supplied cookie(s) and check/modify/delete them as you wish. On every request even.

The other option as mentioned is to encript trafic and therefore the cookie can no longer be used.

Cookies absolutely can be used with encrypted traffic. HTTP/HTTPS makes no difference for cookies sent by a browser.

Eduard Lebedyuk · Apr 29, 2020 go to post

That is right, but as long as the cookie session timeout is valid (let's say 60 seconds) anybody that intercepts that cookie is effectively authenticated as long as the timeout is valid.

Only as long as they share the same remote address. HTTPS offers additional protection. Really if someone can decode your HTTPS traffic to get the cookie you have a bigger problem.

Isn't there any way of invalidating a sessionID manually and creating a new one?

do %session.Logout()

Ends the session. Next request starts the new session.

Eduard Lebedyuk · Apr 28, 2020 go to post

I don't know if it's officially supported.

You can ask in WRC for support/help.

Back to my previous idea, you can check if connection string for external DBMS supports Query Timeout and edit URL parameter in INC0001 gateway connection accordingly:

Eduard Lebedyuk · Apr 27, 2020 go to post

Check StatementAttrs setting. It's a set of SQL Statement Attribute Options of the form attr:val,attr:val,...
Do this in your Business Operation's OnInit method:

Set ..Adapter.StatementAttrs="QueryTimeout:12"
Eduard Lebedyuk · Apr 27, 2020 go to post

You should do that on a client (JS) side and send device info as a part of your POST request.

UserAgent can be retrieved from:

%request.UserAgent

and you can try to map that to device.

Eduard Lebedyuk · Apr 26, 2020 go to post

You can try this to create XLSX files from SQL queries (in the same project there's also XLS exporter).

Another option would be to export CSV and use LibreOffice to convert it to XLSX (among other formats). Here's how.

Eduard Lebedyuk · Apr 26, 2020 go to post

First of all, I'd really like to recommend you to upgrade to InterSystems IRIS.

You can still set query timeout as a part of JDBC connection string if it is available in external DBMS implementations.

Eduard Lebedyuk · Apr 26, 2020 go to post

Call it?

First argument is the statement index and the second is how long to wait in seconds.

I would recommend setting this parameter as a part of JDBC connection string if applicable - it is available in some DBMS implementations.

Eduard Lebedyuk · Apr 24, 2020 go to post

Would be a great language to add.

Are you interested in calling Rust code from InterSystems IRIS or interfacing with InterSystems IRS from Rust?

Currently you can use Callin/Callout functionality for C/C++ and calll that from Rust.

A while ago I was trying Rust and successfully transpiled C callout library into Rust callout library and compiled it as Rust shared lib and it works (callable from InterSystems IRIS).

For this community project to take off two issues need to be solved:

  • Doing something with a lot of generated boilerplate <- Easy part, can probably just dump it into external file as is
  • Generating appropriate ZFEntry table. <-Probably possible but I have not researched the issue so far
Eduard Lebedyuk · Apr 24, 2020 go to post

Easiest way to do that is to add a favorite:

set sc = ##class(%SYS.Portal.Users).%AddFavorite("Community","https://community.intersystems.com")

And your portal now looks like this:

Eduard Lebedyuk · Apr 24, 2020 go to post

Every time you interact with the page your session is extended for session timeout.

If there's no interaction from user after session timeout the session dies and cookie becomes invalid.

You can adjust session timeout parameter in web application settings.

Eduard Lebedyuk · Apr 23, 2020 go to post

VisitTime  (any property really) should be stored before property parameter change.

Can you try to recreate the data?

Eduard Lebedyuk · Apr 23, 2020 go to post

You should set it as your property parameter:

Class MyClass {

Property CreatedOn As %TimeStamp(XMLTIMEZONE  = "IGNORE");

}

In runtime the behavior for your property CreatedOn would be IGNORE.