1 2 3 Previous Next

Qlik Design Blog

448 posts


Hello everyone. After I saw the popularity of Juan's Qlik Bot for Telegram written all in C#, I decided to create another one in JavaScript with Node.js and Enigma.js. Today I am going to share with you the code and how to get started creating your own bot for Telegram on any Operating System that has Node.js installed.


The server will be running under https so if you do not have valid certificates for your domain, or localhost if you are testing it on your local computer, you can have Qlik Sense Enterprise take care of that for you. From QMC, go to start->Certificates and then export for localhost using the "Platform Independent PEM-format"


Copy these certificates and paste them into {QlikBotNode folder}/app/server/certs/localhost


I have used 3 apps in this, helpdesk, Salesforce and CIO dashboard. The qvf for helpdesk is bundled in your Qlik Sense Desktop while the Salesforce one you can get from Salesforce/Files at master · yianni-ververis/Salesforce · GitHub and the CIO Dashboard one from CIO/Files at master · yianni-ververis/CIO · GitHub.


Now lets get the code from GitHub - qlik-bots/QlikBotNode: QlikBotNode is a server build in nodejs, expressjs and MySql that connects to chat and m…


From the command line using your favorite tool, I am using Git Bash for this one, type Npm install to get all of the required modules.


Install MySql or Xampp / Wamp and connect to it. Xampp is bundled with phpmyadmin so you can use that. Then create the database and the tables by running sql query (QlikBotNode/sensebot.sql at master · qlik-bots/QlikBotNode · GitHub)


Every platform, upon creation of the bot, it gives you some tokens so your code can authenticate with the platform's servers. Once we have these tokens, for security reasons, we need to set them as environment variables. So, lets create our bot and get our token.


Once you install Telegram Desktop, go to your "BotFather" contact and type "/newbot". Everything in Telegram that starts with "/" is a command. So we typed the command to create a new bot. This will give you an options menu to configure your bot.


Go ahead and give your Bot a name, an icon and a description. If you click on "Back to Bot", you will get a button with the "API Token". Take that token and store it as Environment Variable.

In windows you have to go to "Control Panel" -> "System" -> "Advanced System Settings" -> "Environment Variables" and set a new one as "TELEGRAM_BOT_TOKEN", while in Linux, from your directory (~), type "nano .bash_profile" or "vim .bash_profile" and enter a new line with the token "export TELEGRAM_BOT_TOKEN=######".


Now you should be ready to run your code. From the command line (Git Bash), type "gulp". If everything goes well and you do not have any errors, you should see a message "[nodemon] starting `node app/server/server.js`". Your server is up and running and communication via the Token auth has been established.


Now lets explore the Bot.

  • Type help to view all of the available commands main.png


  • Click on the Salesforce button or type /salesforce salesforce.png
  • Here, there are some buttons to get KPIs and one that takes you to the mashup for validation. Try them all!!!!!
  • Click on the CIO button or type /cio and then click on "Management" to get the set of KPIscio-dashboard-management.png
  • Click on the Helpdesk button or type /helpdesk helpdesk.png

That's it! Now you can a have a Node.js server running with your QlikBotNode and you can start experimenting with KPI commands in the Telegram app.

The code is open sourced at GitHub - qlik-bots/QlikBotNode: QlikBotNode is a server build in nodejs, expressjs and MySql that connects to chat and m…

Hey Guys! - Happy Friday! Yep I'm blogging on Friday this week and our Demo and Design Team will be taking my usual Tuesday slot next week, to blog about something many of you have been waiting for (mark my words) I think you ALL are going to love it - so until then you'll have to deal with me for today. So what difference does that make to you for today's blog?!?! Absolutely nothing!


Seriously though - back in September, with the announcement of Qlik Sense September 2017 Qlik Sense September 2017 - What's New - I made mention of an Extension Certification Pilot program which will allow extension authors to submit their extensions to Qlik for review, to be certified and supported by the author for use within the Qlik platform. So in this blog I am making good on my promise to update you on the progress of this with some detailed information that should answer a few questions.


In the November 20017 -  What's New in Qlik Sense November 2017 we made mention that certified extensions are now going to have some badging to identify that they are certified -- and that they will be made available on Qlik Market - our online partner solution showcase. However - we have had some members and partners with additional questions and I think the answers will benefit everyone.


What extensions are certified? (There is currently no badging or filter on Qlik Branch for these items)

The only certified extensions currently are the ones that we are planning to put on Qlik Sense Cloud in the near future. Once certified they will automatically be part of Qlik Sense Cloud and be available for installation with Qlik Sense Desktop and Enterprise. (available form Qlik Market)


Do you have any extensions that will be certified first?


These 4 are on the certification list, and final certification will be made shortly:


It’s important to note that the versions of these extensions available on Branch are NOT certified. Certified versions will only be available for use on Qlik Sense Cloud or available for download from Qlik Market (market.qlik.com). Only the versions on Qlik Market will be badged. The plan is for those versions on Qlik Branch to be the open source, work-in-progress versions, subject to change at any time, and therefore, can’t be certified.


What does certification entail for our customers, partners, community ?

For a customer, certification doesn’t entail anything different except using the certified version. For developers (whether they be our customers or partners, or outside of those communities) the certification process will mean submitting the extension to be run through a battery of tests to ensure that they run correctly, don’t use any undocumented APIs, contain no malicious code, and some other tests. If they want the extension to be listed on Qlik Market, there is another check that the QM team makes before they can be posted (mostly around brand compliance and usability).


How can I submit and extension?

The "official" certification program is not yet in place. The four extensions we certified were Qlik-created. We are not yet ready to accept outside submissions for certification but will have a process in place early next year, so please stay tuned.


Hope this information is helpful to you all and if you have any questions please post them below and I'll do my best to address them for you.


Have a great weekend everyone!



Michael Tarallo (@mtarallo) | Twitter



Additional Reference Resources:



Hello Qlik Community! In Tuesday's edition of the Design Blog I highlight some of the latest features found in our new Help Site - created with collaboration from our engineers, technical writers and our Product Content and Media team. We hope that the site's new layout and navigation features make it easier to find the information you need, when you need it.

The New Qlik Help Site

"Teamwork for results" -- this is one of Qlik's core values that many of us embrace when creating content that makes our community successful with the Qlik platform. However, few are aware of our unsung heroes that work behind the scenes to bring you this great content, delivered to the Qlik Help site as well as our Qlik Help YouTube channel. I'd like to take this moment to thank and recognize them on behalf of the Qlik Community.

There is a small army led by Renata Rieschel, Director Product Content and Media. Renata manages the development and maintenance of all the content, design and infrastructure of the Qlik Help site. Our technical writers and architects not only design and write the help documentation, but they are also tasked with writing video scripts and verifying content from a linguistic point of view for many of the structured help videos you will find on the Qlik Help Channel. We have even enlisted the appealing voice talents of our Collaboration Product Designer, Stephen Jasionowski and our Internal Communications Manager Helene Rudzinski to provide the voice-overs for many of the help channel videos created by our interaction designer Giuseppe Panella, including those from our new series Qlik Tuesday Tips and Tricks - found on YouTube.


With all this great content being created, both visual and text-based - how should it be hosted, what will the UI look like, how will people search, navigate and find what they need? That is where Magnus Franzen and Tobias Leander come in. They have built a framework and implemented a platform to host all this content and strive to improve the performance, accuracy and usability of it daily, providing you with the best user experience possible.

I'd also like to recognize our technical writers, interaction designers, web developers, architects and engineers in Product Content and Media whom all work together to bring you the best content in a timely and efficient manner.

Sara Garmark

Jim Siwila

Mary Newell

Chris Bushnell

Konstantinos Fioretos

Thomas Oxenby

Thomas Lewis

Daniel Chabot

Daniel Rignell

Filippo Guizzetti

Greg Ralston

Julia Beingessner

Kyle Weishaar

Mary Newell

Michelle Thomas

Ralf Narfeldt

Sarah Anderson

Ingemar Hansson

Karin Dahlgren

Swati Jha

Thank you Team!



Michael Tarallo (@mtarallo) | Twitter

Senior Product Marketing Manager



Can't see the video?


Download the .mp4 and watch from your computer or mobile device.

Since the introduction of Data Manager (the Data manager is where you visually add and manage data from your own data sources, or from Qlik DataMarket, so that you can use it in your app) Qlik has been constantly improving the set of features that makes the task of loading data an enjoyable part of the analysis process.


One of the most recent (and genius) additions to Data Manager is the “Summary card





So what is the Summary card?


Summary data profiling card is a visual representation of your data. It contains a set of elements, values and charts, that let you better understand each field in your data set.


Summary card has been designed to help you anticipate and prevent data quality issues before loading data into Qlik Sense. The Summary card content adapts to the field selected, so depending on the column data type, measure, dimension, or time it will present you with different insights.


For measures the following information is provided

  • Field name
  • Field type
  • Distinct Values
  • Total Values
  • Preview of the distinct value distribution in a bar chart showing the 20 highest count elements.
  • Value Range. It is a very interesting chart itself, for a measure field it will show a distribution chart showing the Min, Median, Average, and Max values for the field.
    If a temporal field is selected the Value Range will display the first and last date in the range.
  • Null Values and Mixed values charts only appears based on the field data.




How to access the Summary card


To see and use the Summary card by yourself you have to get to Data manager, In Data manager, select a table and click the pencil icon, then select a table field and the Summary card appears. Or just check the animation below:




Enjoy it!

Arturo (@arturoqv)

Our Christof Schwarz is back and has created a video tutorial that shows you how to use PERSISTENT CUSTOM colors with Qlik Sense visualizations. Persistent colors map all dimension values to specific consistent colors that are represented equally in all charts on the sheet. When you perform selections - the values displayed will all be represented by the same color in the charts. However the colors can change when the sequence or number of values for that dimension have changed. So this tip will show you how to assign specific custom colors to those values so they don't change and remain "sticky" as Christof puts it.




I posted back in May about creating an app that allows a user to authenticate with Facebook, grabs the user's post data, generates a load script, and creates a Qlik Sense session app with enigma.js (When do you post to Facebook?). At the time, I still had to overcome a few hurdles to put it up live so you could check it out yourself. Since then, it's also become possible to create a Qlik Sense session app with the Capability APIs so that you can use the Visualization API with your on-the-fly Qlik Sense session apps, which I posted about in September (Creating apps on the fly).


The demo is now up live, and there's two versions of it, one using enigma.js, and one using the Capability APIs. They're pretty minimal when it comes to design yet, I plan on building them out a bit more still, but it's cool to just see this all working, authenticating a user with Facebook, grabbing their data, generating a load script, creating a Qlik Sense session app, and visualizing the data. It's easy to see how something like this could be applied to a business use case where users may have very user-specific data. Check the demos out below!

Capability APIs version - Qlik Sense Session App Demo - Capability APIs

enigma.js version - Qlik Sense Session App Demo  - enigma.js

Jennell McIntire


Posted by Jennell McIntire Nov 17, 2017

The do..loop control statement is used in the script to iterate through one or more statements until a condition is met.  It is useful when you need to dynamically check a condition while executing statements in the script.  There are two ways the do..loop can be used.  The first is to check the condition before executing statement(s) in the loop and the second is to check the condition after the statement(s) in the loop have been executed.  Let’s look at some examples.


The script below checks to see if the condition has been met before the statements are executed.  When x is no longer less than 10, the do..loop will stop.

Do while.png

The script below is a little different.  In this script, the condition is checked after the statements are executed so the statements will always run at least one time.

Do loop while.png

Both scripts produce the same results as seen below.  Products 1 through 9 were created.

Do while table.png

The do..loop also can be used with the “Until” keyword instead of the “While” keyword producing different results.  In the script below, the statements will be executed until x is less than 10.  Since x is equal to 1 which is less than 10, the statements never run so no products are generated.

Do until.png

Now if the condition is checked after the statements are run, as shown in the script below, one product will be created since the statements run once before the condition is checked.

Do loop until.pngDo until table.png

Now what if you need to exit the do..loop.  You can do this using Exit do.  The loop will be exited and execution will continue with the statement(s) following the loop.  Here is an example of what this looks like.  In the script below, the loop will exit after the Load statement runs 3 times, stopping when x is equal to 3.

exit do when.png

In the script below, this loop will exit after the Load statement executes one time.  Since x is not equal to 3, the loop will be exited when execution gets to the exit do statement.

exit do unless.png

The do..loop is helpful in the script when you need to execute statements while /until a condition is met.   It provides flexibility since the condition can be dynamic and be evaluated before or after the statement(s) in the loop.  This is a little different from the For..Next loop where a counter is used to determine the number of times the statement(s) in the loop are executed.  Learn more about loops in Henric’s blog Loops in the Script.




Hey Guys - welcome to this week's Tuesday edition of the Qlik Design Blog. In this post we are excited to announce the availability of Qlik Sense November 2017. It has only been 2 months since our last release demonstrating our commitment to continuous and iterative improvements with our products. In this video I quickly breakdown what’s in the Qlik Sense November 2017 release. Included are some various chart improvements, new connectors and usability improvements to visual data preparation and the design interface. Let me know what you think, and leave a question or comment below.


Other videos for your viewing pleasure:




NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube.


Try Qlik Sense now: Try or Buy


Can't see the video? Download the .mp4 to watch on your computer or mobile device.



Michael Tarallo (@mtarallo) | Twitter

There are a lot of people that use Wordpress as their company's portal. If you are one of these people then, you may find this plugin very useful. You can create a mashup from within wordpress, using the Capabilities API, without writing a single line of code. Just add the settings with the host and the App ID, then the shortcode for the objects that you want and you are done.

Here, I will show you how to do that.


  1. First go to your wp admin panel, under "Plugins" click on "Add New" and then search for "Qlik"
  2. Click on "Install Now" and then on "Activate"
  3. This will create a "Qlik Sense" settings page, just open that
  4. Settings.png
  5. Here you need to define your host, the Virtual Proxy (prefix) and the App Id, as you would in a regular mashup. If you are planning on using a second app, then add the second app id in "App2 ID".
  6. Save changes.
  7. Then add the shortcode into your posts "[qlik-sense-object id="page1-obj2" qvid="nvqpV" height="400" app2="true"]"

- id: is the unique div id. This is needed especially when you want to display the same object in 2 different instances

- qvid: Is the object id as found in the "dev-hub/single-configurator"
- height: The height of the visualization in pixels
- nointeraction: Add this if you want to disable interactions. If you want the objects to have interaction, you can just omit this.

- app2: Add this if your object is coming from the second app that you have specified in the settings




  • I have added few objects with a specific height in a bootstrap template for better layout. Now, lets preview the page

Make sure you whitelist your url in the virtual proxy.


If you use it and like it, please give it a 5 star in Wordpress.


This is it!



In Portuguese: Qlik Sense Plugin para Wordpress by cleveranjos. Thank you Clever!

GitHub - yianni-ververis/qlik-sense-wordpress-plugin: A Wordpress plugin to create a Qlik Sense Mashup

Qlik Branch

drop.pngGood day Qlik Community! In this article / video - I'm excited to present to you a preview of the new Dropbox connector that comes with Qlik Sense Cloud Business and Qlik Sense Enterprise, available later this month. In short, Qlik Sense can now securely access Dropbox and pull data from Qlik Sense supported file sources, directly from the cloud share. The connector itself, is fairly simple to use. It's just like accessing a local folder structure. However, it gives you another option for storing data files for use with your Qlik Sense apps. It even opens some new techniques for refreshing file-based used by those apps. So, instead of storing data files in my Qlik Sense Cloud Workspace, I can choose to store them in Dropbox. With this approach I can automate a data file upload process when new data arrives..... add that to Qlik Sense Cloud Business and its Schedule Data Refresh capability, and you can completely automate the data upload and Qlik Sense app refresh process!


Want to learn more? Take a look at this brief video below to see how I used the Qlik Sense Dropbox connector and common, freely available Windows tools to make this happen.


NOTE: The approach I take in the video simulates data being written out / updated to disk and then transferred to Dropbox on an automated schedule using a 3rd party scheduler (Windows Task Scheduler). It is completely up to you how you would like to achieve this. For example, you could have a database process export files directly to the Dropbox folder, or even use an ETL tool workflow and its scheduler to write out data to the Dropbox share.


Have more ideas on how this can be achieved? We want to hear from you, so share them in the comments below.



Michael Tarallo (@mtarallo) | Twitter





Qlik Sense Cloud Business - Dropbox Connector - Refreshing file-based data


NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube



Can't see the YouTube video?


Download it here to watch on your computer or mobile device?

One of our new additions to the charts library is the Waterfall chart. It’s useful to visualize how an initial value evolves (increment or decrements) over time or in distinct stages. It’s widely used across companies and finance analysis seems to be a good fit for the waterfall chart. We commonly see this type of chart for Income or Cash flow statements.





How it works?


Qlik Sense waterfall chart is a simple non-dimensional chart, it’s composed by expressions only. Each measure can be configured to “Add”, “Subtract”, or “Subtotal”. Meaning we have total control over the graphical representation of the values, we could tell a positive number to subtract its value from previous column and viceversa.

The Income Statement example


The CFO of the company Fitness Equipment Limited (from Wikipedia) wants to visualize and analyze its company income statement by year.





After getting the data into Qlik Sense (one table with three columns, Concept, Year, and Amount) it's time to represent the Income Statements table above with a Waterfall chart. Remember, the goal is to show the profit (or loss) for the year amount, but more importantly how was the flow to get to that amount.


Creating the chart


  • In edit mode, drag and drop the new Waterfall chart into the Qlik Sense app
  • Add the first measure, it will typically be the starting amount or opening value. Revenue will make it in our example.
  • Add as many measures as you need to complete the individual contributing amounts. In our example:
    • Cost of Sales
    • SGA expenses
    • Gains from disposal of FA
    • Interest expense
    • Income tax expense



For those balance measures and those amounts that denote subtotals such as Gross Profit or Operating profit we don't need to create an expression, we just need to check the subtotal checkbox in the preceding measure.

For example, to calculate Gross Profit (Revenue - Cost of Sales) check "Subtotals" check box in Cost of Sales measure and set the "Subtotal label" to Gross Profit. Perform the same operation for all of the balance points in the chart.


Spicing it up


Waterfall chart comes with the usual customization panels as seen in any other Qlik Sense chart, but this time we have a dedicated Color section that includes a color picker for each one of the bar types that inhabit your chart.


The final waterfall chart looks like the picture below. It includes a year list box so now the CFO and any user will be able to quickly  visualize different years of Income Statements to analyze how each piece contributes to the total profit.




This is just an example of what a Waterfall chart can do for your business but I'm sure there are many more use cases for it, please share your experience with Waterfall chart in the comment section below.


Enjoy it!



PS: Find attached the Qlik Sense with the examples shown in the blog post

Try the app here:







NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube. (video and sample files)

For more videos that can help you get started with Qlik Sense:

One of the most useful features of Qlik Sense for me when developing a front-end is how easy it is to paginate data. Any front-end developer knows that updating thousands of dom elements is not exactly ideal, because dom updates are slow. But Qlik Sense makes it so easy to avoid ever having to do that.

For instance, take a look at the location dropdown for the Solar Eclipse demo at https://webapps.qlik.com/solar-eclipse/index.html. There’s over 29,000 rows there! But, here’s the trick – there’s only ever 10 rows in the dom at any time, and when a user scrolls what’s actually happening is the dropdown is receiving new data from Qlik Sense.

To paginate data with Qlik Sense is pretty simple. With enigma.js you’ll just create your object, either a hypercube or a list object, like usual, but you don’t need to pass it any qInitialDataFetch attribute. Then anytime you need some data, you just call a method to get data. Which method you call depends on your object. For a straight hypercube, you’d just call getHyperCubeData method like below -


  qInfo: {
    qType: "visualization"
  qHyperCubeDef: {       
    qDimensions: [
      // qDimensions
    qMeasures: [
      // qMeasures
}).then((object) => {
  object.getHyperCubeData('/qHyperCubeDef', [
   // this will fetch 1 page of data, but you could request multiple pages by adding more qPages here
      qTop: 0,
      qLeft: 1,
      qHeight: 2,
      qWidth: 10
  ]).then((data) => {
    // do stuff with data


If your hypercube is in pivot, stack, or tree mode, or if your object is a list object, you’ll have to use the corresponding method in place of getHyperCubeData, which you can find here https://help.qlik.com/en-US/sense-developer/September2017/Subsystems/EngineAPI/Content/Classes/GenericObjectClass/GenericObject-class.htm.


If you’re using the Capability APIs, while not technically supported, the same methods work with the object that is returned from the promise (not the layout returned in the callback).

Jennell McIntire

Dimension Colors

Posted by Jennell McIntire Oct 20, 2017

A few months ago, I wrote a blog about setting colors in master dimensions and measures.  Today I am going to share a little more about how master dimensions can be set to a single color or multiple colors.  Let’s first talk about setting a dimension to a single color.  This can be helpful when you want to use a color other than the Qlik Sense default color in your charts.  For instance, a bar chart may look like this with the default blue color.

default blue.png

But if your app is using a different color theme, you may want all the bars to be purple for instance.  You can do this by setting the Dimension color on the Edit dimension tab of the master dimension to the color you would like the dimension to be.  This color will be the same for all dimension values which is good practice when there are many dimension values.

edit dimension small.pngpurple small.png



















Now let's discuss setting a master dimension to multiple colors.  Sometimes you may need the color for each dimension value to be different.  This is when you can use the Value colors tab of the master dimension to set the colors of each dimension value.  The stacked bar chart below is a good example of when you may want the dimension values to have different colors.  This chart is looking at the calls by activity type and call type.  The call type dimension values are set to 3 different shades of blue so that they can be distinguished in the stacked bar chart.  If the color values were not set, then the standard blue, red and yellow colors would be used instead.


stacked small.png

The color values can be set on the Value colors tab of the master dimension (see image below).  A color scheme can be used to set the colors or each value can be set manually.  The call type field only has 3 values so it is a good candidate for value colors.  You want to avoid using values colors or coloring by dimension if there are several different dimension values.  Too many different colors (or not so different colors) can become confusing and indistinguishable to the user.

value colors.png


On the Value colors tab, there is also the option to select a color for Others, if you are adding any limitations to the dimension, or for Null values.  When using the value colors to color your dimensions, be sure to select color by dimension and enable library color in the properties of the chart.  Check out this video in Qlik Sense Help for more information.


These color features available in dimension master items provide one place to set and edit the dimension colors used in charts.  You can set it once and use it in multiple charts.  This promotes consistency in our apps thus making them easier to digest and understand.




cloud blog 2.pngHey Guys! Thanks for taking a moment to read this blog and view the brief 60 second video on our Qlik Web Connectors. It is no surprise that we are surrounded by mountains of data. But, what good is it if you don't have easy access to it? I'm not talking about data that sits in traditional files and databases. I'm talking about data that sits in numerous cloud-based services, social media and web sites.Depending on your business, this data can contain valuable insights that help you make better decisions as wells as customer sentiments that help improve your products and services.


Our Qlik Web Connectors is the answer to your additional data needs, whether its from a cloud-based CRM, data warehouse or social media application. Watch the below video to learn how simple it is to fetch this data and bring it directly into your Qlik Sense or QlikView environments. And...Qlik Sense Cloud Business subscribers, guess what, you have access it to them too!


Qlik Sense in 60 - Qlik Web Connectors


NOTE: To increase resolution or size of the video, select the YouTube logo at the bottom right of the player. You will be brought directly to YouTube where you can increase the resolution and size of the player window. Look for the 'settings' gears icon in the lower right of the player once at YouTube.


Qlik Sense Cloud Business Subscribers:

As stated in the video, Qlik Sense Cloud Business subscribers can also get immediate access to a great selection of many of our web connectors, with more being added on a regular basis. With Qlik Sense Cloud Business, subscribers can quickly and easily fetch data from many web-based sources with a new integrated connector selection list and query manager. The addition of these features, eliminates the need to copy and paste any script as you would when using the standalone Qlik Web Connector service.


How-To Videos

For more information on a list of Web Connectors just released for Qlik Sense Cloud Business check out our recent announcement here: Getting More Connected in the Cloud


Additional Web Connector Resources:


Learn more from my colleague Adam Mayer who shows some brief examples using Twiter, Facebook and Google Analytics:



We want to hear from you, so please join the conversation by posting your questions and comments below.




Mike Tarallo


Can't see the video?


Download the .mp4 and watch from your computer or mobile device

Filter Blog

By date:
By tag: