mirror of
https://github.com/vbatts/talks.git
synced 2024-12-28 17:46:31 +00:00
2195 lines
85 KiB
HTML
2195 lines
85 KiB
HTML
|
<!DOCTYPE html>
|
|||
|
<html class="sl-root decks export offline loaded">
|
|||
|
<head>
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
|
|||
|
<meta charset="utf-8">
|
|||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
|||
|
<title>Reproduce and Verify Filesystems [2016 ContainerCon NE]</title>
|
|||
|
|
|||
|
<meta name="description" content="A side effect of the many new ways to package filesystems (here's looking at you, containers!), is that filesystems are being copied around without many of the features that traditional packaging provided (i.e. `rpm -qV ...`). Much progress has been made for reproducible checksums, of which Docker now includes for better content addressibility. In this talk Vincent Batts will review options for distributing filesystems with reproducibility, and verifying the at-rest outcomes.">
|
|||
|
|
|||
|
<link rel="stylesheet" type="text/css" href="lib/offline-v2.css">
|
|||
|
|
|||
|
<!-- Team CSS -->
|
|||
|
<style id="global-css-output" type="text/css">
|
|||
|
@import url("https://s3.amazonaws.com/static.slid.es/fonts/overpass2/overpass2.css");
|
|||
|
.reveal {
|
|||
|
|
|||
|
|
|||
|
/*fix icon inversion*/
|
|||
|
|
|||
|
}
|
|||
|
.reveal svg,
|
|||
|
.reveal text,
|
|||
|
.reveal tspan,
|
|||
|
.reveal svg text {
|
|||
|
font-family: "Overpass 2", Overpass, sans-serif !important;
|
|||
|
color: currentcolor;
|
|||
|
fill: currentcolor;
|
|||
|
}
|
|||
|
.reveal .sl-block {
|
|||
|
color: #354045;
|
|||
|
fill: currentcolor;
|
|||
|
}
|
|||
|
.reveal .sl-block svg {
|
|||
|
color: currentcolor;
|
|||
|
}
|
|||
|
.reveal .has-dark-background,
|
|||
|
.reveal .has-dark-background > .sl-block {
|
|||
|
color: white;
|
|||
|
fill: currentcolor;
|
|||
|
}
|
|||
|
.reveal section > .sl-block .redhat-logo .logotext {
|
|||
|
fill: #000000;
|
|||
|
}
|
|||
|
.reveal .has-dark-background > .sl-block .redhat-logo .logotext {
|
|||
|
fill: #ffffff;
|
|||
|
}
|
|||
|
.reveal .has-dark-background > .sl-block[data-block-type="image"] {
|
|||
|
color: #ffffff;
|
|||
|
}
|
|||
|
.reveal [fill="none"] {
|
|||
|
fill: none !important;
|
|||
|
}
|
|||
|
.reveal [fill="#a30000"] {
|
|||
|
fill: #aa0000 !important;
|
|||
|
}
|
|||
|
.reveal [fill="#cc2029"],
|
|||
|
.reveal [fill="#cb2027"],
|
|||
|
.reveal [fill="#c00"] {
|
|||
|
fill: #cc0000 !important;
|
|||
|
}
|
|||
|
.reveal [fill="#fff"] {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal [fill="#6d6e70"] {
|
|||
|
fill: #6d6e70 !important;
|
|||
|
}
|
|||
|
.reveal [fill="#231f20"] {
|
|||
|
fill: currentcolor !important;
|
|||
|
}
|
|||
|
.reveal [fill="#efab1f"] {
|
|||
|
fill: #efab1f !important;
|
|||
|
}
|
|||
|
.reveal [fill="#92d400"] {
|
|||
|
fill: #92d400 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [fill="#6d6e70"] {
|
|||
|
fill: #266272 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [fill="#fff"] {
|
|||
|
fill: #555555 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [fill="#fff"] {
|
|||
|
fill: #333333 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [stroke="#231f20"] {
|
|||
|
stroke: currentcolor;
|
|||
|
}
|
|||
|
.reveal [data-inline-svg="true"] img {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
|
|||
|
</style>
|
|||
|
|
|||
|
<!-- Theme CSS -->
|
|||
|
<style id="theme-css-output" type="text/css">
|
|||
|
@import url(//overpassmonotest-30e2.kxcdn.com/overpass-mono.css);
|
|||
|
.reveal {
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
.sl-block[data-block-type="snippet"],
|
|||
|
.sl-block[data-block-type="image"]
|
|||
|
{
|
|||
|
text,
|
|||
|
tspan,
|
|||
|
polygon,
|
|||
|
path,
|
|||
|
rect,
|
|||
|
ellipse {
|
|||
|
fill: currentcolor;
|
|||
|
}
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
/*slide-default*/
|
|||
|
|
|||
|
/*Custom Ordered Lists */
|
|||
|
|
|||
|
/*helpers*/
|
|||
|
|
|||
|
/*fixing left aligned text*/
|
|||
|
|
|||
|
/*h1,h2,h3,h4,h5,h6{&::first-letter{margin-left:-.09em;}}*/
|
|||
|
|
|||
|
/*icon absolute brute-fix*/
|
|||
|
|
|||
|
/*
|
|||
|
.present .icon.stroked path.long{ stroke-width: 2px ;
|
|||
|
-webkit-animation: icon-animation-long 3.5s 1.5s 1;
|
|||
|
-moz-animation: icon-animation-long 3.5s 1.5s 1;
|
|||
|
animation: icon-animation-long 3.5s 1.5s 1;
|
|||
|
}*/
|
|||
|
|
|||
|
/*
|
|||
|
.present .icon.stroked path.short{
|
|||
|
-webkit-animation: icon-animation-short 3.5s 1.5s 1;
|
|||
|
-moz-animation: icon-animation-short 3.5s 1.5s 1;
|
|||
|
animation: icon-animation-short 3.5s 1.5s 1;
|
|||
|
}*/
|
|||
|
|
|||
|
/*controls logic*/
|
|||
|
|
|||
|
/*animated logos with complex svg segments*/
|
|||
|
|
|||
|
/*transitions*/
|
|||
|
|
|||
|
/*logos svg files that contain inverted path alternates */
|
|||
|
|
|||
|
/* call to action */
|
|||
|
|
|||
|
/* tables in snippets.... the devil */
|
|||
|
|
|||
|
/* tables in text */
|
|||
|
|
|||
|
/*testimonial snippet */
|
|||
|
|
|||
|
/*for inverting images*/
|
|||
|
|
|||
|
/**/
|
|||
|
|
|||
|
/*code blocks*/
|
|||
|
|
|||
|
/* round line arrows */
|
|||
|
|
|||
|
/*fix icon inversion*/
|
|||
|
|
|||
|
/*body:hover .corner svg{transform: translate(30%, 30%)}*/
|
|||
|
|
|||
|
}
|
|||
|
.reveal.reveal[role="application"] > .backgrounds > .slide-background:not(.stack):first-child,
|
|||
|
.reveal.reveal[role="application"] > .backgrounds > .stack:first-child > .slide-background:first-child,
|
|||
|
.reveal.reveal[role="application"] .slides > .pdf-page:not(.stack):first-child .slide-background,
|
|||
|
.reveal.reveal[role="application"] .slides > .stack:first-child > .pdf-page:first-child .slide-background {
|
|||
|
background-color: #900;
|
|||
|
color: #fff;
|
|||
|
background-size: cover;
|
|||
|
background-repeat: no-repeat;
|
|||
|
background-position: 50% 50%;
|
|||
|
background-image: linear-gradient(-45deg, #8e0000 20%, #820000 20%, #990000 85%, #890000 85%);
|
|||
|
min-height: 100vh;
|
|||
|
}
|
|||
|
.reveal.reveal[role="application"] > .backgrounds > .slide-background:not(.stack):first-child.has-light-background,
|
|||
|
.reveal.reveal[role="application"] > .backgrounds > .stack:first-child > .slide-background:first-child.has-light-background,
|
|||
|
.reveal.reveal[role="application"] .slides > .pdf-page:not(.stack):first-child .slide-background.has-light-background,
|
|||
|
.reveal.reveal[role="application"] .slides > .stack:first-child > .pdf-page:first-child .slide-background.has-light-background {
|
|||
|
background-image: none;
|
|||
|
}
|
|||
|
.reveal.reveal .slides > .section:first-child,
|
|||
|
.reveal.reveal[role="application"] > .slides > .section:first-child .sl-block {
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal .name {
|
|||
|
white-space: nowrap;
|
|||
|
}
|
|||
|
.reveal .reveal,
|
|||
|
.reveal .sl-block,
|
|||
|
.reveal .sl-block-content,
|
|||
|
.reveal .sl-block-content div,
|
|||
|
.reveal .sl-block-content p,
|
|||
|
.reveal .sl-block-content h1,
|
|||
|
.reveal .sl-block-content h2,
|
|||
|
.reveal .sl-block-content h3,
|
|||
|
.reveal .sl-block-content h4 {
|
|||
|
font-family: "Overpass 2", overpass, "Hiragino Kaku Gothic", "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ Pro W3", sans-serif;
|
|||
|
}
|
|||
|
.reveal .future .sl-block-content,
|
|||
|
.reveal .past .sl-block-content {
|
|||
|
transition: none !important;
|
|||
|
}
|
|||
|
.reveal section,
|
|||
|
.reveal.reveal .has-dark-background,
|
|||
|
.reveal section.background-shade-dark {
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal.reveal .has-dark-background a {
|
|||
|
color: #eee;
|
|||
|
}
|
|||
|
.reveal.reveal .has-dark-background a:hover {
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal .backgrounds {
|
|||
|
background: #f3f4f4;
|
|||
|
}
|
|||
|
.reveal .slide-background {
|
|||
|
background-size: cover;
|
|||
|
background-position: 50% 50%;
|
|||
|
background-repeat: no-repeat;
|
|||
|
}
|
|||
|
.reveal .slide-background.has-light-background {
|
|||
|
/*background-image: url(//s3.amazonaws.com/media-p.slid.es/uploads/team-32/images/1297460/standard-background.svg);*/
|
|||
|
|
|||
|
}
|
|||
|
.reveal .backgrounds .paint-it-red {
|
|||
|
background-color: #c00 !important;
|
|||
|
-moz-background-blend-mode: multiply;
|
|||
|
-webkit-background-blend-mode: multiply;
|
|||
|
-ms-background-blend-mode: multiply;
|
|||
|
background-blend-mode: multiply;
|
|||
|
}
|
|||
|
.reveal .paint-it-red {
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .icon.stroked path,
|
|||
|
.reveal section.background-shade-dark .icon.stroked path,
|
|||
|
.reveal section.light-foreground .icon.stroked path {
|
|||
|
stroke: #fff !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .redhat-product-logotype path,
|
|||
|
.reveal section.background-shade-dark .redhat-product-logotype path,
|
|||
|
.reveal section.light-foreground .redhat-product-logotype path {
|
|||
|
fill: #ffffff;
|
|||
|
}
|
|||
|
.reveal .has-dark-background text.logotext,
|
|||
|
.reveal section.background-shade-dark text.logotext,
|
|||
|
.reveal section.light-foreground text.logotext,
|
|||
|
.reveal .has-dark-background .logotext text,
|
|||
|
.reveal section.background-shade-dark .logotext text,
|
|||
|
.reveal section.light-foreground .logotext text,
|
|||
|
.reveal .has-dark-background path.logotext,
|
|||
|
.reveal section.background-shade-dark path.logotext,
|
|||
|
.reveal section.light-foreground path.logotext,
|
|||
|
.reveal .has-dark-background path.logotype,
|
|||
|
.reveal section.background-shade-dark path.logotype,
|
|||
|
.reveal section.light-foreground path.logotype,
|
|||
|
.reveal .has-dark-background .logotext path,
|
|||
|
.reveal section.background-shade-dark .logotext path,
|
|||
|
.reveal section.light-foreground .logotext path {
|
|||
|
fill: #fff !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .closing-logo .logotext,
|
|||
|
.reveal section.background-shade-dark .closing-logo .logotext,
|
|||
|
.reveal section.light-foreground .closing-logo .logotext,
|
|||
|
.reveal .has-dark-background .redhat-logo .logotext,
|
|||
|
.reveal section.background-shade-dark .redhat-logo .logotext,
|
|||
|
.reveal section.light-foreground .redhat-logo .logotext {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal .has-light-background .icon.stroked path {
|
|||
|
stroke: currentcolor;
|
|||
|
}
|
|||
|
.reveal .has-light-background .redhat-logo .logotext {
|
|||
|
fill: #000000 !important;
|
|||
|
}
|
|||
|
.reveal .sl-block-content ol li {
|
|||
|
position: relative;
|
|||
|
padding-bottom: .5em;
|
|||
|
}
|
|||
|
.reveal .sl-block-content ol li > p:first-child {
|
|||
|
margin: 0;
|
|||
|
}
|
|||
|
.reveal .sl-block-content ol > li::before {
|
|||
|
margin-left: -2.5em;
|
|||
|
}
|
|||
|
.reveal .sl-block-content > ol > li:before {
|
|||
|
float: left;
|
|||
|
text-align: center;
|
|||
|
box-shadow: inset 0 0 0 .1em;
|
|||
|
border-radius: 50%;
|
|||
|
}
|
|||
|
.reveal .sl-block-content ol {
|
|||
|
counter-reset: section;
|
|||
|
list-style-type: none;
|
|||
|
margin: 0 0 0 2.5em;
|
|||
|
display: block;
|
|||
|
}
|
|||
|
.reveal .sl-block-content ol ol {
|
|||
|
margin-top: .5em;
|
|||
|
}
|
|||
|
.reveal .sl-block-content ol > li:before {
|
|||
|
font-weight: 400;
|
|||
|
display: inline-block;
|
|||
|
width: 1.75em;
|
|||
|
height: 1.75em;
|
|||
|
line-height: 1.75em;
|
|||
|
text-align: center;
|
|||
|
letter-spacing: 0;
|
|||
|
font-size: .75em;
|
|||
|
margin: 0 0.75em 0 -2.5em;
|
|||
|
counter-increment: section;
|
|||
|
content: counters(section, ".") " ";
|
|||
|
white-space: nowrap;
|
|||
|
}
|
|||
|
.reveal .sl-block-content > ol > li ol li:before {
|
|||
|
opacity: .5;
|
|||
|
text-align: left;
|
|||
|
box-shadow: none;
|
|||
|
letter-spacing: .1em;
|
|||
|
}
|
|||
|
.reveal .sl-block-content > ol > li > ol > li > ol > li:before {
|
|||
|
width: 4em;
|
|||
|
left: -3em;
|
|||
|
font-size: .75em;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .sl-block-content > ol > li:before {
|
|||
|
color: currentcolor;
|
|||
|
background-color: rgba(0, 0, 0, 0.1);
|
|||
|
box-shadow: inset 0 0 0 0.2em rgba(0, 0, 0, 0.2);
|
|||
|
font-weight: 500;
|
|||
|
letter-spacing: -0.05em;
|
|||
|
}
|
|||
|
.reveal .sl-block-content > ol ol ol li:before {
|
|||
|
opacity: 1;
|
|||
|
font-size: .55em !important;
|
|||
|
width: 3.5em !important;
|
|||
|
}
|
|||
|
.reveal .sl-block-content > ol ol ol {
|
|||
|
margin-left: 1.5em !important;
|
|||
|
}
|
|||
|
.reveal .uppercase {
|
|||
|
text-transform: uppercase;
|
|||
|
}
|
|||
|
.reveal .sl-block[data-block-type="text"] > .initial h1,
|
|||
|
.reveal .sl-block[data-block-type="text"] > .initial h2,
|
|||
|
.reveal .sl-block[data-block-type="text"] > .initial h3 {
|
|||
|
text-transform: initial;
|
|||
|
}
|
|||
|
.reveal .force-mono text,
|
|||
|
.reveal .force-mono tspan,
|
|||
|
.reveal .force-mono polygon,
|
|||
|
.reveal .force-mono path,
|
|||
|
.reveal .force-mono rect,
|
|||
|
.reveal .force-mono ellipse {
|
|||
|
fill: currentcolor !important;
|
|||
|
}
|
|||
|
.reveal .force-red .stroked path {
|
|||
|
stroke: #c00;
|
|||
|
}
|
|||
|
.reveal .force-red,
|
|||
|
.reveal .force-red text,
|
|||
|
.reveal .force-red tspan,
|
|||
|
.reveal .force-red polygon,
|
|||
|
.reveal .force-red path,
|
|||
|
.reveal .force-red rect,
|
|||
|
.reveal .force-red ellipse {
|
|||
|
color: #c00;
|
|||
|
fill: currentcolor !important;
|
|||
|
}
|
|||
|
.reveal .force-red .stroked {
|
|||
|
fill: none;
|
|||
|
stroke: #cc0000;
|
|||
|
}
|
|||
|
.reveal .background-shade-dark .sl-block {
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal .dark-foreground text.logotext,
|
|||
|
.reveal section.background-shade-light text.logotext,
|
|||
|
.reveal section.dark-foreground text.logotext,
|
|||
|
.reveal .dark-foreground .logotext text,
|
|||
|
.reveal section.background-shade-light .logotext text,
|
|||
|
.reveal section.dark-foreground .logotext text,
|
|||
|
.reveal .dark-foreground path.logotext,
|
|||
|
.reveal section.background-shade-light path.logotext,
|
|||
|
.reveal section.dark-foreground path.logotext,
|
|||
|
.reveal .dark-foreground path.logotype,
|
|||
|
.reveal section.background-shade-light path.logotype,
|
|||
|
.reveal section.dark-foreground path.logotype,
|
|||
|
.reveal .dark-foreground .logotext path,
|
|||
|
.reveal section.background-shade-light .logotext path,
|
|||
|
.reveal section.dark-foreground .logotext path,
|
|||
|
.reveal .dark-foreground .product,
|
|||
|
.reveal section.background-shade-light .product,
|
|||
|
.reveal section.dark-foreground .product {
|
|||
|
fill: currentcolor !important;
|
|||
|
}
|
|||
|
.reveal .dark-foreground .redhat-logo .logotext,
|
|||
|
.reveal section.background-shade-light .redhat-logo .logotext,
|
|||
|
.reveal section.dark-foreground .redhat-logo .logotext {
|
|||
|
fill: currentcolor !important;
|
|||
|
}
|
|||
|
.reveal .slide-background.background-shade-dark:after {
|
|||
|
content: "";
|
|||
|
display: block;
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
bottom: 0;
|
|||
|
left: 0;
|
|||
|
right: 0;
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
background-color: rgba(40, 40, 40, 0.8);
|
|||
|
}
|
|||
|
.reveal .slide-background.background-shade-light:after {
|
|||
|
content: "";
|
|||
|
display: block;
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
bottom: 0;
|
|||
|
left: 0;
|
|||
|
right: 0;
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
background-color: rgba(255, 255, 255, 0.8);
|
|||
|
}
|
|||
|
.reveal .slides section {
|
|||
|
text-align: left;
|
|||
|
}
|
|||
|
.reveal .slides section h1 {
|
|||
|
line-height: 1em;
|
|||
|
font-weight: 700 ;
|
|||
|
font-size: 3em ;
|
|||
|
}
|
|||
|
.reveal .slides section h2 {
|
|||
|
font-size: 2em;
|
|||
|
font-weight: 400 ;
|
|||
|
line-height: 1.15em;
|
|||
|
}
|
|||
|
.reveal .slides section h3 {
|
|||
|
font-weight: 700 ;
|
|||
|
font-size: 1em ;
|
|||
|
line-height: 1.25em;
|
|||
|
}
|
|||
|
.reveal .slides section p {
|
|||
|
margin-bottom: .5em;
|
|||
|
}
|
|||
|
.reveal .slides section blockquote {
|
|||
|
font-style: normal;
|
|||
|
box-shadow: none;
|
|||
|
}
|
|||
|
.reveal .progress {
|
|||
|
background-color: transparent;
|
|||
|
}
|
|||
|
.reveal .progress span {
|
|||
|
background-color: #5e6a71;
|
|||
|
}
|
|||
|
.reveal .absolute-element svg {
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
right: 0;
|
|||
|
width: 100% !important;
|
|||
|
height: 100% !important;
|
|||
|
}
|
|||
|
.reveal .icon.stroked {
|
|||
|
width: 282px;
|
|||
|
height: 282px;
|
|||
|
}
|
|||
|
.reveal .icon.stroked.icon-arrow path {
|
|||
|
stroke-width: 4px !important;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path {
|
|||
|
fill: none;
|
|||
|
stroke-width: 1.5px;
|
|||
|
transition-delay: .5s !important;
|
|||
|
stroke-dashoffset: 0;
|
|||
|
stroke-width: 1.5;
|
|||
|
stroke-linecap: round;
|
|||
|
stroke-linejoin: round;
|
|||
|
stroke: currentcolor;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.long {
|
|||
|
stroke-dasharray: 420,420;
|
|||
|
transition: 2.5s all ease;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.longer {
|
|||
|
stroke-dasharray: 512,512;
|
|||
|
transition: 2.5s all ease;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.short {
|
|||
|
stroke-dasharray: 90,90;
|
|||
|
transition: 5s all ease;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.shortest {
|
|||
|
stroke-dasharray: 5,5;
|
|||
|
transition: 2s all ease;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.round {
|
|||
|
stroke-linecap: round ;
|
|||
|
stroke-linejoin: round ;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.virtual {
|
|||
|
transition: .5s all ease;
|
|||
|
stroke-dasharray: 1.1, 3;
|
|||
|
stroke-linecap: round ;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.dashed {
|
|||
|
stroke-dasharray: 3, 3;
|
|||
|
}
|
|||
|
.reveal .icon.stroked path.hand {
|
|||
|
stroke-linecap: round;
|
|||
|
}
|
|||
|
.reveal .present path.virtual {
|
|||
|
-webkit-animation: virtual-outline 60s infinite linear;
|
|||
|
-moz-animation: virtual-outline 60s infinite linear;
|
|||
|
animation: virtual-outline 60s infinite linear;
|
|||
|
}
|
|||
|
@-webkit-keyframes virtual-outline {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 0;
|
|||
|
}
|
|||
|
100% {
|
|||
|
stroke-dashoffset: 512;
|
|||
|
}
|
|||
|
}
|
|||
|
@-moz-keyframes virtual-outline {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 0;
|
|||
|
}
|
|||
|
100% {
|
|||
|
stroke-dashoffset: 512;
|
|||
|
}
|
|||
|
}
|
|||
|
@keyframes virtual-outline {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 0;
|
|||
|
}
|
|||
|
100% {
|
|||
|
stroke-dashoffset: 512;
|
|||
|
}
|
|||
|
}
|
|||
|
.reveal a {
|
|||
|
box-shadow: 0 0.066666em;
|
|||
|
}
|
|||
|
.reveal .overview section.present {
|
|||
|
border: 12px solid white !important;
|
|||
|
box-shadow: 0 0 0 10px #ffffff, inset 0 0 0 6px rgba(0, 0, 0, 0.2);
|
|||
|
}
|
|||
|
.reveal .rh-pattern {
|
|||
|
width: 256px;
|
|||
|
height: 256px;
|
|||
|
}
|
|||
|
.reveal .rh-pattern path {
|
|||
|
transition: all .5s ease;
|
|||
|
}
|
|||
|
.reveal .future .rh-pattern path {
|
|||
|
stroke-dasharray: 0, 85 !important;
|
|||
|
}
|
|||
|
.reveal .present .rh-pattern path {
|
|||
|
stroke-dasharray: 80, 0 !important;
|
|||
|
}
|
|||
|
.reveal div[data-block-type="snippet"] .sl-block-content > svg,
|
|||
|
.reveal div[data-block-type="snippet"] > .sl-block-content > svg,
|
|||
|
.reveal div[data-block-type="snippet"] .icon,
|
|||
|
.reveal div[data-block-type="snippet"] .product {
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
right: 0;
|
|||
|
bottom: 0;
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
}
|
|||
|
.reveal div[data-block-type="snippet"] .sl-block-content > svg:not(:last-child) {
|
|||
|
position: relative;
|
|||
|
}
|
|||
|
.reveal div[data-block-type="snippet"] .icon {
|
|||
|
top: -15%;
|
|||
|
right: -15%;
|
|||
|
bottom: -15%;
|
|||
|
left: -15%;
|
|||
|
width: 130%;
|
|||
|
height: 130%;
|
|||
|
}
|
|||
|
.reveal div[data-block-type="snippet"] {
|
|||
|
min-width: 60px !important;
|
|||
|
}
|
|||
|
.reveal div[data-block-type="text"] {
|
|||
|
font-size: 20px;
|
|||
|
}
|
|||
|
.reveal .triangle-element,
|
|||
|
.reveal .triangle-element * {
|
|||
|
user-select: none;
|
|||
|
}
|
|||
|
.reveal .has-light-background .closing-logo.logotype path {
|
|||
|
fill: black !important;
|
|||
|
}
|
|||
|
@-webkit-keyframes closing-animation {
|
|||
|
0% {
|
|||
|
-webkit-transform: scale(4) translate(40%);
|
|||
|
transform: scale(4) translate(40%);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
80% {
|
|||
|
-webkit-transform: scale(1) translate(30%);
|
|||
|
transform: scale(1) translate(30%);
|
|||
|
}
|
|||
|
}
|
|||
|
@-moz-keyframes closing-animation {
|
|||
|
0% {
|
|||
|
-webkit-transform: scale(4) translate(40%);
|
|||
|
transform: scale(4) translate(40%);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
80% {
|
|||
|
-webkit-transform: scale(1) translate(30%);
|
|||
|
transform: scale(1) translate(30%);
|
|||
|
}
|
|||
|
}
|
|||
|
@-o-keyframes closing-animation {
|
|||
|
0% {
|
|||
|
-webkit-transform: scale(4) translate(40%);
|
|||
|
transform: scale(4) translate(40%);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
80% {
|
|||
|
-webkit-transform: scale(1) translate(30%);
|
|||
|
transform: scale(1) translate(30%);
|
|||
|
}
|
|||
|
}
|
|||
|
@keyframes closing-animation {
|
|||
|
0% {
|
|||
|
-webkit-transform: scale(4) translate(40%);
|
|||
|
transform: scale(4) translate(40%);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
80% {
|
|||
|
-webkit-transform: scale(1) translate(30%);
|
|||
|
transform: scale(1) translate(30%);
|
|||
|
}
|
|||
|
}
|
|||
|
.reveal .present .closing-logo.icon {
|
|||
|
-webkit-animation: closing-animation 1.5s 1;
|
|||
|
-moz-animation: closing-animation 1.5s 1;
|
|||
|
-o-animation: closing-animation 1.5s 1;
|
|||
|
animation: closing-animation 1.5s 1;
|
|||
|
}
|
|||
|
.reveal .present .closing-logo.logotype {
|
|||
|
-webkit-animation: closing-text-animation 1.8s 1;
|
|||
|
-moz-animation: closing-text-animation 1.8s 1;
|
|||
|
-o-animation: closing-text-animation 1.8s 1;
|
|||
|
animation: closing-text-animation 1.8s 1;
|
|||
|
}
|
|||
|
@-webkit-keyframes closing-text-animation {
|
|||
|
0% {
|
|||
|
opacity: 0;
|
|||
|
-webkit-transform: translate(-10%);
|
|||
|
transform: translate(-10%);
|
|||
|
}
|
|||
|
70% {
|
|||
|
-webkit-transform: translate(-10%);
|
|||
|
transform: translate(-10%);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
100% {
|
|||
|
transform: none;
|
|||
|
opacity: 1;
|
|||
|
-webkit-transform: none;
|
|||
|
}
|
|||
|
}
|
|||
|
@-moz-keyframes closing-text-animation {
|
|||
|
0% {
|
|||
|
opacity: 0;
|
|||
|
-webkit-transform: translate(-10%);
|
|||
|
transform: translate(-10%);
|
|||
|
}
|
|||
|
70% {
|
|||
|
-webkit-transform: translate(-10%);
|
|||
|
transform: translate(-10%);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
100% {
|
|||
|
transform: none;
|
|||
|
opacity: 1;
|
|||
|
-webkit-transform: none;
|
|||
|
}
|
|||
|
}
|
|||
|
@keyframes closing-text-animation {
|
|||
|
0% {
|
|||
|
opacity: 0;
|
|||
|
-webkit-transform: translate(-10%);
|
|||
|
transform: translate(-10%);
|
|||
|
}
|
|||
|
70% {
|
|||
|
-webkit-transform: translate(-10%);
|
|||
|
transform: translate(-10%);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
100% {
|
|||
|
transform: none;
|
|||
|
opacity: 1;
|
|||
|
-webkit-transform: none;
|
|||
|
}
|
|||
|
}
|
|||
|
.reveal .brand-pattern-paths path,
|
|||
|
.reveal .pattern-path {
|
|||
|
stroke-width: 1;
|
|||
|
fill: none;
|
|||
|
}
|
|||
|
.reveal .brand-pattern-paths path {
|
|||
|
fill: none !important;
|
|||
|
}
|
|||
|
.reveal pattern {
|
|||
|
patterntransform: scale(2) !important;
|
|||
|
}
|
|||
|
.reveal pattern.normal use {
|
|||
|
stroke: currentcolor;
|
|||
|
fill: none;
|
|||
|
}
|
|||
|
.reveal pattern.light use {
|
|||
|
stroke: #fff !important;
|
|||
|
fill: none;
|
|||
|
}
|
|||
|
.reveal pattern.dark use {
|
|||
|
stroke: #000 !important;
|
|||
|
fill: none;
|
|||
|
}
|
|||
|
.reveal .brand-pattern {
|
|||
|
min-width: 40px;
|
|||
|
min-height: 40px;
|
|||
|
position: absolute;
|
|||
|
top: 0 ;
|
|||
|
left: 0 ;
|
|||
|
right: 0;
|
|||
|
bottom: 0;
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
}
|
|||
|
.reveal .brand-pattern path,
|
|||
|
.reveal .brand-pattern rect {
|
|||
|
width: 100% !important;
|
|||
|
height: 100%;
|
|||
|
}
|
|||
|
.reveal .brand-pattern.corporate {
|
|||
|
fill: url(#pattern-corporate);
|
|||
|
}
|
|||
|
.reveal #pattern-corporate-2 use {
|
|||
|
stroke: #dd0000;
|
|||
|
}
|
|||
|
.reveal #pattern-corporate use {
|
|||
|
stroke: #cc0000;
|
|||
|
}
|
|||
|
.reveal section,
|
|||
|
.reveal .slide-background {
|
|||
|
-webkit-backface-visibility: hidden;
|
|||
|
-ms-backface-visibility: hidden;
|
|||
|
backface-visibility: hidden;
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-slide,
|
|||
|
.reveal .slides > section.transition-slide + section.future,
|
|||
|
.reveal .slides > section.transition-slide + section.present,
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide,
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide + .slide-background.future,
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide + .slide-background.present {
|
|||
|
transition: all 1s ease !important;
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide {
|
|||
|
opacity: 1 ;
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide.past {
|
|||
|
z-index: 99;
|
|||
|
-webkit-transform: translate(-100%, 0);
|
|||
|
-ms-transform: translate(-100%, 0);
|
|||
|
transform: translate(-100%, 0);
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide.future,
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide.present + .slide-background.future {
|
|||
|
-webkit-transform: translate(100%, 0);
|
|||
|
-ms-transform: translate(100%, 0);
|
|||
|
transform: translate(100%, 0);
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-slide.past {
|
|||
|
z-index: 99;
|
|||
|
-webkit-transform: translate(-150%, 0);
|
|||
|
-ms-transform: translate(-150%, 0);
|
|||
|
transform: translate(-150%, 0);
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-slide.future,
|
|||
|
.reveal .slides > section.transition-slide.future + section {
|
|||
|
-webkit-transform: translate(150%, 0);
|
|||
|
-ms-transform: translate(150%, 0);
|
|||
|
transform: translate(150%, 0);
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-slide-up,
|
|||
|
.reveal .slides > section.transition-slide-up + section.future,
|
|||
|
.reveal .slides > section.transition-slide-up + section.present,
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide-up,
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide-up + .slide-background.future .backgrounds > .slide-background.transition-slide-up + .slide-background.present {
|
|||
|
transition: all 1s ease !important;
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide-up {
|
|||
|
opacity: 1 ;
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide-up.past {
|
|||
|
z-index: 99;
|
|||
|
-webkit-transform: translate(0, -100%);
|
|||
|
-ms-transform: translate(0, -100%);
|
|||
|
transform: translate(0, -100%);
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide-up.future,
|
|||
|
.reveal .backgrounds > .slide-background.transition-slide-up.present + .slide-background.future {
|
|||
|
-webkit-transform: translate(0, 100%);
|
|||
|
-ms-transform: translate(0, 100%);
|
|||
|
transform: translate(0, 100%);
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-slide-up.past {
|
|||
|
z-index: 99;
|
|||
|
-webkit-transform: translate(0, -150%);
|
|||
|
-ms-transform: translate(0, -150%);
|
|||
|
transform: translate(0, -150%);
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-slide-up.future,
|
|||
|
.reveal .slides > section.transition-slide-up.present + section {
|
|||
|
-webkit-transform: translate(0, 150%);
|
|||
|
-ms-transform: translate(0, 150%);
|
|||
|
transform: translate(0, 150%);
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-zoom-in,
|
|||
|
.reveal .slides > section.transition-zoom-in + section.future,
|
|||
|
.reveal .slides > section.transition-zoom-in + section.present,
|
|||
|
.reveal .backgrounds > .slide-background.transition-zoom-in,
|
|||
|
.reveal .backgrounds > .slide-background.transition-zoom-in + .slide-background.future .backgrounds > .slide-background.transition-zoom-in + .slide-background.present {
|
|||
|
-webkit-transition: all 1s ease !important;
|
|||
|
-moz-transition: all 1s ease !important;
|
|||
|
transition: all 1s ease !important;
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-zoom-in.past {
|
|||
|
opacity: 0 !important;
|
|||
|
-webkit-transform: scale(1.5);
|
|||
|
-ms-transform: scale(0.1 0.5);
|
|||
|
transform: scale(1.5);
|
|||
|
}
|
|||
|
.reveal .backgrounds > .slide-background.transition-zoom-in.future,
|
|||
|
.reveal .backgrounds > .slide-background.transition-zoom-in.present + .slide-background.future {
|
|||
|
opacity: 0 !important;
|
|||
|
-webkit-transform: scale(0.01);
|
|||
|
-ms-transform: scale(0.01);
|
|||
|
transform: scale(0.01);
|
|||
|
}
|
|||
|
.reveal .past {
|
|||
|
z-index: -1;
|
|||
|
opacity: 0 !important;
|
|||
|
}
|
|||
|
.reveal .present + .slide-background.future {
|
|||
|
z-index: 99;
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-zoom-in.past {
|
|||
|
z-index: 99;
|
|||
|
-webkit-transform: scale(1.5);
|
|||
|
-ms-transform: scale(1.5);
|
|||
|
transform: scale(1.5);
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
.reveal .slides > section.transition-zoom-in.future {
|
|||
|
-webkit-transform: scale(0.1);
|
|||
|
-ms-transform: scale(0.1);
|
|||
|
transform: scale(0.1);
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
@-webkit-keyframes icon-animation-long {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 420;
|
|||
|
stroke-width: .5px;
|
|||
|
}
|
|||
|
}
|
|||
|
@-moz-keyframes icon-animation-long {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 420;
|
|||
|
stroke-width: .5px;
|
|||
|
}
|
|||
|
}
|
|||
|
@keyframes icon-animation-long {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 420;
|
|||
|
stroke-width: .5px;
|
|||
|
}
|
|||
|
}
|
|||
|
@-webkit-keyframes icon-animation-short {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 90;
|
|||
|
}
|
|||
|
}
|
|||
|
@-moz-keyframes icon-animation-short {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 90;
|
|||
|
}
|
|||
|
}
|
|||
|
@keyframes icon-animation-short {
|
|||
|
0% {
|
|||
|
stroke-dashoffset: 90;
|
|||
|
}
|
|||
|
}
|
|||
|
.reveal .present .animate.icon.stroked path,
|
|||
|
.reveal .present .animate .icon.stroked path,
|
|||
|
.reveal .fragment .icon.stroked path {
|
|||
|
animation: 0;
|
|||
|
-moz-animation: 0;
|
|||
|
-webkit-animation: 0;
|
|||
|
display: none;
|
|||
|
}
|
|||
|
.reveal .present .animate.icon.stroked path.long,
|
|||
|
.reveal .present .animate .icon.stroked path.long,
|
|||
|
.reveal .fragment.visible .icon.stroked path.long {
|
|||
|
display: block;
|
|||
|
stroke-width: 2px ;
|
|||
|
-webkit-animation: icon-animation-long 3.5s 0.5s 1;
|
|||
|
-moz-animation: icon-animation-long 3.5s 0.5s 1;
|
|||
|
animation: icon-animation-long 3.5s 0.5s 1;
|
|||
|
}
|
|||
|
.reveal .present .animate.icon.stroked path.short,
|
|||
|
.reveal .present .animate .icon.stroked path.short,
|
|||
|
.reveal .fragment.visible .icon.stroked path.short {
|
|||
|
display: block;
|
|||
|
-webkit-animation: icon-animation-short 3.5s 0.5s 1 !important;
|
|||
|
-moz-animation: icon-animation-short 3.5s 0.5s 1 !important;
|
|||
|
animation: icon-animation-short 3.5s 0.5s 1 !important;
|
|||
|
}
|
|||
|
.reveal .triangle-element {
|
|||
|
transition: all 0.4s cubic-bezier(0.21, 0.9, 0.55, 1) 5s;
|
|||
|
}
|
|||
|
.reveal.reveal:hover .triangle-element {
|
|||
|
transition: all 1s cubic-bezier(0.21, 0.9, 0.55, 1.16) 0s !important;
|
|||
|
top: 100% !important;
|
|||
|
left: 100% !important;
|
|||
|
opacity: 0.95;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .only-dark {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
.reveal .has-light-background .only-light {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
.reveal .thinner .icon.stroked path {
|
|||
|
stroke-width: 1px !important;
|
|||
|
}
|
|||
|
.reveal .thinnest .icon.stroked path {
|
|||
|
stroke-width: 0.05em !important;
|
|||
|
}
|
|||
|
.reveal .thicker .icon.stroked path {
|
|||
|
stroke-width: 3px !important;
|
|||
|
}
|
|||
|
.reveal .thickest .icon.stroked path {
|
|||
|
stroke-width: 4px !important;
|
|||
|
}
|
|||
|
.reveal .angle {
|
|||
|
-ms-transform: rotate(-45deg);
|
|||
|
-moz-transform: rotate(-45deg);
|
|||
|
-webkit-transform: rotate(-45deg);
|
|||
|
transform: rotate(-45deg);
|
|||
|
}
|
|||
|
.reveal .rangle {
|
|||
|
-ms-transform: rotate(45deg);
|
|||
|
-moz-transform: rotate(45deg);
|
|||
|
-webkit-transform: rotate(45deg);
|
|||
|
transform: rotate(45deg);
|
|||
|
}
|
|||
|
.reveal .sl-block > .vertical {
|
|||
|
-ms-transform: rotate(-90deg);
|
|||
|
-moz-transform: rotate(-90deg);
|
|||
|
-webkit-transform: rotate(-90deg);
|
|||
|
transform: rotate(-90deg);
|
|||
|
}
|
|||
|
.reveal .skewed {
|
|||
|
transition: all 1s cubic-bezier(0.13, 0.81, 0.08, 1);
|
|||
|
-moz-transform: skew(-45deg, 0);
|
|||
|
-ms-transform: skew(-45deg, 0);
|
|||
|
-webkit-transform: skew(-45deg, 0);
|
|||
|
transform: skew(-45deg, 0);
|
|||
|
}
|
|||
|
.reveal .future .skewed {
|
|||
|
margin-left: -800%;
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
.reveal .past .skewed {
|
|||
|
margin-left: 800%;
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
.reveal .item-label,
|
|||
|
.reveal .item-box {
|
|||
|
letter-spacing: 0em;
|
|||
|
font-weight: 500;
|
|||
|
}
|
|||
|
.reveal .epic-content-box {
|
|||
|
height: 100%;
|
|||
|
width: 100%;
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
right: 0;
|
|||
|
bottom: 0;
|
|||
|
left: 0;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .epic-content-box {
|
|||
|
box-shadow: inset 0 0 0.51em rgba(0, 0, 0, 0.25), 0 0.05em 0.05em rgba(255, 255, 255, 0.1);
|
|||
|
background-color: rgba(0, 0, 0, 0.15);
|
|||
|
}
|
|||
|
.reveal .has-light-background .epic-content-box {
|
|||
|
box-shadow: inset 0 0 0.2em rgba(255, 255, 255, 0.5), 0 0.06666em 0.555em 0 rgba(0, 0, 0, 0.12);
|
|||
|
}
|
|||
|
.reveal .controls {
|
|||
|
bottom: 1%;
|
|||
|
right: 1%;
|
|||
|
}
|
|||
|
.reveal .controls button {
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
.reveal .controls button.enabled {
|
|||
|
opacity: 1;
|
|||
|
}
|
|||
|
.reveal .controls {
|
|||
|
opacity: 0 !important;
|
|||
|
transition: opacity .5s ease 4.8s, transform .5s ease 4.8s;
|
|||
|
transform: scale(0.4);
|
|||
|
}
|
|||
|
.reveal.reveal:hover .controls {
|
|||
|
transform: scale(1);
|
|||
|
opacity: 1 !important;
|
|||
|
transition: opacity .5s ease 0s, transform .5s ease 0s;
|
|||
|
}
|
|||
|
.reveal .backgrounds {
|
|||
|
transition-property: height;
|
|||
|
transition-duration: 1s;
|
|||
|
perspective: 1000px;
|
|||
|
transform-style: preserve-3d;
|
|||
|
}
|
|||
|
.reveal .complex-logo {
|
|||
|
min-height: 70px;
|
|||
|
min-width: 70px;
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
.reveal .complex-logo,
|
|||
|
.reveal .complex-logo svg,
|
|||
|
.reveal .complex-logo > div {
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
right: 0;
|
|||
|
bottom: 0;
|
|||
|
left: 0;
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
}
|
|||
|
.reveal .complex-logo > div.line-icon,
|
|||
|
.reveal .complex-logo svg > div.line-icon,
|
|||
|
.reveal .complex-logo > div > div.line-icon,
|
|||
|
.reveal .complex-logo > div.logomark,
|
|||
|
.reveal .complex-logo svg > div.logomark,
|
|||
|
.reveal .complex-logo > div > div.logomark {
|
|||
|
transform-origin: 12% 50%;
|
|||
|
}
|
|||
|
.reveal .animated .complex-logo div {
|
|||
|
transition: all .5s ease;
|
|||
|
}
|
|||
|
.reveal .animated .complex-logo div.line-icon {
|
|||
|
transition-delay: 2s;
|
|||
|
}
|
|||
|
.reveal .animated .complex-logo div.line-icon path {
|
|||
|
transition: all 1s ease .52s;
|
|||
|
stroke-dasharray: 100 ,10;
|
|||
|
}
|
|||
|
.reveal .animated .complex-logo div.event-name {
|
|||
|
transition-delay: 1s;
|
|||
|
}
|
|||
|
.reveal .animated .complex-logo div.location {
|
|||
|
transition-delay: 1.4s;
|
|||
|
}
|
|||
|
.reveal .future .animated .complex-logo > div {
|
|||
|
transition: none;
|
|||
|
}
|
|||
|
.reveal .future .animated .complex-logo > div.line-icon path {
|
|||
|
stroke-dasharray: 0 ,100;
|
|||
|
transition: none;
|
|||
|
}
|
|||
|
.reveal .future .animated .complex-logo {
|
|||
|
/*.line-icon{transform:rotate(30deg); opacity:0;}*/
|
|||
|
|
|||
|
}
|
|||
|
.reveal .future .animated .complex-logo .logomark {
|
|||
|
transform: translate(0, -20%);
|
|||
|
}
|
|||
|
.reveal .future .animated .complex-logo .location {
|
|||
|
transform: translate(0, 0.5em);
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
.reveal .future .animated .complex-logo .event-name {
|
|||
|
opacity: 0;
|
|||
|
transform: translate(-0.6em, 0);
|
|||
|
}
|
|||
|
.reveal .lowercase {
|
|||
|
text-transform: lowercase;
|
|||
|
}
|
|||
|
.reveal .pop-in.fragment {
|
|||
|
-webkit-transform: scale(0.2);
|
|||
|
-moz-transform: scale(0.2);
|
|||
|
-ms-transform: scale(0.2);
|
|||
|
transform: scale(0.2);
|
|||
|
-webkit-transition: 2s ease 0.25s;
|
|||
|
-moz-transition: 2s ease 0.25s;
|
|||
|
-ms-transition: 2s ease 0.25s;
|
|||
|
transition: 2s ease 0.25s;
|
|||
|
-webkit-animation-delay: 0.66s;
|
|||
|
-moz-animation-delay: 0.66s;
|
|||
|
-ms-animation-delay: 0.66s;
|
|||
|
animation-delay: 0.66s;
|
|||
|
}
|
|||
|
.reveal .pop-in.fragment.visible {
|
|||
|
-webkit-transform: scale(1);
|
|||
|
-moz-transform: scale(1);
|
|||
|
-ms-transform: scale(1);
|
|||
|
transform: scale(1);
|
|||
|
}
|
|||
|
.reveal .pop-in.fragment.current-fragment {
|
|||
|
color: #c22;
|
|||
|
}
|
|||
|
.reveal .grow-width {
|
|||
|
-webkit-transition: all 0.5s ease 0.2s;
|
|||
|
-moz-transition: all 0.5s ease 0.2s;
|
|||
|
-o-transition: all 0.5s ease 0.2s;
|
|||
|
-ms-transition: all 0.5s ease 0.2s;
|
|||
|
transition: all 0.5s ease 0.2s;
|
|||
|
}
|
|||
|
.reveal .future .grow-width {
|
|||
|
width: 0% !important;
|
|||
|
-webkit-transition: none;
|
|||
|
-moz-transition: none;
|
|||
|
-o-transition: none;
|
|||
|
-ms-transition: none;
|
|||
|
transition: none;
|
|||
|
}
|
|||
|
.reveal .stampit {
|
|||
|
-webkit-transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
|||
|
-moz-transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
|||
|
-ms-transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
|||
|
transition: all 1s cubic-bezier(0.79, 0.53, 0.46, 1.3) 1s;
|
|||
|
}
|
|||
|
.reveal .future .stampit {
|
|||
|
-webkit-transform: rotate(-12deg) scale(2);
|
|||
|
-moz-transform: rotate(-12deg) scale(2);
|
|||
|
-ms-transform: rotate(-12deg) scale(2);
|
|||
|
transform: rotate(-12deg) scale(2);
|
|||
|
-webkit-transition: none;
|
|||
|
-moz-transition: none;
|
|||
|
-ms-transition: none;
|
|||
|
transition: none;
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
.reveal .headshot img {
|
|||
|
border-radius: 50%;
|
|||
|
border: 4px solid #c00 !important;
|
|||
|
}
|
|||
|
.reveal .condensed {
|
|||
|
letter-spacing: 0.02em;
|
|||
|
}
|
|||
|
.reveal .condensed li {
|
|||
|
margin-bottom: 1em ;
|
|||
|
}
|
|||
|
.reveal .has-light-background .sl-block .has-dark-background > svg.redhat-logo .logotext {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal .has-light-background .sl-block .reversed.redhat-logo .logotext,
|
|||
|
.reveal .has-light-background .sl-block .reversed .redhat-logo .logotext,
|
|||
|
.reveal .has-light-background .sl-block .has-dark-background > .redhat-logo .logotext {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .sl-block .reversed.redhat-logo .logotext,
|
|||
|
.reveal .has-dark-background .sl-block .reversed .redhat-logo .logotext,
|
|||
|
.reveal .has-dark-background .sl-block .has-light-background > .redhat-logo .logotext {
|
|||
|
fill: #000000 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .has-light-background .logo .only-dark path,
|
|||
|
.reveal .has-light-background .mono.redhat-logo path {
|
|||
|
fill: #000000 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .mono.redhat-logo path {
|
|||
|
fill: #ffffff;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .logo .only-dark {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
.reveal .has-light-background .logo .only-light {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
.reveal .has-light-background .logo .only-dark {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .logo .only-light {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
.reveal .has-light-background .reversed svg path {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .reversed svg path {
|
|||
|
fill: currentcolor;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .has-light-background .logo .only-light,
|
|||
|
.reveal .has-dark-background .reversed .logo .only-dark {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
.reveal .has-light-background .has-dark-background .logo .only-dark,
|
|||
|
.reveal .has-light-background .logo .only-light {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
.reveal .has-light-background .has-dark-background .redhat-logo .only-dark,
|
|||
|
.reveal .has-light-background .redhat-logo .only-light {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal .has-light-background .has-dark-background .logo .only-light,
|
|||
|
.reveal .has-light-background .logo .only-dark,
|
|||
|
.reveal .has-dark-background .has-light-background .logo .only-dark,
|
|||
|
.reveal .has-dark-background .logo .only-light {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
.reveal .future .fade-up,
|
|||
|
.reveal .future .fade-down,
|
|||
|
.reveal .future .fade-left,
|
|||
|
.reveal .future .fade-right,
|
|||
|
.reveal .future .fade-zoom {
|
|||
|
-webkit-transition: none;
|
|||
|
transition: none;
|
|||
|
opacity: 0;
|
|||
|
filter: alpha(opacity=0);
|
|||
|
}
|
|||
|
.reveal .future .fade-up,
|
|||
|
.reveal .fade-up.fragment {
|
|||
|
-webkit-transform: translate(0, 2em);
|
|||
|
-ms-transform: translate(0, 2em);
|
|||
|
transform: translate(0, 2em);
|
|||
|
opacity: 0;
|
|||
|
filter: alpha(opacity=0);
|
|||
|
}
|
|||
|
.reveal .future .fade-down,
|
|||
|
.reveal .fade-down.fragment {
|
|||
|
-webkit-transform: translate(0, -2em);
|
|||
|
-ms-transform: translate(0, -2em);
|
|||
|
transform: translate(0, -2em);
|
|||
|
opacity: 0;
|
|||
|
filter: alpha(opacity=0);
|
|||
|
}
|
|||
|
.reveal .future .fade-left,
|
|||
|
.reveal .fade-left.fragment {
|
|||
|
-webkit-transform: translate(2em, 0);
|
|||
|
-ms-transform: translate(2em, 0);
|
|||
|
transform: translate(2em, 0);
|
|||
|
opacity: 0;
|
|||
|
filter: alpha(opacity=0);
|
|||
|
}
|
|||
|
.reveal .future .fade-right,
|
|||
|
.reveal .fade-right.fragment {
|
|||
|
-webkit-transform: translate(-2em, 0);
|
|||
|
-ms-transform: translate(-2em, 0);
|
|||
|
transform: translate(-2em, 0);
|
|||
|
opacity: 0;
|
|||
|
filter: alpha(opacity=0);
|
|||
|
}
|
|||
|
.reveal .future .fade-zoom,
|
|||
|
.reveal .fade-zoom.fragment {
|
|||
|
-webkit-transform: scale(0.1);
|
|||
|
-ms-transform: scale(0.1);
|
|||
|
transform: scale(0.1);
|
|||
|
opacity: 0;
|
|||
|
filter: alpha(opacity=0);
|
|||
|
}
|
|||
|
.reveal .future .fade-in {
|
|||
|
transition: none;
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
.reveal .present .fade-in,
|
|||
|
.reveal .present .fade-up,
|
|||
|
.reveal .present .fade-down,
|
|||
|
.reveal .present .fade-left,
|
|||
|
.reveal .present .fade-right,
|
|||
|
.reveal .present .fade-zoom {
|
|||
|
-webkit-transition: all .5s ease .5s;
|
|||
|
transition: all .5s ease .5s;
|
|||
|
opacity: 1;
|
|||
|
filter: alpha(opacity=100);
|
|||
|
}
|
|||
|
.reveal .present .fragment.visible.fade-up,
|
|||
|
.reveal .present .fragment.visible.fade-down,
|
|||
|
.reveal .present .fragment.visible.fade-left,
|
|||
|
.reveal .present .fragment.visible.fade-right,
|
|||
|
.reveal .present .fragment.visible.fade-zoom {
|
|||
|
-webkit-transform: none ;
|
|||
|
-ms-transform: none ;
|
|||
|
transform: none ;
|
|||
|
opacity: 1;
|
|||
|
filter: alpha(opacity=100);
|
|||
|
}
|
|||
|
.reveal .sl-block {
|
|||
|
font-family: "Overpass 2", "Hiragino Kaku Gothic", "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ Pro W3", Overpass, sans-serif !important;
|
|||
|
}
|
|||
|
.reveal .has-light-background .icon.stroked {
|
|||
|
color: currentcolor;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .icon.stroked path {
|
|||
|
stroke: currentcolor;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .only-light-background {
|
|||
|
display: none !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .only-dark-background {
|
|||
|
display: block !important;
|
|||
|
}
|
|||
|
.reveal a.call-to-action:hover {
|
|||
|
background-color: #d00 !important;
|
|||
|
box-shadow: 0 0.5em 1em rgba(0, 0, 0, 0.05) !important;
|
|||
|
text-shadow: none !important;
|
|||
|
}
|
|||
|
.reveal .sl-block[data-block-type="snippet"] table {
|
|||
|
width: 100% !important;
|
|||
|
max-width: 100% !important;
|
|||
|
}
|
|||
|
.reveal .sl-block[data-block-type="snippet"] table td {
|
|||
|
border-color: currentcolor !important;
|
|||
|
}
|
|||
|
.reveal .sl-block[data-block-type="snippet"] table td {
|
|||
|
text-align: inherit !important;
|
|||
|
}
|
|||
|
.reveal .sl-block[data-block-type="text"] table {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
.reveal .sl-block[data-block-type="text"] table td {
|
|||
|
border-color: currentcolor;
|
|||
|
}
|
|||
|
.reveal .sl-block[data-block-type="text"] table td {
|
|||
|
text-align: inherit;
|
|||
|
}
|
|||
|
.reveal.reveal .sl-block[data-block-type="image"] .person {
|
|||
|
border-radius: 50%;
|
|||
|
position: relative !important;
|
|||
|
background-color: transparent;
|
|||
|
height: auto !important;
|
|||
|
}
|
|||
|
.reveal.reveal .sl-block[data-block-type="image"] .person:before {
|
|||
|
content: "" !important;
|
|||
|
display: block !important;
|
|||
|
padding-top: 100% ;
|
|||
|
position: relative !important ;
|
|||
|
/* 4:3 aspect ratio */
|
|||
|
|
|||
|
}
|
|||
|
.reveal.reveal .sl-block[data-block-type="image"] .person > img {
|
|||
|
position: absolute ;
|
|||
|
margin: 0 auto !important;
|
|||
|
left: 0% ;
|
|||
|
right: 0 ;
|
|||
|
width: auto !important;
|
|||
|
top: 0 ;
|
|||
|
bottom: 0 ;
|
|||
|
}
|
|||
|
.reveal .present .delay-1 {
|
|||
|
transition-delay: 0.1s;
|
|||
|
}
|
|||
|
.reveal .present .delay-2 {
|
|||
|
transition-delay: 0.2s;
|
|||
|
}
|
|||
|
.reveal .present .delay-3 {
|
|||
|
transition-delay: 0.3s;
|
|||
|
}
|
|||
|
.reveal .present .delay-4 {
|
|||
|
transition-delay: 0.4s;
|
|||
|
}
|
|||
|
.reveal .present .delay-5 {
|
|||
|
transition-delay: 0.5s;
|
|||
|
}
|
|||
|
.reveal .present .delay-6 {
|
|||
|
transition-delay: 0.6s;
|
|||
|
}
|
|||
|
.reveal .present .delay-7 {
|
|||
|
transition-delay: 0.7s;
|
|||
|
}
|
|||
|
.reveal .present .delay-8 {
|
|||
|
transition-delay: 0.8s;
|
|||
|
}
|
|||
|
.reveal .present .delay-9 {
|
|||
|
transition-delay: 0.9s;
|
|||
|
}
|
|||
|
.reveal .present .delay-10 {
|
|||
|
transition-delay: 1s;
|
|||
|
}
|
|||
|
.reveal .present .delay-11 {
|
|||
|
transition-delay: 1.1s;
|
|||
|
}
|
|||
|
.reveal .present .delay-12 {
|
|||
|
transition-delay: 1.2s;
|
|||
|
}
|
|||
|
.reveal .present .delay-13 {
|
|||
|
transition-delay: 1.3s;
|
|||
|
}
|
|||
|
.reveal .present .delay-14 {
|
|||
|
transition-delay: 1.4s;
|
|||
|
}
|
|||
|
.reveal .present .delay-15 {
|
|||
|
transition-delay: 1.5s;
|
|||
|
}
|
|||
|
.reveal .present .delay-16 {
|
|||
|
transition-delay: 1.6s;
|
|||
|
}
|
|||
|
.reveal .present .delay-17 {
|
|||
|
transition-delay: 1.7s;
|
|||
|
}
|
|||
|
.reveal .present .delay-18 {
|
|||
|
transition-delay: 1.8s;
|
|||
|
}
|
|||
|
.reveal .present .delay-19 {
|
|||
|
transition-delay: 1.9s;
|
|||
|
}
|
|||
|
.reveal .present .delay-20 {
|
|||
|
transition-delay: 2s;
|
|||
|
}
|
|||
|
.reveal .present .delay-21 {
|
|||
|
transition-delay: 2.1s;
|
|||
|
}
|
|||
|
.reveal .present .delay-22 {
|
|||
|
transition-delay: 2.2s;
|
|||
|
}
|
|||
|
.reveal .present .delay-23 {
|
|||
|
transition-delay: 2.3s;
|
|||
|
}
|
|||
|
.reveal .present .delay-24 {
|
|||
|
transition-delay: 2.4s;
|
|||
|
}
|
|||
|
.reveal .present .delay-25 {
|
|||
|
transition-delay: 2.5s;
|
|||
|
}
|
|||
|
.reveal .present .delay-26 {
|
|||
|
transition-delay: 2.6s;
|
|||
|
}
|
|||
|
.reveal .present .delay-27 {
|
|||
|
transition-delay: 2.7s;
|
|||
|
}
|
|||
|
.reveal .present .delay-28 {
|
|||
|
transition-delay: 2.8s;
|
|||
|
}
|
|||
|
.reveal .present .delay-29 {
|
|||
|
transition-delay: 2.9s;
|
|||
|
}
|
|||
|
.reveal .present .delay-30 {
|
|||
|
transition-delay: 3s;
|
|||
|
}
|
|||
|
.reveal .present .delay-31 {
|
|||
|
transition-delay: 3.1s;
|
|||
|
}
|
|||
|
.reveal .present .delay-32 {
|
|||
|
transition-delay: 3.2s;
|
|||
|
}
|
|||
|
.reveal .present .delay-33 {
|
|||
|
transition-delay: 3.3s;
|
|||
|
}
|
|||
|
.reveal .present .delay-34 {
|
|||
|
transition-delay: 3.4s;
|
|||
|
}
|
|||
|
.reveal .present .delay-35 {
|
|||
|
transition-delay: 3.5s;
|
|||
|
}
|
|||
|
.reveal .present .delay-36 {
|
|||
|
transition-delay: 3.6s;
|
|||
|
}
|
|||
|
.reveal .present .delay-37 {
|
|||
|
transition-delay: 3.7s;
|
|||
|
}
|
|||
|
.reveal .present .delay-38 {
|
|||
|
transition-delay: 3.8s;
|
|||
|
}
|
|||
|
.reveal .present .delay-39 {
|
|||
|
transition-delay: 3.9s;
|
|||
|
}
|
|||
|
.reveal .present .delay-40 {
|
|||
|
transition-delay: 4s;
|
|||
|
}
|
|||
|
.reveal .light-foreground .sl-block * {
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal .dark-foreground .sl-block * {
|
|||
|
color: #000;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .invert {
|
|||
|
color: #000;
|
|||
|
}
|
|||
|
.reveal .has-light-background .invert * {
|
|||
|
color: #fff ;
|
|||
|
}
|
|||
|
.reveal .has-light-background .invert .only-light-background {
|
|||
|
display: none ;
|
|||
|
}
|
|||
|
.reveal .has-light-background .invert .only-dark-background {
|
|||
|
display: block !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .invert .only-light-background {
|
|||
|
display: block !important ;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .invert .only-dark-background {
|
|||
|
display: none !important;
|
|||
|
}
|
|||
|
.reveal .slide-number {
|
|||
|
position: absolute !important;
|
|||
|
opacity: 1;
|
|||
|
right: 1em;
|
|||
|
height: 28px;
|
|||
|
min-width: 28px;
|
|||
|
bottom: auto;
|
|||
|
left: auto;
|
|||
|
text-align: center;
|
|||
|
font-size: 14px;
|
|||
|
border-radius: 28px;
|
|||
|
line-height: 28px;
|
|||
|
color: white;
|
|||
|
text-shadow: 0 0.1em 0.5em rgba(0, 0, 0, 0.4);
|
|||
|
top: 1em;
|
|||
|
font-family: "Overpass 2", Overpass, sans-serif;
|
|||
|
font-weight: 500;
|
|||
|
white-space: nowrap;
|
|||
|
padding: 4px;
|
|||
|
box-sizing: content-box;
|
|||
|
}
|
|||
|
.reveal .slide-number-delimiter {
|
|||
|
margin: 0 1px;
|
|||
|
}
|
|||
|
.reveal.reveal .present.in-3d-appear {
|
|||
|
transform: translatez(0em) !important;
|
|||
|
animation: none !important;
|
|||
|
transition: transform 1s ease !important;
|
|||
|
}
|
|||
|
.reveal.reveal .future.in-3d-appear {
|
|||
|
transform: translatez(10em) rotateX(21deg) !important;
|
|||
|
animation: none !important;
|
|||
|
}
|
|||
|
.reveal .no-filter img,
|
|||
|
.reveal .no-filter {
|
|||
|
filter: none !important;
|
|||
|
-webkit-filter: none !important;
|
|||
|
}
|
|||
|
.reveal .present .fade-in-slow {
|
|||
|
transition: all 5s ease;
|
|||
|
}
|
|||
|
.reveal .future .fade-in-slow {
|
|||
|
transition: none;
|
|||
|
opacity: 0;
|
|||
|
}
|
|||
|
.reveal .redhat-logo .logotext {
|
|||
|
fill: #000000 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background .redhat-logo .logotext {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal [data-block-type="table"] .sl-block-content {
|
|||
|
font-size: .75em;
|
|||
|
background-color: #c00;
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal [data-block-type="table"] td {
|
|||
|
background-color: #e5e5e5;
|
|||
|
color: #333;
|
|||
|
border-color: white;
|
|||
|
}
|
|||
|
.reveal div[data-block-type="table"] th {
|
|||
|
font-weight: 500;
|
|||
|
}
|
|||
|
.reveal [data-block-type="table"] tr:nth-child(odd) td {
|
|||
|
background-color: #f5f5f5;
|
|||
|
color: #333;
|
|||
|
}
|
|||
|
.reveal .has-dark-background > [data-block-type="table"] td {
|
|||
|
background-color: #131619;
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal .has-dark-background > [data-block-type="table"] tr:nth-child(odd) td {
|
|||
|
background-color: #232629;
|
|||
|
color: #fff;
|
|||
|
}
|
|||
|
.reveal [data-block-type="code"],
|
|||
|
.reveal .hljs {
|
|||
|
background-color: white ;
|
|||
|
color: rgba(55, 55, 55, 0.85) !important;
|
|||
|
}
|
|||
|
.reveal section .hljs {
|
|||
|
background-color: white !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [data-block-type="code"],
|
|||
|
.reveal .has-dark-background .hljs {
|
|||
|
background-color: #012736!important ;
|
|||
|
color: rgba(255, 255, 255, 0.85) !important;
|
|||
|
}
|
|||
|
.reveal [data-block-type="code"] pre {
|
|||
|
letter-spacing: 0.015em;
|
|||
|
line-height: 1.5em;
|
|||
|
}
|
|||
|
.reveal .has-light-background[data-block-type="code"] pre,
|
|||
|
.reveal [data-block-type="code"] pre {
|
|||
|
background-color: white ;
|
|||
|
color: currentcolor;
|
|||
|
padding: 1em !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [data-block-type="code"] pre {
|
|||
|
background-color: #012736 ;
|
|||
|
}
|
|||
|
.reveal .hljs,
|
|||
|
.reveal pre,
|
|||
|
.reveal code {
|
|||
|
font-family: 'Overpass Mono', monospace !important;
|
|||
|
font-weight: 200 !important;
|
|||
|
}
|
|||
|
.reveal .hljs-literal {
|
|||
|
color: #ffb612 !important;
|
|||
|
}
|
|||
|
.reveal .hljs-keyword {
|
|||
|
color: #ffb612;
|
|||
|
font-weight: 700 !important;
|
|||
|
}
|
|||
|
.reveal .hljs-string {
|
|||
|
color: #88c639;
|
|||
|
font-weight: 700;
|
|||
|
}
|
|||
|
.reveal .hljs-comment {
|
|||
|
color: #94a0a7 !important;
|
|||
|
font-weight: 400 !important;
|
|||
|
}
|
|||
|
.reveal .hljs-params {
|
|||
|
color: #028c98 ;
|
|||
|
font-weight: 700;
|
|||
|
}
|
|||
|
.reveal .hljs-attr {
|
|||
|
color: #EC7A08 !important;
|
|||
|
}
|
|||
|
.reveal .hljs-tag {
|
|||
|
color: #7F5FAE !important;
|
|||
|
}
|
|||
|
.reveal .hljs-name {
|
|||
|
color: #028c98 !important;
|
|||
|
}
|
|||
|
.reveal .hljs-string {
|
|||
|
color: #7f5fae !important;
|
|||
|
}
|
|||
|
.reveal .hljs-comment {
|
|||
|
color: rgba(125, 125, 125, 0.65) !important;
|
|||
|
}
|
|||
|
.reveal .hljs-number {
|
|||
|
color: #4e9fdd !important;
|
|||
|
}
|
|||
|
.reveal .hljs-attribute {
|
|||
|
color: #ec9e34 !important;
|
|||
|
}
|
|||
|
.reveal .hljs-variable {
|
|||
|
color: #4e9fdd !important;
|
|||
|
}
|
|||
|
.reveal .hljs-built_in {
|
|||
|
color: #ee1122!important;
|
|||
|
}
|
|||
|
.reveal .hljs-selector-class {
|
|||
|
color: #55aab2 !important;
|
|||
|
}
|
|||
|
.reveal [data-line-end-type="line-arrow"] line,
|
|||
|
.reveal [data-line-start-type="line-arrow"] line,
|
|||
|
.reveal [data-line-end-type="line-arrow"] path {
|
|||
|
stroke-linecap: round;
|
|||
|
stroke-linejoin: square;
|
|||
|
}
|
|||
|
.reveal div[data-block-type="line"] line[stroke="#000000"],
|
|||
|
.reveal div[data-block-type="line"] path[stroke="#000000"] {
|
|||
|
stroke: currentcolor;
|
|||
|
}
|
|||
|
.reveal [fill="none"] {
|
|||
|
fill: none !important;
|
|||
|
}
|
|||
|
.reveal [fill="#a30000"] {
|
|||
|
fill: #aa0000 !important;
|
|||
|
}
|
|||
|
.reveal [fill="#cc2029"],
|
|||
|
.reveal [fill="#cb2027"],
|
|||
|
.reveal [fill="#c00"] {
|
|||
|
fill: #cc0000 !important;
|
|||
|
}
|
|||
|
.reveal [fill="#fff"] {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal [fill="#6d6e70"] {
|
|||
|
fill: #6d6e70 !important;
|
|||
|
}
|
|||
|
.reveal [fill="#231f20"] {
|
|||
|
fill: currentcolor !important;
|
|||
|
}
|
|||
|
.reveal [fill="#efab1f"] {
|
|||
|
fill: #efab1f !important;
|
|||
|
}
|
|||
|
.reveal [fill="#92d400"] {
|
|||
|
fill: #92d400 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [fill="#6d6e70"] {
|
|||
|
fill: #266272 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [fill="#fff"] {
|
|||
|
fill: #555555 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [fill="#fff"] {
|
|||
|
fill: #333333 !important;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [stroke="#231f20"] {
|
|||
|
stroke: currentcolor;
|
|||
|
}
|
|||
|
.reveal .has-dark-background [fill="#221F1F"],
|
|||
|
.reveal .has-dark-background [fill="#221f1f"],
|
|||
|
.reveal .has-dark-background [fill="#231F20"],
|
|||
|
.reveal .has-dark-background [fill="#010101"] {
|
|||
|
fill: #ffffff !important;
|
|||
|
}
|
|||
|
.reveal [data-inline-svg="true"] img {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
.reveal .corner {
|
|||
|
position: absolute;
|
|||
|
top: 0;
|
|||
|
right: 0;
|
|||
|
bottom: 0;
|
|||
|
left: 0;
|
|||
|
overflow: hidden;
|
|||
|
z-index: 8;
|
|||
|
}
|
|||
|
.reveal .corner svg {
|
|||
|
transition: all .75s ease 5s;
|
|||
|
}
|
|||
|
|
|||
|
</style>
|
|||
|
|
|||
|
</head>
|
|||
|
<body class="reveal-viewport theme-font-overpass2 theme-color-no-color">
|
|||
|
<div class="reveal">
|
|||
|
<div class="slides">
|
|||
|
<section class="has-dark-background" data-id="23f97d8ca3692213d683eacd3fe8cc7c" data-background-color="rgb(12,61,71)" data-background-image="reproduce-and-verify-filesystems-5/de26049e2540667b94b3ebaac424f755.jpg"><div class="sl-block" data-block-type="text" style="width: 800px; left: 80px; top: 250px; height: auto;" data-block-id="587376a0a305b36ca2e64db6da8b098a"><div class="sl-block-content" data-placeholder-tag="h1" data-placeholder-text="Title Text" style="z-index: 11;">
|
|||
|
<h1 style="text-align: center;">Reproduce and Verify Filesystems</h1>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 420px;" data-block-id="f27620cfa7bcea365c6956cbb6cd1dbc"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
|||
|
<p style="text-align: center;">Vincent Batts @vbatts</p>
|
|||
|
</div></div>
|
|||
|
</section><section data-id="7bbbb4c9cbb216b56050675ec07af48b"><div class="sl-block" data-block-type="code" style="min-width: 30px; min-height: 30px; width: 905px; height: 399px; left: 41px; top: 21px;" data-block-id="35547d2adfb96c21145c398dc1121461"><div class="sl-block-content" style="z-index: 11; font-size: 140%;" data-highlight-theme="ascetic"><pre><code>$> finger $(whoami)
|
|||
|
Login: vbatts Name: Vincent Batts
|
|||
|
Directory: /home/vbatts Shell: /bin/bash
|
|||
|
Such mail.
|
|||
|
Plan:
|
|||
|
OHMAN
|
|||
|
$> id -Gn
|
|||
|
devel opencontainers docker appc redhat golang slackware</code></pre></div></div>
|
|||
|
<div class="sl-block" data-block-type="image" style="min-width: 30px; min-height: 30px; width: 360px; height: 202.5px; left: 301px; top: 436px;" data-block-id="2480ba02cf3f27856e51aa83f42825ed"><div class="sl-block-content" style="z-index: 12;"><img data-natural-width="320" data-natural-height="180" data-src="reproduce-and-verify-filesystems-5/339e84e5deca8af62480a1dc3fb7af96.gif"></div></div></section><section class="has-light-background" data-background-color="#e9f4f6" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="d659a1b8073978dad27c4730b27c8e32"><div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 140px;" data-block-id="b72b9d2c71371a1b48e454d2dc117e4f"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<ul>
|
|||
|
<li><span style="font-size:1.4em">Packaging</span></li>
|
|||
|
<li class="fragment" data-fragment-index="0"><span style="font-size:1.4em">Content Addressibility</span></li>
|
|||
|
<li class="fragment" style="color:rgb(53, 64, 69)" data-fragment-index="1"><span style="font-size:1.4em">Compression!</span></li>
|
|||
|
<li class="fragment" data-fragment-index="2"><span style="font-size:1.4em">Reproducible Archives</span></li>
|
|||
|
<li class="fragment" data-fragment-index="3"><span style="font-size:1.4em">Verify at rest filesystems</span></li>
|
|||
|
</ul>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 80px; top: 70px;" data-block-id="0f7d4e0f40aceaf4e8bec594816d419e"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
|||
|
<h2>Agenda</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="image" style="min-width: 30px; min-height: 30px; width: 360px; height: 270px; left: 300px; top: 355px;" data-block-id="5c34b45ca8cf3d6341bc375a97ad1ab7"><div class="sl-block-content fragment" style="z-index: 13;" data-fragment-index="4"><img data-natural-width="240" data-natural-height="180" data-src="reproduce-and-verify-filesystems-5/29583aa0f6502646cc4a405a00d175f1.jpg"></div></div></section><section class="has-light-background" data-background-color="#d4e8ec" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="98bfaf83d159474b370e8c0cd538eb75"><div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 80px; top: 70px;" data-block-id="edfbe434b245149557abe4ed0374699f"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>Packaging</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 120px; top: 140px;" data-block-id="5ea57af00cdbe78b2d98422f09c95846"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="1">
|
|||
|
<p>tar archives</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 136px; top: 170px;" data-block-id="ea406a80f3812d8532f5e742026cabc4"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="2">
|
|||
|
<p>Slackware packages (<a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 160px; top: 200px;" data-block-id="fbfee24bb7275c4b078df32f91811d84"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="3">
|
|||
|
<p>Debian *.deb (<a href="http://linux.die.net/man/1/ar" target="_blank">ar(1)</a> archive of <a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 179px; top: 230px;" data-block-id="e674ef9dd70fc8d1802c77fa40e12a95"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;" data-fragment-index="4">
|
|||
|
<p>Red Hat *.rpm (custom key/value binary and <a href="http://linux.die.net/man/1/cpio" target="_blank">cpio(1)</a>)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 200px; top: 260px;" data-block-id="9751f8af7ce297589a8630de3dd390f7"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 16;" data-fragment-index="5">
|
|||
|
<p>Java *.jar and *.war (<a href="http://linux.die.net/man/1/zip" target="_blank">zip(1)</a> archive)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 228px; top: 290px;" data-block-id="962409707608e049261b890d083fc75a"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 17;" data-fragment-index="6">
|
|||
|
<p>Ruby *.gem (<a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archive of <a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 246px; top: 320px;" data-block-id="2d56fec8bc2cf27ab82678d790d6ea60"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 18;" data-fragment-index="7">
|
|||
|
<p>Container Images (<a href="http://linux.die.net/man/1/tar" target="_blank">tar(1)</a> archives)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="image" style="min-width: 30px; min-height: 30px; width: 360px; height: 202.5px; left: 299px; top: 420px;" data-block-id="0e6ea5f9a4e64d1a8ed813745c2ceabe"><div class="sl-block-content fragment" style="z-index: 19;" data-fragment-index="0"><img data-natural-width="400" data-natural-height="225" data-src="reproduce-and-verify-filesystems-5/52bae18fc307ddf4e5bfe956296b0c0b.gif"></div></div></section><section class="has-light-background" data-background-color="#bbdde7" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="7892d6dfb0e286632d32cd4e0679931f"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="1ee0ca6ebbd1643ea9592902281d44ed"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>Content Addressibility</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 228px; top: 210px;" data-block-id="2900872241fd527d9b2c32d057bc5e5b"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="0">
|
|||
|
<p>Opaque Object storage</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 200px; top: 240px;" data-block-id="6a4c935bc542f8d291b03e99699e313a"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="1">
|
|||
|
<p>changed object = new object</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 270px;" data-block-id="fab9de1be18702477ee016e8866abc58"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="2">
|
|||
|
<p>cryptographic assurance</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="image" style="min-width: 30px; min-height: 30px; width: 360px; height: 202.5px; left: 300px; top: 406px;" data-block-id="20e74f193f70fa15a337252c235ac403"><div class="sl-block-content fragment" style="z-index: 15;" data-fragment-index="3"><img data-natural-width="320" data-natural-height="180" data-src="reproduce-and-verify-filesystems-5/d1512c362a98d9ec4ccf4c33bb2064a7.gif"></div></div></section><section data-id="c095b0e8e95f59e5159f0839b919afb1" class="stack"><section class="has-light-background" data-background-color="#9fd4eb" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="191b0a4496689bf1a09515092f1dac47"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="b600581c1e08ba03a4d3098888cfda87"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>compression!</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 335px;" data-block-id="3aaec9f2c5e2512af131e9949039afa5"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="1">
|
|||
|
<p>inflate/deflate (RFC1951)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 135px; top: 180px;" data-block-id="ac13de5666ac7b72b6e979bd6307eb12"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="0">
|
|||
|
<p>same objects, but variation in compression</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 210px; top: 365px;" data-block-id="b8a594e8ff539d120b7f658116d5971c"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="2">
|
|||
|
<p>Gzip (RFC1952)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 232px; top: 395px;" data-block-id="8c39b951e4f2ddeec7dd96c98e34459e"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;" data-fragment-index="3">
|
|||
|
<p>`gzip` vs Golang `compress/gzip` vs Zlib</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 100px; top: 490px;" data-block-id="52dd15e6c458c2ead4bbd4eb5a677963"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 16;" data-fragment-index="4">
|
|||
|
<p>ideally compress for transfer and storage, but not for identity</p>
|
|||
|
</div></div></section><section class="has-light-background" data-background-color="#9fd4eb" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="0c55eeb9a60659b64c85ed2af6b7de8d"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="4d68270abac5e5498c0e16c858d411f0"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
|||
|
<h2>compression!</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="code" style="width: 797px; height: 360px; left: 83px; top: 130px;" data-block-id="ff61fb20706a34931dfb288b0764074d"><div class="sl-block-content" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre><code>#!/bin/sh
|
|||
|
dd if=/dev/urandom of=rando.img bs=1M count=2
|
|||
|
cat rando.img | gzip -n > rando.img.gz
|
|||
|
cat rando.img | gzip -n -9 > rando.img.9.gz
|
|||
|
cat rando.img | xz > rando.img.xz
|
|||
|
cat rando.img | xz -9 > rando.img.9.xz
|
|||
|
sha1sum rando.img* > SHA1
|
|||
|
|
|||
|
cat rando.img | gzip -n > rando.img.gz
|
|||
|
cat rando.img | gzip -n -9 > rando.img.9.gz
|
|||
|
cat rando.img | xz > rando.img.xz
|
|||
|
cat rando.img | xz -9 > rando.img.9.xz
|
|||
|
sha1sum -c ./SHA1</code></pre></div></div></section><section class="has-light-background" data-background-color="#9fd4eb" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="b03d420eef149b7a255b09452e70846c"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="1816317af5d50947042c7daacf8b5f07"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>compression!</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="code" style="width: 797px; height: 314px; left: 82px; top: 146px;" data-block-id="2ccaa735c0f479fdc19a4a40d2035187"><div class="sl-block-content" style="z-index: 13;" data-highlight-theme="solarized-dark"><pre><code>#!/usr/bin/env ruby
|
|||
|
|
|||
|
require 'zlib'
|
|||
|
include Zlib
|
|||
|
|
|||
|
input = File.open(ARGV.first)
|
|||
|
GzipWriter.open(ARGV.first + '.gz', DEFAULT_COMPRESSION, HUFFMAN_ONLY) do |gz|
|
|||
|
gz.write(IO.binread(input))
|
|||
|
end
|
|||
|
input.flush()
|
|||
|
input.close()</code></pre></div></div></section><section class="has-light-background" data-background-color="#9fd4eb" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="8ed56a11a24a87544db45844eb49f2ff"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="63660628cd9d020fda9cc2583b7a2d98"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>compression!</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="code" style="width: 815px; height: 584px; left: 73px; top: 116px;" data-block-id="b9c9d66df18aa4ea66d038b0bf51b739"><div class="sl-block-content" style="z-index: 13;" data-highlight-theme="solarized-dark"><pre><code>package main
|
|||
|
|
|||
|
import (
|
|||
|
"compress/gzip"
|
|||
|
"io"
|
|||
|
"os"
|
|||
|
)
|
|||
|
|
|||
|
func main() {
|
|||
|
input, err := os.Open(os.Args[1])
|
|||
|
if err != nil {
|
|||
|
println(err.Error())
|
|||
|
os.Exit(1)
|
|||
|
}
|
|||
|
output, err := os.Create(os.Args[1] + ".gz")
|
|||
|
if err != nil {
|
|||
|
println(err.Error())
|
|||
|
os.Exit(1)
|
|||
|
}
|
|||
|
gz := gzip.NewWriter(output)
|
|||
|
if _, err := io.Copy(gz, input); err != nil {
|
|||
|
println(err.Error())
|
|||
|
os.Exit(1)
|
|||
|
}
|
|||
|
}</code></pre></div></div></section></section><section data-id="7d206ebc65630d581fc85a32ed1262d9" class="stack"><section class="has-light-background" data-background-color="#6ec1e3" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="79cb8d94e1aacd505749e97819c495d1"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="754fbe75f54354504e1a2acf45a00e47"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>reproducible archive</h2>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 128px; top: 180px;" data-block-id="8d95de56198656abdaaddaf363fdac3a"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="0">
|
|||
|
<p>reproducible-builds.org</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 659px; left: 149px; top: 210px;" data-block-id="5b9f69371eeb689e2e0e07f36f6a31a4"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="1">
|
|||
|
<p>processed checksum of tar archive (<a href="https://github.com/docker/docker/blob/v1.8.3/pkg/tarsum/tarsum_spec.md" target="_blank">see deprecated Docker TarSum</a>)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 659px; left: 99px; top: 280px;" data-block-id="91fa8c006f296c7909e8ac5a4917674a"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="2">
|
|||
|
<p>keep around the original *.tar?</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 659px; left: 141px; top: 310px;" data-block-id="a64d35589d74b51c1ff8e9c03a458bad"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;" data-fragment-index="3">
|
|||
|
<p>re-assemble the original *.tar</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 659px; left: 160px; top: 340px;" data-block-id="04a2aee263d2b3e0ac8e213a2896d6f9"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 16;" data-fragment-index="4">
|
|||
|
<p><a href="http://github.com/vbatts/tar-split" target="_blank">github.com/vbatts/tar-split</a></p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="image" style="min-width: 30px; min-height: 30px; width: 273px; height: 258.109px; left: 342px; top: 431px;" data-block-id="ba70a209fc3d57c343ddb1978d7d030f"><div class="sl-block-content fragment" style="z-index: 17;" data-fragment-index="5"><img data-natural-width="330" data-natural-height="312" data-src="reproduce-and-verify-filesystems-5/0ff1b7eb9667528cb8cde60f7a5a2d5c.gif"></div></div></section><section class="has-light-background" data-background-color="#6ec1e3" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="0a9edb24c627567228da4a3955f93338"><div class="sl-block" data-block-type="text" style="height: auto; width: 600px; left: 80px; top: 70px;" data-block-id="452b90d169aa41096db6be336205988b"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>reproducible archive</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div class="sl-block" data-block-type="code" style="min-width: 30px; min-height: 30px; width: 724px; height: 300px; left: 119px; top: 200px;" data-block-id="dabeb800f7c3ed5344b07ae4ca859c5a"><div class="sl-block-content" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>go install github.com/vbatts/tar-split/cmd/tar-split
|
|||
|
|
|||
|
tar cf demo.tar *.sh
|
|||
|
sha1sum demo.tar | tee SHA1
|
|||
|
|
|||
|
tar-split disasm --no-stdout ./demo.tar
|
|||
|
ls -lh tar-data.json.gz
|
|||
|
|
|||
|
rm -f demo.tar
|
|||
|
tar-split asm --output demo.tar --path .
|
|||
|
sha1sum -c ./SHA1</code></pre></div></div></section></section><section data-id="b934cded2ffaa3b885bbf648e9c2a8f0" class="stack"><section class="has-light-background" data-background-color="#4bb7e3" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="82f0029078f19a23fd0232830442c176"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="406f53dc04435cfdf373efc090f6b69c"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
|||
|
<h2>Verify at rest Filesystems</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 92px; top: 210px;" data-block-id="f78b20b98c43a5a56ec67372a34f4682"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;" data-fragment-index="0">
|
|||
|
<p>Regardless of transport, ensure resulting filesystem</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 120px; top: 240px;" data-block-id="64d77dbc5a9ef9d278d10780fce44bb8"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;" data-fragment-index="1">
|
|||
|
<p>(*.tar archive, rsync, bittorrent, IPFS, etc)</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 169px; top: 308px;" data-block-id="6f2a201c1c894dd63babd9e85721cd30"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;" data-fragment-index="2">
|
|||
|
<p>`rpm -qV <package>` functionality</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 222px; top: 390px;" data-block-id="da8a2832445447eef9bc2a7574feab1d"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;" data-fragment-index="3">
|
|||
|
<p>Future hopes could be <a href="http://linux-ima.sourceforge.net/" target="_blank">IMA/EVM</a></p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 160px; top: 460px;" data-block-id="6a32cc54b613bfef88733e16f0f956bf"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;" data-fragment-index="4">
|
|||
|
<p>Passive validation of directory hierarchies</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 189px; top: 490px;" data-block-id="2d623785dd35b371c57374ccf6576c18"><div class="sl-block-content fragment" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 17;" data-fragment-index="5">
|
|||
|
<p>BSD mtree(8)</p>
|
|||
|
</div></div></section><section class="has-light-background" data-background-color="#4bb7e3" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="f4ec084cf5e959da310fde14a07c796e"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="9302588306260d7cf1b230811f29f70c"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>Verify at rest Filesystems</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 160px; top: 250px;" data-block-id="5e29f53ab1accbc5573700a121ca9af6"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
|||
|
<p><a href="http://www.freebsd.org/cgi/man.cgi?mtree(8)" target="_blank">FreeBSD mtree(8)</a></p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 240px; top: 320px;" data-block-id="87fde9a6a5f57bc73f68daf49b83e9a9"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
|||
|
<p><a href="https://github.com/archiecobbs/mtree-port" target="_blank">mtree-port (for linux)</a></p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 320px; top: 390px;" data-block-id="4e046b35652b3179bb6af7f43bedfb76"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;">
|
|||
|
<p><a href="https://github.com/vbatts/go-mtree" target="_blank">go-mtree (golang cli and library)</a></p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 548px; left: 400px; top: 460px;" data-block-id="c185f40c5832e81f4991245d5c514aea"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 15;">
|
|||
|
<p><a href="https://www.freebsd.org/cgi/man.cgi?query=libarchive-formats&sektion=5" target="_blank">libarchive-formats(5)</a></p>
|
|||
|
</div></div></section><section class="has-light-background" data-background-color="#4bb7e3" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="8526a808386bdf837654854c12116ea7"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="4aba5be50744290c8c19011eb041b2c6"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>Verify at rest Filesystems</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div class="sl-block" data-block-type="code" style="width: 780px; height: 300px; left: 91px; top: 200px;" data-block-id="606237f9a965810ca6da8a1b5d3e39ec"><div class="sl-block-content" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>#!/usr/bin/env python
|
|||
|
|
|||
|
import libarchive
|
|||
|
|
|||
|
with libarchive.file_writer('../demo.mtree', 'mtree') as a:
|
|||
|
a.add_files('./')
|
|||
|
|
|||
|
</code></pre></div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 146px; top: 140px;" data-block-id="6a03374c2a727dd1a22d15b70d91c645"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
|||
|
<p>with packages: libarchive and python-libarchive-c</p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 181px; top: 464px;" data-block-id="25867140c0fce8ffba59ab44535fc1b4"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 14;">
|
|||
|
<p style="text-align: center;"><font color="#b21a0f"><span style="font-size:28px">NOTICE: libarchive uses older mtree format</span></font></p>
|
|||
|
</div></div></section><section class="has-light-background" data-background-color="#4bb7e3" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="6d5f286ddb5ec2821099d0319b33e9f1"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="8cd0066bebc1bb7565e477b3bae75c83"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>Verify at rest Filesystems</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div class="sl-block" data-block-type="code" style="min-width: 30px; min-height: 30px; width: 780px; height: 300px; left: 91px; top: 200px;" data-block-id="284eb47327380fb50ef0dc90e2462f89"><div class="sl-block-content" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>mtree -c -p ./ -K sha256digest | tee /tmp/demo.mtree
|
|||
|
|
|||
|
mtree -f /tmp/demo.mtree -p ./
|
|||
|
echo $?
|
|||
|
|
|||
|
read
|
|||
|
|
|||
|
touch $0 # SCANDALOUS
|
|||
|
mtree -f /tmp/demo.mtree -p ./</code></pre></div></div></section><section class="has-light-background" data-background-color="#4bb7e3" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="504b417f0e0fcada82f82c7f48fc8a05"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="1e5a6e8d13c057b214edfee228188103"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>Verify at rest Filesystems</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div class="sl-block" data-block-type="code" style="width: 780px; height: 300px; left: 91px; top: 200px;" data-block-id="f37698d51ebf54832b858fbc234d92bc"><div class="sl-block-content" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>go get -u github.com/vbatts/go-mtree/cmd/gomtree
|
|||
|
gomtree -c -p ./ -K sha256digest | tee /tmp/demo.mtree
|
|||
|
|
|||
|
gomtree -f /tmp/demo.mtree -p ./
|
|||
|
echo $?
|
|||
|
|
|||
|
read
|
|||
|
|
|||
|
touch $0 # SCANDALOUS
|
|||
|
gomtree -f /tmp/demo.mtree -p ./</code></pre></div></div>
|
|||
|
<div data-block-id="22c062ff0668f453894679acb8a4f28c" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 140px;" data-block-type="text" class="sl-block"><div style="z-index: 13;" data-placeholder-text="Text" data-placeholder-tag="p" class="sl-block-content">
|
|||
|
<p style="text-align: center;"><strong>Directory Path</strong></p>
|
|||
|
</div></div></section><section data-id="cf2e4fa4d2fe6beb563c42a748b48c45" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-background-color="#4bb7e3" class="has-light-background"><div data-block-id="f97a4fd08cdd781f9f794fb490d31a10" class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h2>Verify at rest Filesystems</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div data-block-id="16d5b84fe59587b1ddd37cb1e6f26ab6" class="sl-block" data-block-type="code" style="width: 780px; height: 300px; left: 91px; top: 200px;"><div class="sl-block-content" style="z-index: 12;" data-highlight-theme="solarized-dark"><pre class="bash"><code>tar cf /tmp/demo.tar .
|
|||
|
gomtree -c -T /tmp/demo.tar -K sha256digest | tee /tmp/demo.mtree
|
|||
|
|
|||
|
gomtree -f /tmp/demo.mtree -T /tmp/demo.tar
|
|||
|
echo $?
|
|||
|
|
|||
|
read
|
|||
|
|
|||
|
gomtree -f /tmp/demo.mtree -p ./
|
|||
|
echo $?
|
|||
|
|
|||
|
|
|||
|
touch $0 # SCANDALOUS
|
|||
|
gomtree -f /tmp/demo.mtree -p ./</code></pre></div></div>
|
|||
|
<div data-block-id="ab7c06375138d25ed1fd3351d21cc03b" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 181px; top: 140px;" data-block-type="text" class="sl-block"><div style="z-index: 13;" data-placeholder-text="Text" data-placeholder-tag="p" class="sl-block-content">
|
|||
|
<p style="text-align: center;"><strong>Tar Archive Support</strong></p>
|
|||
|
</div></div></section></section><section class="has-light-background" data-background-color="#cfe68f" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="e476ce5949f36b4e3a4e1a50925175f0"><div class="sl-block" data-block-type="text" style="height: auto; width: 666px; left: 80px; top: 70px;" data-block-id="3d645fb9a1d58446f89e01b5c3ca6abf"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 10;">
|
|||
|
<h2>Call to Action</h2>
|
|||
|
</div></div>
|
|||
|
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 120px; top: 210px;" data-block-id="6b8eca2e2e70cdaec390a2eb3d54dc3d"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<p>You have the need to store archives, whole and extracted,</p>
|
|||
|
|
|||
|
<p>check out <a href="https://github.com/vbatts/tar-split" target="_blank">github.com/vbatts/tar-split</a></p>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 160px; top: 350px;" data-block-id="15c4892f73b935f2a962a2363232d2d6"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 13;">
|
|||
|
<p>You have the need <span>to verify, or restore, a filesystem regardless of how it was distributed, check out <a href="https://github.com/vbatts/go-mtree" target="_blank">github.com/vbatts/go-mtree</a> or other mtree projects</span></p>
|
|||
|
</div></div></section><section class="has-light-background" data-background-color="#e1efba" data-background-image="reproduce-and-verify-filesystems-5/60672f0849c5b758b11dc0905dc42c02.svg" data-id="461b39bbf2bb2801c38afe7639a44279"><div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 600px; left: 180px; top: 444px;" data-block-id="74dc5cae72dc0f9e4fe69169ea811245"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 11;">
|
|||
|
<h3 style="text-align: center;">Thank You!</h3>
|
|||
|
</div></div>
|
|||
|
<div class="sl-block" data-block-type="text" style="height: auto; min-width: 30px; min-height: 30px; width: 766px; left: 97px; top: 186px;" data-block-id="e149c15aec00cfa9da0b05bf6cc4670d"><div class="sl-block-content" data-placeholder-tag="p" data-placeholder-text="Text" style="z-index: 12;">
|
|||
|
<h2 style="color:rgb(53, 64, 69); text-align:center">VINCENT BATTS</h2>
|
|||
|
|
|||
|
<h2 style="color:rgb(53, 64, 69); text-align:center">@VBATTS| VBATTS@REDHAT.COM</h2>
|
|||
|
</div></div></section>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
<script>
|
|||
|
var SLConfig = {"deck": {"id":779665,"slug":"reproduce-and-verify-filesystems-5","title":"Reproduce and Verify Filesystems [2016 ContainerCon NE]","description":"A side effect of the many new ways to package filesystems (here's looking at you, containers!), is that filesystems are being copied around without many of the features that traditional packaging provided (i.e. `rpm -qV ...`). Much progress has been made for reproducible checksums, of which Docker now includes for better content addressibility. In this talk Vincent Batts will review options for distributing filesystems with reproducibility, and verifying the at-rest outcomes.","width":960,"height":700,"visibility":"self","published_at":null,"sanitize_messages":null,"thumbnail_url":"https://s3.amazonaws.com/media-p.slid.es/thumbnails/419084c9510c580808fc95f79d4c7a95/thumb.jpg","view_count":227,"user":{"id":352550,"username":"vbatts","name":"Vincent Batts","description":"","thumbnail_url":"https://www.gravatar.com/avatar/a76bbb02d3ce311820f53ef484c0f8bf?s=140\u0026d=https%3A%2F%2Fstatic.slid.es%2Fimages%2Fdefault-profile-picture.png","paid":true,"pro":true,"lite":false,"team_id":32,"settings":{"id":185974,"present_controls":true,"present_upsizing":true,"present_pointer":false,"present_notes":true,"default_deck_tag_id":null},"enterprise":true,"membership":{"role":"member","manager":false,"activated":true}},"background_transition":"none","transition":"none","theme_id":176,"theme_font":"overpass2","theme_color":"no-color","auto_slide_interval":0,"comments_enabled":true,"forking_enabled":false,"rolling_links":false,"center":false,"shuffle":null,"should_loop":false,"share_notes":false,"slide_number":false,"slide_count":22,"rtl":false,"version":2,"collaborative":false,"deck_user_editor_limit":1,"data_updated_at":1471836426294,"font_typekit":null,"font_google":null,"notes":{"8ed56a11a24a87544db45844eb49f2ff":"demo","0c55eeb9a60659b64c85ed2af6b7de8d":"demo","b03d420eef149b7a255b09452e70846c":"demo","0a9edb24c627567228da4a3955f93338":"demo","504b417f0e0fcada82f82c7f48fc8a05":"demo ./go-mtree.sh","6d5f286ddb5ec2821099d0319b33e9f1":"demo ./mtree.sh","8526a808386bdf837654854c12116ea7":"no demo for this, they can do that on their own"}}};
|
|||
|
|
|||
|
SLConfig.theme = {"id":176,"created_at":"2014-05-27T12:38:16.183Z","updated_at":"2018-05-04T07:53:25.097Z","name":"Red Hat Corporate","thumbnail_url":"https://s3.amazonaws.com/media-p.slid.es/thumbnails/66755080be2b0c8c0146bfa70069ef16/thumb.jpg?1525420403","sanitize_messages":null,"slide_template_ids":[56706,56689,28642,36442,27160,26765,26762,56684,56696,56704,56703],"font_typekit":"","font_google":"","width":960,"height":700};
|
|||
|
|
|||
|
// Use local fonts
|
|||
|
SLConfig.fonts_url = 'lib/fonts/';
|
|||
|
</script>
|
|||
|
|
|||
|
<script src="lib/head.min.js"></script>
|
|||
|
<script src="lib/reveal.min.js"></script>
|
|||
|
<script src="lib/offline.js"></script>
|
|||
|
|
|||
|
<!-- Initialize the presentation -->
|
|||
|
<script>
|
|||
|
Reveal.initialize({
|
|||
|
width: 960,
|
|||
|
height: 700,
|
|||
|
margin: 0.05,
|
|||
|
|
|||
|
controls: true,
|
|||
|
progress: true,
|
|||
|
history: true,
|
|||
|
mouseWheel: false,
|
|||
|
showNotes: false,
|
|||
|
slideNumber: false,
|
|||
|
|
|||
|
autoSlide: 0 || 0,
|
|||
|
autoSlideStoppable: true,
|
|||
|
|
|||
|
center: false,
|
|||
|
shuffle: false,
|
|||
|
loop: false,
|
|||
|
rtl: false,
|
|||
|
|
|||
|
transition: "none",
|
|||
|
backgroundTransition: "none",
|
|||
|
|
|||
|
dependencies: [
|
|||
|
{ src: 'lib/reveal-plugins/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
|||
|
{ src: 'lib/reveal-plugins/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
|||
|
{ src: 'lib/reveal-plugins/highlight/highlight.js', async: true, callback: function() { hljs.initHighlighting(); hljs.initHighlightingOnLoad(); } },
|
|||
|
{ src: 'lib/reveal-plugins/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },
|
|||
|
{ src: 'lib/reveal-plugins/zoom/zoom.js', async: true }
|
|||
|
]
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
|
|||
|
<script id="theme-js-output" type="text/javascript">var themeHTMLOutput = document.getElementById('theme-html-output');
|
|||
|
if( themeHTMLOutput ) {
|
|||
|
themeHTMLOutput.innerHTML = '<link rel="stylesheet" href="https://overpassmonotest-30e2.kxcdn.com/overpass-mono.css" />';
|
|||
|
}
|
|||
|
|
|||
|
// (function() {
|
|||
|
//
|
|||
|
// var slidesInitInterval = setInterval( function() {
|
|||
|
// if( window.SL && window.SL.view ) {
|
|||
|
// // If we're in the editor, wait for the Blocks controller
|
|||
|
// // to be initialized
|
|||
|
// if( SL.editor ) {
|
|||
|
//
|
|||
|
// if( SL.editor.controllers && SL.editor.controllers.Blocks && SL.editor.controllers.Blocks.textSaved ) {
|
|||
|
// SL.editor.controllers.Blocks.textSaved.add( function( element ) {
|
|||
|
// var html = element.html();
|
|||
|
// html = html.replace( /(@RedHat | @redhat)/g, '@redhat' );
|
|||
|
// html = html.replace( 'redhat.com', 'redhat.com' );
|
|||
|
// html = html.replace( /(Red Hat|red hat|RedHat|Red hat|Redhat|redHat|red Hat)/g, '<span class="name">Red Hat</span>' );
|
|||
|
// html = html.replace( /( redhat |redhat )/g, ' <span class="name">Red Hat</span> ' );
|
|||
|
// html = html.replace( 'REDHAT', '<span class="name">RED HAT</span>' );
|
|||
|
// html = html.replace( 'redhat<', '<span class="name">Red Hat</span><' );
|
|||
|
// html = html.replace( 'openshift', '<span class="name">OpenShift</span>' );
|
|||
|
// html = html.replace( '<span class="name"><span class="name">Red Hat</span></span>', '<span class="name">Red Hat</span>' );
|
|||
|
// html = html.replace( 'redhat.com', 'redhat.com' );
|
|||
|
// html = html.replace( 'REDHAT.COM', 'REDHAT.COM' );
|
|||
|
// html = html.replace( '@redhat', '@redhat' );
|
|||
|
// html = html.replace( /(@RedHatNews | @redhatnews)/g, '@RedHatNews' );
|
|||
|
// html = html.replace( /(@RedHat | @redhat)/g, '@RedHatInc' );
|
|||
|
// html = html.replace( /(RHEL-OSP|RHELOSP|Red Hat Enterprise Linux OpenStack Platform)/g, 'Red Hat OpenStack Platform' );
|
|||
|
// html = html.replace( /(openstack |openstack|open stack|openStack|Openstack)/g, 'OpenStack' );
|
|||
|
// html = html.replace( 'openstack', 'OpenStack' );
|
|||
|
// html = html.replace( 'openstack<', 'OpenStack<' );
|
|||
|
//
|
|||
|
// element.html( html );
|
|||
|
// } );
|
|||
|
//
|
|||
|
// clearInterval( slidesInitInterval );
|
|||
|
// }
|
|||
|
//
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// clearInterval( slidesInitInterval );
|
|||
|
// }
|
|||
|
// }
|
|||
|
// }, 500 );
|
|||
|
//
|
|||
|
// })();
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// piwik script
|
|||
|
var _paq = _paq || [];
|
|||
|
_paq.push(["trackPageView"]);
|
|||
|
_paq.push(["enableLinkTracking"]);
|
|||
|
|
|||
|
(function() {
|
|||
|
var u = (("https:" == document.location.protocol) ? "https" : "http") +
|
|||
|
"://engstats.redhat.com/piwik/";
|
|||
|
_paq.push(["setTrackerUrl", u+"piwik.php"]);
|
|||
|
_paq.push(["setSiteId", "8"]);
|
|||
|
var d=document, g=d.createElement("script"),
|
|||
|
s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
|
|||
|
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
|
|||
|
})();
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
function sliceString(selector) {
|
|||
|
var elements = document.getElementsByClassName(selector);
|
|||
|
|
|||
|
|
|||
|
for (var h=0; h<elements.length; h++){
|
|||
|
var string = elements[h].innerText,
|
|||
|
total = string.length,
|
|||
|
div = '';
|
|||
|
|
|||
|
// futile attempt to clean space
|
|||
|
var string = elements[h].innerText.trim();
|
|||
|
|
|||
|
for (var i=0; i<total; i++) {
|
|||
|
var letter = string.charAt(i);
|
|||
|
div+= '<span class="'+letter+'">'+letter+'</span>';
|
|||
|
}
|
|||
|
elements[h].innerHTML = div;
|
|||
|
}
|
|||
|
}
|
|||
|
sliceString('lettering');
|
|||
|
sliceString('lettering'); //no rogue spaces when fired twice for some reason
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// function sliceString(selector) {
|
|||
|
// if (!document.querySelector) return;
|
|||
|
// var string = document.querySelector(selector).innerText,
|
|||
|
// total = string.length,
|
|||
|
// html = '';
|
|||
|
// for (var i=0; i<total; i++) {
|
|||
|
// var letter = string.charAt(i);
|
|||
|
// html+= '<span class="'+letter+'">'+letter+'</span>';
|
|||
|
// }
|
|||
|
// document.querySelector(selector).innerHTML = html;
|
|||
|
//}
|
|||
|
//sliceString('.lettering');</script>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|