<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Qlik Branch</title>
    <description>The latest articles on DEV Community by Qlik Branch (@qlikbranch).</description>
    <link>https://dev.to/qlikbranch</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F323%2Ff9d5c7e2-f086-4911-b038-eccc2c08546d.png</url>
      <title>DEV Community: Qlik Branch</title>
      <link>https://dev.to/qlikbranch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/qlikbranch"/>
    <language>en</language>
    <item>
      <title>Ski Simulators, Qlik Core and Real-Time Analytics — a Qonnections Story</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Wed, 29 May 2019 17:56:44 +0000</pubDate>
      <link>https://dev.to/qlikbranch/ski-simulators-qlik-core-and-real-time-analytics-a-qonnections-story-2ld1</link>
      <guid>https://dev.to/qlikbranch/ski-simulators-qlik-core-and-real-time-analytics-a-qonnections-story-2ld1</guid>
      <description>&lt;h3&gt;
  
  
  Ski Simulators, Qlik Core and Real-Time Analytics — a Qonnections Story
&lt;/h3&gt;

&lt;p&gt;Qlik Core, React and a whole bunch of open source. Read about the fun I had developing an awesome app to go with some cool hardware.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_39VyV-D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALfWIDmRMp3N_FBmWW4TZSg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_39VyV-D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALfWIDmRMp3N_FBmWW4TZSg.jpeg" alt=""&gt;&lt;/a&gt;Myself on the super fun SkyTechSport Ski Simulator&lt;/p&gt;

&lt;p&gt;Another Qonnections has come and gone, and this year I got to be part of something really fun. Our keynote speaker for the conference was Lindsey Vonn, the US alpine ski racer with 3 olympic medals and 7 world cup medals. Because of this Qlik wanted to do something really cool and I had &lt;a href="https://twitter.com/AdamMayerwrk"&gt;Adam Mayer&lt;/a&gt; — a Senior Manager here at Qlik for Technical Product Marketing — approach me to lead the development portion of this exciting project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GFW_uIfB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AiBSsTcq2enqv3VLMhU8YWQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GFW_uIfB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AiBSsTcq2enqv3VLMhU8YWQ.jpeg" alt=""&gt;&lt;/a&gt;Myself and Lindsey Vonn at Qonnections&lt;/p&gt;

&lt;p&gt;To get this job done Qlik teamed up with &lt;a href="http://www.skytechsport.com/"&gt;SkyTechSport&lt;/a&gt;, a badass company that makes killer equipment to help athletes stay on top of their game. The plan was simple: SkyTechSport would provide the super cool &lt;a href="http://www.skytechsport.com/alpine-simulator"&gt;Ski Simulator&lt;/a&gt; for our attendees to ride and the people to maintain it, do a bit of development on their end to get us access to the data points the simulator generates and we would build some awesome data visualization to go around it. Our implementation would include both a real-time in game dashboard as well as a post game leaderboard to track who was topping the list. All of this would encompass a charitable effort where Qlik would donate $1 to the Special Olympics for every gate that was passed in a successful run. I was to be in charge of the real-time app and the amazing &lt;a href="https://twitter.com/arturoQV"&gt;Arturo Munoz&lt;/a&gt; would handle the leaderboard. Some great development ahead for sure, but challenges immediately started to present themselves.&lt;/p&gt;

&lt;p&gt;Source Code for project: &lt;a href="https://github.com/Qlik-Branch/qonnections-ski-simulator"&gt;https://github.com/Qlik-Branch/qonnections-ski-simulator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first challenge that needed to be dealt with was how the simulator was passing the data. The simulator is a fast piece of equipment and the software behind it is built for the visual and physical feedback, so all the data happens in milliseconds. 30 milliseconds to be exact. So the simulator is saving the data to one file every 30 milliseconds. Over a network. And not just saving the data, overwriting the data. This brought up two concerns.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;First is that we needed to make sure the network our systems were connected on weren’t going to be bogged down by external influences. Simple enough, we just have a dedicated router with the systems hard-wired to it and problem solved.&lt;/p&gt;

&lt;p&gt;The second concern required a little more thinking and some serious testing. We wanted to make sure we got all the data. That meant getting every write of data with this 30 millisecond timeframe with no file lock issues. After a while of trying to figure out if both writing and reading a file over a network within 30 milliseconds was even feasible I decided to come up with a solution that would simply eliminate our restriction: move the file. If we could move the file out of the way before the simulator had a chance to overwrite it we could work with the data in our own time. The result was actually a really simple script that would just constantly try to move this file to a different folder with the file being named with a timestamp:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;First gate passed. YAY!. The next thing to figure out was where the data was going and how it was going to get there. The answer? The awesome &lt;a href="https://core.qlik.com"&gt;Qlik Core&lt;/a&gt; mixed with R&amp;amp;D’s super cool command line tool &lt;a href="https://github.com/qlik-oss/corectl"&gt;corectl&lt;/a&gt;. By having Docker Desktop installed on the system we used I could write three files and have the entire back end setup done. The first file is the docker-compose.yml file that will tell docker the engine we want set up:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The above file tells docker we want to use the latest (at the time of writing) qlikcore/engine image, accept the End User License Agreement, store our Qlik apps in a /docs directory (which is mounted to a local core-docs directory) and route the standard engine port 9076 to our local port 19076 . We’re also mounting a local data directory as well for when we want to load data. Once we have this file we can run docker-compose up -d and docker will have our engine running in no time.&lt;/p&gt;

&lt;p&gt;The second file we need is a file called corectl.yml which is leverage by corectl:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;This file tells corectl everything it needs to know to create the Qlik app we want. It points to the engine, indicates the name of the app we want, a connection to the data folder we need and a path to the load script that will take in the data necessary.&lt;/p&gt;

&lt;p&gt;The final file necessary is our load script that we reference in the file above:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The key thing to note in the load script above is the ADD keyword in the second block. This allows us to leverage the partial data load feature of the engine meaning we could load new data in quickly without losing the data already in the app, keeping our round trip from data load to front end output quick. So with the load script and the corectl file I could run corectl build and have our Qlik app up and ready to go.&lt;/p&gt;

&lt;p&gt;Now with the app up and the data being saved from oblivion I turned to the script that would actually handle the simulators data. Using &lt;a href="https://github.com/qlik-oss/enigma.js"&gt;enigma.js&lt;/a&gt; for engine interaction we first wanted to create a generic object for the attendees badge ID as well as the race ID. That way we could subscribe to the object and keep an eye on it to know when a badge was scanned:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;When a badge was scanned on the front end it would update this generic object and our script can start looking for new race files. Once the race has started it was a simple loop that loads in any existing data files, saves this data to the /unprocessed/ski-data.csv file referenced in the load script and tell the engine to do a partial reload:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;finally we can look through the current data to see if a finishing status is found and if so we can clear out the generic object and stop looking for files:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Once we have our data loading script running and waiting, it’s time to get the front end in place. This front end ended up being a React app designed by Arturo, built by myself and incorporates &lt;a href="https://github.com/qlik-oss/enigma.js"&gt;enigma.js&lt;/a&gt;, &lt;a href="https://d3js.org/"&gt;d3.js&lt;/a&gt;, &lt;a href="https://picassojs.com/"&gt;picasso.js&lt;/a&gt; and &lt;a href="https://www.qlik.com/us/products/qlik-geoanalytics"&gt;Qlik GeoAnalytics&lt;/a&gt;. There’s a bunch of parts involved in it, but the important bits are that we set the generic object when a badge is scanned and create some hypercubes that will update when the partial reload happens.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;With all the pieces put together it was time to do some serious testing. The upside to the way the simulator saves data is that it was incredibly easy to simulate. I just needed to write new file every 30 milliseconds and watch all the scripts do the rest.&lt;/p&gt;

&lt;p&gt;The one concern I had through the whole thing was the speed. This was meant to be an in-game dashboard, meaning it had to update quickly and there were a lot of moving parts. The simulator saves the data, the rename script moves the data, the data load script reads and writes the data, the engine reloads the data, recalculates the data to send down to the front and sends it, then the front end re-renders with the new data. I wasn’t expecting to be blown away by the entire round trip taking under 400 milliseconds! With metric in place to measure how long the engine was taking we had 200 millisecond partial reloads happening within that time too. It’s exciting to see Qlik’s engine be put to the test in a real-time use case and come out shining.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/FE29gTd3aVc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In the end we had a great attraction in the Expo that showed off the awesome power of Qlik and Qlik Core. We raised a significant donation for the Special Olympics and generated a ton of excitement throughout the week.&lt;/p&gt;

&lt;p&gt;I wanted to give a big shout out to everybody I worked with both developing and staffing the booth. &lt;a href="https://www.linkedin.com/in/abbottkatherine/"&gt;Katie Abbott&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/michaelmarolda/"&gt;Mike Marolda&lt;/a&gt; killed it with logistics and helping day of, Adam Mayer was fantastic with all the organization and Arturo Munoz was a design wizard, thanks to all for making this such a success.&lt;/p&gt;




</description>
      <category>docker</category>
      <category>d3js</category>
      <category>qlikcore</category>
      <category>react</category>
    </item>
    <item>
      <title>Qlik Core for Developers: Lessons Learned in Workshop Creation</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Tue, 12 Mar 2019 15:29:57 +0000</pubDate>
      <link>https://dev.to/qlikbranch/qlik-core-for-developers-lessons-learned-in-workshop-creation-hl0</link>
      <guid>https://dev.to/qlikbranch/qlik-core-for-developers-lessons-learned-in-workshop-creation-hl0</guid>
      <description>&lt;p&gt;Another &lt;a href="https://forwardjs.com/" rel="noopener noreferrer"&gt;ForwardJS&lt;/a&gt; has come and gone in San Francisco and as usual, I had a blast while I was there. This time around, I was representing &lt;a href="https://www.qlik.com" rel="noopener noreferrer"&gt;Qlik&lt;/a&gt;with a sponsored workshop, so it was my first crack at getting &lt;a href="https://core.qlik.com" rel="noopener noreferrer"&gt;Qlik Core&lt;/a&gt; into the hands of fresh-faced developers new to the engine — and here’s some things I learned.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AJKkXJyQtdjzHJQNpT-Ab3g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AJKkXJyQtdjzHJQNpT-Ab3g.jpeg"&gt;&lt;/a&gt;An example of data retrieval, presented at ForwardJS San Francisco, January 2019&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Don’t make assumptions about what tech your developers may know&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://core.qlik.com/" rel="noopener noreferrer"&gt;Qlik Core&lt;/a&gt; is a containerized version of our engine, so we have a Docker image on &lt;a href="https://hub.docker.com/" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt; for it.&lt;/p&gt;

&lt;p&gt;I made the silly mistake of assuming that developers would know about &lt;a href="https://bit.ly/fjs-docker" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;and the whole concept of containerization, when half the developers at the workshop was unaware of this awesome technology.&lt;/p&gt;

&lt;p&gt;When building out a workshop you should always have time in the beginning to explain the technologies you’re working with an assume the developer has no knowledge of what those technologies are or how they work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AHSRSgjMbB9y5o46X_sjYHA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AHSRSgjMbB9y5o46X_sjYHA.jpeg"&gt;&lt;/a&gt;Qlik Core — Dockerized Engine&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Test your workshop setup on multiple operating systems&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To show my workshop attendees the apps files that were generated when creating a new app in &lt;a href="https://www.qlik.com" rel="noopener noreferrer"&gt;Qlik&lt;/a&gt;, I created a volume for the Docker image that was a directory in the main project folder.&lt;/p&gt;

&lt;p&gt;While this setup worked perfectly on my MacOS, the same Dockerfile caused problems for my attendees who used Windows, particularly the ones who were using Docker for the first time.&lt;/p&gt;

&lt;p&gt;There was some sort of permissions or sharing issue that left other attendees sitting around while I tried to help these developers get their Docker setup working correctly.&lt;/p&gt;

&lt;p&gt;If I had run through the workshop on a Windows machine, I may have been able to pick up on this beforehand instead of wasting valuable time. Always make sure to test your setup in multiple environments so there aren’t any surprises.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Give your attendees examples of what they’re working towards&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the things I did that I feel was key to a smooth running workshop is to have codebases for each of the steps in my workshop. The code for my workshop project sits in a &lt;a href="https://github.com/rjriel/forward-workshop" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;repository and I have a separate branch for each of the learning points that I have.&lt;/p&gt;

&lt;p&gt;There will inevitably be points in your workshop where people will have issues getting the project to do what they need it to and you’ll have to move on. Without having codebases to get them to the next point, your attendees will be separated from the pack and not have a good experience.&lt;/p&gt;

&lt;p&gt;Creating branches will allow users to simply update their project to the next step so they can keep up with the rest of the class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8nZCMYBQ2ikeyTv3ZMIVgQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8nZCMYBQ2ikeyTv3ZMIVgQ.jpeg"&gt;&lt;/a&gt;An example of set up infrastructure&lt;/p&gt;

&lt;h3&gt;
  
  
  Simplicity is key, advanced topics are for the back pocket
&lt;/h3&gt;

&lt;p&gt;With a powerful engine such as &lt;a href="https://core.qlik.com/" rel="noopener noreferrer"&gt;Qlik Core&lt;/a&gt; there’s so much that can be done, but the last thing developers want to delve into on day one with a piece of tech is the nitty gritty stuff. Luckily the basics of &lt;a href="https://core.qlik.com/" rel="noopener noreferrer"&gt;Qlik Core&lt;/a&gt; are super simple and easy to pick up, with a bunch of tools created in house to make developers lives easier.&lt;/p&gt;

&lt;p&gt;When building out a workshop to introduce developers to a technology, don’t even bother bringing up the complicated stuff. Trust that the developers that want to know the really advanced stuff are going to ask you for it, and that’s a great thing to leave for the end or talk about after the workshop.&lt;/p&gt;

&lt;p&gt;Get the basics, build the foundation, and the developer will let you know when they want to start adding the bells and whistles.&lt;/p&gt;




</description>
      <category>devrel</category>
      <category>qlik</category>
      <category>github</category>
      <category>workshops</category>
    </item>
    <item>
      <title>Getting Started with Qlik Core</title>
      <dc:creator>Wuzhong</dc:creator>
      <pubDate>Mon, 29 Oct 2018 11:56:59 +0000</pubDate>
      <link>https://dev.to/qlikbranch/getting-started-with-qlik-core-2781</link>
      <guid>https://dev.to/qlikbranch/getting-started-with-qlik-core-2781</guid>
      <description>&lt;p&gt;A few months back, Qlik announced &lt;a href="https://www.qlik.com/us/products/qlik-core"&gt;Qlik Core&lt;/a&gt;, a Dockerized version of Qlik’s associative data engine. After playing with Core for a few weeks (the developer version is free…plus, I work for Qlik), I’ve come to realize how awesome the product is for visualizing and analyzing data. So I’m writing this blog to explain, &lt;strong&gt;in my humble opinion&lt;/strong&gt;, who will benefit from Core, and how to start using it.&lt;/p&gt;

&lt;h3&gt;
  
  
  First of all, why Qlik Core?
&lt;/h3&gt;

&lt;p&gt;Nowadays, there are several visualization libraries, &lt;a href="https://d3js.org/"&gt;D3&lt;/a&gt; probably being the most widely used library of the bunch. &lt;a href="http://bibviz.com/"&gt;Click here&lt;/a&gt; to see a fully baked example of an interactive visualization built on top of D3. For an application like this, static data is packed and loaded together with your application. But there are a few limitations with this approach, especially when the size data is large (for example, greater than 200 MB)…&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The app takes a lifetime to load.&lt;/li&gt;
&lt;li&gt;The browser occupies a large amount of memory, which can even cause the browser to crash if the size of data exceeds the limit.&lt;/li&gt;
&lt;li&gt;It’s not easy to handle filtering and association.&lt;/li&gt;
&lt;li&gt;It can be difficult to manage state as the data is explored and filtered.&lt;/li&gt;
&lt;li&gt;It’s difficult to handle dynamic data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One alternative is to query a database, requesting and receiving data as we go, but this also has limitations. The main drawback is the query latency that the user may experience. Usually, a query based system takes 0.5–3 seconds to respond to user action, which diminishes the user experience and purpose of an interactive dashboard. 😟&lt;/p&gt;

&lt;h3&gt;
  
  
  Qlik Core to the rescue — but what &lt;em&gt;is&lt;/em&gt; Qlik Core?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rg21vyui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2ANlcaOoOfeficrIKVBnsLEg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rg21vyui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2ANlcaOoOfeficrIKVBnsLEg.jpeg" alt="Paw Patrol Picture"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Irrelevant Paw Patrol picture (I’m a new parent), from &lt;a href="https://www.hollywoodreporter.com/live-feed/nickelodeon-renews-paw-patrol-3-more-preschool-series-1113681"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Qlik Core gives you direct access to the first data engine of its kind. And “data engine” is neither a data warehouse nor a database. It is a mechanism to handle data association, analytics and state, especially in large volumes of data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And when you have this data engine at the 🧡 of an application, you don’t need to send a query to receive the data. Even pulling from different sources, Qlik Core can load the data into memory, process and index it, then power web applications reactively. The data becomes an in-memory instance and your web app now connects to Qlik Core via a WebSocket— all calculations and associations are handled remotely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, as mentioned, there are many advantages to using Qlik Core, especially if the data volume is large…&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The application data resides in a server instead of being passed to the frontend. This not only increases usability from the viewer’s perspective, but it also reduces the load of the server, causing both frontend and backend performance to improve significantly. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The developer doesn’t need to worry about wiring up filtering and association through their code. All of this, as well as state management, is handled by Qlik Core now and the app’s visualizations and interactivity can simply hook into the engine. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On top of all this, Qlik Core is great at loading data from different data sources and meshing them into one. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So, we’re killing several birds with one stone as they say. And now you know why I think this product is amazing (😍 → that’s me building with Qlik Core and I swear it’s not just because I work at Qlik).&lt;/p&gt;

&lt;h3&gt;
  
  
  Ready to get started?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xT9IgzUuC5Ss6ZnTEs/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xT9IgzUuC5Ss6ZnTEs/giphy.gif" alt="ready to get started gif?"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Hopefully, you're nodding like this.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Qlik Core is pretty new so getting started can be somewhat tricky (we’re working on improving this but in the meantime, please give us feedback). The official documentation for Qlik Core is at &lt;a href="https://core.qlik.com/"&gt;https://core.qlik.com/&lt;/a&gt;. There you’ll find &lt;a href="https://core.qlik.com/get-started/"&gt;this tutorial&lt;/a&gt; which I find pretty straightforward. Following the instructions will get your Qlik Core instance running quickly, especially if you’re familiar with Docker. There is also a tutorial &lt;a href="https://www.youtube.com/watch?v=KSa6nL6goOs"&gt;video&lt;/a&gt; created by Qlik Branch (more to come but this our home for all that is developer and Qlik) which goes through the basics. &lt;/p&gt;

&lt;p&gt;But what is after this?&lt;/p&gt;

&lt;h3&gt;
  
  
  Let me show you with some simple examples…
&lt;/h3&gt;

&lt;p&gt;I have built some examples to illustrate how Qlik Core is used. Basically, to use Qlik Core, you need &lt;a href="https://help.qlik.com/en-US/sense-developer/September2018/Subsystems/APIs/Content/Sense_ClientAPIs/enigmajs/enigmajs-introduction.htm"&gt;enigma.js&lt;/a&gt; (one of Qlik’s open source libraries) to easily communicate with the engine using JavaScript. The only way to talk to Qlik Core is via our &lt;a href="https://help.qlik.com/en-us/sense-developer/2.1/Subsystems/EngineAPI/Content/introducing-engine-API.htm"&gt;Engine API&lt;/a&gt; which is a language-agnostic, WebSocket-based API. Enigma.js is simply a wrapper library for this. &lt;/p&gt;

&lt;p&gt;So, here are some examples so you can better understand how Qlik Core works…&lt;/p&gt;

&lt;p&gt;*️⃣ &lt;a href="http://jsfiddle.net/wuzhong/7fmru3kd/"&gt;Hello engine example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*️⃣ &lt;a href="http://jsfiddle.net/wuzhong/1vg47myc/"&gt;Hello data example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*️⃣ &lt;a href="https://q-core-healthcheck.herokuapp.com/"&gt;Check if a Core instance is healthy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*️⃣ &lt;a href="https://q-model-viewer.herokuapp.com/"&gt;View data model in an app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*️⃣ &lt;a href="http://ec2-54-255-168-158.ap-southeast-1.compute.amazonaws.com:8080/"&gt;Upload a pre-built app to Qlik Core&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hopefully, this is enough to get you started learning about and using Qlik Core. Over time, we’ll be adding more tutorials, tips and tricks to help developers not only get started with Qlik Core but also with the APIs themselves. &lt;/p&gt;

&lt;p&gt;So keep an eye for that on &lt;a href="https://developer.qlik.com/knowledge"&gt;Knowledge section of Qlik Branch&lt;/a&gt;. In the meantime, check out the tutorials there explaining more about our associative data engine, how it works and how to work with it. And if you are &lt;em&gt;really&lt;/em&gt; interested in Qlik Core or need help, let me know. Just leave a comment below or join our &lt;a href="https://medium.com/r/?url=http%3A%2F%2Fdeveloper.qlik.com%2Fslack"&gt;Qlik Branch Slack&lt;/a&gt; (see the #qlik-core channel or DM me [at]wu_zh).&lt;/p&gt;

&lt;p&gt;Cheers, happy coding and happy Halloween everyone.&lt;/p&gt;

&lt;p&gt;— Wu &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k9knXjIU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AAXlDRbKCE-FReIA-iG0ckQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k9knXjIU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2AAXlDRbKCE-FReIA-iG0ckQ.jpeg" alt="Halloween Joke Picture"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>qlik</category>
      <category>data</category>
      <category>docker</category>
      <category>d3</category>
    </item>
    <item>
      <title>QlikHacks 2018 — An Ottawa Hackathon</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Tue, 02 Oct 2018 20:11:20 +0000</pubDate>
      <link>https://dev.to/qlikbranch/qlikhacks-2018an-ottawa-hackathon-3gbl</link>
      <guid>https://dev.to/qlikbranch/qlikhacks-2018an-ottawa-hackathon-3gbl</guid>
      <description>&lt;h3&gt;
  
  
  QlikHacks 2018 — An Ottawa Hackathon
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vjWQWOgE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWjbY1YbR-h4zDVZk9qsfaQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vjWQWOgE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWjbY1YbR-h4zDVZk9qsfaQ.png" alt=""&gt;&lt;/a&gt;Me at the deCODE Hackathon in Ottawa&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hey, I saw you do a talk at &lt;a href="https://www.meetup.com/Ottawa-JavaScript/events/dwlbtlywpblb/"&gt;Ottawa JS&lt;/a&gt;. You work for that Queue-Lick company, right?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is pretty standard for me in Ottawa and I’m definitely not the only one. &lt;a href="http://qlik.com"&gt;Qlik&lt;/a&gt; has a ton of great employees working in Kanata but very few people in Ottawa know who Qlik is, what Qlik does or even that it’s pronounced “click.”&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We wanted to do something to fix that while connecting the Ottawa developer and designer community AND making the world a better place.&lt;/p&gt;

&lt;p&gt;Our solution?&lt;/p&gt;

&lt;p&gt;A HACKATHON at our Qlik Ottawa office!!! From Friday, October 19th to Sunday, October 21st we are hosting developers and designers of Ottawa for a hackathon that’ll be a ton of fun. 🎉 And rest assured when we say developers and designers, we mean ALL developers and designers are invited.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Regardless of your skill set, whether you’re a student or a professional, we’d like you to get involved. You don’t need to know Qlik or &lt;a href="https://developer.qlik.com"&gt;Qlik Branch&lt;/a&gt;, you don’t need to know JavaScript, you can come in with any skills and have a great time.&lt;/p&gt;

&lt;p&gt;I won’t go into too much detail right now, but at Qlik we take our &lt;a href="https://www.qlik.com/us/company/social-responsibility"&gt;Corporate Social Responsibility&lt;/a&gt; (CSR) very seriously. Because of this, we’re partnering with the United Nations to get the most out of this hackathon and make the 🌍 a better place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are you in? We hope so. Here’s the schedule of events…
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Friday, October 19
&lt;/h4&gt;

&lt;p&gt;We’ll kick off the hackathon in the evening with a fun meet and greet. We’ll have food, give a couple of talks on who we are and what to expect during the hackathon, then music and mingling so you can meet your fellow hackathon participants and potential teammates.&lt;/p&gt;

&lt;h4&gt;
  
  
  Saturday, October 20
&lt;/h4&gt;

&lt;p&gt;At 9 AM, we’ll begin with a workshop detailing some necessities and then the hard work begins. Breakfast, lunch, dinner, snacks, refreshments and some entertainment will all be provided by us. We’ll give you the whole day and will have mentors on hand to help you with any challenges you may come across. We’ll close up shop around 11 PM to give you time to head home and rest up for the next day.&lt;/p&gt;

&lt;h4&gt;
  
  
  Sunday, October 21
&lt;/h4&gt;

&lt;p&gt;Starting at 9 AM, you’ll have the opportunity to finish up your work before you’ll present your results and let the judges decide which team will take home the prize. Yup, that’s right, we even have a prize. 🏆&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We’re super excited to be doing this and hope you’re excited to join. To sign up for this awesome event, please visit &lt;a href="http://bit.ly/QlikHack18"&gt;http://bit.ly/QlikHack18&lt;/a&gt;. If you have any questions at all you can contact me at &lt;a href="//mailto:rie@qlik.com"&gt;rie@qlik.com&lt;/a&gt;. See you there!&lt;/p&gt;
&lt;/blockquote&gt;




</description>
      <category>programming</category>
      <category>developer</category>
      <category>javascript</category>
      <category>ottawa</category>
    </item>
    <item>
      <title>Qlik ❤ D3 </title>
      <dc:creator>Alexander Karlsson</dc:creator>
      <pubDate>Mon, 17 Sep 2018 14:35:32 +0000</pubDate>
      <link>https://dev.to/qlikbranch/qlik--d3--4h48</link>
      <guid>https://dev.to/qlikbranch/qlik--d3--4h48</guid>
      <description>&lt;p&gt;Chances are that if you have seen a piece of data visualization on the web you have come across &lt;a href="https://d3js.org/"&gt;D3&lt;/a&gt;. It’s heavily used by organizations like The New York Times to produce wonderful graphics that engage their readers and enhances their stories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; Together with &lt;a href="https://developer.qlik.com"&gt;Qlik&lt;/a&gt; you can create very lean data visualizations using D3, letting D3 bind the data to the DOM and draw visualizations. Letting Qlik perform the heavy lifting in terms of data manipulation and a reactive data flow, abstraction away data state management from D3.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FC5LPtDA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2ASRSaPD--YuRzB5hQK-e8AA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FC5LPtDA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1600/1%2ASRSaPD--YuRzB5hQK-e8AA.png" alt="d3 example on GitHub"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sample project: &lt;a href="https://github.com/mindspank/d3-blogpost-example"&gt;https://github.com/mindspank/d3-blogpost-example&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Ironically, while you can create wonderful data visualizations using D3 it is &lt;strong&gt;not&lt;/strong&gt; a data visualization library. It has no bar chart or line chart methods. Instead it focuses on binding data to the DOM and performing manipulations of the document based on data. The data binding paired with additional components such as layout algorithms and components such as scales and axis makes it a perfect library for general purpose data visualization.&lt;/p&gt;

&lt;p&gt;Where D3 suffers is when you have many visualizations on the page that you want to keep in sync, manipulating larger data sets and having to fetch the full data sets to calculate a proper scale.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Looks familiar?&lt;/span&gt;
&lt;span class="nx"&gt;d3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scaleLinear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;})]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Qlik to the rescue!
&lt;/h3&gt;

&lt;p&gt;Luckily the &lt;a href="https://developer.qlik.com/knowledge/tutorial/engineTutorial"&gt;Qlik Associative Engine&lt;/a&gt; is a blazingly fast in-memory computation engine that provides tons of useful metadata around your data geared towards building visualization components.&lt;/p&gt;

&lt;p&gt;By letting Qlik take care of the data computation you can omit heavy data wrangling on the client and push those calculations onto the server, leaving you with very lean front-end code that focuses on what D3 does best; binding data to the DOM and outputting a visualization representation of that data.&lt;/p&gt;

&lt;p&gt;To cherry pick a few nuggets that Qlik gives you out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimum and maximum values for calculations for scale inputs&lt;/li&gt;
&lt;li&gt;Glyph counts for the longest dimensional value for label widths&lt;/li&gt;
&lt;li&gt;Data reduction for “glanceable” visualizations&lt;/li&gt;
&lt;li&gt;Server-side configurable sorting and formatting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of the points above D3 handles quite fine, however for larger datasets it’s quite taxing on the browser to crunch all those numbers.&lt;/p&gt;

&lt;p&gt;However, for me personally, the biggest win is that I can write code that is readable, neat and doesn’t mutate my data.&lt;/p&gt;

</description>
      <category>d3</category>
      <category>javascript</category>
      <category>qlik</category>
      <category>data</category>
    </item>
    <item>
      <title>System Integration with Qlik’s APIs — Why and How</title>
      <dc:creator>Wuzhong</dc:creator>
      <pubDate>Thu, 30 Aug 2018 03:35:57 +0000</pubDate>
      <link>https://dev.to/qlikbranch/system-integration-with-qliks-apiswhy-and-how-58g8</link>
      <guid>https://dev.to/qlikbranch/system-integration-with-qliks-apiswhy-and-how-58g8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;First of all, this article is not a “how to” tutorial but rather a white paper. It is NOT MEANT FOR TECHNICAL USERS. If you understand the value of APIs and how to use Qlik’s APIs, this is not for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;____________________&lt;strong&gt;&lt;em&gt;Qlik Pro’s Stop Here&lt;/em&gt;&lt;/strong&gt;______________________&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“What are Qlik’s APIs?” 🤔&lt;/p&gt;

&lt;p&gt;“Why would someone want to use an API?” 🤔&lt;/p&gt;

&lt;p&gt;“What can you build using Qlik’s APIs.” 🤔&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you have these questions, you may find this article helpful. This blog is about various types of system integration using Qlik Sense APIs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  So let’s dive in. With APIs, you can do amazing things. But wait, what is an API?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AFZ3oq1iOJfMl0_x8VFgPIw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AFZ3oq1iOJfMl0_x8VFgPIw.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A9djymVQcqlaN0lWsDtbewQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A9djymVQcqlaN0lWsDtbewQ.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A6UNxUlrS_taO6h0uZa36pA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A6UNxUlrS_taO6h0uZa36pA.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Behind every click, various events are triggered on the back-end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AVghBhnFTIHy1fqofKBgjFQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AVghBhnFTIHy1fqofKBgjFQ.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The APIs are the bridge between the front and the back.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A1fcG3qHoAzWrgXwXuNzyng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A1fcG3qHoAzWrgXwXuNzyng.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Usually, user interactions are restricted to front-end elements: buttons, charts, filters, etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AFokNr-uBKh5HwBn2YPOj7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AFokNr-uBKh5HwBn2YPOj7w.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So when a piece of software implements APIs, it means interactions with the back-end are no longer limited to the software’s native front-end, which opens many possibilities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AciZOzGjf4T5JSVYsk3EIKw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AciZOzGjf4T5JSVYsk3EIKw.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Now that you know what an API is…what can you build with Qlik Sense APIs?
&lt;/h3&gt;

&lt;p&gt;APIs have always been an important and unique part of Qlik. They are the building blocks of mashups and extensions. If you don’t know about those, below is a brief explanation:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AGlU82u9waWIu6v9WeqE1Jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AGlU82u9waWIu6v9WeqE1Jw.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But since this article is about system integration, we will focus on mashups.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here is a random fact: you can build a mashup with extensions. That way, technically you put the visualization you put into Qlik system into your own system.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;
  
  
  Mashup Lv.1 — build a webpage of iframes
&lt;/h4&gt;

&lt;p&gt;This is probably the simplest kind of system integration. Every chart or table in Qlik Sense has an ID and an URL, which can be found in &lt;a href="https://help.qlik.com/en-US/sense-developer/June2018/Subsystems/Dev-Hub/Content/dev-hub-at-a-glance.htm" rel="noopener noreferrer"&gt;Qlik Sense DevHub&lt;/a&gt; -&amp;gt; single configurator portal.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AlCf6o99hif-Ii5vAZmOyEA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AlCf6o99hif-Ii5vAZmOyEA.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you copy the URL into your browser, you can see the object on the page. A single line of code extracted from the DevHub can, therefore, be added into an existing website to embed a Qlik chart to a web page. Put multiple iframes onto an html file and you have a dashboard.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So in less than 1 minute, you can build a web page with four lines of code copied from DevHub. 👍&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AysdWbTLCoQ6Jl8j5jsaw-Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AysdWbTLCoQ6Jl8j5jsaw-Q.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Required skill level: ★☆☆☆☆&lt;/p&gt;
&lt;h4&gt;
  
  
  Mashup Lv.2 — mashup with APIs and libraries
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AqCi-Lhi5uO77ztGtz66FaA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AqCi-Lhi5uO77ztGtz66FaA.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;
See how it is implemented in the [Walkers Dashboard](http://playground.qlik.com/liveshowcase/playground-zombie/main.html)



&lt;p&gt;The Walkers Dashboard is an example on &lt;a href="http://playground.qlik.com/" rel="noopener noreferrer"&gt;Qlik Playground&lt;/a&gt; created by &lt;a href="https://github.com/fkabinoff" rel="noopener noreferrer"&gt;Francis Kabinoff&lt;/a&gt; which uses Qlik charts within a web page showing stats on the tv show The Walking Dead. It is a typical mashup built with the Qlik Sense &lt;a href="https://help.qlik.com/en-US/sense-developer/1.0/Subsystems/Workbench/Content/BuildingWebsites/API/qswb_mup_apireference.htm" rel="noopener noreferrer"&gt;capability APIs&lt;/a&gt;. Different from an iframe, charts are rendered using a Qlik javascript library to control the user interaction and object retrieval. This means faster and cleaner execution, customizable elements and other features.&lt;/p&gt;

&lt;p&gt;There is an easy way to create and host your own mashup too. In Qlik Sense DevHub, you can find a tool called &lt;a href="https://help.qlik.com/en-US/sense-developer/June2018/Subsystems/Dev-Hub/Content/MashupEditor/mashup-editor-overview.htm" rel="noopener noreferrer"&gt;Mashup Editor&lt;/a&gt;. It allows users to design their own web application by dragging and dropping Qlik objects onto predefined templates. But if you want to build something different, like The Walker Dashboard, you need to learn javascript and html.&lt;/p&gt;

&lt;p&gt;Required skill level: ★★☆☆☆&lt;/p&gt;
&lt;h4&gt;
  
  
  Mashup Lv.3 — building a Qlik dashboard which looks completely non-related to Qlik
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AWS5K5tnKzIMINrVPi0MOaA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AWS5K5tnKzIMINrVPi0MOaA.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;
See how it is implemented in the&lt;a href="http://playground.qlik.com/liveshowcase/maple-leafs/index.htm" rel="noopener noreferrer"&gt;Maple Leafs Dashboard&lt;/a&gt;



&lt;p&gt;Qlik Sense is business intelligence software, but not only business intelligence software. By using APIs, users may create their own visualizations, on top of a Qlik application, without using charts from Qlik. In this use case, Qlik is no longer a visualization server. It is a data warehouse plus data engine (Qlik’s Associative Engine) behind your dashboard. It handles the data processing, storage and association part but lets third-party technologies take care of the presentation part.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are doing this, you are entitled to call yourself a Qlik Pro. 😁 The Qlik Sense DevHub Mashup Editor won’t help you at this level. You have to write every line of front-end code by yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Required skill level: ★★★☆☆&lt;/p&gt;
&lt;h4&gt;
  
  
  Mashup Lv.4 — using enigma.js and engine API
&lt;/h4&gt;

&lt;p&gt;Most Qlik developers do not use &lt;a href="https://help.qlik.com/en-US/sense-developer/April2018/Subsystems/APIs/Content/enigmajs/enigmajs-introduction.htm" rel="noopener noreferrer"&gt;enigma.js&lt;/a&gt; and the &lt;a href="https://help.qlik.com/en-US/sense-developer/April2018/Subsystems/EngineAPI/Content/introducing-engine-API.htm" rel="noopener noreferrer"&gt;engine API&lt;/a&gt;. For many, the capability API is enough for most use cases.&lt;/p&gt;

&lt;p&gt;Enigma.js is a wrapper library on top of the engine API. While the capability APIs are run from a user’s browser, enigma.js can be run on an application server to interact with Qlik before serving a web page to a user. In fact, the capability API also implements enigma.js inside of an Angular application packed using require.js.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F0%2A0wY-WYnmMD-PsxSL" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F0%2A0wY-WYnmMD-PsxSL" alt="Alt text of image"&gt;&lt;/a&gt;&lt;br&gt;
The engine API is the communication protocol between the Qlik Sense server and the Qlik Sense client. The &lt;a href="https://help.qlik.com/en-US/sense-developer/June2018/Subsystems/Dev-Hub/Content/EngineApiExplorer/engine-api-explorer.htm" rel="noopener noreferrer"&gt;Engine API Explorer&lt;/a&gt; is a tool in DevHub where you can learn how the front-end talks to the back-end. Unless you are building your own support library, Enigma.js should cover most of your integration needs.&lt;/p&gt;

&lt;p&gt;Required skill level: ★★★★☆&lt;/p&gt;
&lt;h4&gt;
  
  
  Mashup(?) Lv.MAX — leveraging on the engine itself
&lt;/h4&gt;

&lt;p&gt;When you know the technology inside out, you may want to use the data engine (aka Qlik’s Associative Engine) outside of the business intelligence space. Examples speak for themselves, check them out...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A0013QeegwbHZeZpkgE4Yig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2A0013QeegwbHZeZpkgE4Yig.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;
See how it is implemented in the&lt;a href="http://opensrc.axisgroup.com/emissions/" rel="noopener noreferrer"&gt;Boston Building Emissions By Axis Group&lt;/a&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AiT_tkVFOP7IDletZwXThcQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AiT_tkVFOP7IDletZwXThcQ.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;a href="http://playground.qlik.com/liveshowcase/hack-challenge-slalom/index.html" rel="noopener noreferrer"&gt;C40 cities building energy by Slalom&lt;/a&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2Ah7zXqGZFq4YWnrY1-rcoQw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2Ah7zXqGZFq4YWnrY1-rcoQw.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;a href="https://www.qlik.com/us/products/qlik-core" rel="noopener noreferrer"&gt;Qlik Core&lt;/a&gt;



&lt;p&gt;Then there are some use cases that are difficult to define — they are certainly not mashups, some of them are not even web applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For example, a business intelligence chatbot…&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ANdQmvB4llgNaC6YDa8NGFA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2ANdQmvB4llgNaC6YDa8NGFA.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;a href="http://branch.qlik.com/#!/project/5a2fb8474666f1a641bc8e76" rel="noopener noreferrer"&gt;Qlik BotNet&lt;/a&gt;



&lt;p&gt;&lt;strong&gt;And a mirror…&lt;/strong&gt;&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-981633788244647937-571" src="https://platform.twitter.com/embed/Tweet.html?id=981633788244647937"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-981633788244647937-571');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=981633788244647937&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And many people don’t know this —there is a Qlik application behind &lt;a href="http://branch.qlik.com/" rel="noopener noreferrer"&gt;branch.qlik.com&lt;/a&gt;.&lt;/strong&gt; The application handles search and content management specifically. Qlik Branch is an open source project, you can find the code &lt;a href="http://branch.qlik.com/#!/project/5672a4ef2a6e57d03cd9b783" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AglZM5DXXaqIZU6QZinSt7A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1600%2F1%2AglZM5DXXaqIZU6QZinSt7A.png" alt="Alt text of image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;a href="http://branch.qlik.com/#!/" rel="noopener noreferrer"&gt;Qlik Branch&lt;/a&gt;



&lt;p&gt;Required skill level: ★★★★★&lt;/p&gt;

&lt;h3&gt;
  
  
  So, how should you get started?
&lt;/h3&gt;

&lt;p&gt;Just start experimenting! There are resources and examples on &lt;a href="http://playground.qlik.com/" rel="noopener noreferrer"&gt;Qlik Playground&lt;/a&gt;, open source examples on &lt;a href="http://branch.qlik.com/#!/" rel="noopener noreferrer"&gt;Qlik Branch&lt;/a&gt; and plenty of community members on our &lt;a href="http://bit.ly/BranchSlack" rel="noopener noreferrer"&gt;Qlik Branch Slack&lt;/a&gt;. You can also find blogs and Youtube videos about Qlik’s APIs almost effortlessly online.&lt;br&gt;
Let me know your thoughts.&lt;br&gt;
Happy coding. And shout out to all of the amazing developers out there.&lt;br&gt;
Cheers.&lt;br&gt;
— Wu&lt;/p&gt;

</description>
      <category>api</category>
      <category>qlik</category>
    </item>
    <item>
      <title>RHoK: Hacking Towards a Better Ottawa</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Fri, 13 Jul 2018 12:15:07 +0000</pubDate>
      <link>https://dev.to/qlikbranch/rhok-hacking-towards-a-better-ottawa-23fe</link>
      <guid>https://dev.to/qlikbranch/rhok-hacking-towards-a-better-ottawa-23fe</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F992%2F1%2Ar2sbyEzCFKnoQMPM4C8EGg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F992%2F1%2Ar2sbyEzCFKnoQMPM4C8EGg.jpeg"&gt;&lt;/a&gt;Photo Credit: &lt;a href="https://rhok.ca/events/rhok-8/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://rhok.ca/events/rhok-8/" rel="noopener noreferrer"&gt;https://rhok.ca/events/rhok-8/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardly a week goes by where I get to think of how awesome my job is.
&lt;/h3&gt;

&lt;p&gt;The second weekend of April had me back at the Adobe conference room in Ottawa where just a week before, &lt;a href="https://forwardjs.com/ottawa" rel="noopener noreferrer"&gt;ForwardJS Ottawa&lt;/a&gt; bought twenty awesome talks to the Nation’s capital.&lt;/p&gt;

&lt;p&gt;This time, it was for &lt;a href="http://rhok.ca" rel="noopener noreferrer"&gt;Random Hacks of Kindness&lt;/a&gt; (RHoK), a twice a year hackathon where organizations submit projects in need and participants apply their skills to hack out a solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2APLs9Qo2BgLTfOfKKlZv3Ig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2APLs9Qo2BgLTfOfKKlZv3Ig.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rhok.ca/projects/project-1-growing-futures-hydroponic-monitoring-system/" rel="noopener noreferrer"&gt;&lt;strong&gt;Project one&lt;/strong&gt;&lt;/a&gt; involved &lt;a href="https://www.growingfutures.ca/" rel="noopener noreferrer"&gt;Growing Futures&lt;/a&gt;, an organization committed to bettering the next generation by using hydroponics to teach our youth about good food and good business. They were seeking a way to remotely manage the growing system of hydroponic stacks around the city. The resulting solution was a fantastic mix of hardware, software and data visualization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rhok.ca/projects/project-2-rideau-rockcliffe-crc-gifts-in-kind/" rel="noopener noreferrer"&gt;&lt;strong&gt;Project two&lt;/strong&gt;&lt;/a&gt; was submitted by the &lt;a href="https://crcrr.org/en/programs/gifts-in-kind-program" rel="noopener noreferrer"&gt;Gifts in Kind&lt;/a&gt; program, which takes on the massive and highly important task of connecting donors with gift in-kind donations to non-profit organizations in Ottawa. With a limited operating budget, the program needs help capturing usage data of its donations and a smarter way to let donors and recipients connect to the program. The RHoK team for this project did a great job laying the groundwork to an intuitive system that will connect donors and recipients to the program with greater ease.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rhok.ca/projects/project-3-code-my-robot-twitch-integration/" rel="noopener noreferrer"&gt;&lt;strong&gt;Project three&lt;/strong&gt;&lt;/a&gt; saw &lt;a href="http://codemyrobot.ca/" rel="noopener noreferrer"&gt;codemyrobot.ca&lt;/a&gt; seeking help. An awesome program that provides free robots to school libraries while giving students access to some robot coding fun, the current submission process for their robot challenges is highly manual and server intensive. The team tasked with fixing the problem came up with a great solution to not only automate the submission process, but also keep the safety and privacy of students as top priority while ensuring the system could scale with the barrage of videos coming their way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rhok.ca/projects/project-4-isisters-technology-learning-platform/" rel="noopener noreferrer"&gt;&lt;strong&gt;Project four&lt;/strong&gt;&lt;/a&gt; was submitted to help &lt;a href="https://isisters.org/" rel="noopener noreferrer"&gt;iSisters&lt;/a&gt; educate women in need. The iSisters organization was created to mentor women in need at no cost to them. Unfortunately the technology its currently built on is outdated and needs major modernization. Their team did a great job of revamping the site and giving it a crisp facelift and more intuitive UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rhok.ca/projects/project-5-fairvote-ca-canvasing-tool/" rel="noopener noreferrer"&gt;&lt;strong&gt;Project five&lt;/strong&gt;&lt;/a&gt; was about an undertaking by &lt;a href="https://www.fairvote.ca/" rel="noopener noreferrer"&gt;Fair Vote Canada&lt;/a&gt; to try and make every Canadians vote more equal. The organization was looking for software to allow its canvassers an easier time tracking and managing canvassing areas. The resulting project will surely help Fair Vote Canada take great leaps towards achieving its goal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rhok.ca/projects/project-6-carlington-community-health-centre/" rel="noopener noreferrer"&gt;&lt;strong&gt;The final project&lt;/strong&gt;&lt;/a&gt; (which I was a part of) was submitted by the &lt;a href="http://www.carlington.ochc.org/" rel="noopener noreferrer"&gt;Carlington Community Health Centre&lt;/a&gt; to breathe life into an Ottawa Bad Date List that would help the sex-trade workers in the city have a safer working environment. The organization was looking for an app that could be used by phone or desktop that would allow workers to not only see vital information to clients that were posing harm to the trade, but submit their own information quickly to ensure the safety of their fellow workers. The end product in the hackathon was a great step towards achieving that goal.&lt;/p&gt;

&lt;p&gt;The final presentations of the hackathon were live-streamed &lt;a href="https://rhok.ca/hackathon-finale-and-project-presentations/" rel="noopener noreferrer"&gt;here&lt;/a&gt; (audio was missing for the first 13 minutes but they caught all the presentations), but the amazing thing that comes out of this is that these projects never seem to end when the weekend does.&lt;/p&gt;

&lt;h3&gt;
  
  
  Participants of the RHoK hackathons seem to have a habit of continuing on to make sure these projects reach a conclusion and it’ll be exciting to see the results of all the hard work in the real world.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F592%2F1%2A9-Rn3nnJIBhoZlr7ejKy9g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F592%2F1%2A9-Rn3nnJIBhoZlr7ejKy9g.jpeg"&gt;&lt;/a&gt;Photo Credit: &lt;a href="https://rhok.ca/events/rhok-8/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://rhok.ca/events/rhok-8/" rel="noopener noreferrer"&gt;https://rhok.ca/events/rhok-8/&lt;/a&gt;&lt;/p&gt;




</description>
      <category>hackathon</category>
    </item>
    <item>
      <title>The ForwardJS Battle — Part 2: Ottawa</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Fri, 01 Jun 2018 12:56:32 +0000</pubDate>
      <link>https://dev.to/qlikbranch/the-forwardjs-battle--part-2-ottawa-5h8m</link>
      <guid>https://dev.to/qlikbranch/the-forwardjs-battle--part-2-ottawa-5h8m</guid>
      <description>

&lt;p&gt;With &lt;a href="https://dev.to/qlikbranch/the-forwardjs-battle--part-1-san-fran-4icf-temp-slug-6327752"&gt;ForwardJS San Francisco&lt;/a&gt; behind me, I turned my sights on bringing Forward home with me to &lt;a href="https://forwardjs.com/ottawa"&gt;Ottawa&lt;/a&gt; for the second year in a row.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iJNtCUjy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1QhTaYQnuOywTusj5758sg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iJNtCUjy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1QhTaYQnuOywTusj5758sg.jpeg" alt=""&gt;&lt;/a&gt;Here I am taking ForwardJS Ottawa attendees through Halyard.js.&lt;/p&gt;

&lt;p&gt;ForwardJS Ottawa in 2017 was a cool, calm introduction to the Canadian capital. But this year, we wanted to go bigger…and better.&lt;/p&gt;

&lt;p&gt;The only way to do that was to pack the conference with great workshops and two days of stellar speakers, and boy did we deliver.&lt;/p&gt;

&lt;p&gt;Day 1 saw ForwardJS jump out the gate in full force. With &lt;a href="https://medium.com/u/fadbcd01c7a3"&gt;Andy Mockler&lt;/a&gt; and &lt;a href="https://twitter.com/kristencodes"&gt;Kristin Spencer&lt;/a&gt; starting the show schooling us on soft skills, the day was filled with awesome talks like &lt;a href="https://medium.com/u/624aec3174db"&gt;Adam Daw&lt;/a&gt; touting the &lt;a href="https://medium.com/coventure/js-minus-js-the-future-of-the-javascript-community-is-better-through-transpilation-b980d59eaa93"&gt;power of transpilation&lt;/a&gt;, &lt;a href="https://medium.com/u/6d5313b8bef9"&gt;Jan C. Liz-Fonts&lt;/a&gt; showing how to harness &lt;a href="https://forwardjs.com/ottawa/schedule#lecture-403"&gt;Blockchain in Javascript&lt;/a&gt; and &lt;a href="https://twitter.com/ThisIsMaryCodes"&gt;Mary Snow&lt;/a&gt; decoding the &lt;a href="https://forwardjs.com/ottawa/schedule#lecture-387"&gt;NodeJS Event Loop&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That first day brought so much great knowledge — so the speakers on day 2 really had their work cut out for them. And they were more than up to the task. The day saw &lt;a href="https://twitter.com/VossJenn"&gt;Jenn Voss&lt;/a&gt; bring us &lt;a href="https://forwardjs.com/ottawa/schedule#lecture-391"&gt;Tales from the QA Crypt&lt;/a&gt;, &lt;a href="https://medium.com/u/cf9894fccad7"&gt;Eric Adamski&lt;/a&gt;’s amazing energy with &lt;a href="https://forwardjs.com/ottawa/schedule#lecture-402"&gt;Rx and Async&lt;/a&gt;, &lt;a href="http://kscoult"&gt;Ksenia Coulter&lt;/a&gt; teaching us to &lt;a href="https://forwardjs.com/ottawa/schedule#lecture-399"&gt;Get the Most out of Code Reviews&lt;/a&gt; and &lt;a href="https://twitter.com/_briantavares"&gt;Brian Tavares&lt;/a&gt; closing out with a fantastic &lt;a href="https://forwardjs.com/ottawa/schedule#lecture-388"&gt;React Native&lt;/a&gt; talk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ee2sr1Jf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AtycsPdCz-1xigrlA5WwMCw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ee2sr1Jf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AtycsPdCz-1xigrlA5WwMCw.jpeg" alt=""&gt;&lt;/a&gt;ForwardJS donuts, anyone?&lt;/p&gt;

&lt;p&gt;I’m more than willing to admit bias and won’t deny it could be in part to my involvement in organizing or the fact it was in my hometown, but in the battle of San Francisco vs. Ottawa I’d say the “north of the border” contender took the ForwardJS crown this year.&lt;/p&gt;





</description>
      <category>datavisualization</category>
      <category>node</category>
      <category>reactnative</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>The ForwardJS Battle — Part 1: San Fran</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Fri, 11 May 2018 12:54:45 +0000</pubDate>
      <link>https://dev.to/qlikbranch/the-forwardjs-battle--part-1-san-fran-1910</link>
      <guid>https://dev.to/qlikbranch/the-forwardjs-battle--part-1-san-fran-1910</guid>
      <description>&lt;p&gt;February of 2018 saw me leaving the cold winter of Ottawa to bathe in the mild warmth of San Francisco. This wasn’t a vacation. I was tasked with donning the Qlik cap and representing our developer relations team with a talk. With five days full of workshops — I couldn’t just fly in, speak and fly out. I had to take advantage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F301%2F1%2AFJXu3AAyzpu7qLm1-nbJxw%402x.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F301%2F1%2AFJXu3AAyzpu7qLm1-nbJxw%402x.jpeg"&gt;&lt;/a&gt;Donning my Qlik cap while wear a ForwardJS hat&lt;/p&gt;

&lt;p&gt;Day 1 of ForwardJS had me digging into WebAPIs with &lt;a href="https://medium.com/u/c2e120a1a32" rel="noopener noreferrer"&gt;Aysegul Yonet&lt;/a&gt;. A tiny class with fewer than ten attendees meant we could get a lot done quickly and have some hacking fun of our own. While Aysegul covered the basics of a bunch of the different options now available to us devs in the browser, the funnest part was coding a script to see exactly how much of my hard drive IndexedDB would allow a site to eat up. Not very often a workshop has me routing for a script to win against my machine.&lt;/p&gt;

&lt;p&gt;Day 2 for me was the conference itself, which meant a less technical talk on the downfall of this years Ottawa Senators entitled “&lt;a href="https://forwardcourses.com/lectures/346" rel="noopener noreferrer"&gt;My Hockey Team Sucks&lt;/a&gt;” and a day of chilling at the Qlik table with &lt;a href="https://medium.com/u/edeece4a7db5" rel="noopener noreferrer"&gt;Ana Nennig&lt;/a&gt; pimping our awesome Branch swag and talking about the awesome power of the QIX engine.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-963582133112520704-383" src="https://platform.twitter.com/embed/Tweet.html?id=963582133112520704"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-963582133112520704-383');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=963582133112520704&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Day 3 brought me &lt;a href="https://medium.com/u/69ba9847d710" rel="noopener noreferrer"&gt;Brian Holt&lt;/a&gt; and his React + Redux workshop. I was really impressed with how Brian started with the basics, making code each element using React.createElement to see how the process works. A little while later (after getting over that icky feeling in my stomach that came from putting HTML in Javascript) we were introduced to the wonderful world of Redux, reducers and Redux middleware. This was a great workshop that Brian has brought around the world (which he tracks in the repo), so if it’s coming to a conference near you I suggest grabbing a seat.&lt;/p&gt;

&lt;p&gt;Last day of the conference had me sitting in on Webpack 101 with Freddy Rangel. Starting at the basics of initialization and running all the way through tree-shaking, Freddy did a great job of helping me de-mystify one of those things I usually leave to the Angular CLI to figure out. It’s also always nice when a teacher introduces a new teaching technique and Freddy’s approach of having a separate GitHub branch for each module made keep pace a breeze for everyone in the workshop.&lt;/p&gt;

&lt;p&gt;Overall I’d say the San Fran ForwardJS was a pretty great success and I knew I’d have to work extra hard with &lt;a href="https://medium.com/u/150969363672" rel="noopener noreferrer"&gt;Dave Nugent&lt;/a&gt; to make sure its Canadian counterpart lived up to the Forward reputation.&lt;/p&gt;




</description>
      <category>javascript</category>
      <category>react</category>
      <category>angular</category>
      <category>webapi</category>
    </item>
    <item>
      <title>deCODE Hackathon + Qlik = Awesome Results</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Fri, 10 Nov 2017 14:39:59 +0000</pubDate>
      <link>https://dev.to/qlikbranch/decode-hackathon--qlik--awesome-results-53lo</link>
      <guid>https://dev.to/qlikbranch/decode-hackathon--qlik--awesome-results-53lo</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F945%2F1%2AOkHNHWwwPnn9sYBruCdJKQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F945%2F1%2AOkHNHWwwPnn9sYBruCdJKQ.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second weekend of October myself and a band of &lt;a href="https://www.qlik.com/us/" rel="noopener noreferrer"&gt;Qlik&lt;/a&gt; developers teamed up with some of the top students in Ottawa for this year’s &lt;a href="http://hackdecode.io/" rel="noopener noreferrer"&gt;deCODE Hackathon&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Challenge
&lt;/h4&gt;

&lt;p&gt;But what challenge should our team tackle? After some discussion with Qlik’s corporate social responsibility (CSR) team, we decided the coolest thing for our team to work on would be the &lt;a href="https://oceanconference.un.org/commitments/#visual" rel="noopener noreferrer"&gt;Data Competition&lt;/a&gt; that the United Nations had at &lt;a href="https://oceanconference.un.org/" rel="noopener noreferrer"&gt;The Oceans Conference&lt;/a&gt; in June. As part of this competition, “participants were encouraged to use their imagination to produce visualizations that highlight insights from all the 1,380 voluntary commitments available in The Ocean Conference Registry of Voluntary Commitments.” The overall goal? &lt;strong&gt;#SAVEOUROCEAN&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Work
&lt;/h4&gt;

&lt;p&gt;With our challenge selected, it was time to get to work. We gave the students access to the data with &lt;a href="http://playground.qlik.com" rel="noopener noreferrer"&gt;Qlik Playground&lt;/a&gt;, taught them &lt;a href="http://help.qlik.com/en-US/sense-developer/3.0/Content/APIs-and-SDKs.htm" rel="noopener noreferrer"&gt;Qlik’s APIs&lt;/a&gt; and let them dive in…&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;And boy did they impress us.&lt;/strong&gt; The first thing I was impressed by was how quickly the students not only learned the Qlik APIs, but how quickly they realized the power of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When they learned that they didn’t have to bother with keeping the state of their selections, but simply make a selection call and let the Qlik Associative Engine handle all the data updating — they were blown away. They definitely put that power to use…and quickly in true hackathon style.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Awesome Results
&lt;/h4&gt;

&lt;p&gt;Over the span of just 22 hours the team brought together an awesome page that not only showed off the data, but allowed the individual user to find the answers themselves by filtering based on country, company, target —pretty much whatever they wanted.&lt;/p&gt;

&lt;p&gt;This project even recently made a United Nation’s &lt;a href="https://oceanconference.un.org/OceanAction/2" rel="noopener noreferrer"&gt;Ocean Action Newsletter&lt;/a&gt; (under Updates from Voluntary Commitments). We’re so incredibly proud of this team, especially the hardworking and eager students. This is well-deserved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So where is this awesome visualization?&lt;/strong&gt; Check out the &lt;a href="http://playground.qlik.com/showcase" rel="noopener noreferrer"&gt;Qlik Playground Showcase&lt;/a&gt; and view the “UN Our Oceans Challenge” project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And how can you help us with this important initiative?&lt;/strong&gt; If you want to get involved or play with the code yourself, the project is open sourced on &lt;a href="https://github.com/QlikHackathon/decode-oct-2017" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; as well.&lt;/p&gt;

&lt;p&gt;Enjoy! And let us know what you think in the comments.&lt;/p&gt;




</description>
      <category>data</category>
      <category>datascience</category>
      <category>socialresponsibilit</category>
      <category>hackathons</category>
    </item>
    <item>
      <title>From Custom Blogs to Medium: Our Transition (Part 2)</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Wed, 08 Mar 2017 14:39:12 +0000</pubDate>
      <link>https://dev.to/qlikbranch/from-custom-blogs-to-medium-our-transition-part-2-3dej</link>
      <guid>https://dev.to/qlikbranch/from-custom-blogs-to-medium-our-transition-part-2-3dej</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AIDHG41ZqotgLUpwMj6gqpA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AIDHG41ZqotgLUpwMj6gqpA.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It didn’t take long to realize that it wasn’t just the APIs, but the RSS feed itself was limited. After publishing a bunch of stories to our publication, we realized that stories were being removed from the Sense search. Would you like to guess why? The RSS feed ONLY GIVES THE LATEST 10 STORIES!!! There’s a lesson in load testing for you.&lt;/p&gt;

&lt;p&gt;I was now stuck with two problems:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Problem 1: How to properly keep the app up to date&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I decided to take another look at possible solutions. My brain wouldn’t stop iterating “there’s got to be a better way than this.”&lt;/p&gt;

&lt;p&gt;After doing some more digging and searching, I learned about &lt;a href="https://en.wikipedia.org/wiki/PubSubHubbub" rel="noopener noreferrer"&gt;PubSubHubbub&lt;/a&gt;. Yes, that’s really the name. And you would assume that is some sort of company or product name, but it’s actually a protocol that’s pretty similar to WebHooks.&lt;/p&gt;

&lt;p&gt;Basically you subscribe to a PubSubHubbub feed giving a callback url. The PubSubHubbub provider then sends a POST request to the callback url to confirm the subscription.&lt;/p&gt;

&lt;p&gt;Once this process is done, the provider will send a GET request to the callback URL any time new content is published to it. Sounds perfect!&lt;/p&gt;

&lt;p&gt;This time I was skeptical however. APIs didn’t help. RSS was limiting. Surely there was going to be something wrong. My assumption proved correct after doing a test run of the process and learning that the GET request from Superfeedr (Medium’s PubSubHubbub provider) didn’t actually have the content of the article, making this useless.&lt;/p&gt;

&lt;p&gt;Having learned this, I decided the best thing to do was to stick with the RSS feed at this point and simply &lt;a href="https://github.com/Qlik-Branch/branch-resource-library/blob/67f075a487d2751406cb8a3990230a54284943e1/feed-pull.js" rel="noopener noreferrer"&gt;remove the code that deleted stories from the db&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem 2: How to get the missing stories back
&lt;/h3&gt;

&lt;p&gt;Since the RSS only shows the last 10 stories and the PubSubHubbub method is for future stories, I was left with two possible options. The first was to manually enter the information into the database, which as a coder would go against every impulse in my brain.&lt;/p&gt;

&lt;p&gt;So the only option left is writing a script to download the data through HTTP requests. That involved doing the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find out where Medium lists stories for a publication (&lt;a href="https://medium.com/" rel="noopener noreferrer"&gt;https://medium.com/&lt;/a&gt;//)&lt;/li&gt;
&lt;li&gt;Analyze the HTML to determine how to pull out the link for each story&lt;/li&gt;
&lt;li&gt;Analyze the HTML of the story page to determine how to best get the data from it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;1 and 2 were pretty easy by themselves and Medium was very helpful with the third by providing most of the data we needed in meta tags. As for the content itself, it was simply a matter of finding the right div. With all this information, I just needed to find an npm package that would help me parse through the HTML (thank you &lt;a href="https://www.npmjs.com/package/cheerio" rel="noopener noreferrer"&gt;cheerio&lt;/a&gt;) and write the &lt;a href="https://gist.github.com/rjriel/8ec8cbfb0b87f1d5c65989d2e675873b" rel="noopener noreferrer"&gt;script&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  So now we’re done, right?
&lt;/h3&gt;

&lt;p&gt;We could be, or we could probably make things better. There still isn’t any code to remove stories if they have been deleted on Medium and there’s probably a way to use PubSubHubbub to use a subscription process instead of having a script running every once in a while.&lt;/p&gt;

&lt;p&gt;If you’d like to have some fun, I encourage you to fork the &lt;a href="https://github.com/Qlik-Branch/branch-resource-library" rel="noopener noreferrer"&gt;repo&lt;/a&gt;, try to solve these problems and submit a pull request if you do.&lt;/p&gt;




</description>
      <category>superfeedr</category>
      <category>media</category>
      <category>webhooks</category>
      <category>html</category>
    </item>
    <item>
      <title>From Custom Blogs to Medium: Our Transition (Part 1)</title>
      <dc:creator>Rey Riel</dc:creator>
      <pubDate>Thu, 23 Feb 2017 20:20:11 +0000</pubDate>
      <link>https://dev.to/qlikbranch/from-custom-blogs-to-medium-our-transition-part-1-4kgp</link>
      <guid>https://dev.to/qlikbranch/from-custom-blogs-to-medium-our-transition-part-1-4kgp</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hzWtY2xv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AIDHG41ZqotgLUpwMj6gqpA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hzWtY2xv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AIDHG41ZqotgLUpwMj6gqpA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I first signed on to the Dev Relations team at Qlik and began working with our main site &lt;a href="http://branch.qlik.com"&gt;Qlik Branch&lt;/a&gt; we were working with our own custom built blogs section. While this seemed easy enough for us to start with, there were a few problems with this.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exposure:&lt;/strong&gt; Our blogs were only available in our site and required existing users or posting links in order for the world to know about them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third Party Tools:&lt;/strong&gt; In order to allow the ability to use formatting in our blogs, we needed to use a third party content editor. When I came in we were using &lt;a href="http://summernote.org/"&gt;Summernote&lt;/a&gt;, then we tried moving to markdown with &lt;a href="https://simplemde.com/"&gt;SimpleMDE&lt;/a&gt;. While these options were both fairly robust, any found bugs became an issue and customization was a pain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance:&lt;/strong&gt; We were in charge of the storage of the blogs as well as the process for moderating them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After much back and forth within the team and discussion with others, we decided that Medium would be the way to go. While this would solve the problems above we had one major hurdle that we needed to figure out.&lt;/p&gt;

&lt;p&gt;While we were going use Medium to host our blogs (hereafter referred to as Mediums term “stories”) we still wanted to use the &lt;a href="https://help.qlik.com/en-US/sense-developer/3.2/Subsystems/EngineAPI/Content/Classes/AppClass/App-class-SearchAssociations-method.htm"&gt;Search&lt;/a&gt; capabilities available in the &lt;a href="https://help.qlik.com/en-US/sense-developer/3.0/Subsystems/EngineAPI/Content/introducing-engine-API.htm"&gt;Qlik Engine API&lt;/a&gt;. This involved any time a story was published that we pull all the information (including the story’s content) so that the Engine could load it into our Sense App.&lt;/p&gt;

&lt;p&gt;The first solution I searched for was using the Medium API. As a developer this seemed like the obvious solution, but I quickly ran into a big problem here. The Medium API itself is fairly limited and doesn’t allow you to either retrieve a list of stories for a publication or retrieve the information for an individual story. Without these abilities the API was pretty much a no go for me.&lt;/p&gt;

&lt;p&gt;Now I needed to find any type of source that could list a publications stories. After tons of searching, the only solution I could find was good ole RSS. Each publication has an RSS feed of its stories, and when you set the “RSS Feed” setting to &lt;strong&gt;Full&lt;/strong&gt; on a given publication you get all the content of the story as well. So I wrote a &lt;a href="https://github.com/Qlik-Branch/branch-resource-library/blob/1dbf848215506a0c6be4f02e2cb9fb8dd54d3a8d/feed-pull.js"&gt;quick script&lt;/a&gt; that will ping the RSS feed every X minutes, compare each story in the feed with a quick checksum to see if there are any changes to the stories and clear out the ones that aren’t in the feed (in case stories were removed for some reason). Problem solved!!!!!&lt;/p&gt;

&lt;p&gt;Actually, it wasn’t. More to come on that.&lt;/p&gt;




</description>
      <category>qlik</category>
      <category>api</category>
      <category>rss</category>
      <category>media</category>
    </item>
  </channel>
</rss>
