Clear filter
Announcement
Derek Robinson · Sep 26, 2016
Click here to view our OAuth 2.0 OverviewInterSystems created this video as a high-level overview of OAuth 2.0 technology, geared toward developers looking to learn the basics of OAuth 2.0. It will teach you how OAuth 2.0 works, what roles are involved, what benefits it can provide, and how InterSystems Caché can be used with this technology. This is a very nice and well produced video. But it jumps into explaining about how OAuth works without every stating what OAuth is. It assumes that whoever watches the video knows what OAuth is.It would be nice to have a paragraph or two just explaining what this application is.It is not my intention to throw stones, but this seems to be a pattern in InterSystems documentation, explaining how something works without first explaining what it is. I guess they assume if they explain how it works, we will understand what it is. Not necessarily so.I know I am going to get hammered for this, but it is true. Hi Mike, thanks for your feedback! The audience we were targeting with this video mostly included developers looking to understand how OAuth 2.0 works, with an assumed understanding of what it generally is. But you raise a good point, and we've added a short description on the course page above the video.While it isn't a very thorough dive into the what, it provides a little background. Ultimately, our goal was to answer the how and why when it comes to OAuth 2.0. Thanks for your input! The new introduction is exactly what I had in mind, thank you.
Article
Mark Bolinsky · Jan 29, 2016
** Revised Feb-12, 2018
While this article is about InterSystems IRIS, it also applies to Caché, Ensemble, and HealthShare distributions.
Introduction
Memory is managed in pages. The default page size is 4KB on Linux systems. Red Hat Enterprise Linux 6, SUSE Linux Enterprise Server 11, and Oracle Linux 6 introduced a method to provide an increased page size in 2MB or 1GB sizes depending on system configuration know as HugePages.
At first HugePages required to be assigned at boot time, and if not managed or calculated appropriately could result in wasted resources. As a result various Linux distributions introduced Transparent HugePages with the 2.6.38 kernel as enabled by default. This was meant as a means to automate creating, managing, and using HugePages. Prior kernel versions may have this feature as well however may not be marked as [always] and potentially set to [madvise].
Transparent Huge Pages (THP) is a Linux memory management system that reduces the overhead of Translation Lookaside Buffer (TLB) lookups on machines with large amounts of memory by using larger memory pages. However in current Linux releases THP can only map individual process heap and stack space.
The Problem
The majority of memory allocation in any Cache' system is the shared memory segments (global and routine buffers pools) and because THP does not handle these shared memory segments. As a result THP are not used for shared memory, and are only used for each individual process. This can be confirmed using a simple shell command.
The following is an example from a test system at InterSystems which shows 2MB THP allocated to Cache' processes:
# grep -e AnonHugePages /proc/*/smaps | awk '{ if($2>4) print $0} ' | awk -F "/" '{print $0; system("ps -fp " $3)} '
/proc/2945/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 2945 1 0 2015 ? 01:35:41 /usr/sbin/rsyslogd -n
/proc/70937/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70937 70897 0 Jan27 pts/0 00:01:58 /bench/EJR/ycsb161b641/bin/cache WD
/proc/70938/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70938 70897 0 Jan27 pts/0 00:00:00 /bench/EJR/ycsb161b641/bin/cache GC
/proc/70939/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70939 70897 0 Jan27 pts/0 00:00:39 /bench/EJR/ycsb161b641/bin/cache JD
/proc/70939/smaps:AnonHugePages: 4096 kB
UID PID PPID C STIME TTY TIME CMD
root 70939 70897 0 Jan27 pts/0 00:00:39 /bench/EJR/ycsb161b641/bin/cache JD
/proc/70940/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70940 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 1
/proc/70941/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70941 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 2
/proc/70942/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70942 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 3
/proc/70943/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70943 70897 0 Jan27 pts/0 00:00:33 /bench/EJR/ycsb161b641/bin/cache SWD 7
/proc/70944/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70944 70897 0 Jan27 pts/0 00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 4
/proc/70945/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70945 70897 0 Jan27 pts/0 00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 5
/proc/70946/smaps:AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
root 70946 70897 0 Jan27 pts/0 00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 6
/proc/70947/smaps:AnonHugePages: 4096 kB
In addition, there are potential performance penalties in the form of memory allocation delays at runtime especially for applications that may have a high rate of job or process creation.
The Recommendation
InterSystems recommends for the time being to disable THP as the intended performance gain is not applicable to IRIS shared memory segment, and the potential for a negative performance impact in some applications.
Check to see if your Linux system has Transparent HugePages enabled by running of the following commands:
For Red Hat Enterprise Linux kernels:
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
For other kernels:
# cat /sys/kernel/mm/transparent_hugepage/enabled
The above command will display whether the [always], [madvise], or [never] flag is enabled. If THP is removed from the kernel then the /sys/kernel/mm/redhat_transparent_hugepage or /sys/kernel/mm/redhat/transparent_hugepage files do not exist.
To disable Transparent HugePages during boot perform the following steps:
1. Add the following entry to the kernel boot line in the /etc/grub.conf file:
transparent_hugepage=never
2. Reboot the operating system
There is a method to also disable THP on-the-fly, however this may not provide the desired result as that method will only stop the creation and usage of THP for new processes. THP already created will not be disassembled into regular memory pages. It is advised to completely reboot the system to have THP disabled at boot time.
*Note: It is recommended to confirm with your respective Linux distributor to confirm the methods used for disabling THP. One clarification comment I would like to add is the use of "traditional" HugePages through the process of boot-time reservation is still highly recommended for optimal performance . This process is detailed in the Cache' Installation Guide:
http://docs.intersystems.com/cache20152/csp/docbook/DocBook.UI.Page.cls?KEY=GCI_unixparms#GCI_unixparms_huge_page
I think further clarification is also needed, You mention that various Linux distributions introduce this with the 2.6.38 Kernel. However this starts with RHEL 6.0/Centos 6 .0 General Availability release. 6.8 is currently only kernel 2.6.32-642 and it has this available in it. Additional information about it's availability in version 6.0 can be found in the RHEl slideshow page 2 http://www.slideshare.net/raghusiddarth/transparent-hugepages-in-rhel-6 and on page 102 of the redhat 6.0 technical documentation https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/6.0_Technical_Notes/Red_Hat_Enterprise_Linux-6-6.0_Technical_Notes-en-US.pdf . I have not researched when this was rolled into fedora prior to 2.6.38 but as fedora tends to be a precursor to RHEL, it might also have been before kernel 2.6.38.It might be better to suggest that people run the check to see if it is enabled or not and that they should not be surprised if they are running a Linux with a kernel less than 2.6.38that does not support it. Mark, may I ask your for some clarification? You wrote:As a result THP are not used for shared memory, and are only used for each individual process. What's a problem here? Shared memory can use "normal" huge pages, meanwhile individual processes - THP. The memory layout on our developers' serber shows that it's possible.# uname -aLinux ubtst 4.4.0-59-generic #80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux# cat /sys/kernel/mm/transparent_hugepage/enabled[always] madvise never# tail -11 /proc/meminfoAnonHugePages: 131072 kBCmaTotal: 0 kBCmaFree: 0 kBHugePages_Total: 1890HugePages_Free: 1546HugePages_Rsvd: 898HugePages_Surp: 0Hugepagesize: 2048 kBDirectMap4k: 243808 kBDirectMap2M: 19580928 kBDirectMap1G: 49283072 kB# ccontrol listConfiguration 'CACHE1' directory: /opt/cache1 versionid: 2015.1.4.803.0.16768 ...# cat /opt/cache1/mgr/cconsole.log | grep Allocated...01/27/17-16:41:57:276 (1425) 0 Allocated 1242MB shared memory using Huge Pages: 1024MB global buffers, 64MB routine buffers# grep -e AnonHugePages /proc/*/smaps | awk '{ if($2>4) print $0} ' | awk -F "/" '{print $0; system("ps -fp " $3)} '.../proc/165553/smaps:AnonHugePages: 2048 kBUID PID PPID C STIME TTY TIME CMDcacheusr 165553 1524 0 фев07 ? 00:00:00 cache -s/opt/cache1/mgr -cj -p18 SuperServer^%SYS.SERVER... Hi Alexey,Thank you for your comment. Yes, both THP and traditional/reserved Huge_pages can be used at the same time, however there is not benefit and in fact systems with many (thousands) of Caché processes, especially if there is a lot of process creation, has shown a performance penalty in testing. The overhead of instantiating the THP for those processes at a high rate can be noticeable. Your application may not exhibit this scenario and may be ok. The goal of this article is to provide guidance for those that may not know which is the best option to choose and/or point out that this is a change in recent Linux distributions. You may find that THP usage is perfectly fine for your application. There is no replacement for actual testing and benchmarking your application. :)Kind regards,Mark B- Of course their is no replacement to actual testing. What I am trying to say is that had I started reading the article straight through instead of skimming and jumping to the how to check if it was on, I probably would have read at the top "various Linux distibutions introduced Transparent HugePages with the 2.6.38 kernel' and stopped because my kernel is less than that. I really think that the current wording will lead people whom work at shops that are still rolling out new builds in RHEL or Centos 6 not to use the ideal settings. Maybe a complete re-arrange of the first three paragraphs into two or three paragraphs where the RHEL 6,... might make this clearer. With a sentence that reads something like, "This was first introduced in Red Hat Enterprise Linux 6, SUSE Linux Enterprise Server 11, and Oracle Linux 6; and then later introduced in may other Linux variants with the 2.6.38 kernel.Additionally it might make things clearer if you where to mention that for It's setting the item in brackets is what is the current setting as in my redhat the lines reads . [always] madvise never.It might also be useful to people on this to mention what to do in the case where the transparent Huge pages enabled is set to madvise . Hi Alexander,Thank you for you post. We are only relying on what RH documentation is stating as to when THP was introduced to the main stream kernel (2.6.38) and enabled by default as noted in the RH post you referenced. The option may have existed in previous kernels (although I would not recommending to try it), it may not have been enabled by default. All the documentation I can find on THP support in RH references the 2.6.38 kernel where is was merged feature.If you are finding it in previous kernels, confirm that THP are enabled by default or not. That would be interesting to know. Unfortunately there isn't much we can do other than to do the checks for enablement as mentioned in the post. As the ultimate confirmation, RH and the other Linux distributions would need to update their documentation to confirm when this behavior was enacted in the respective kernel versions. As I mentioned in other comments, the use of THP is not necessarily a bad thing and won't cause "harm" to a system, but there may be performance impacts for applications that have a large amount of process creation as part of their application.Kind regards,Mark B- I will revise the post to be more clear that THP is enabled by default in 2.6.38 kernel but may be available in prior kernels and to reference your respective Linux distributions documentation for confirming and changing the setting. Thanks for your comments. I do not claim to be a Huge Pages expert, but I have been doing some more reading on Transparent Huge pages and the madvise option. The following is untested and un-verified.It seem like if you are running Kernel 2.6.38 or newer that you may be able to use the madvise instead of never for the Transparent Huge Pages setting. According to http://manpages.ubuntu.com/manpages/trusty/man2/madvise.2.html the 2.6.38 kernel’s madvise has a MADV_HUGEPAGE option, that allows applications to enable Transparent Huge pages, If no MADV_* flag is thrown then it defaults to MADV_NORMAL or no special treatment. I believe this means that transparent huge pages should be off by default. If you are using RHEL 6 or probably most of its derivatives even though they have a madvise setting for their Transparent Huge pages settings it appears RHEL did not backport the MADV_HUGEPAGE Option to their madvise/Kernel (At least 2.6.32-504.81 and lower), so you have to set the box’s transparent Huge pages to never. (Man page in RHEL 6 with kernel= 2.6.32-504.8.1 lacking a MADV_HUGEPAGE and https://groups.google.com/forum/#!topic/tokudb-dev/_1YNBMlHftU Bradly Kuszmaul’s 5/8/13 post.)RHEL 7 & it’s derivatives are running the 3.X kernel and that man pages show a MADV_HUGEPAGE option so it looks like you can set the box to madvise and it will not use transparent huge pages.Once again I am not a Transparent Huge Pages expert and have not done any testing to verify the validity of this. Please update this a bit as RHEL 8.6 keeps track of wether Transparent Huge pages is enabled or not in cat /sys/kernel/mm/transparent_hugepage/enabled and not the redhat_transparent_hugepage that older version did.
Announcement
Janine Perkins · May 27, 2016
Find out about the various ways you can learn Caché. Check out the Learn Caché for Developers Resource Guide to access online courses, classroom courses, videos and tutorials. Learn More.
Announcement
Janine Perkins · Sep 6, 2016
Take this course to learn how to use additional features of data transformations beyond creating a simple data transformation. Learn to: Add a foreach loopCreate and use utility functionsCreate and use lookup tablesUse countingCreate and implement a subtransformationAdd a code actionLearn More.
Announcement
Janine Perkins · Mar 22, 2016
Learn the basics about Caché objects.Caché Objects IntroductionThis course provides an overview of Caché classes, methods, and interaction with the Caché database by creating, saving, loading and deleting objects. Learn More.
Announcement
Janine Perkins · Mar 31, 2016
Learn about tools available in DeepSee; including dashboards, the Analyzer and the Artchitect.Learn why you may use DeepSee including sample use cases to emphasize key features. We will define the basic architecture so you have a base understanding of the product and we will explore the major tools of DeepSee - dashboards, the Analyzer, and the Architect - to define at a high-level what the tools do and why you would use them. Learn More.
Announcement
Evgeny Shvarov · Jul 24, 2017
Hi, Community!
Recently we announced Developer Community Meetup in Cambridge, MA. Let me describe what is it.
Meetup it's a one evening event where you can enjoy some sessions by presenters (today InterSystems engineers, tomorrow you can be a presenter) and chat with local developers and InterSystems developers, engineers and product managers (depends on who is in town) and discuss your problems, experience, and success with InterSystems technologies.
InterSystems would provide the place, technical sessions, some food and beverages.
We think the Developer Community would benefit from it. We can make the event a regular thing and introduce it in different cities and countries. The success of the event depends on whether you come.
D you want InterSystems meetup?
See you on 8th of August in Cambridge Innovation Center!
Question
Soufiane Amroun · Sep 8, 2017
Hi world :) , i've a question about editing an ensemble rule:how can i edit fields in a BPL rule with programming (i need to modify target value for a condition send label ). until now i can edit only a condition value. thank you for your collaborations Hi SoufianeThe graphical rules editor used in the UI generates a class, and an xml block in that class, to represent your rules.If you want a target to be different, based on some code, why don't you create multiple conditions for the different targets you have, then, base each condition on some database setting.The rule itself remains static (except when you need to define a new target) and it will show all the possible paths that can be taken by the rule.Then.. programatically...you change that value in the database which is behind all the conditional statements you have and thus - programatically, you effect a target change.The other alternative is to use a Business Process. You can send your message to be handled and routed by a Business Process in BPL. The process, can programatically resolve the name of the target component in a context variable (let's say, context.TargetName). After context.TargetName has been programatically resolved, make a BPL Call action, and for the Call action's property "target" don't hardcode a value.Instead supply "@context.TargetName", and the message will be sent to whatever the value of context.TargetName is at that point in time.Steve
Article
AndreClaude Gendron · Sep 19, 2017
It is with great pleasure that the CIUSSS de l'Estrie - CHUS is sharing the mocking framework it developed and presented at the InterSystems Summit 2017. I will update this post with more detailed instructions in the next few weeks but I wanted to share the code and presentation quickly :
https://gitlab.com/ciussse-drit-srd-public/Mocking-Framework
I hope you'll find this useful for your unit testing. We are using this extensively for the last 2 years and it really works well! The repo is public, feel free to submit enhancements!
Do not forget to enable the %UnitTest in your SMP. Instructions are online at http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=TUNT_ExampleTestPortal
Kind regards
André-Claude Gendron Hi Andre Claude,Thank you for sharing your framework, and for great presentation at Global Summit. I'm looking forward to see your detailed article in Developers Community!We have a documentation available online, you can link directly to it: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=TUNT_ExampleTestPortalAlso, video recording of Andre's presentation and PDF of his slides are available at https://learning.intersystems.com/course/view.php?id=664 A Mocking Framework video is available on the InterSystems Developers YouTube Channel. Old thread, but here's the link to that video:https://www.youtube.com/watch?v=Bn5VPKAUs0U(start at 3:50) Hi @AndreClaude.Gendron! What a wonderful tool! Do you want to share it on InterSystems Open Exchange? Sure ! Is there any "how-to" ? Here it is!
And the video
If is only on Gitlab or you have a Github mirror too? Hi Andre-Claude,
Thank you for the contribution! We've begun to fold the use of this Mock framework into our daily activities.
I know this post is rather old, but I do have a question. Some of the classes in the repository use classes that are not present in the repo any where (Tests.Fw.Mock.CIsEqualObjectParamValidator for example). If you are willing, would you be able to commit those to the GitLab site?
Again, thank you for sharing this with the rest of us. Sorry about that, I will commit them in the next few days or perhaps tonight. At the time they were not added to the repo because of dependencies but I'm sure I can arrange something. Plus I'll add the latest development we did at CIUSSSE-CHUS. I'm glad someone else uses it !
Kind regards,
AC Hi,
I know it is a old thread but I thought I'd ask if there are any updates to this framework? The repo is 4 years old and I'm looking for a solution for a mocking framework atm. I noticed also that some classes are missing like Jonathan Lent stated. Is there any possibility for you to update the repo with the latest changes if there are any? I'm working on unit tests and trying to find out a way to mock different business hosts and I found this framework to be a promising one.
Cheers,Kari Yes the mocking framework is still under active development here. I'm sorry there are missing classes in the provided example. I'll completely forgot about my reply a year ago... Yes testing business hosts works very well with it. I'll try to arrange something today and I'll reply here. If I don't, reply back ! I just remembered, I fixed this but was waiting for a review. I merged it this morning.
https://github.com/GendronAC/InterSystems-UnitTest-Mocking/pull/3
(code was sent to github per InterSystems request)
Latest code is here : https://github.com/GendronAC/InterSystems-UnitTest-Mocking
Let me know if you need something else. Have a look at the CTestCustomPassthroughOperation.cls class Hi @AndreClaude.Gendron !
What about publishing it on OEX? There will be more exposure! Here is the documentation!
Thanks in advance!
Hi,
Thank you very much for such a quick reply! I will take a look at the repo you provided and will see if I can get the framework up and running on my end.
Thanks again and have a good day!
//Kari Hi @AndreClaude.Gendron !
Raising again this topic - could you please share your project on Open Exchange? Thanks in advance!
Announcement
Evgeny Shvarov · Feb 23, 2016
Hi, Community!
There are only six days left to win InterSystems Developer Community MVP prize.
As it was announced in addition to Free Registration on InterSystems Global Summit winner gets 4 nights stay in the Arizona Baltimore, Waldorf Astoria Resort.
We measure contribution to Developer Community on valuable posts and comments and prepared special leaderboard built on InterSystems DeepSee.
By default, it shows all the members. We added the filter to the dashboard to show leaderboard without members who are InterSystems employees.
So here is current leaderboard without InterSystems members:
Win MVP and come to InterSystems Global Summit 2016! Go Dmitry! I would add "Go Scott!" If you change filters to February scope there is following picture for top 20:Where are your new cruel questions? ) I've been very sick the last week :( The original post talked about accounting for "number of votes a post received". How is this reflected in these numbers? We have a formula which summarize votes for posts, votes for comments.It also gives some score for comments in your post.It counts points also for your comments in other posts - e.g. for your answer on the question. Oh. Hope you are doing well now.
Question
Tiago Ribeiro · Feb 25, 2016
Good morning people.The use of TDD is currently being reference for software delivery more confiabilitade and quality.At the company I work developing web applications , we create tests for method class in a deteminado package and running the steps that the documentation recommends:1 export the tests classes to a predefined folder.2- And running the test ( D ## class (% UnitTest.Manager ) .RunTest (,"/nodelete" )It is a lot of work to do the export and run these tests would have a resource that we could only run the tests without the need for export ? You may call RunTest with /noload parameter, but you still have to set a valid directory as a value in ^UnitTestRoot
Set ^UnitTestRoot = "C:\UnitTests"
Do ##class(%UnitTest.Manager).RunTest("mytests:MyPackage.Tests", "/noload/nodelete")
Or so, here you can specify: suit, class and method if you want
Do ##class(%UnitTest.Manager).DebugRunTestCase("mytests","MyPackage.Tests","","")
This call does not load any classes from any directories nor does it delete any classes from Caché. And executes the tests contained in MyPackage.Tests. The optional third argument is for specifying an individual test method within the test class to execute. Dmitry, Thanks. Different people are going to have different workflows for unit testing, but I would encourage you to settle on a way to get those tests out of the database. I'd be nervous about running tests in a namespace that contains my only copy, since %UnitTest is designed to load and delete by default.
If you're using Studio with the source control hooks, it works pretty well to write the tests in a development namespace, then run them in a test namespace. Hi, Jon.Yes, I here use different developer namespace, one for testings.I will go about hooks of control sources, Thanks. Indeed. Presumably the "load and delete" defaults were a design decision based on the model of running unit tests elsewhere. That seems relevant for a build server, but not so friendly for the developer who you're trying to persuade to code the tests in the first place. Yes, Studio the source control hook facility can be your friend here provided you're prepared to spend enough time getting intimate with it.
Article
Evgeny Shvarov · Apr 15, 2016
Hi!
Please find all the source code Global Summit 2016 Sessions and Experiences in following GitHub repositories:
Document Data Model experience.
InterSystems iKnow experience.
Internet of things experience.
Global Summit Sessions - folders inside this repository consist sources (if any) for related session.
Codes are in UDL form which is native to Atelier IDE.
Here is small guide how you can check out this project into your Atelier:
Let's see how to load code directly from GitHub URI.
Open Atelier. Go to File -> Import -> Git -> Clone URI
2. Specify URL for repository and press Next
3. Choose 'master' branch and press Next
4. Check in 'Import all existing Eclipse projects after clone finishes' and press Finish
5. Open your project, right-click on connection -> 'Change connection', select the project, specify your existing Server connection and Namespace
6. Right-click on project -> 'Compile Project'
Loading from repository by zip:
1. Download and unpack '.zip' from repository
2. File -> Import -> General -> Existing Projects into Workspace
3. Specify path to directory with unpacked files from repository
4. Check in 'Copy projects into Workspace' option, press Finish
5. Open your project, right-click on connection -> 'Change connection', select the project, specify your existing Server connection and Namespace
6. Right-click on project -> 'Compile Project'
I want to bump this post up because it is really useful (thanks Evgeny) and people definitely need to be aware of this great resource for getting the example source!
Announcement
Evgeny Shvarov · Jun 15, 2017
Hi, Community!I'm pleased to introduce John Murray as a new Developer Community moderator.John is constantly posting helpful articles and answering questions showing the great knowledge and experience in InterSystems technology.Recently John kindly agreed to become InterSystems Developer Community moderator and joined InterSystems moderators team!Here are some details John wants to share:I am Senior Product Engineer at George James Software (http://georgejames.com), where I have worked for nearly two decades. I have specialized in InterSystems technologies and their predecessors ever since my IT career began almost thirty years ago.I develop and support tools covering design, development, and deployment including:• Yuzinji – code metrics, structure and dependency analysis.• Umlanji – UML visualization of classes.• Deltanji – rule-driven versioning, process control, deployment and auditing across the software cycle.• Serenji – rich code editing and unrivaled debugging, including at Ensemble message level.We also provide consulting, programming and support services. Our tools are designed specifically for people working with InterSystems products. We are immersed in the technology we build for, and we use the tools we create. Our services focus specifically on the InterSystems community.I like to learn new things, solve problems, and assist people. So I'm pleased to have been invited to become a DC Moderator.I live in London, UK.Thank you and congratulations, John! Congratulations John! Congratulations, John.To be a moderator is a big responsibility, so I wish you a lot of patience. John, thanks for all your valuable contributions. I can say first hand that John is very patient and thorough. Good move! Good News Indeed! Sounds great!!Congratulations John! As others have said, and I'd like to reaffirm, John's not just got the knowledge, experience, expertise - he's got the heart too. Glad to hear that! I have met John more than 15 years ago in Cambridge when he kindly helped me with MSM-Workstation issues... Yes, he was a MSM authority too :) Congratulations, John!
Announcement
Evgeny Shvarov · May 1, 2017
Have you ever thought about leveraging IIS (Internet Information Services for Windows) to improve performance and security for your Caché web applications? Are you worried about the complexity of properly setting up IIS?See the webinar Configuring a Web Server presented by @Kyle.Baxter, InterSystems Senior Support Specialist. Learn how to install IIS, set up it up to work with the CSP Gateway, and configure the CSP Gateway to talk to Caché.If you have not subscribed to our Developer Community YouTube Channel yet, let's get started right now. Enjoy!