Hi, could you explain a bit more? What are you trying to do? Do you use Docker?
- Log in to post comments
Hi, could you explain a bit more? What are you trying to do? Do you use Docker?
It's a bit difficult to answer correctly because I still not sure what are you doing, I would try ''''aaa''aaa'''' or ''''aaa''''''aaa'''' or even ''''aaa''''''''aaa''''
Are you sure that you not overlooked something in the Documentation?
How about .Net Caché eXTreme
If you still sure that it is not enough. You can create own, based on any already realized ways, for example on C++ binding
If so, do not forget to mark the answer as accepted.
Yes, they do, but only keynote. And InterSystems streamed keynote, at least in 2015, not sure about last one.
I would agree, It may look quite expensive. But I just compared it with some other conferences like Oracle, Apple, Google, and I found that all of them cost quite close, even usually bigger.
I want to add, something. I'm Russian, and for us, it cost even much more expensive than for you. And unfortunately, last three years, I participated GlobalSummit and I think I was alone from Russia, except IS. But anyway, if I am not mistaken, last Global Summit participated by more than 200 people from 23 countries, but most of these people from the US.
So strange query. But anyway if you want to get double single quotes, should double each one. So, it should be ''''
Something like this.
Call USER.SP('select * from Sample.Person where SSN=''''aaaaa'''' ','0','S')
Where do you need it, in Web/ZEN or in terminal?
Right, finally you just should open Atelier perspective.

As far as I know, you can install any number of versions of Eclipse as you want. I'm using now the latest version of Eclipse Neon.3 with the latest beta version of Atelier, on macOS Sierra.
Very simple way to check is everything configured well. Just open this url in any browser.
http://localhost:[port]/api/atelier/
It should return some JSON
If it does not work, you should look at Apache configuration.
Can you put here your apache config file?
maybe something like this
USER>set list="ªÅÊÈÉxÃļ²m" USER>for i=1:1:$l(list) s c=$a(list,i)-100+(i*2) write $c(c) Hello World!
or another way a bit easier to decode, I think
USER>set list="Iemlp Xosle!" USER>for i=1:1:$l(list) s c=$a(list,i)+(i#-2) write $c(c) Hello World!
I don't know how close my version of this method to the original, but it should be something like this. But I think, your version a bit bigger.
ClassMethod Main(cfg As %SystemBase, mode As %String) As %String
{
set trantabla=cfg.trantable
set str=""
set list=$listbuild(72,101,108,108,111,32,87,111,114,108,100,33)
for i=1:1:$listlength(list) {
set n=$listget(list, i)
set hex = $zhex(n)
set str = str _ "\u" _ $extract("000" _ hex, *-3, *)
}
set str=$zconvert(str, mode, trantable)
set:$length(str)'=12 str="????? ??????"
quit str
}
Btw, it was a good idea, to deploy code. But I think bad idea to hide original string in $ListBuild
set list=$lb(72,101,108,108,111,32,87,111,114,108,100,33)
Because, such static variables, stored as is in OBJ code, and could be easily recognized.
USER>zzdump list 0000: 03 04 48 03 04 65 03 04 6C 03 04 6C 03 04 6F 03 ..H..e..l..l..o. 0010: 04 20 03 04 57 03 04 6F 03 04 72 03 04 6C 03 04 . ..W..o..r..l.. 0020: 64 03 04 21 d..!
Not possible, due to data in the file stored sequentially. If you want to insert some data in any place, it means you should move all next data on the disk too. So, the only way it is a new file.
Func works perfectly
USER>set rs=##class(%SYS.ProcessQuery).PPGFunc(,$j) USER>do rs.%Display() key name value blocks demo 123 demo(123) hello 2 Rows(s) Affected USER>write $zv Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2017.1.1 (Build 111U) Wed May 17 2017 15:49:57 EDT
2. How about editing performance. Sometimes it works so slowly when just typing a code.
4. Only macro completion or completion in XData also will be added?
Is there any plans to open sources of Atelier or some parts?
It is not possible to past my result here, it will not work after that. But my result is 22.
Attached source with this method
in expression mode it become 19
Error says "function must return a value". Did you try to return some value in called method Add?
Yes, should be divisible by 3.
For integrity checking only ^Integrity tool from InterSystems. And it should check database periodically, but it is not enough just to start periodically checking database. Backing up database also should be used, as well, as journalling for all time since the latest full backup was planned. Every day checking or every week depends on how big is your database, how much time it takes.
Repair, it is another story, I don't know any automatic tools which can do such task. It is only manual work, with some knowledge about the structure of Caché Blocks. I did it multiple times. For one customer I repaired database from corrupted backup. They used the same disk for database and backups, and after issues with this disk, one of the backups appeared to have more valuable data available than the database, but they lost some working days anyway. For repair database, the very useful tool is ^REPAIR from InterSystems. But sometimes even this tool could say that there is no database in this file. Once I succeeded with repairing database when some blocks were changed in their position, and the first block was deleted, and ^REPAIR said it is not a database.
Just for debugging, you can use this command
Do LOG^%ETN("some message")It will collect all variables, on every stack level. And you can find this logs in SMP by System > System Logs > View Application Error Log > Application Error Dates > Application Errors.
But be careful, this is only for debugging, because creating a log, may take a long time.
I would suggest that you working on frontend side in the browser, and call some REST API written in Caché or not, it does not matter. So, your code in JavaScript.
var data = getDateFromRest(); // you got some data from server, no so matter how you did it.
I suggest that your data is array, so, you could use map function and it contains something like this [{ "title": "car", "currency": "USD", "cost": "10000" }]
var newData = data.map(el => { return { name: el.title, value: el.cost + el.currency } })will give you new array [{ "name": "car", "value": "10000USD" }]
Next time, when you have a question, please create it from the main page, not as a comment to the post. In this case, you may get the response much quicker.
And to you question, on which side you have to do such transformation? Do you call some external REST API from Caché, or do you call some API written in Caché from your WebApplication which worked in Browser, or another way?
I have not used UnitTests before but looks like, you can just analyze ^UnitTest.Result global, by latest index.
USER>set sc=##class(%UnitTest.Manager).DebugRunTestCase("", "MyPackage.Tests","","TestAdd")
===============================================================================
Directory: /opt/cache/dev/tutorials/UnitTestEx/
===============================================================================
(root) begins ...
MyPackage.Tests begins ...
TestAdd() begins ...
AssertEquals:Test Add(2,2)=4 (passed)
AssertNotEquals:Test Add(2,2)'=5 (failed) <<==== **FAILED**
(root):MyPackage.Tests:TestAdd:
LogMessage:Duration of execution: .000045 sec.
TestAdd failed
MyPackage.Tests failed
Skipping deleting classes
(root) failed
Use the following URL to view the result:
http://192.168.56.140:57774/csp/sys/%25UnitTest.Portal.Indices.cls?Index=5&$NAMESPACE=USER
Some tests FAILED in suites:
USER>zw ^UnitTest.Result(^UnitTest.Result)
^UnitTest.Result(5)=$lb("2017-05-31 12:08:01",.0013,"MacBook-Pro.local","CACHE","Cache for UNIX (Apple Mac OS X for x86-64) 2016.2 (Build 736U) Fri Sep 30 2016 11:56:58 EDT","USER","","")
^UnitTest.Result(5,"(root)")=$lb(0,.001218,"","There are failed TestCases")
^UnitTest.Result(5,"(root)","MyPackage.Tests")=$lb(0,.000554,"","There are failed TestMethods")
^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd")=$lb(0,.000045,"","There are failed TestAsserts")
^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd",1)=$lb(1,"AssertEquals","Test Add(2,2)=4")
^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd",2)=$lb(0,"AssertNotEquals","Test Add(2,2)'=5")
^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd",3)=$lb(1,"LogMessage","Duration of execution: .000045 sec.")I think from this global, will be quite easy to extract needed information to any format.
I don't know how you call Caché method from Jenkins, but anyway you can use $SYSTEM.Process.Terminate in Caché script to exit with an exit status. Something like this.
set tSC=##class(%UnitTest.Manager).DebugRunTestCase(....) if 'tSC do $SYSTEM.Process.Terminate(,1) halt
I suggest that you may use csession or cterm to call Caché code, then you should get exit code and send it to Jenkins, which will be recognized by Jenkins as an error and will fail the job.
Please, provide how you call Caché from Jenkins?
I would give you a list from fastest to slowest.
Sure, I forgot to fix to this first Dockerfile. This needed because Docker have some caching mechanism for layers. And when each command become as a different layer, in every next build, Docker tries to optimize this process, and skip all unchanged layers. So, 'ccontrol start' could be skipped and next commands fail after that.
I fixed now in the article.