go to post Robert Cemper · Aug 11, 2021 Thanks a lot @Nigel.Salm5021 !This matches my expectations I have from "Robotics".Some solutions, that are used in real life.Robots running around, serving tea, playing chess or tic-tac-toe running on 2 or 4 feet or barking and singing are just toys to me. Nice for kids, nice for movies but totally useless in real life. Just a mimic copying humans or pets.
go to post Robert Cemper · Aug 6, 2021 Class Documentation of %Library.RoutineIndex tells me:property Type as %String [ Required ]; The type of routine, this will be one of: MAC - Macro routine, content is stored in ^rMAC global INT - ObjectScript routine, content is stored in ^ROUTINE global INC - Include file, these may be included from a MAC routine, content is stored in ^rINC BAS - Cache Basic routine, content is stored in the ^ROUTINE global MVB - MultiValue Basic routine, content is stored in the ^ROUTINE global OBJ - Object code, content is stored in ^rOBJ global Class Documentation of %Library.Routine explains the storage and tells me: • classMethode GetRoutineGlobals(ByRef Names As %String) as %Status Return list of globals where routine and class information is stored.Returns Names="ROUTINE,rBACKUP,rINC,rINCSAVE,rINDEX,rMAC,rMACSAVE,rMAP,rOBJ,oddDEF"Here is some documentation on the format of the routine globals. ROUTINE - Native .INT COS code, generated from .MAC, or generated from classes. When compiled generates .OBJ code.ROUTINE(Name,0)=timestamp when last savedROUTINE(Name,0,0)=# lines in routineROUTINE(Name,0,1...x) = Source Lines in routineROUTINE(Name,0,"GENERATED")= 0/1 whether routine is generated or nativeROUTINE(Name,0,"INC",IncludeFileName1)=Timestamp when last include file last savedROUTINE(Name,0,"INC",IncludeFileName2)=Timestamp when last include file last savedROUTINE(Name,0,"SIZE")=# bytes in routineROUTINE(Name,0,"LANG")=language mode ROUTINE(Name,"MAC")=Timestamp of .MAC code when last saved if generatedrBACKUP(Name,Type,version) - backup of ^ROUTINE, created by the command Merge ^rBACKUP(rtn,type,nextverersion)=^ROUTINE(rtn) where type="INT/MVI/BAS" rINC - Native .INT or macro code, compiled into .MAC when included with #include directiverINC(Name,0)=timestamp when last savedrINC(Name,0,0)=# lines in include filerINC(Name,0,1...x) = Source Lines in include filerINC(Name,0,"SIZE")=# bytes in include filerINC("ZZ","P") - Meta data used for precompiling include files rINCSAVE - Backup of ^rINC, created by the command Merge ^rINCSAVE(rtn,nextver)=^rINC(rtn,0) rINDEX - Index of .OBJ, .INT, and .MAC routinesrINDEX(Name,"OBJ/MAC/INC")=$lb(Time compiled,Size)rINDEX(Name,"INT")=$lb(Time compiled,Size,Generated 0/1) rMAC - Native .MAC Macro code which when compiled generates .INT coderMAC(Name,0)=Timestamp when last savedrMAC(Name,0,0)=#lines in routinerMAC(Name,0,1...x) = Source Lines in routinerMAC(Name,0,"SIZE")=# bytes in routine rMACSAVE(Name,Type,version) - backup of ^rMAC, created by the command Merge ^rMACSAVE(rtn,nextver)=^rMAC(rtn,0) rMAP - Debug map used by the debugger and for error trappingrMAP(Name,"INT","MAC",offsets)=$lb(debuginfo)rMAP(Name,"MAC","INT",offsets)=$lb(debuginfo) rOBJ - Compiled .INT coderOBJ(Name,"INT")=timestamp of .INT code when compiledrOBJ(Name,0...n)=Compiled object code oddDEF - Source code for classesoddDEF($zcvt(Name,"U"),....)=source code from class. Note that all of the other odd* nodes are meta data describing the class, and can be recreated by compiling the class. The rINDEXCLASS and rINDEXSQL nodes also get recreated when compiling the class. so you may either do a query or just look into the globals directlythe sequence MAC -> INT -> OBJ isequivalent to modified -> modified - > compiled
go to post Robert Cemper · Aug 6, 2021 No doubt, that it is a great environment for what I classify as ARTISTS.But consider the maintenance of such ARTWORK.It is a painful to impossible exercise to find and educate someone to replace a lost ARTIST.Think of the masterpieces of the Italian Renaissance whether in sculpture or in painting.We just don't understand the incredible technique they used.Most famous case: Leonardo Da Vinci's "Last Supper" in Milan.It is broken and just a shadow is left. Up to now, nobody was able to fix it in an acceptable way
go to post Robert Cemper · Aug 5, 2021 except if ... As %String(COLLATION = "EXACT"); But rebuild of indices is still a must or good practice
go to post Robert Cemper · Aug 3, 2021 Thanks for the DOWN VOTE, anonymous voter.It confirms my initial suspicion that someone may dislike my projection of future
go to post Robert Cemper · Jul 31, 2021 Special performance requires a special rating. I was really impressed
go to post Robert Cemper · Jul 31, 2021 That's in fact happening by separating Globals-DB from Routine-DB in the namespace definition.Those globals are visible in any DB but they are used only for RoutineDB with a kind of implicit routine mapping. (ages old and implemented shortly after "Big Bang") Once the Routine-DB is clean and isolated just copy the full DB or use $system.OBJ.Export(....) As example of this implicit mapping a view of my ^ROUTINE in namespace DEMO
go to post Robert Cemper · Jul 30, 2021 create a new DB and list all 32 system elements in DB viewROUTINE => .intodd* => obj stuff, and all r* for various others
go to post Robert Cemper · Jul 29, 2021 I'd suggest GBLOCKCOPY as it operates @ DB level and doesn't care about namespace
go to post Robert Cemper · Jul 23, 2021 still another variant that I would prefer set str=""for ... { set str=str_myval_","}set str=$e(str,1,*-1) And BTW: $ZH is much easier to handle than $now()
go to post Robert Cemper · Jul 23, 2021 I don't think ObjectScript might be lost.It will just fade out of applications development into "specials".Though the question. "Why to write applications INSIDE a DB environment at all?"still remains open and unanswered.
go to post Robert Cemper · Jul 23, 2021 Thank you @Alexey Maslov !This sequence is the best illustration I could wish of "the priests know what to do"It's nothing that the average developer of a business application needs.
go to post Robert Cemper · Jul 22, 2021 %Library.Date and %Library.Time are both DataType classes typically used to define Properties.The values are stored as integers according to $HOROLOG formatThey have its MINVAL and MAXVAL as any other numeric data type
go to post Robert Cemper · Jul 21, 2021 Thank you @Herman Slagman !I like your suggestion and would fully support it if ISC would take that turn.You mentioned ignorance and you are right. I'm full with you.Though I still see another more dangerous hurdle to pass:- Understanding the concept. Applying the concept. Teaching the concept.I just fear there might not be enough qualified developers available to execute it.Seeing the actual situation on my side of the globe I wouldn't expect to find enough experts.
go to post Robert Cemper · Jul 21, 2021 Whatever you do it affects the operational machine as you have to read through the whole Table/Global For Table it can be a simple SELECT * FROM TABLE with the option to select columns of interest For Global use $system.OBJ.Export(<globalname>.GBL,<filename>) as XML. Of course, if you have a Shadow instance of your operational machine you can do it there and avoid the load on the primary machine.Eventually, you can run there all analyses without export at all.
go to post Robert Cemper · Jul 20, 2021 I don't have a real favorite. - for similar changes in multiple records, I use SQL in SMP, rarely also $system.SQL.Shell() from terminal- for single changes, I use Global Edit in SMP and direct access in terminal equally- for special objects I often write my class related customized edit method
go to post Robert Cemper · Jul 19, 2021 Thanks for the input. (I was waiting for it)If someone goes for speed I'd suggest C or Assembly Language That's where ultimate speed lives.As long as speed is available in the cloud for a few $$$ more. It's only interesting by principles not in reality.The key - in my opinion - is to break the chains of a rarely known scripting language compared to others.