Dmitry Maslennikov · Jan 18, 2017 go to post

You can find answer on your question in the documentation.

The Caché Java Binding is Deprecated

Java Persistence Architecture (JPA) is the recommended persistence technology for complex object hierarchies in Java projects. Caché and Ensemble currently support JPA 1.0 and 2.0 via the Hibernate implementations of the JPA specifications. See “Using the Caché Hibernate Dialect” in Using Caché with JDBC.

Extreme Event Persistence (XEP) is the recommended persistence technology for high-performance simple to medium complexity object hierarchies in Java projects. See “Using eXTreme Event Persistence” in Using Java with Caché eXTreme.

Dmitry Maslennikov · Jan 18, 2017 go to post

You can try to export all from MySQL, and import to Caché, with command

Do $SYSTEM.SQL.DDLImport("MySQL","_SYSTEM","C:\export.sql")

You can also do import in the System Management Portal. Or migrate data from ODBC source.

Dmitry Maslennikov · Jan 18, 2017 go to post

It is not a problem for Caché, you use x86 and limitation from architecture.

You have to upgrade your server to 64bit, and then you may use even hundreds of gigabytes of memory.

Dmitry Maslennikov · Jan 16, 2017 go to post

Looks like, you don't know how this technology works.

The server will send content after all content is ready to send. Browser shows page, just after loading all the page, or partially, if this page is too big.

To do what you want, you should have some code on client side, which will ask the server for the new lines by Ajax. Or with WebSocket, just get new lines from the server. But it means that process which generates such logs, should be different to the session process.

Dmitry Maslennikov · Jan 13, 2017 go to post

In current stage, we do not have any Caché code, yet. But I don't see any troubles here. You may use base Ensemble image, and run it on GitLab environment, or on your own server, via gitlab-runner and preinstalled Ensemble. With GitLab-CI, possible lots of different ways.

Dmitry Maslennikov · Jan 13, 2017 go to post

Even more interesting that, GitLab has their own docker registry. And you can even build your own image for ci with ci.

We build Ensemble container. You can look at archive of my project ensemble.zip . Simple image with Ensemble, without Samples and Docbook databases with minimal security.

Dmitry Maslennikov · Jan 13, 2017 go to post

Good choice, I'm already using gitlab in our company, with closed sources. In our process, I even deploy to our own windows server. Our application on Angular 2.

it is our gitlab-ci.yml, I've removed deploy stage.

image: node:5

stages:
  - test
  - build

cache:
  key: "$CI_PROJECT_NAME/$CI_BUILD_REF_NAME"
  paths:
    - ./node_modules/

before_script:
  - export PATH=$PATH:./node_modules/.bin/
  - npm install

tslint_job:
  stage: test
  tags:
    - linux
    - docker
  script:
    - ng lint

test_job:
  stage: test
  tags:
    - linux
    - docker
  script:
    - karma start --browsers PhantomJS --single-run

build_job:
  stage: build
  tags:
    - linux
    - docker
  artifacts:
    expire_in: 1 week
    paths:
      - dist/*
  script:
    - ng build --aot-prod --bh "./"
Dmitry Maslennikov · Jan 12, 2017 go to post

There are not such methods, we only have function which converts delimited string to $listbuild format and back. And you can do it in this way, without any looping, but only if you already know how many items you have.

USER>set string="a,b,c,d,e,f"

USER>set list=$lfs(string,",")

USER>zw list
list=$lb("a","b","c","d","e","f")

USER>set $lb(array(0),array(1),array(2),array(3),array(4),array(5))=list

USER>zw array
array(0)="a"
array(1)="b"
array(2)="c"
array(3)="d"
array(4)="e"
array(5)="f"

Dmitry Maslennikov · Jan 12, 2017 go to post

You can reset all changes which you did, when you start newly created container from an image. Use docker run with a flag --rm to remove container after exit.

Dmitry Maslennikov · Jan 12, 2017 go to post

What do you want to fix? Locked access or change security level?

Mostly when you run some server application inside a container, it means that no needs any changes of settings, while this container is up because all that changes may disappear after restart container form a new image.

I would recommend changing security level in the installation process. You can do it with some environment variables described in the documentation. Just add this lines in the Dockerfile before cinstall_silent command

ENV ISC_PACKAGE_INITIAL_SECURITY="Locked Down" \
    ISC_PACKAGE_USER_PASSWORD="secretpassword"

And your installation will be secured.

Read more about initial security settings in the documentation.

Dmitry Maslennikov · Jan 10, 2017 go to post

Yes, and cloud of tags, does not show that hierarchy. And when I search needed tag by typing while create new post, too.

So, hierarchy here looks useless.

Dmitry Maslennikov · Jan 10, 2017 go to post

Sure, leading zero, so, fixed code.

set hashHex="" for i=1:1:$l(hash) set hashHex=hashHex_$translate($justify($zhex($a(hash,i)),2)," ","0")

The difference only in output format. InterSystems returns just string of bytes, while online generator returns hex codes for that bytes, which is much better for reading by human. So,  you may quickly check it with command zzdump. And you may notice, that zzdump shows the same hash you got from online generator.

USER>set hash=$system.Encryption.SHAHash(512,"test")

USER>zzdump hash

0000: EE 26 B0 DD 4A F7 E7 49 AA 1A 8E E3 C1 0A E9 92         î&°ÝJ÷çIª..ãÁ.é.
0010: 3F 61 89 80 77 2E 47 3F 88 19 A5 D4 94 0E 0D B2         ?a..w.G?..¥Ô...²
0020: 7A C1 85 F8 A0 E1 D5 F8 4F 88 BC 88 7F D6 7B 14         zÁ.ø áÕøO.¼..Ö{.
0030: 37 32 C3 04 CC 5F A9 AD 8E 6F 57 F5 00 28 A8 FF         72Ã.Ì_©­.oWõ.(¨ÿ

And this simple line of code, may help you to convert this hash to hex hash.

USER>set hashHex="" for i=1:1:$l(hash) set hashHex=hashHex_$zhex($a(hash,i))

USER>write hashHex
EE26B0DD4AF7E749AA1A8EE3C1AE9923F618980772E473F8819A5D494EDB27AC185F8A0E1D5F84F88BC887FD67B143732C34CC5FA9AD8E6F57F5028A8FF

USER>write $zconvert(hashHex,"L")
ee26b0dd4af7e749aa1a8ee3c1ae9923f618980772e473f8819a5d494edb27ac185f8a0e1d5f84f88bc887fd67b143732c34cc5fa9ad8e6f57f5028a8ff

In my experience such behavior I saw when we had so many writes to the disk, and write daemon queue only grown up.

In first I would launch mgstat tool from InterSystems. But it should be started before the freezing system, and for quite long time, with at least 5 seconds interval, better if it would be 1 second. Then you should look at some columns such as WDphase, PhyWrs, WDQsz.

What you should look for. 

  • WDphase -  should not be all the time in the 8th phase.
  • WDQsz - from time to time should fall to zero
  • PhyWrs - may help to calculate a "real" speed of writing to the disk. And compare with expected speed.
  • WDPass - time to time should be increased, if WD still at the same cycle so long time, it may cause a freezing system.

Unlicensed trial version, have only 1 license unit available. So if you have already opened Studio, connected to this server, this license unit already busy. You may try to close Studio, and all other tools, such as terminal, and System Management Portal, and try again.

Counts only lines which appear in the final "INT" code.  If you working with MAC code, you may open INT by pressing Ctrl+Shift+V in the Studio. And then you can go to this needed line wit dialog called by Ctrl+Shift+G, Where you should put 'label+line' or just '+line'. If you Studio says, that no other sources, you should check flag "Keep Generated Source Code" and add compiler flag "k" in the Studio options and recompile your routine.

Did you install 2016 version on the same machine where you had Cache 2014? For me, it looks like, the error on AutoCAD or Windows side, not on Caché side. But anyway I think you should ask for help in WRC.

Plase add some more details, what do you mean by slowly?

Do you work remotely? Is it still slowly if connect locally on the server?

You should look at the requirements part at this download Atelier page. Where you will see that Caché should be licensed.

Well, there are some different reasons to do it:

  • optimization network traffic for readers. You should remember, that you wrote the public article for people all around the world, with different quality of their network connection. Some people may even disable images for loading.
  • in slow internet connection, you may see empty spaces for your images, while it will be loaded.
  • it is a bit difficult to recognize your terminal images due to the white background, the same as for page. If you put it as a formatted text, it will have the different background.
Dmitry Maslennikov · Dec 29, 2016 go to post

I would recommend to use a bit modern way

set rs=##class(%Routine).RoutineListFunc("ABC*.int")
while rs.%Next() {
  write !,rs.Name
}
Dmitry Maslennikov · Dec 28, 2016 go to post

Tani, please change all terminal samples and samples of code from pictures to plain formatted text.
 

Dmitry Maslennikov · Dec 26, 2016 go to post

InterSystems still support only SQL-92. While WITH appeared only in SQL-99. So, Caché doesn't support it.

Dmitry Maslennikov · Dec 23, 2016 go to post
w #,*27,"[32m" s $lb(tw,th,twi,c,tp,l)=$lb(2,4,8,40,4,24) while (l-th>tp) { f st=0:1:th-1 { s y=tp+st,x=c-(tw/2),w=tw-1 s:w ts(y)=$lb(x,w) w *27,"[",y,";",c-(tw/2),"H/",*27,"[",y,";",c+(tw/2),"H\" s tw=twi/th*2+tw } s tp=tp+th,tw=tw-twi } w !,*27,"[0m","Press any key to exit" f { w *27,"[",y,";",x+1,"H",$j("",w) f i=1:1:y\4 { w *27,"[",$r(10)+30,"m",*27,"[",y,";",$r(w)+x+1,"Ho",*27,"[1;1H"} s y=$o(ts(y),-1,d),$lb(x,w)=d i w<5 {s y=$o(ts(""),-1) h 0.3} r q:0 q:$t } w *27,"[0m"
Dmitry Maslennikov · Dec 20, 2016 go to post

Before doing such task, you should know a bit more about technologies which you going to use. PDF - it is a binary format, so, you can't just copy text from PDF. Some of the files may contain a text, some just a picture with text. And to get plain text from PDF, you have to use some third party OCR software. One of the leaders is ABBYY FineReader it is proprietary, but if you need you can find some products for free.