go to post Evgeny Shvarov · May 10, 2018 Hi, Justin!Also, if you are using try/catch blocks, you may conside use Log() method of %Exception class, which literally does the call of LOG^%ETN: { try { $$$TOE(sc,StatusMethod()) } catch e { set sc=e.AsStatus() do e.Log() } See the related discussion.
go to post Evgeny Shvarov · May 8, 2018 Updated the agenda for the meetup - the new session by @Sergei Shutov has been introduced: Automatically configure a customized development environment. The session covers the approach and demo of creating a private development environment from source control, and how changes can be automatically pushed downstream to build and test environments. Show the use of open source Git hooks, %Installer, and Atelier, with Jenkins and automated Unit Tests.
go to post Evgeny Shvarov · May 3, 2018 Hi, Wilfredo!In addition what guys suggested I recommend to try ClassExplorer, which allows to see the source code of a class in a web app. You can download it from this github repo.
go to post Evgeny Shvarov · May 1, 2018 Why? Can't class methods be called from another namespace? Or it is easier with routine?
go to post Evgeny Shvarov · Apr 29, 2018 Hi, Georgiy! You also can try isc-dev which provides the way to export/import classes, routines, and DeepSee components into the target folder.
go to post Evgeny Shvarov · Apr 26, 2018 Eduard, great project!Please, convert the source code into UDL! ;)
go to post Evgeny Shvarov · Apr 25, 2018 True! Nice hack ;) Thank you, Vitaly!But obviously, you cannot use this calls in a code, because dc.test.1 can be dc.test.2 etc...
go to post Evgeny Shvarov · Apr 24, 2018 Thanks, Dan! That's helpful. And from that class descriptor/dispatch table, can we say in general that call: do foo^utils(p1) would be always faster than do ##class(My.Utils).foo(p1) assuming that the code in foo() is same?
go to post Evgeny Shvarov · Apr 24, 2018 Oh, thanks, Dan! That's interesting. So, practically speaking: Class My.Utils { ClassMethod Foo { /// } } Works faster than: Class My.Utils Extends %RegisteredObject { ClassMethod Foo { /// } } Right?
go to post Evgeny Shvarov · Apr 19, 2018 Hi, Steve!Could you please deploy classes on a Github or any other public repository?
go to post Evgeny Shvarov · Apr 14, 2018 Build git diff.Import new/modified classes.Delete deleted classes.Interesting class, thanks! What do you use for deleting from the list?Do you have any "automatic" check that classes in Namespace are equal to the classes in repo?
go to post Evgeny Shvarov · Apr 14, 2018 Thank you, Robert! So, if I want to put $H to a %Date property I do: set s.Date=$H do s.%Save() for %TimeStamp property to set current date/time, I do what?
go to post Evgeny Shvarov · Apr 13, 2018 Eduard, do you think it makes sense to DELETE everything in a namespace and then import code from checkout?Consider DeveloperA deleted ClassB from repo and from his local NamespaceADeveloperB checkout repo and with only classA but still has ClassB in his local NamespaceB. What will delete ClassB in DeveloperB's working system?The only "automatic" solution I see here is to check out and import classes into clear or new Namespace.Or never delete classes, only "deprecate" it
go to post Evgeny Shvarov · Apr 11, 2018 Hi, Alessandro!Thanks again for such valuable content on BI Architecture with DeepSee. Analytics server configuration gets more and more sophisticated with a lot of manual operations. Do you plan to introduce a script which will convert a "usual" server to a "ready for DeepSee Analytics" server in a one-run? That would be fantastic!
go to post Evgeny Shvarov · Apr 11, 2018 Hi, Alessandro!Thank you for the useful article!Having Primary and Analytics servers is very important, the main reason being to avoid performance problems on either server. Please check the documentation about Recommended Architecture.What is the type of mirroring is recommended? Should it be synchronous mirror or async, or disaster recovery?
go to post Evgeny Shvarov · Apr 7, 2018 Wow. That's interesting. I'm curious what will happen if a class was created in Caché and then modified in IRIS (e.g. with new property) - would it be another global for a new property? Could you check that?I think if you created class first in Caché 2017.2 and preserve the storage definition within a class in version control you should be good with IRIS - I mean IRIS shouldn't change the storage of your 2017.2 class.
go to post Evgeny Shvarov · Apr 7, 2018 Hi, Peter!I would warn you of NOT including storage information in Git (or any other CVS). It is the must to keep class storage definition within source control.Consider you have a system in production where you have class A with properties P1 and P2 with data.And you developed a new version of a product with the optimization when you don't need P1 anymore and delete it. And you added a new feature which needs to add property P3 You deploy new class A with P2 and P3 properties on a production system. Storage would be generated upon class definition and you will get the following:All reads from P2 would deal with former P1 data.All reads from P3 would read former P2 data (yes, you will get P3 initialized by former unexpected P2 data).So you'll get some unexpected behavior and bugs with this.Solution:keep the storage definition within a class and in Git.Maybe delete a property is a bad practice but sometimes we are doing that.HTH