go to post Nigel Salm · Nov 4, 2021 Hi Juuso Are you running the ##class(Ens.Director).StopProduction() in the same namespace where your production is running? If you are logging into terminal and your default namespace is not the same as the namespace where the production is running then you will get this error especially if your default namespace is "USER" which is not an Ensemble enabled namespace. use zn "{namespace_name}" to move to the correct namespace if you are uncertain of the namespace name then you can call the utility d ^%CD It will prompt you for a namespace. Type in ? <enter> and you will be displayed a list of namespaces. Select the namespace you need to be in and then run your code. Nigel
go to post Nigel Salm · Nov 4, 2021 OMG, I had completely forgotten about those pocket guides. I had 3 or 4 of them and as far as I know, I still have them in a crate of paperwork in the loft in my house in Johannesburg. And you are right, $next() was a valid ANSII function until replaced by $order(). I stand corrected and the video clip was a magnificent 'extra' to emphasise your "solon Archives". Made me grin from ear to ear.
go to post Nigel Salm · Nov 2, 2021 Hi Joel, you are correct however the ansii standard used $order however a couple of vendors supported $next. I was sitting on the ansii committee at the time when we were deciding whether we would ratify both and the final conclusion that there was need for only one function and that function name would be $order. On the surface $next would seem to be the more logical choice and unfortunately it was so long ago I cant remember the final reasoning that decided on $order.
go to post Nigel Salm · Nov 2, 2021 Hi Michael, what aspects of ObjectScript do you find frustrating. I'd be interested to get the views of developers new to ObjectScript for two reasons. 1) Ip have worked with Fortran, Pascal, Basic, APL, Cobol, DOS, C#, JS and now Python and R and, with the exception of APL, I generally found that most languages consist of a set of commands, functions, datatypes, operators, and though the actual name of a command may vary between languages I fundamentally understand that there will be an if/ifelse/else, for, try/catch, foreach, construct equivalent in every language. Once you've absorbed the language elements then its just a case of expressing the logic of your function using the elements of that language. There are some things in ObjectScript such as $query, execute, indirection, the ability to treat a string as a numeric (write ! Write "15 Apples" + "25 Pears" w " Fruit") are peculiar to ObjectScript and I have found nothing similar in other languages. I make heavy use of things like $classmethod(), $classnsme(), $property(), as I write a lot of abstract classes which, when inherited into a host of other classes, I don't always know which class I am in but I know that it has a class method "MyMethod" so I will write code such as Set tSC=$clasdmethod($classname(), "MyMethod", {param1}, ...) So, over the years I have managed to get ObjectScript to express all the logic I have ever needed (short of Mathematical modelling and Data Science which historically has not been an issue as I have written transactional applications or Ensemble interfaces. Now that we have applications out there with 30+ years of structured and unstructured data stored in them I can't wait for the opportunity to build iFind indices. IKnow entity relationships and using IRIS analytucs, especially python, R and their large libraries of analytical functions and turn my attention to say a LabTrak database and start looking for correlations between histology or cytology observations, the patient demographics and some external datasources of lead levels asbestos, socio-economic backgrounds and see what correlations there may be between those dimensions and the likelihood of a patient with certain key dimensions developing a type of cancer, or diabetes and so on. 2) Ii have been learning a lot if new stuff recently, Ubuntu, Docker, Node.js. Python, since I became the father of 4 baby Pi 4B's and in learning all of these new technologies I came across a host of Cheat Sheets and I was struck by how useful they have been and how, in a sense, they are almost works of art. So I have set my heart on developing a set of ObjectScript, Ensemble Adapter, Cache Studio, System Management Cheat Sheets for IRIS and given the sheer volume of stuff that I could include I am keen to understand what I include and what I leave out and understanding where you have been frustrated may help me focus on what would be included and what is best left for the full documentation. Nigel
go to post Nigel Salm · Nov 2, 2021 Yes. You're right, it should be Who, not How. I'll see if I can edit the article.
go to post Nigel Salm · Oct 5, 2021 When data in the global buffer pool is written back to the database ach block is encrypted and stored. When data is retrieved it is decrypted as it is pulled into the Global Buffer Pool. When data is pulled from the Global buffer pool into your process it remains unencrypted. So there is an implicit cost in encrypting and decrypting the data blocks but this only happens in that single place of retrieval and storing. I can't remember what the cost is relative to not using encryption but it is documented. The same applies to data moving between IRIS and a web page and any tcp based communications
go to post Nigel Salm · Sep 18, 2021 Fortran would be my guise. Fortran is getting a bit of a makeover and there is renewed interest in it. I was reading somewhere the other day and they mentioned that fortran and some of the earliest languages are making a comeback because of their lowlevel interaction with devices and hardware. An art we have long forgotton but there is renewed desire for people to get to the low bits and bytes and fortran is one way
go to post Nigel Salm · Sep 14, 2021 I have been reading a pdf called the Zen of Python which I am going to upload in a seperate article post. The particle lists all of the language constructs in Python and as I was working my way through the document it occurred to me to write a corresponding Zen of ObjectScript which would give the ObjectScript equivalent of each Python example. And by and large much of Python is earily similar to ObjectScript but then I came across some things in Python where two python statements does some really wierd thing and to mimic the.behaviour in ObjectScript would take several lines of code and in all likelihood would be slower than the python code. I'm tempted to whet your appetite here but you'll have to wait until I've done the entire article. I have to confess that some of the python functionality is very clever from an ideological point of view but I struggled to think of a scenario where I would need such functionality in real life code but there again one of the examples of how objectScript treats strings that I have 10000 times over the years is the statement Write "15Apples" + "25Pears" 40 To explain how objectScript treatsthe expression as a numeric 'plus' on the two strings and I giggle quietly as the classroom of developers who know basic or JS expect the result to be either a concatenation or a data type mismatch but I often use the expression If '+variable where the variable is either a non 0 numeric or "" especially if variable is passed as a parameter that in the method parameter list defaults the Parana to "" to avoid have to use $get() Oh ok, I give in, write the following statements in a python program Import print message = 'It was a bright cold day in April, and the clocks were striking thirteen.' count = {} For character in message: count.setdefault(character, 0) count[character] = count[character] + 1 pprint.pprint(count) Note that thirteen.' is on a new line It is a nice piece of functionality and I suspect I could write it in two lines of ObjectScript and though I have to tested the execution time I suspect that ObjectScript would be fractionally faster, which if the message was a far longer string
go to post Nigel Salm · Sep 14, 2021 As a matter of interest why do people use #dim? The only time I use #dim is if I am using $classmethod() where I am referencing a classmate that I will only know at runtime, for example I may have several classes that all inherit from some superclass and the sub classes at to all intents and purposes identical and I want intellisense in which ever IDE I am using to list the possible properties or methods because I use long property names which I don't always remember when I come to reference those properties after the $classmethod() and once I have written the code and tested it I remove or comment out the #dim. Is there any other compelling reason to use it?
go to post Nigel Salm · Sep 14, 2021 I never knew about SetZEOF(), I would have done it in a try/catch and in the catch check to see if catch ex {set tSC= $s($system.Status.GetErrorText(ex.AsStatus())["<ENDOFFILE>":$$$OK,1:ex.AsStatus())} Quit tSC And if I were still using $ztrap then I would test $ze["<ENDOFFiLE>" But I don't use $ztrap anymore Nigel
go to post Nigel Salm · Sep 14, 2021 I never knew about SetZEOF(), I would have done it in a try/catch and in the catch check to see if catch ex {set tSC= $s($system.Status.GetErrorText(ex.AsStatus())["<ENDOFFILE>":$$$OK,1:ex.AsStatus())} Quit tSC And if I were still using $ztrap then I would test $ze["<ENDOFFiLE>" But I don't use $ztrap anymore Nigel
go to post Nigel Salm · Sep 13, 2021 Hi I wrote an article for the tech article competition called "Why I love ObjectScript and why I think I might love Python more". It discuses my 35 years of working with MUMPS, then joining ISC as Cache was introduced and my journey through all of the major stages in the evolution of Cache through to IRIS as well as ISC as a company. One of the problems for many companies who use IRIS is the shortage of experienced ObjectScript developers. On the one hand that is advantageous for those of us who have that experience but on the other hand it does mean that I am part of a very narrow niche of specialists. Python is an extremely popular language. It ranks #1 on many lists of top programming languages. It is an interpreted language just like ObjectScript and most importantly it can handle sparse multidimensional arrays i.e. global's and so it is a natural fit to add to our catalogue of language support. R and Julia are the other two. Python has a vast library of programs and functions covering everything from the mundane through to complex mathematical modelling and data science. My view is that for IRIS developers this is just another option available to us along with ObjectScript, SQL, Direct Global Access that we can deploy in the applications we develop where we use the tool that best suits the task we are solving. iSC have embedded other languages such as Basic and MVBasic into their platforms with varying degrees of success. I was around when we were trying to convert Microsoft developers to move to Cache and likewise MVBasic for PICK developers and at the time it made sense to offer scripting languages that made the transition to Cache more attractive but the ultimate aim was to get those developers to adopt ObjectScript. We did the same with support for TSQL for SQL Server users. Where Python, R and Julia are different is that there is no intention to convert developes in those languages to ObjectScript, rather the aim is to introduce these languages to handle the sorts of logic and processing that ObjectScript is not so good at. Given the choice of extending ObjectScript to handle the mathematical underpinnings of Data Science, ML and AI it made far more sense to bring the languages with a proven track record in those areas into our stable of Native Language Support. Nigel
go to post Nigel Salm · Sep 13, 2021 Hey, congratulations guys I was really impressed with your applications. I really liked Dmitri's app for its use of Google Data Studio and Jojn Pan's Alert Dashboard due to its immediate relevance to customers with many Interfaces. All of the entries were commendable as this was as daunting challenge and to even enter required a lot of practical knowledge of areas of IRIS technology that many of us haven't had the opportunity to work with in our day jobs as application developers. But I firmly believe that Analytics, Data Science, ML and AI are the key differentiators in our careers going forwards. Well done all of you. Nigel
go to post Nigel Salm · Sep 5, 2021 Hi i have a Pi from GM with the ubuntu lts server and iris 2020.4 image which i downloaded. It works fine. Just two questions. 1) if i connect the pi to my router with an ethernet cable it succesfully generates an ip address but when i remove the cable the ip address is lost? How do i fix this. I tried internet sharing via usb but that did nothing at all. 2) if i want to upgrade iris to iris for health 2021.1 and i have downloaded the community version if i for h 2021.1 how do i upgrade the installed 2020.4 I have a second pi on which i loaded ubuntu desktop . I have been able to install various apps such as dbeaver, docker, and some smaller utilies. I have community versions of iris, iris for healh and iris ml all 2021.1 build 215. The documentation says that if i unpack these files i will find an image file but i dont. I get a json file and a whole load of directories with garbled names. 1) do i have to load these into docker? And if so how? 2)is it possible to install the products without using docker? I.e. my base o/s is ubuntu and in the wrc distributions for containers i found these files. If i don't want to use docker will the container versions still work? 3) If i don't use docker should i just use the arm64 kits from the iris, i for h etc download sites rather than the container site 4) can i run an instance of each simultaneously without docker? Nigel
go to post Nigel Salm · Sep 4, 2021 I am busy with mine. It is fiendish. Can a quine, having produced a copy of its own source code, delete itself and recreate itself using the output it generated?
go to post Nigel Salm · Aug 28, 2021 I think i have managed to get the report server installed. The licence details in Discord helped. And the note about not using ! Character in passwords was useful as all my passwords tend to have an ! In them. I am waiting for my laptop to complete its cleanup and space free up and then i should be able to test it through the smp. Thanks Nigel
go to post Nigel Salm · Aug 22, 2021 Ha Ha Ha Robert, I love you! Sure Robots can do simple things, they can do very mundane and repetitive things but they can do tasks with extreme accuracy and when it comes to things like Pharmacy Robotics they could be programmed to question the validity of a prescription if it is aware that there is an adverse drug interaction between two drugs on a script (sure, the pharmacy app may be able to do that to but generally pharmacy systems are built to capture a script issued by a doctor and the general attitude of most pharmacists (human) is that if the doctor has ordered something then "Doctor Knows Best" With regards to the Robot kits such as the one I am building, it is based on a system called STEM, Scientific - Technology - Engineering - Mathematics and it is used in an educational context to teach everyone fro kids through Adults about Engineering Robotics, Programming (Python) and Mathematics. I am all in favour of system like this and I wish that I had been born 50 years later than I was because I could be learning things at 10 years old that I am, at 58, only getting to learn now. Furthermore, Python is a gateway to other scientific and analytical paradigms such as Data Science, ML and AI and as I am not expecting the robots to take over the world just yet (though I am not convinced that that would be such a bad thing given how badly the Humans are managing this planet and the future of mankind). You should watch a program called "AlphaGo" which is about a team of AI developers wh took on the challenge of developing a program to play Go, that ancient game of black and white stones on a grid board. You should hear the Go believers and their view on Go being almost a philosophy rather than just a game. Great documentary, thought provoking.