This is an automated email from the ASF dual-hosted git repository.
larsfrancke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-training.git
The following commit(s) were added to refs/heads/master by this push:
new 0738b8c TRAINING-15: Introductory slides for Apache Ignite (#22)
0738b8c is described below
commit 0738b8c56b6d9d1b804789184d638b9a9505f1b3
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Wed May 29 20:54:33 2019 +0300
TRAINING-15: Introductory slides for Apache Ignite (#22)
* TRAINING-15: Ignite slides skeleton
* TRAINING-15: Ignite slides engine fixed to show as slides
* TRAINING-15: Introductory slides, & node start
* TRAINING-15: Introductory slides, client/server nodes start
* Update content/Ignite/src/main/asciidoc/index.adoc
Co-Authored-By: Lars Francke <[email protected]>
* TRAINING-15: Introductory slides, client/server nodes start - updated
according to review
* Update content/Ignite/src/main/asciidoc/index.adoc
Co-Authored-By: Lars Francke <[email protected]>
---
content/Ignite/pom.xml | 230 ++++++++++++++
content/Ignite/src/main/asciidoc/index.adoc | 101 ++++++
.../src/main/java/example/StartClientNode.java | 37 +++
.../src/main/java/example/StartServerNode.java | 38 +++
content/Ignite/src/main/theme/apache.css | 349 +++++++++++++++++++++
5 files changed, 755 insertions(+)
diff --git a/content/Ignite/pom.xml b/content/Ignite/pom.xml
new file mode 100644
index 0000000..8bdf5fd
--- /dev/null
+++ b/content/Ignite/pom.xml
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>21</version>
+ </parent>
+
+ <groupId>org.apache.training</groupId>
+ <artifactId>apache-ignite</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>war</packaging>
+
+ <name>Apache Ignite Slides</name>
+ <description></description>
+
+ <properties>
+
<project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
<asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
+ <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
+ <revealjs.version>3.7.0</revealjs.version>
+ <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
+ <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
+ </properties>
+
+ <build>
+ <plugins>
+ <!-- Check if all source files have the required apache license
headers -->
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>license-check</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>com.googlecode.maven-download-plugin</groupId>
+ <artifactId>download-maven-plugin</artifactId>
+ <version>1.4.1</version>
+ <executions>
+ <execution>
+ <id>install-asciidoctor-revealjs</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>wget</goal>
+ </goals>
+ <configuration>
+
<url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
+ <unpack>true</unpack>
+
<outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
+
<outputDirectory>${project.build.directory}</outputDirectory>
+ </configuration>
+ </execution>
+ <execution>
+ <id>install-revealjs</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>wget</goal>
+ </goals>
+ <configuration>
+
<url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
+ <unpack>true</unpack>
+
<outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
+
<outputDirectory>${project.slides.directory}</outputDirectory>
+ </configuration>
+ </execution>
+ <execution>
+ <id>download-c3-css</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>wget</goal>
+ </goals>
+ <configuration>
+
<url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
+
<outputDirectory>${project.slides.directory}/css</outputDirectory>
+ </configuration>
+ </execution>
+ <execution>
+ <id>download-c3-js</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>wget</goal>
+ </goals>
+ <configuration>
+
<url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
+
<outputDirectory>${project.slides.directory}/js</outputDirectory>
+ </configuration>
+ </execution>
+ <execution>
+ <id>download-d3-js</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>wget</goal>
+ </goals>
+ <configuration>
+
<url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
+
<outputDirectory>${project.slides.directory}/js</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.asciidoctor</groupId>
+ <artifactId>asciidoctor-maven-plugin</artifactId>
+ <version>${asciidoctor.maven.plugin.version}</version>
+ <configuration>
+ <!-- Tell asciidoctor to use the reveal.js backend and not
the default html -->
+ <backend>revealjs</backend>
+ <!-- Configure where are all the asciidoc source files
located -->
+ <sourceDirectory>src/main/asciidoc</sourceDirectory>
+ <!-- Configure the target director to where will the
output be generated -->
+
<outputDirectory>${project.slides.directory}</outputDirectory>
+ <attributes>
+ <icons>font</icons>
+ </attributes>
+ <!-- output file-->
+ <outputFile>index.html</outputFile>
+ <!-- This has to point to the asciidoctor-revealjs
directory which contains all the "slim" files -->
+
<templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
+ <attributes>
+ <!--
+ Tell the system the relative path to the reveal.js
files
+ inside the generated-slides directory.
+ -->
+
<revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
+ <!--
+ Use our custom theme, which is defined by
src/main/theme/apache.css
+ and copied inside the reveal.js installation by
the resources plugin a few lines
+ up inside this pom.
+ -->
+ <revealjs_theme>apache</revealjs_theme>
+ </attributes>
+ </configuration>
+ <executions>
+ <execution>
+ <id>generate-slides</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>process-asciidoc</goal>
+ </goals>
+
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.asciidoctor</groupId>
+ <artifactId>asciidoctorj</artifactId>
+ <version>${asciidoctorj.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>${maven-resources-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>copy-resources</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+
<outputDirectory>${project.build.directory}</outputDirectory>
+ <resources>
+ <!-- Copy our css-theme to the reveal.js theme
directory -->
+ <resource>
+ <directory>src/main/theme</directory>
+ <filtering>true</filtering>
+
<targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>3.2.2</version>
+ <configuration>
+ <failOnMissingWebXml>false</failOnMissingWebXml>
+
<warSourceDirectory>src/target/generated-slides</warSourceDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-maven-plugin</artifactId>
+ <version>9.4.14.v20181114</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.ignite</groupId>
+ <artifactId>ignite-core</artifactId>
+ <version>2.7.0</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/content/Ignite/src/main/asciidoc/index.adoc
b/content/Ignite/src/main/asciidoc/index.adoc
new file mode 100644
index 0000000..3c602a6
--- /dev/null
+++ b/content/Ignite/src/main/asciidoc/index.adoc
@@ -0,0 +1,101 @@
+////
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+////
+:revealjs_progress: true
+:revealjs_slidenumber: true
+:sourcedir: ../java
+
+== What is Apache Ignite?
+Ignite™ is a memory-centric distributed database, caching, and processing
platform.
+
+2 major use-cases
+
+- In-Memory Data Grid (IMDG)
+- In-Memory Database (IMDB)
+
+== In-Memory Data Grid
+IMDG = Stores data (data grid) + Processes data (compute grid)
+
+- Stores entries in-memory
+- Data is distributed among nodes
+- Needs external store
+- Collocated Processing = code goes to data
+
+== In-Memory Database
+In Memory (or memory-centric) database
+
+- Ignite has Native Persistence since V2.1
+- Scalable: Each node stores only it's own data part
+
+Ignite can be used in combined mode
+(part of data is in-memory, part - persisted)
+
+== Why you may need Apache Ignite™
+- To speed up a slow traditional database by caching entries
+- To cache data from remote sources (REST, SOAP, any other network protocols)
+- For projects from scratch: Build a scalable solution with horizontal scaling
+- To remove a computational load from overloaded database
+- Avoid single point of failure by changing traditional database to cluster
+
+== Nodes
+Apache Ignite cluster consists of two (major) type of nodes
+
+- Server node
+* Can store data
+* Can execute compute jobs
+* Usually, standalone JVM
+
+- Client node
+* Used to connect to the cluster
+
+== Setting up a project
+
+Gradle
+[source,groovy]
+----
+compile group: 'org.apache.ignite', name: 'ignite-core', version: '2.7.0'
+----
+
+Maven
+[source,xml]
+----
+<dependency>
+ <groupId>org.apache.ignite</groupId>
+ <artifactId>ignite-core</artifactId>
+ <version>2.7.0</version>
+</dependency>
+----
+
+== Starting a server node
+By default, Ignite starts server node
+[source,java]
+----
+include::{sourcedir}/example/StartServerNode.java[tags=contains,indent=0]
+----
+
+== Starting client
+Change configuration to start Ignite client
+[source,java]
+----
+include::{sourcedir}/example/StartClientNode.java[tags=contains,indent=0]
+----
+Both server and client nodes will log
+
+`Topology snapshot [ver=2, locNode=b5fc314f, servers=1, clients=1,
state=ACTIVE, CPUs=12, offheap=3.2GB, heap=7.1GB]`
+
+This means nodes detected each other
diff --git a/content/Ignite/src/main/java/example/StartClientNode.java
b/content/Ignite/src/main/java/example/StartClientNode.java
new file mode 100644
index 0000000..5975d41
--- /dev/null
+++ b/content/Ignite/src/main/java/example/StartClientNode.java
@@ -0,0 +1,37 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+package example;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.configuration.IgniteConfiguration;
+
+import java.io.IOException;
+
+public class StartClientNode {
+ public static void main(String[] args) throws IOException {
+ // tag::contains[]
+ IgniteConfiguration cfg = new IgniteConfiguration();
+ cfg.setClientMode(true);
+ try (Ignite ignite = Ignition.start(cfg)) {
+
+ }
+ // end::contains[]
+ }
+}
\ No newline at end of file
diff --git a/content/Ignite/src/main/java/example/StartServerNode.java
b/content/Ignite/src/main/java/example/StartServerNode.java
new file mode 100644
index 0000000..28c2dcb
--- /dev/null
+++ b/content/Ignite/src/main/java/example/StartServerNode.java
@@ -0,0 +1,38 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+package example;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.configuration.IgniteConfiguration;
+
+import java.io.IOException;
+
+public class StartServerNode {
+ public static void main(String[] args) throws IOException {
+ // tag::contains[]
+ IgniteConfiguration cfg = new IgniteConfiguration();
+
+ try (Ignite ignite = Ignition.start(cfg)) {
+ System.out.print("Press any key to stop server.");
+ System.in.read();
+ }
+ // end::contains[]
+ }
+}
\ No newline at end of file
diff --git a/content/Ignite/src/main/theme/apache.css
b/content/Ignite/src/main/theme/apache.css
new file mode 100644
index 0000000..079a53f
--- /dev/null
+++ b/content/Ignite/src/main/theme/apache.css
@@ -0,0 +1,349 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+*/
+
+section.has-light-background, section.has-light-background h1,
section.has-light-background h2, section.has-light-background h3,
section.has-light-background h4, section.has-light-background h5,
section.has-light-background h6 {
+ color: #fff; }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+ background-image: url("../../../images/background.jpg");
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-color: #fff; }
+
+.reveal {
+ font-family: Panton-Regular, Helvetica, sans-serif;
+ font-size: 34px;
+ font-weight: normal;
+ color: #000; }
+
+::selection {
+ color: #000;
+ background: #bee4fd;
+ text-shadow: none; }
+
+.reveal .slides > section, .reveal .slides > section > section {
+ line-height: 1.3;
+ font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
+ margin: 0 0 20px 0;
+ color: #000;
+ font-family: Panton-Regular, Helvetica, sans-serif;
+ font-weight: 600;
+ line-height: 1.2;
+ letter-spacing: normal;
+ text-transform: uppercase;
+ text-shadow: none;
+ word-wrap: break-word; }
+
+.reveal h1 {
+ font-size: 2.5em; }
+
+.reveal h2 {
+ font-size: 1.6em; }
+
+.reveal h3 {
+ font-size: 1.3em; }
+
+.reveal h4 {
+ font-size: 1em; }
+
+.reveal h1 {
+ text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+ margin: 20px 0;
+ line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img, .reveal video, .reveal iframe {
+ max-width: 95%;
+ max-height: 95%; }
+
+.reveal strong, .reveal b {
+ font-weight: bold; }
+
+.reveal em {
+ font-style: italic; }
+
+.reveal ol, .reveal dl, .reveal ul {
+ display: inline-block;
+ text-align: left;
+ margin: 0 0 0 1em; }
+
+.reveal ol {
+ list-style-type: decimal; }
+
+.reveal ul {
+ list-style-type: disc; }
+
+.reveal ul ul {
+ list-style-type: square; }
+
+.reveal ul ul ul {
+ list-style-type: circle; }
+
+.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
+ display: block;
+ margin-left: 40px; }
+
+.reveal dt {
+ font-weight: bold; }
+
+.reveal dd {
+ margin-left: 40px; }
+
+.reveal q, .reveal blockquote {
+ quotes: none; }
+
+.reveal blockquote {
+ display: block;
+ position: relative;
+ width: 70%;
+ margin: 20px auto;
+ padding: 5px;
+ font-style: italic;
+ background: rgba(255, 255, 255, 0.05);
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child, .reveal blockquote p:last-child {
+ display: inline-block; }
+
+.reveal q {
+ font-style: italic; }
+
+.reveal pre {
+ display: block;
+ position: relative;
+ width: 90%;
+ margin: 20px auto;
+ text-align: left;
+ font-size: 0.55em;
+ font-family: monospace;
+ line-height: 1.2em;
+ word-wrap: break-word;
+ box-shadow: 0 0 6px rgba(0, 0, 0, 0.3); }
+
+.reveal code {
+ font-family: monospace; }
+
+.reveal pre code {
+ display: block;
+ padding: 5px;
+ overflow: auto;
+ max-height: 400px;
+ word-wrap: normal;
+ background: #3F3F3F;
+ color: #DCDCDC; }
+
+.reveal table {
+ margin: auto;
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+.reveal table th {
+ font-weight: bold; }
+
+.reveal table th, .reveal table td {
+ text-align: left;
+ padding: 0.2em 0.5em 0.2em 0.5em;
+ border-bottom: 1px solid; }
+
+.reveal table th[align="center"], .reveal table td[align="center"] {
+ text-align: center; }
+
+.reveal table th[align="right"], .reveal table td[align="right"] {
+ text-align: right; }
+
+.reveal table tr:last-child td {
+ border-bottom: none; }
+
+.reveal sup {
+ vertical-align: super; }
+
+.reveal sub {
+ vertical-align: sub; }
+
+.reveal small {
+ display: inline-block;
+ font-size: 0.6em;
+ line-height: 1.2em;
+ vertical-align: top; }
+
+.reveal small * {
+ vertical-align: top; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+ color: #42affa;
+ text-decoration: none;
+ -webkit-transition: color 0.15s ease;
+ -moz-transition: color 0.15s ease;
+ transition: color 0.15s ease; }
+
+.reveal a:hover {
+ color: #8dcffc;
+ text-shadow: none;
+ border: none; }
+
+.reveal .roll span:after {
+ color: #fff;
+ background: #068ee9; }
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+ margin: 15px 0;
+ /*background: rgba(255, 255, 255, 0.12);*/
+ /*border: 4px solid #fff;*/
+ /*box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);*/ }
+
+.reveal a img {
+ -webkit-transition: all 0.15s linear;
+ -moz-transition: all 0.15s linear;
+ transition: all 0.15s linear; }
+
+.reveal a:hover img {
+ background: rgba(255, 255, 255, 0.2);
+ border-color: #42affa;
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls div.navigate-left, .reveal .controls
div.navigate-left.enabled {
+ border-right-color: #42affa; }
+
+.reveal .controls div.navigate-right, .reveal .controls
div.navigate-right.enabled {
+ border-left-color: #42affa; }
+
+.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
+ border-bottom-color: #42affa; }
+
+.reveal .controls div.navigate-down, .reveal .controls
div.navigate-down.enabled {
+ border-top-color: #42affa; }
+
+.reveal .controls div.navigate-left.enabled:hover {
+ border-right-color: #8dcffc; }
+
+.reveal .controls div.navigate-right.enabled:hover {
+ border-left-color: #8dcffc; }
+
+.reveal .controls div.navigate-up.enabled:hover {
+ border-bottom-color: #8dcffc; }
+
+.reveal .controls div.navigate-down.enabled:hover {
+ border-top-color: #8dcffc; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+ background: rgba(0, 0, 0, 0.2); }
+
+.reveal .progress span {
+ background: #42affa;
+ -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+ transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
+
+/*********************************************
+ * SLIDE NUMBER
+ *********************************************/
+.reveal .slide-number {
+ color: #42affa; }
+
+.reveal .red {
+ color: red;
+}
+
+/*********************************************
+ * C3JS Charts
+ *********************************************/
+
+.c3 {
+ fill: white; }
+
+.c3 line, .c3 path {
+ stroke: white !important; }
+
+/*********************************************
+ * Custom styling of individual charts
+ *********************************************/
+
+#most-significant-barriers .c3-shape .c3-shape-2 .c3-bar .c3-bar-2 {
+ color: red;
+}
+
+/*********************************************
+ * Footer and Header
+ *********************************************/
+
+.header {
+ position:relative;
+}
+/*.header .left {
+ position:absolute;
+ top: 5px;
+ left: 5px;
+ width: 196px;
+ height: 100px;
+ background-image: url("../../../images/logo-building-iot.png");
+}*/
+.header .right {
+ position:absolute;
+ top: 5px;
+ right: 5px;
+ width: 246px;
+ height: 100px;
+ background-image: url("../../../images/logo-apache.png");
+}
+
+.footer {
+ position:relative;
+}
+/*.footer .left {
+ position:absolute;
+ bottom: 5px;
+ left: 5px;
+ width: 392px;
+ height: 50px;
+ background-image: url("../../../images/logo-company.png");
+}
+.footer .right {
+ position:absolute;
+ bottom: 5px;
+ right: 5px;
+ width: 306px;
+ height: 100px;
+ background-image: url("../../../images/logo-training.png");
+}*/
+