Article Robert Cemper · Apr 27, 2020 2m read Multidimensional Property Persistence - Part 2 (New Age) While the classic solution followed rather close the concepts and design of the ancestorsCaché / IRIS allows a more modern approach to flexible/multidimensional properties #Other 13 1 0 515
Article Robert Cemper · Apr 27, 2020 4m read Multidimensional Property Persistence - Part 1 (Classic) As you know in Caché / IRIS you have the possibility to define a property as Multidimensional as documented here: https://docs.intersystems.com/iris20201/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_proplit#GOBJ_proplit_multidimand the explanation of how to use ithttps://docs.intersystems.com/iris20201/csp/docbook/Doc.View.cls?KEY=GOBJ_proplit#GOBJ_proplit_multidim_valuesThough the access is quite comfortable (in traditional COS sense) there are 2 main restrictions that hurt:#1) It is not saved to disk unless your application includes code to save it specifically.#2) It cannot be stored in or exposed through SQL tables there are some moreI'll show how to overcome these limits #Other 14 1 2 611
Article Robert Cemper · Apr 26, 2020 5m read Materialized Views A VIEW in SQL is basically a prepared SQL statement.It has to be executed and assembled like any other SQL query.MATERIALIZED VIEW means that the content is collected before hands and can be retrieved rather fast.I saw the concept first with my favorite competitor named O* and they made a lot of noise about it. { favorite: because I could win every benchmark against them } #Other 12 3 1 817
Article Robert Cemper · Apr 25, 2020 2m read Semi-Persistent Classes and Tables If you define a Persistent Class / Table the class compiler generates for you an appropriate Storage definition.A different option is to define a SQL mapping for an already existing Global storage. This has been excellentlyexplained already in a different series of articles. The Art of Mapping Globals to Classes 1 of 3 #ObjectScript #Other 10 7 1 564
Article Robert Cemper · Apr 25, 2020 2m read Static WHERE Conditions The typical WHERE condition in SQL relates mostly to some content of the rows you work on.So it needs to be calculated and checked for each row you access.Differently (and that's why I named it STATIC) is a WHERE condition that is independent of the rows you access. #Other 14 2 1 524
Article Robert Cemper · Apr 4, 2020 3m read Websocket Client IRIS internal IRIS 2010.1 brought us a new feature: %Net.WebSocket.Client As a continuation of my series of WS Clients I just couldn't resist to try it.Well, this is the result and it was rather simple in the end. After I succeeded in my personal fight against Windows Firewall ;-) You basically need to prepare 3 classes: #ObjectScript #InterSystems IRIS Open Exchange app 12 0 0 656
Article Robert Cemper · Apr 4, 2020 1m read Websocket Echo server IRIS In Caché you had an example of a WebSocket Server in namespace SAMPLESWith IRIS the samples are gone and require additional installation effort. So I refurbished the code with some useful additions: independent of namespace timeout control from client readable communication log This contains 2 classes: #Interoperability #Testing #InterSystems IRIS 12 0 0 654
Article Robert Cemper · Apr 3, 2020 1m read ...ToLogical / LogicalTo... Visualization A recent discussion made me aware that the documentation on DataType classes is excellent.http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...I just miss the visualization of the methods for Data Format Conversions. #Other 14 0 0 617
Article Robert Cemper · Dec 9, 2019 1m read SUDOKU demo A demo in traditional style COS This was written based on a previous trial in .XLSIt is far from being perfect. Rather a challenge forimprovement in all directions (code, interface, ...)So anyone feel invited to make it better. #Other 13 0 0 585
Question Robert Cemper · Oct 31, 2019 Unknown Licensing Message ? I find in my message.log an entry I've never seen before: 10/31/19-16:00:22:562 (9056) 0 InterSystems IRIS license file (iris.key) must be validated with License Server. What does it try to tell me?Is there any action expected? #InterSystems IRIS 7 5 0 253
Question Robert Cemper · Sep 12, 2019 Features of *ENSTEMP ENSTEMP was addressed already some time ago; Article: Preventing Globals From Getting Journaled (Continued from How do I Minimize My Journals) and is also in public documentationWhere InterSystems IRIS Stores Temporary Production Data Though I'd like to understand if this is just naming a non-journaled DBor are there also typical features of CACHETEMP / IRISTEMP related to it: automatic clean-up at system startup keeping Global Buffers in memory as long as possible late writing to the storage file In other words is it a 2nd, 3rd, .. fully feature blown IRISTEMP ? #Other 7 1 0 342
Question Robert Cemper · Sep 1, 2019 Durable %SYS Directory for Caché/Ensemble ? IRIS offers Durable %SYS Directory as a highly useful feature for working with containers.Before inventing the wheel once more I'd like to know if a similar feature also exists for Caché / Ensemble.Official documentation is quite silent about.Though I have some names in mind that might know more about ( @Luca Ravazzolo ? @Dmitry Maslennikov ? @Eduard Lebedyuk ? ) #Containerization #Docker #Caché #Ensemble 8 7 0 398
Article Robert Cemper · Jun 10, 2019 1m read more usefull Object Dump During testing your code you are often confronted with the need to examinethe actual content of an object. Either using ZWRITE or $system.OBJ.Dump()you get a picture of simple properties as "--- attribute values ---"while "--- swizzled references ---" are more confusing than informativeand with "--- calculated references ---" you are just left in the lurch. This small helper class allows you to dump an object to terminal ore.g in background to some stream for later review.By default, you see just properties with content, #ObjectScript #Tools #InterSystems IRIS 16 0 1 1K
Article Robert Cemper · Jun 5, 2019 1m read Using Interjob Communication (IJC) Earlier I've written about command pipes.This is the internal variant of a PIPE. To make this more tangible and visible for you I prepared a small example The scenario is to run a monitoring process that receivesinput from an unknown number of sensors. (Could be Lab equipment or similar.) #Other 12 0 0 430
Article Robert Cemper · May 30, 2019 2m read BackgroundJobs over ECP Running a Background Job using the JOB command is a well-known feature.Using ECP to distribute databases to several servers is also well-known.But using the combination of both to run a process on a different serverseems to be a rare case. Sure there are enough other ways to start a remote job, but the specialcombination with ECP where the application server starts a process on adata server without additional networking is worth to be remembered. #ECP #Other 13 0 1 638
Article Robert Cemper · May 29, 2019 1m read Simple Remote Server Control This example is extracted from a long-running installation.The purpose is to have simple monitoring of several servers at a rather primitive level.Just slightly more intelligent than a raw PING. But still easy to integrate.It avoids the overkill of information you are often confronted with while you are justinterested in the number of active processes or similar basic figures.The example shows a basic skeleton that might be easily filled by your real needs. It consists of 3 sections: #Other 13 0 2 563
Article Robert Cemper · Mar 26, 2019 2m read Synchronize data with DSTIME Other Sync-Tools just work from Caché/IRIS to Caché/IRIS.Synchronizing your data to some external DB requires some other solution. The solution is available in Caché/IRIS since quite some time and works excellent.^OBJ.DSTIME does the magic.https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=D2IMP_ch_current#D2IMP_C23869 #InterSystems IRIS Open Exchange app 13 0 2 994
Article Robert Cemper · Feb 8, 2019 2m read Client Websockets based CSP The Caché / Ensemble standard distribution contains in namespace SAMPLESa nice example of a CSP page consuming WebService as a Client.I have modified it not only to display the replies but to feed them back into a Global.I used the classic Hyperevent to achieve this. The replies end up as a log in global^WSREPLY.When there is no input anymore the page closes and goes away. There are 2 versions with visible and hidden display during operation.dc.WSCSP.reverseVerbose.cls and dc.WSCSP.reverseHidden.cls #CSP #ObjectScript #Caché #InterSystems IRIS 11 0 0 511
Article Robert Cemper · Feb 8, 2019 2m read Client Websockets based on Node.js It will demonstrate the wide range that is openend by making useof the power embedded in Node.js and its adapter to Caché, Ensemble, Health,..*Node / JavaScript have wide reputation to work as a WebSocket client.By using the Caché adapter it becomes easy to control it and to consume the results as aClient for WebSocket Servers and to collect the replies in Caché, Ensemble, .. I used node-v6.16.0-x64.msi and cache610.node as cache.node You provide a Global for input: #Node.js #Caché 14 0 1 846
Question Robert Cemper · Dec 20, 2018 Issues on Mixed Mirrors of IRIS vs. Caché I'd like to make you aware of a trap I just fell into. #Compatibility #Mirroring #InterSystems IRIS 13 1 0 552