{"id":712,"date":"2014-07-31T00:01:06","date_gmt":"2014-07-31T07:01:06","guid":{"rendered":"http:\/\/dojotoolkit.org\/blog\/?p=712"},"modified":"2023-03-11T08:13:40","modified_gmt":"2023-03-11T16:13:40","slug":"case-study-hpcc-systems","status":"publish","type":"post","link":"https:\/\/dojotoolkit.org\/blog\/case-study-hpcc-systems","title":{"rendered":"Case study: HPCC Systems"},"content":{"rendered":"<p>The large companies that use Dojo are widely known. This series features lesser known users of Dojo, and their stories. This time, we interview Gordon Smith from <a href=\"http:\/\/hpccsystems.com\">HPCC Systems<\/a>, a subsidiary of <a href=\"http:\/\/www.lexisnexis.com\/risk\">LexisNexis RISK Solutions<\/a>.<\/p>\n<h2>Q: How did you first learn about Dojo?<\/h2>\n<p>A: Through Google \/ Stack Overflow.  I suspect my &#8220;discovery&#8221; of Dojo was a bit different to the norm, as prior to 2013 I had never really done any Web Development.  Up until then I was predominantly a C++ Developer, some Java and a smattering of C#.  Initially I wanted to knock together a single page proof of concept, consisting of a code editor (<a href=\"http:\/\/codemirror.net\/\">CodeMirror<\/a>), a result view (HTML Table) and an &#8220;activity graph&#8221; (ActiveX Control) and wanted something that would handle the layout, resizing and ideally something with splitters &#8211; after a few searches online I found the Border Container Docs and away I went!  Shortly after, I added a Tab Container and switched to using the basic Grid. <\/p>\n<figure id=\"attachment_721\" aria-describedby=\"caption-attachment-721\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen101.png\" alt=\"ECL Playground\" title=\"ECL Playground\" width=\"640\" height=\"480\" class=\"size-full wp-image-721\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen101.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen101-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-721\" class=\"wp-caption-text\">ECL Playground \u2013 How the original POC Looks today<\/figcaption><\/figure>\n<p><!--more--><\/p>\n<h2>Q: Why did you choose Dojo?<\/h2>\n<p>A: After the initial success of the proof of concept, we took stock of our existing web application and decided that a rewrite would be in order, at this stage I did stop and take a longer look at what was available and quickly came to the conclusion that it would be jQuery or Dojo.  Dojo won out for a number of reasons, chief of which was how the core libraries had been architected, as well as their attention to &#8220;core&#8221; details, like AMD, OOP, localization and accessibility.  I was also satisfied that we could use Dijit for the App layout and common widgets, while being able to drop in any other &#8220;best of breed&#8221; page elements as needed.<\/p>\n<h2>Q: Were you previously using another toolkit?<\/h2>\n<p>A: We had been using XSLT to generate our pages and a small amount of YUI for some of the newer work.<\/p>\n<figure id=\"attachment_723\" aria-describedby=\"caption-attachment-723\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen102.png\" alt=\"EPC Before\" title=\"EPC Before\" width=\"640\" height=\"480\" class=\"size-full wp-image-723\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen102.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen102-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-723\" class=\"wp-caption-text\">Before<\/figcaption><\/figure>\n<figure id=\"attachment_724\" aria-describedby=\"caption-attachment-724\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen103.png\" alt=\"EPC After\" title=\"EPC After\" width=\"640\" height=\"480\" class=\"size-full wp-image-724\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen103.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen103-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-724\" class=\"wp-caption-text\">After<\/figcaption><\/figure>\n<h2>Q: What does your application or service do?<\/h2>\n<p>A: The HPCC Platform (High Performance Computing Cluster) is a massive parallel-processing computing platform that solves Big Data problems.  It has been in development for more than thirteen years and was open sourced just over three years ago now.  We call the web application &#8220;ECL Watch&#8221; (ECL is our declarative data processing language), and it allows the user to:<\/p>\n<ul>\n<li>Submit, Monitor and Manage ECL jobs.<\/li>\n<li>Load, unload and manage raw and processed data (files).<\/li>\n<li>General configuration and operational management.<\/li>\n<\/ul>\n<figure id=\"attachment_726\" aria-describedby=\"caption-attachment-726\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen104.png\" alt=\"ECL Workunit\" title=\"ECL Workunit\" width=\"640\" height=\"480\" class=\"size-full wp-image-726\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen104.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen104-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-726\" class=\"wp-caption-text\">A single ECL \u201cWorkunit\u201d making heavy use of the TabContainer<\/figcaption><\/figure>\n<h2>Q: How does your application use Dojo?<\/h2>\n<ul>\n<li>A: It uses AMD and Declare to enforce well organized and encapsulated coding.<\/li>\n<li>Our platform primarily uses SOAP\/JSON\/REST style messaging, so we make heavy use of Request, Deferred and Stores.<\/li>\n<li>Dijit Layouts &#8211; The Border Container and Tab Container are always at the foundation of any new Widget\/Page we write.<\/li>\n<li>Dijit Widgets &#8211; Both the usage of the built in widgets as well as the framework for extending and writing out own widgets &#8211; every visual page we design is done as a &#8220;plugable&#8221; widget, and as such can be opened in different parts of the Web Application as well as in a separate browser window (very useful for emailing links to colleagues).<\/li>\n<li>The rest &#8211; it\u2019s hard to list specific items here as we pretty much use it all&#8230;  dojo\/topic and \/dojo\/aspect would get honourable mentions as they have allowed some elegant solutions to some tricky design challenges we faced.  dojo\/aspect helped workaround some ActiveX\/NPAPI browser specific inconsistencies, by intercepting and altering specific DOM Class changes to widgets (all within a single function).  While dojo\/topic (along with dojo\/Stateful \/ dojo\/store.notify) helped ensure there was no assumption about what sets of widgets were loaded at any given time and keeping all related widgets in sync.<\/li>\n<\/ul>\n<h2>Q: Overall what is your user experience with Dojo?<\/h2>\n<p>A: On the whole it has been a very positive experience, it does have a moderate to steep learning curve, but no harder than any other &#8220;significant&#8221; framework.  As I switch to\/from my C++\/Java work, it is interesting that I seem to miss more of the patterns I have learnt while using Dojo than the other way around.  I suspect I will be implementing a variant of the Deferred\/promise pattern in the near future!<\/p>\n<h2>Q: What\u2019s your favorite thing about Dojo?<\/h2>\n<p>A: The AMD loader and OOP support \u2013 Personally I find it all too easy to write hard to maintain code in JavaScript (especially as a novice), but with the AMD\/OOP support I was able to continue to \u201cthink\u201d, organise and encapsulate in a similar fashion to my C++\/Java work.<\/p>\n<h2>Q: What are your future plans with Dojo?<\/h2>\n<p>A: We still have a small amount of work todo in converting our existing Web App, but once that is done the plan is start optimising the users workflow, this will mean developing new and better interfaces, so lots of Widget work.  We have already started to integrate visualisations using d3.js (as widgets) and I hope that Dojo 2.0 (and the new related SitePen work) gets released at a convenient time in our release cycle so we can be early adopters.<\/p>\n<figure id=\"attachment_728\" aria-describedby=\"caption-attachment-728\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen105.png\" alt=\"ECL Treemap\" title=\"ECL Treemap\" width=\"640\" height=\"480\" class=\"size-full wp-image-728\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen105.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen105-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-728\" class=\"wp-caption-text\">Treemap<\/figcaption><\/figure>\n<figure id=\"attachment_729\" aria-describedby=\"caption-attachment-729\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen106.png\" alt=\"ECL Landing Zones\" title=\"ECL Landing Zones\" width=\"640\" height=\"480\" class=\"size-full wp-image-729\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen106.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen106-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-729\" class=\"wp-caption-text\">Landing zones<\/figcaption><\/figure>\n<figure id=\"attachment_730\" aria-describedby=\"caption-attachment-730\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen107.png\" alt=\"ECL Graphs\" title=\"ECL Graphs\" width=\"640\" height=\"480\" class=\"size-full wp-image-730\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen107.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen107-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-730\" class=\"wp-caption-text\">Graphs<\/figcaption><\/figure>\n<figure id=\"attachment_731\" aria-describedby=\"caption-attachment-731\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen108.png\" alt=\"ECL Visualizations\" title=\"ECL Visualizations\" width=\"640\" height=\"480\" class=\"size-full wp-image-731\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen108.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen108-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-731\" class=\"wp-caption-text\">Visualizations<\/figcaption><\/figure>\n<figure id=\"attachment_732\" aria-describedby=\"caption-attachment-732\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen109.png\" alt=\"ECL User Permissions\" title=\"ECL User Permissions\" width=\"640\" height=\"480\" class=\"size-full wp-image-732\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen109.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen109-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-732\" class=\"wp-caption-text\">User permissions<\/figcaption><\/figure>\n<figure id=\"attachment_733\" aria-describedby=\"caption-attachment-733\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen110.png\" alt=\"ECL i18n\" title=\"ECL i18n\" width=\"640\" height=\"480\" class=\"size-full wp-image-733\" srcset=\"https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen110.png 640w, https:\/\/dojotoolkit.org\/blog\/wp-content\/uploads\/2014\/07\/Screen110-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-733\" class=\"wp-caption-text\">Internationalization<\/figcaption><\/figure>\n<h2>Thanks!<\/h2>\n<p>Thanks Gordon for telling us about your experience with Dojo. If you would like to share your experience with Dojo, please <a href=\"http:\/\/www.dojofoundation.org\/contact\">contact us<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The large companies that use Dojo are widely known. This series features lesser known users of Dojo, and their stories. This time, we interview Gordon Smith from HPCC Systems, a subsidiary of LexisNexis RISK Solutions. Q: How did you first learn about Dojo? A: Through Google \/ Stack Overflow. I suspect my &#8220;discovery&#8221; of Dojo &hellip; <a href=\"https:\/\/dojotoolkit.org\/blog\/case-study-hpcc-systems\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Case study: HPCC Systems<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[39],"tags":[],"_links":{"self":[{"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/posts\/712"}],"collection":[{"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/comments?post=712"}],"version-history":[{"count":16,"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/posts\/712\/revisions"}],"predecessor-version":[{"id":1005,"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/posts\/712\/revisions\/1005"}],"wp:attachment":[{"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/media?parent=712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/categories?post=712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dojotoolkit.org\/blog\/wp-json\/wp\/v2\/tags?post=712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}