go to post Dmitry Maslennikov · Apr 24, 2021 When I replied it was in Dockerfile Any switch to root in Dockerfile, should return back the original user irisowner back USER irisowner Or this way USER ${ISC_PACKAGE_MGRUSER}
go to post Dmitry Maslennikov · Apr 24, 2021 That’s interesting, somebody dislike that new ability? With this language server in fact, it’s possible to add the ability to compile ObjectScript code to any editor which got the support for Language Server Protocol, and it includes even vim/neovim, emacs, and some other editors. If you would like to add this to any supported editor and need help, contact me.
go to post Dmitry Maslennikov · Apr 24, 2021 Could you explain the term you used, Language Server? Language Server now used for editors. And I see no reactions to it in your article. And InterSystems already implemented real language server for VSCode, and I have implemented one more for any other editor.
go to post Dmitry Maslennikov · Apr 23, 2021 just set it to the local array or global, will sort it set arr("cba")="" set arr("abc")="" zw arr
go to post Dmitry Maslennikov · Apr 21, 2021 Some example of code in Go package main import ( "fmt" "os" "strings" "github.com/caretdev/go-irisnative/src/connection" ) func main() { var addr = "localhost:1972" var namespace = "%SYS" var login = "_SYSTEM" var password = "SYS" connection, err := connection.Connect(addr, namespace, login, password) if err != nil { println("Connection failed:", err.Error()) os.Exit(1) } defer connection.Disconnect() // Kill ^A connection.GlobalKill("A") // Set ^A(1) = 1 connection.GlobalSet("A", 1, 1) // Set ^A(1, 2) = "test" connection.GlobalSet("A", "test", 1, 1) // Set ^A(1, "2", 3) = "123" connection.GlobalSet("A", 123, 1, "a", 3) // Set ^A(2, 1) = "21test" connection.GlobalSet("A", "21test", 2, 1) // Set ^A(3, 1) = "test31" connection.GlobalSet("A", "test31", 3, 1) var globalFull = func(global string, subs ...interface{}) string { return fmt.Sprintf("^A(%v)", strings.Trim(strings.Join(strings.Split(fmt.Sprintf("%+v", subs), " "), ", "), "[]")) } var queryGlobal func(global string, subs ...interface{}) queryGlobal = func(global string, subs ...interface{}) { for i := ""; ; { if hasNext, _ := connection.GlobalNext("A", &i, subs...); !hasNext { break } var allSubs = []interface{}{i} allSubs = append(subs, allSubs...) hasValue, hasSubNode := connection.GlobalIsDefined("A", allSubs...) if hasValue { var value string connection.GlobalGet("A", &value, allSubs...) fmt.Printf("%v = %#v\n", globalFull("A", allSubs...), value) } if hasSubNode { queryGlobal("A", allSubs...) } } } queryGlobal("A") }
go to post Dmitry Maslennikov · Apr 21, 2021 Btw, this project is written in Go, and uses a freshly developed go-irisnative project, as a connector to IRIS. With Go I can read and change data directly in globals, execute SQL, and work with objects.
go to post Dmitry Maslennikov · Apr 21, 2021 As in Studio, in VSCode there is a command, View Others, with hotkey ctrl/cmd+shift+V
go to post Dmitry Maslennikov · Apr 20, 2021 Those symbols in any way do not exist in Windows-1251 at all. You can store it in CP866 or UTF-8 only
go to post Dmitry Maslennikov · Apr 20, 2021 Those are special symbols used to draw UI in textual interfaces and no way to get any readable text from it, it can be translated to the same symbols only, just in the different codepage.
go to post Dmitry Maslennikov · Apr 20, 2021 VSCode and Cache server can be far from each other, on different machines, so, it’s not as easy to implement. And as I said, it’s not a task for VSCode, it’s mostly a deployment task, which have to be done separately.
go to post Dmitry Maslennikov · Apr 18, 2021 I read the note, somebody will not read and will use it in production. Again, if you need root access in real-time inside the container, you doing something wrong. If you need to install anything, you have to do it with Dockerfile, if you need to change some system settings you have to do it in Dockerfile. The container is just to run a particular application inside, and it gets permissions to fit its needs. Docker containers completely different from Virtual Machines, and it's important to remember. One container one application, in our case it's IRIS. The state of the container does not matter at all, what's matters is what in the image. Container may die at any time for any reason, and its content has to be restored from the image. And your image has to be prepared for this case. If your delete the container and restart it, will break your application, that something wrong with it, and have to be fixed with Dockerfile. And even, any Dockerfile can be configured with HEALTHCHECK, which has to check periodically the state of the running application inside, and with control from outside, like with Kubernetes, it will sacrifice container with no expected state and will start it the state from the image. And basic IRIS image produced by InterSystems has it as well. So, if you just stop IRIS inside, the container will be destroyed after a while. Again container it's not a virtual machine, and in any size of organizations, should not be any restrictions to having only direct access inside.
go to post Dmitry Maslennikov · Apr 18, 2021 This is a completely very bad idea. You have several issues with your Dockerfile, for instance Hardcoded password for irisowner and even for root IRIS starts with root, instead of irisowner user Administrators of the running instance should always have access from the Docker host, or through Kubernetes. In container should appear only what supposed to be in a Production environment, no backdoors of any kind. Pinging @Luca Ravazzolo for comments
go to post Dmitry Maslennikov · Apr 16, 2021 Demo server means, that it was already well prepared to be ready for demo. If you need any such changes, you have to change it in the original repo, and it should be re-deployed with new settings. Consider this technique as Infrastructure as code
go to post Dmitry Maslennikov · Apr 16, 2021 To be able to restart IRIS from inside, you in any way will need some independent process on the OS level outside of IRIS, which will control stopping and starting. If saying about doing it in the container. Most of the changes which would need to restart it, have to be prepared in Docker build process, so, it should be as part of the base image. Docker supports command to restart, and it's doing it as one command, and it will not delete state during the restart. So, I would say it's a preferable way.
go to post Dmitry Maslennikov · Apr 16, 2021 How many files are you trying to import this way? Unfortunately VSCode not so good for such a task, and even any editor. In fact, the best way will be to do it directly with Caché. Just using $system.OBJ.LoadDir, will do it much better.
go to post Dmitry Maslennikov · Apr 16, 2021 So, in this case, In fact, if you are not going to migrate that data to IRIS in the end, I see no reasons to use IRIS for such data. And microservices has written in some other languages, really a better way. Would it be possible to synchronize the date from other services with IRIS? So, your patient data still will be there, and backed up in IRIS, with FHIR endpoint. So, in this case, you can use IRIS Production to do this particular task.
go to post Dmitry Maslennikov · Apr 16, 2021 I mean, would not it be easier to migrate your data to existing realizations of FHIR offered by InterSystems. And you will not need to implement your API at all.
go to post Dmitry Maslennikov · Apr 16, 2021 Microservices are supposed to run separately with an ability for scalability, failure recovery, and be independent of the running environment. And the major side effect of it, microservices are language-independent. And IRIS production, not the platform for microservices at all. Just only one production, limited by one server, if you will need to add some more items to it, you have to update the entire production. Yes, it will be possible to scale services when needed, but it still will be limited by the resources of the server where the production running. There are no easy ways how to automatically recover Production after failure. So, nowadays, would recommend trying Kubernetes as a platform for microservices, each microservice could be written in any supported by IRIS language (nodeJS, .Net, Python, Java). With IRIS itself running in the mirror for high availability. Speaking about HealthCare application, why would you even decide to implement some own way, when FHIR already covers most of the things you would need?
go to post Dmitry Maslennikov · Apr 15, 2021 That's interesting, but did you try to discover the differences, not only in the number of rows? I would suggest, that the issue in time formats. Try to play with different modes in SMP
go to post Dmitry Maslennikov · Apr 12, 2021 I won't recommend using squashing, as it makes caching image layers useless. Have a look at this nice tool, which may help to discover why your final image is so big. btw, one thing I noticed working on macOS, is that the final image much bigger than expected, while the same Dockerfile on Linux, produces an image of a reasonable size.