Add rook talk

Change-Id: I76f535f42832abb086fc09699b0ff95b8c7ee894
This commit is contained in:
James E. Blair 2019-05-10 13:41:40 -07:00
parent e340651370
commit 1943289737
36 changed files with 1340 additions and 99 deletions

View File

@ -2,4 +2,4 @@
host=review.opendev.org
port=29418
project=opendev/publications.git
defaultbranch=template
defaultbranch=rook

View File

@ -1,34 +1,19 @@
Template Branch for new OpenStack Infra Publications
====================================================
Highly Available Git on CephFS with Rook, Kubernetes, and OpenStack
===================================================================
Creating new OpenStack Infra Publications is easy and you have started
in the right place.
Abstract
--------
1. Clone publications, create and checkout template tracking branch::
The OpenDev Project operates infrastructure for some of the largest
and most active Open Source projects. It needs a bulletproof system
for serving the git repositories for those projects, and it needs to
be entirely open source.
git clone git://git.openstack.org/openstack-infra/publications
cd publications
git review -s
git checkout -b template origin/template
2. Create a new branch based on this template branch.
``git checkout -b $BRANCH_NAME``.
3. Edit ``.gitreview`` and change the defaultbranch value to
``$BRANCH_NAME``.
4. Create ``$BRANCH_NAME`` in Gerrit. It should be based on the
template branch as well to avoid any potential merge conflicts in
your first commit. Not everyone has the ability to do this in
Gerrit. If you don't, ask an openstack infra core to do it for you.
5. Now we get to do the fun stuff. Edit index.html editing lines with
``CHANGEME`` or ``changeme`` in them. You can also add new slides
if you like but that isn't necessary in this bootstrapping change.
You can follow up with new slides in subsequent changes.
6. Edit this file, ``README.rst``. The title of this document will
be the name used on the root publications index so be sure to
update the title. You should also add an Abstract section and
general talk info.
7. At this point you are ready to push your new changes back up to
Gerrit. ``git commit -a && git review``
8. Finally, if you want notifications for subsequent branch updates
to be shown in the #openstack-infra channel, add your branch to
gerritbot/channels.yaml in the project-config repository.
This presentation will show how OpenDev uses Kubernetes and Rook to
deploy an entirely virtualized Ceph cluster and CephFS to serve git
repositories. The cluster is fully integrated with the OpenStack cloud
provider it runs in, so that OpenStack automatically provides load
balancing and the virtualized block storage that supports the Ceph
cluster. The deployment process is automated with Ansible and allows
for easy experimentation and testing since the entire system can be
recreated in a matter of minutes.

BIN
graphics/banner.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 B

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 B

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 B

After

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 B

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 B

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

After

Width:  |  Height:  |  Size: 2.7 KiB

86
graphics/opendev.svg Normal file
View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 486.98252 289.775"
height="289.77499"
width="486.98251"
xml:space="preserve"
version="1.1"
id="svg2"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
id="clipPath66"
clipPathUnits="userSpaceOnUse"><path
id="path68"
d="m 533,244.125 72,0 0,71.875 -72,0 0,-71.875 z" /></clipPath><clipPath
id="clipPath82"
clipPathUnits="userSpaceOnUse"><path
id="path84"
d="m 471.926,323 27.074,0 0,28 -27.074,0 0,-28 z" /></clipPath><clipPath
id="clipPath92"
clipPathUnits="userSpaceOnUse"><path
id="path94"
d="m 502,323 27,0 0,37.035 -27,0 0,-37.035 z" /></clipPath><clipPath
id="clipPath110"
clipPathUnits="userSpaceOnUse"><path
id="path112"
d="m 645,324 21.719,0 0,26 -21.719,0 0,-26 z" /></clipPath></defs><g
transform="matrix(1.25,0,0,1.25,-589.9075,-160.26875)"
id="g10"><g
transform="matrix(2,0,0,2,-471.926,-360.035)"
id="g62"><g
clip-path="url(#clipPath66)"
id="g64"><path
id="path70"
style="fill:#ee265e;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 604.781,279.582 c 0,-19.582 -15.875,-35.457 -35.457,-35.457 -19.582,0 -35.457,15.875 -35.457,35.457 0,19.582 15.875,35.457 35.457,35.457 19.582,0 35.457,-15.875 35.457,-35.457" /><path
id="path72"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 546.879,284.004 c 0,-3 2.441,-5.442 5.441,-5.442 3,0 5.442,2.442 5.442,5.442 0,3.004 -2.442,5.441 -5.442,5.441 -3,0 -5.441,-2.437 -5.441,-5.441 m 13.004,0 c 0,-4.168 -3.391,-7.563 -7.563,-7.563 -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 4.172,0 7.563,-3.394 7.563,-7.566" /><path
id="path74"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 583.555,289.449 -5.442,0 c -3,0 -5.441,-2.441 -5.441,-5.445 0,-3 2.441,-5.442 5.441,-5.442 l 5.442,0 0,10.887 z m 1.062,-13.008 -6.504,0 c -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 l 6.504,0 c 0.586,0 1.059,-0.476 1.059,-1.062 l 0,-13.008 c 0,-0.586 -0.473,-1.059 -1.059,-1.059" /><path
id="path76"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 590.906,285.203 c -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.195 1.199,-1.195 0.66,0 1.196,0.535 1.196,1.195 0,0.66 -0.536,1.199 -1.196,1.199 m 0,10.465 c 0.66,0 1.196,0.539 1.196,1.199 0,0.66 -0.536,1.199 -1.196,1.199 -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.199 1.199,-1.199 m -52.019,-15.242 c 0.222,-0.227 0.527,-0.352 0.843,-0.352 0.321,0 0.622,0.125 0.848,0.352 0.469,0.469 0.469,1.23 0,1.695 -0.453,0.453 -1.242,0.453 -1.695,0 -0.465,-0.465 -0.465,-1.226 0.004,-1.695 m 10.359,-7.742 c -0.453,0.453 -1.242,0.453 -1.695,0 -0.469,-0.469 -0.469,-1.227 0,-1.696 0.234,-0.234 0.539,-0.351 0.847,-0.351 0.309,0 0.614,0.117 0.848,0.351 0.465,0.469 0.465,1.227 0,1.696 m 45.566,-13.707 -10.195,0 c -0.586,0 -1.062,0.476 -1.062,1.062 l 0,10.043 -5.512,0 c -5.828,0 -10.828,3.609 -12.898,8.707 -0.676,-1.652 -1.68,-3.195 -3.02,-4.535 -2.887,-2.887 -6.797,-4.313 -10.836,-4.02 -0.148,-0.265 -0.32,-0.519 -0.543,-0.746 -1.293,-1.293 -3.398,-1.293 -4.695,0 -1.293,1.293 -1.293,3.399 0,4.696 0.629,0.625 1.461,0.972 2.347,0.972 0.887,0 1.719,-0.347 2.348,-0.972 0.52,-0.52 0.82,-1.176 0.922,-1.852 3.344,-0.176 6.566,1.031 8.957,3.422 4.602,4.601 4.602,12.09 0,16.691 -4.602,4.602 -12.086,4.602 -16.687,0 -2.137,-2.136 -3.34,-4.945 -3.438,-7.949 0.594,-0.141 1.137,-0.434 1.578,-0.875 1.293,-1.293 1.293,-3.398 0,-4.695 -1.254,-1.254 -3.441,-1.25 -4.691,0 -1.297,1.297 -1.297,3.402 -0.004,4.695 0.293,0.289 0.629,0.512 0.988,0.672 0.051,3.648 1.481,7.066 4.067,9.652 2.714,2.715 6.277,4.071 9.843,4.071 3.567,0 7.129,-1.356 9.844,-4.071 1.363,-1.363 2.379,-2.937 3.059,-4.621 2.093,5.043 7.066,8.602 12.859,8.602 l 9.73,0 c 0.446,1.308 1.676,2.262 3.133,2.262 1.828,0 3.317,-1.493 3.317,-3.321 0,-1.832 -1.489,-3.32 -3.317,-3.32 -1.457,0 -2.687,0.949 -3.133,2.258 l -9.73,0 c -6.508,0 -11.801,-5.293 -11.801,-11.801 0,-6.508 5.293,-11.801 11.801,-11.801 l 6.574,0 c 0.586,0 1.059,-0.473 1.059,-1.058 l 0,-10.047 8.078,0 0,2.722 -2.852,0.004 c -0.582,0 -1.058,0.477 -1.058,1.059 l 0,15.992 c -1.309,0.445 -2.258,1.672 -2.258,3.129 0,1.832 1.488,3.32 3.32,3.32 1.828,0 3.317,-1.488 3.317,-3.32 0,-1.457 -0.95,-2.684 -2.258,-3.129 l 0,-14.93 2.847,-0.004 c 0.586,0 1.059,-0.476 1.059,-1.058 l 0,-4.844 c 0,-0.586 -0.473,-1.062 -1.059,-1.062" /></g></g><g
transform="matrix(2,0,0,2,-471.926,-360.035)"
id="g78"><g
clip-path="url(#clipPath82)"
id="g80"><path
id="path86"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 494.559,336.965 c 0,5.172 -4.184,9.379 -9.325,9.379 -5.172,0 -9.379,-4.207 -9.379,-9.379 0,-5.141 4.207,-9.324 9.379,-9.324 5.141,0 9.325,4.183 9.325,9.324 m -9.325,-13.305 c -7.336,0 -13.308,5.969 -13.308,13.305 0,7.34 5.972,13.308 13.308,13.308 7.336,0 13.305,-5.968 13.305,-13.308 0,-7.336 -5.969,-13.305 -13.305,-13.305" /></g></g><g
transform="matrix(2,0,0,2,-471.926,-360.035)"
id="g88"><g
clip-path="url(#clipPath92)"
id="g90"><path
id="path96"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 524.68,336.965 c 0,5.172 -4.184,9.379 -9.328,9.379 -5.168,0 -9.375,-4.207 -9.375,-9.379 0,-5.141 4.207,-9.324 9.375,-9.324 5.144,0 9.328,4.183 9.328,9.324 m -9.328,-13.305 c -7.336,0 -13.305,5.969 -13.305,13.332 l 0,21.946 c 0,0.656 0.441,1.097 1.101,1.097 l 1.676,0 c 0.66,0 1.102,-0.441 1.102,-1.097 l 0,-12.622 c 2.5,2.52 5.91,3.957 9.426,3.957 7.339,0 13.308,-5.968 13.308,-13.308 0,-7.336 -5.969,-13.305 -13.308,-13.305" /></g></g><g
transform="matrix(2,0,0,2,-471.926,-360.035)"
id="g98"><path
id="path100"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 600.582,347.086 c -5.582,0 -10.121,-4.539 -10.121,-10.121 0,-5.61 4.539,-10.172 10.121,-10.172 5.609,0 10.172,4.562 10.172,10.172 0,5.582 -4.563,10.121 -10.172,10.121 m 12.207,-32.395 -1.68,0 c -0.222,0 -0.304,0.082 -0.304,0.305 l 0,14.637 -1.059,-1.145 c -2.375,-2.562 -5.715,-4.035 -9.164,-4.035 -6.898,0 -12.512,5.613 -12.512,12.512 0,6.898 5.614,12.512 12.512,12.512 6.898,0 12.512,-5.614 12.512,-12.512 l -0.035,-0.949 0.035,0 0,-21.02 c 0,-0.223 -0.082,-0.305 -0.305,-0.305" /><path
id="path102"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 535.961,334.949 c 0.859,-4.933 5.016,-7.515 8.734,-7.515 4.258,0 7.996,3.218 8.785,7.515 l -17.519,0 z m 8.734,-11.289 c -7.351,0 -12.898,5.524 -12.898,12.848 0,6.765 4.957,13.765 13.254,13.765 3.851,0 7.457,-1.539 10.179,-4.359 0.403,-0.461 0.395,-1.019 0,-1.469 l -1.027,-1.281 c -0.277,-0.352 -0.574,-0.441 -0.765,-0.453 -0.45,-0.047 -0.704,0.242 -0.762,0.305 -1.332,1.222 -4.094,3.277 -7.625,3.277 -4.567,0 -8.278,-3.27 -9.09,-7.973 l 20.687,0 c 0.688,0 1.098,-0.41 1.098,-1.101 l 0,-0.039 c -0.406,-7.961 -5.773,-13.52 -13.051,-13.52" /><path
id="path104"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 621.234,335.043 c 0.844,-5.516 5.446,-8.402 9.555,-8.402 4.715,0 8.844,3.609 9.606,8.398 l 0.113,0.707 -19.379,0 0.105,-0.703 z m 9.914,14.434 c 3.629,0 7.032,-1.454 9.579,-4.086 0.132,-0.157 0.132,-0.27 -0.024,-0.446 l -1.031,-1.289 c -0.086,-0.109 -0.156,-0.148 -0.195,-0.152 -0.067,-0.004 -0.106,0.035 -0.172,0.098 -1.426,1.312 -4.356,3.484 -8.157,3.484 -5.039,0 -9.117,-3.641 -9.914,-8.859 l -0.105,-0.704 21.613,0 c 0.246,0 0.305,-0.054 0.305,-0.304 -0.387,-7.504 -5.426,-12.766 -12.258,-12.766 -6.898,0 -12.101,5.184 -12.101,12.055 0,6.375 4.66,12.969 12.46,12.969" /></g><g
transform="matrix(2,0,0,2,-471.926,-360.035)"
id="g106"><g
clip-path="url(#clipPath110)"
id="g108"><path
id="path114"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 655.48,349.07 1.067,0 c 0.265,0 0.32,-0.156 0.344,-0.215 l 9.824,-23.972 c 0,-0.008 0.004,-0.012 0.004,-0.02 -0.012,0 -0.031,0 -0.051,0 l -2.188,0 c -0.261,0 -0.32,0.16 -0.339,0.211 l -8.106,20.637 -8.043,-20.629 c -0.023,-0.059 -0.082,-0.219 -0.344,-0.219 l -2.238,0 c -0.019,0 -0.035,0 -0.051,0 0.004,0.012 0.008,0.028 0.016,0.043 l 9.754,23.934 c 0.031,0.074 0.086,0.23 0.351,0.23" /></g></g><path
d="m 688.37,338.105 z m 3.454,1.586 c 1.32,0 2.204,-0.882 2.204,-2.194 l 0,-28.688 c 0,-11.852 -9.642,-21.508 -21.524,-21.516 l -0.25,-0.008 c -11.844,0 -21.484,9.656 -21.484,21.524 l 0,28.688 c 0,1.312 0.882,2.194 2.202,2.194 l 3.462,0 c 1.312,0 2.194,-0.882 2.194,-2.194 l 0,-28.688 c 0,-7.586 6.18,-13.766 13.774,-13.766 7.594,0 13.766,6.18 13.766,13.766 l 0,28.688 c 0,1.312 0.882,2.194 2.202,2.194 l 3.454,0 z"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path118" /></g></svg>

After

Width:  |  Height:  |  Size: 9.4 KiB

86
graphics/opendevh.svg Normal file
View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg2"
version="1.1"
xml:space="preserve"
width="714.14459"
height="177.285"
viewBox="0 0 714.1446 177.285"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath66"><path
d="m 533,244.125 h 72 V 316 h -72 z"
id="path68" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath82"><path
d="M 471.926,323 H 499 v 28 h -27.074 z"
id="path84" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath92"><path
d="m 502,323 h 27 v 37.035 h -27 z"
id="path94" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath110"><path
d="m 645,324 h 21.719 v 26 H 645 Z"
id="path112" /></clipPath></defs><g
transform="translate(227.1621,42.19367)"
id="g76"><g
id="g62"
transform="matrix(2.5,0,0,2.5,-1561.8296,-652.50617)"><g
id="g64"
clip-path="url(#clipPath66)"><path
d="m 604.781,279.582 c 0,-19.582 -15.875,-35.457 -35.457,-35.457 -19.582,0 -35.457,15.875 -35.457,35.457 0,19.582 15.875,35.457 35.457,35.457 19.582,0 35.457,-15.875 35.457,-35.457"
style="fill:#ee265e;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path70" /><path
d="m 546.879,284.004 c 0,-3 2.441,-5.442 5.441,-5.442 3,0 5.442,2.442 5.442,5.442 0,3.004 -2.442,5.441 -5.442,5.441 -3,0 -5.441,-2.437 -5.441,-5.441 m 13.004,0 c 0,-4.168 -3.391,-7.563 -7.563,-7.563 -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 4.172,0 7.563,-3.394 7.563,-7.566"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path72" /><path
d="m 583.555,289.449 h -5.442 c -3,0 -5.441,-2.441 -5.441,-5.445 0,-3 2.441,-5.442 5.441,-5.442 h 5.442 z m 1.062,-13.008 h -6.504 c -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 h 6.504 c 0.586,0 1.059,-0.476 1.059,-1.062 V 277.5 c 0,-0.586 -0.473,-1.059 -1.059,-1.059"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path74" /><path
d="m 590.906,285.203 c -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.195 1.199,-1.195 0.66,0 1.196,0.535 1.196,1.195 0,0.66 -0.536,1.199 -1.196,1.199 m 0,10.465 c 0.66,0 1.196,0.539 1.196,1.199 0,0.66 -0.536,1.199 -1.196,1.199 -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.199 1.199,-1.199 m -52.019,-15.242 c 0.222,-0.227 0.527,-0.352 0.843,-0.352 0.321,0 0.622,0.125 0.848,0.352 0.469,0.469 0.469,1.23 0,1.695 -0.453,0.453 -1.242,0.453 -1.695,0 -0.465,-0.465 -0.465,-1.226 0.004,-1.695 m 10.359,-7.742 c -0.453,0.453 -1.242,0.453 -1.695,0 -0.469,-0.469 -0.469,-1.227 0,-1.696 0.234,-0.234 0.539,-0.351 0.847,-0.351 0.309,0 0.614,0.117 0.848,0.351 0.465,0.469 0.465,1.227 0,1.696 m 45.566,-13.707 h -10.195 c -0.586,0 -1.062,0.476 -1.062,1.062 v 10.043 h -5.512 c -5.828,0 -10.828,3.609 -12.898,8.707 -0.676,-1.652 -1.68,-3.195 -3.02,-4.535 -2.887,-2.887 -6.797,-4.313 -10.836,-4.02 -0.148,-0.265 -0.32,-0.519 -0.543,-0.746 -1.293,-1.293 -3.398,-1.293 -4.695,0 -1.293,1.293 -1.293,3.399 0,4.696 0.629,0.625 1.461,0.972 2.347,0.972 0.887,0 1.719,-0.347 2.348,-0.972 0.52,-0.52 0.82,-1.176 0.922,-1.852 3.344,-0.176 6.566,1.031 8.957,3.422 4.602,4.601 4.602,12.09 0,16.691 -4.602,4.602 -12.086,4.602 -16.687,0 -2.137,-2.136 -3.34,-4.945 -3.438,-7.949 0.594,-0.141 1.137,-0.434 1.578,-0.875 1.293,-1.293 1.293,-3.398 0,-4.695 -1.254,-1.254 -3.441,-1.25 -4.691,0 -1.297,1.297 -1.297,3.402 -0.004,4.695 0.293,0.289 0.629,0.512 0.988,0.672 0.051,3.648 1.481,7.066 4.067,9.652 2.714,2.715 6.277,4.071 9.843,4.071 3.567,0 7.129,-1.356 9.844,-4.071 1.363,-1.363 2.379,-2.937 3.059,-4.621 2.093,5.043 7.066,8.602 12.859,8.602 h 9.73 c 0.446,1.308 1.676,2.262 3.133,2.262 1.828,0 3.317,-1.493 3.317,-3.321 0,-1.832 -1.489,-3.32 -3.317,-3.32 -1.457,0 -2.687,0.949 -3.133,2.258 h -9.73 c -6.508,0 -11.801,-5.293 -11.801,-11.801 0,-6.508 5.293,-11.801 11.801,-11.801 h 6.574 c 0.586,0 1.059,-0.473 1.059,-1.058 v -10.047 h 8.078 v 2.722 l -2.852,0.004 c -0.582,0 -1.058,0.477 -1.058,1.059 v 15.992 c -1.309,0.445 -2.258,1.672 -2.258,3.129 0,1.832 1.488,3.32 3.32,3.32 1.828,0 3.317,-1.488 3.317,-3.32 0,-1.457 -0.95,-2.684 -2.258,-3.129 v -14.93 l 2.847,-0.004 c 0.586,0 1.059,-0.476 1.059,-1.058 v -4.844 c 0,-0.586 -0.473,-1.062 -1.059,-1.062"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path76" /></g></g><g
id="g78"
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><g
id="g80"
clip-path="url(#clipPath82)"><path
d="m 494.559,336.965 c 0,5.172 -4.184,9.379 -9.325,9.379 -5.172,0 -9.379,-4.207 -9.379,-9.379 0,-5.141 4.207,-9.324 9.379,-9.324 5.141,0 9.325,4.183 9.325,9.324 m -9.325,-13.305 c -7.336,0 -13.308,5.969 -13.308,13.305 0,7.34 5.972,13.308 13.308,13.308 7.336,0 13.305,-5.968 13.305,-13.308 0,-7.336 -5.969,-13.305 -13.305,-13.305"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path86" /></g></g><g
id="g88"
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><g
id="g90"
clip-path="url(#clipPath92)"><path
d="m 524.68,336.965 c 0,5.172 -4.184,9.379 -9.328,9.379 -5.168,0 -9.375,-4.207 -9.375,-9.379 0,-5.141 4.207,-9.324 9.375,-9.324 5.144,0 9.328,4.183 9.328,9.324 m -9.328,-13.305 c -7.336,0 -13.305,5.969 -13.305,13.332 v 21.946 c 0,0.656 0.441,1.097 1.101,1.097 h 1.676 c 0.66,0 1.102,-0.441 1.102,-1.097 v -12.622 c 2.5,2.52 5.91,3.957 9.426,3.957 7.339,0 13.308,-5.968 13.308,-13.308 0,-7.336 -5.969,-13.305 -13.308,-13.305"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path96" /></g></g><g
id="g98"
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><path
d="m 600.582,347.086 c -5.582,0 -10.121,-4.539 -10.121,-10.121 0,-5.61 4.539,-10.172 10.121,-10.172 5.609,0 10.172,4.562 10.172,10.172 0,5.582 -4.563,10.121 -10.172,10.121 m 12.207,-32.395 h -1.68 c -0.222,0 -0.304,0.082 -0.304,0.305 v 14.637 l -1.059,-1.145 c -2.375,-2.562 -5.715,-4.035 -9.164,-4.035 -6.898,0 -12.512,5.613 -12.512,12.512 0,6.898 5.614,12.512 12.512,12.512 6.898,0 12.512,-5.614 12.512,-12.512 l -0.035,-0.949 h 0.035 v -21.02 c 0,-0.223 -0.082,-0.305 -0.305,-0.305"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path100" /><path
d="m 535.961,334.949 c 0.859,-4.933 5.016,-7.515 8.734,-7.515 4.258,0 7.996,3.218 8.785,7.515 z m 8.734,-11.289 c -7.351,0 -12.898,5.524 -12.898,12.848 0,6.765 4.957,13.765 13.254,13.765 3.851,0 7.457,-1.539 10.179,-4.359 0.403,-0.461 0.395,-1.019 0,-1.469 l -1.027,-1.281 c -0.277,-0.352 -0.574,-0.441 -0.765,-0.453 -0.45,-0.047 -0.704,0.242 -0.762,0.305 -1.332,1.222 -4.094,3.277 -7.625,3.277 -4.567,0 -8.278,-3.27 -9.09,-7.973 h 20.687 c 0.688,0 1.098,-0.41 1.098,-1.101 v -0.039 c -0.406,-7.961 -5.773,-13.52 -13.051,-13.52"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path102" /><path
d="m 621.234,335.043 c 0.844,-5.516 5.446,-8.402 9.555,-8.402 4.715,0 8.844,3.609 9.606,8.398 l 0.113,0.707 h -19.379 z m 9.914,14.434 c 3.629,0 7.032,-1.454 9.579,-4.086 0.132,-0.157 0.132,-0.27 -0.024,-0.446 l -1.031,-1.289 c -0.086,-0.109 -0.156,-0.148 -0.195,-0.152 -0.067,-0.004 -0.106,0.035 -0.172,0.098 -1.426,1.312 -4.356,3.484 -8.157,3.484 -5.039,0 -9.117,-3.641 -9.914,-8.859 l -0.105,-0.704 h 21.613 c 0.246,0 0.305,-0.054 0.305,-0.304 -0.387,-7.504 -5.426,-12.766 -12.258,-12.766 -6.898,0 -12.101,5.184 -12.101,12.055 0,6.375 4.66,12.969 12.46,12.969"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path104" /></g><g
id="g106"
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><g
id="g108"
clip-path="url(#clipPath110)"><path
d="m 655.48,349.07 h 1.067 c 0.265,0 0.32,-0.156 0.344,-0.215 l 9.824,-23.972 c 0,-0.008 0.004,-0.012 0.004,-0.02 -0.012,0 -0.031,0 -0.051,0 h -2.188 c -0.261,0 -0.32,0.16 -0.339,0.211 l -8.106,20.637 -8.043,-20.629 c -0.023,-0.059 -0.082,-0.219 -0.344,-0.219 h -2.238 c -0.019,0 -0.035,0 -0.051,0 0.004,0.012 0.008,0.028 0.016,0.043 l 9.754,23.934 c 0.031,0.074 0.086,0.23 0.351,0.23"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path114" /></g></g><path
id="path118"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 270.555,85.9475 z m 4.3175,1.9825 c 1.65,0 2.755,-1.1025 2.755,-2.7425 V 49.327501 c 0,-14.815 -12.0525,-26.885 -26.905,-26.895 l -0.3125,-0.01 c -14.805,0 -26.855,12.07 -26.855,26.905 V 85.1875 c 0,1.64 1.1025,2.7425 2.7525,2.7425 h 4.3275 c 1.64,0 2.7425,-1.1025 2.7425,-2.7425 V 49.327501 c 0,-9.4825 7.725,-17.2075 17.2175,-17.2075 9.4925,0 17.2075,7.725 17.2075,17.2075 V 85.1875 c 0,1.64 1.1025,2.7425 2.7525,2.7425 z" /></g></svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -3,63 +3,357 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-US">
<head>
<title>Publication Title CHANGE ME</title>
<meta name="generator" content=
"HTML Tidy for Linux/x86 (vers 1st November 2003), see www.w3.org" />
<title>Highly Available Git on CephFS with Rook, Kubernetes, and OpenStack</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="copyright" content=
"Copyright &#169; 2005-2010 W3C (MIT, ERCIM, Keio)" />
<meta name="duration" content="60" />
<meta name="font-size-adjustment" content="0" />
<meta name="duration" content="40" />
<link rel="stylesheet" href="styles/slidy.css" type="text/css" />
<link rel="stylesheet" href="styles/openstack.css" type="text/css" />
<link rel="stylesheet" href="styles/local.css" type="text/css" />
<link rel="stylesheet" href="styles/tty-player.css" />
<script src="scripts/slidy.js" charset="utf-8" type="text/javascript"></script>
<script src="scripts/webcomponents-lite.min.js"></script>
<script src="scripts/term.min.js"></script>
<script src="scripts/tty-player.min.js"></script>
</head>
<body>
<div class="background"><img alt="" id="head-icon"
src="graphics/openstack-cloud-software-horizontal-small.png" /></div>
<div class="background"><object id="head-logo"
data="graphics/opendev.svg" type="image/svg+xml"
title="OpenDev logo"><a href="https://opendev.org/"></a></object></div>
<div class="slide cover titlepage">
<!-- hidden style graphics to ensure they are saved with other content -->
<img class="hidden" src="graphics/bullet.png" alt="" />
<img class="hidden" src="graphics/fold.gif" alt="" />
<img class="hidden" src="graphics/unfold.gif" alt="" />
<img class="hidden" src="graphics/fold-dim.gif" alt="" />
<img class="hidden" src="graphics/nofold-dim.gif" alt="" />
<img class="hidden" src="graphics/unfold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-fold.gif" alt="" />
<img class="hidden" src="graphics/bullet-unfold.gif" alt="" />
<img class="hidden" src="graphics/bullet-fold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-nofold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-unfold-dim.gif" alt="" />
<img src="graphics/openstack-cloud-software-vertical-large.png" alt="OpenStack logo" class="cover" />
<h1>Publication Title CHANGE ME<br />
<span class="smaller">Publication SubTitle CHANGE ME</span></h1>
<hr />
<div class="smaller">Your Name CHANGE ME
&lt;<a href="mailto:changeme@example.com">changeme@example.com</a>&gt;</div>
</div>
<div class="slide cover title">
<!-- hidden style graphics to ensure they are saved with other content -->
<img class="hidden" src="graphics/bullet.png" alt="" />
<img class="hidden" src="graphics/fold.gif" alt="" />
<img class="hidden" src="graphics/unfold.gif" alt="" />
<img class="hidden" src="graphics/fold-dim.gif" alt="" />
<img class="hidden" src="graphics/nofold-dim.gif" alt="" />
<img class="hidden" src="graphics/unfold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-fold.gif" alt="" />
<img class="hidden" src="graphics/bullet-unfold.gif" alt="" />
<img class="hidden" src="graphics/bullet-fold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-nofold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-unfold-dim.gif" alt="" />
<section id="cover">
<h1>Highly Available Git on CephFS with Rook, Kubernetes, and OpenStack</h1>
<br />
<br />
<br />
<br />
</section>
</div>
<div id="what-is-opendev" class="slide section level1">
<h1>What is OpenDev?</h1>
<blockquote>
<p>Free software needs free tools</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;-- Benjamin Mako Hill</p>
</blockquote>
<p>OpenStack is one of the top-three most active Open Source
projects in the world, along with Chromium and the Linux
Kernel.</p>
</div>
<div class="slide">
<h1>OpenStack</h1>
<div id="service" class="slide section level1">
<h1>Service</h1>
<ul>
<li>Gerrit for code review</li>
<li>Gitea for code hosting (cloning, browsing, etc)</li>
<li>Zuul for CI and CD (including self-deployment)</li>
</ul>
</div>
<div id="gitea-service" class="slide section level1">
<h1>Gitea Service</h1>
<p>Everything should be HA and shared</p>
<p>Dependencies:</p>
<ul>
<li>Shared Filesystem (cephfs)</li>
<li>Database (Percona xtradb)</li>
<li>TODO: Elasticsearch cluster</li>
</ul>
<p>All run in Kubernetes</p>
</div>
<div id="openstack-cloud" class="slide section level1">
<h1>OpenStack Cloud</h1>
<ul>
<li>Provides services we need for our deployment</li>
<ul>
<li>Load balancers</li>
<li>Block storage</li>
<li>Virtual machines</li>
</ul>
<li>Helpful if specific kernel versions/features or extra devices needed</li>
<li>Multiple vendors</li>
<ul>
<li>Currently using 8 public/private clouds</li>
</ul>
<li>Free software all the way down</li>
</ul>
</div>
<div id="openstack-integration-with-kubernetes" class="slide section level1">
<h1>OpenStack Integration with Kubernetes</h1>
<ul>
<li>Cinder driver provides volume backend</li>
<ul><li>Useful for database, but not rook</li></ul>
<li>Octavia load balancer provides ingress</li>
</ul>
</div>
<div id="rook" class="slide section level1">
<h1>Rook</h1>
<ul>
<li>Kubernetes operator for storage including Ceph</li>
<li>1.0+ has beta support for CSI</li>
<li>Using Flexstorage driver
<ul>
<li>Add volume to k8s minions</li>
</ul></li>
</ul>
</div>
<div id="k8s-on-openstack" class="slide section level1">
<h1>k8s-on-openstack</h1>
<p><a href="https://github.com/infraly/k8s-on-openstack" class="uri">https://github.com/infraly/k8s-on-openstack</a></p>
<p>This is the first slide. CHANGE ME and add many more.</p>
<p>env.sh: </p>
<pre>
export NAME="opendev-k8s"
export IMAGE="Ubuntu 16.04.1 LTS [2017-03-03]"
export MASTER_FLAVOR="v2-highcpu-4"
export MASTER_BOOT_FROM_VOLUME="True"
export NODE_FLAVOR="v2-highcpu-8"
export NODE_AUTO_IP="True"
export NODE_BOOT_FROM_VOLUME="True"
export NODE_VOLUME_SIZE="64"
export NODE_EXTRA_VOLUME="True"
export NODE_EXTRA_VOLUME_SIZE="80"
export NODE_COUNT="3"
export USE_OCTAVIA="True"
export BLOCK_STORAGE_VERSION='v3'
</pre>
</div>
<center>
<img src="images/openstack-software-diagram.png"/>
</center>
</div>
<div id="k8s-on-openstack-1" class="slide section level1">
<h1>k8s-on-openstack</h1>
<div class="slide">
<h1>Thanks!</h1>
<p> Bootstrap the cluster </p>
<center>
<tty-player controls src="recordings/k8s-1.ttyrec"></tty-player>
</center>
</div>
<p><img src="images/stack-o-pancakes-150x150.png"/>
<div id="k8s-on-openstack-2" class="slide section level1">
<h1>k8s-on-openstack</h1>
<ul>
<li>1 master</li>
<li>3 minions</li>
<li>log in as root</li>
<li>use <code>journalctl</code> to see container logs</li>
<li>kubectl to examine the k8s cluster</li>
</ul>
</div>
<p>
These slides available at: <a href="http://docs.openstack.org/infra/publications/">http://docs.openstack.org/infra/publications/</a>
</p>
<div id="k8s-on-openstack-3" class="slide section level1">
<h1>k8s-on-openstack</h1>
</div>
<p> We have a cluster! </p>
<center>
<tty-player controls src="recordings/k8s-2.ttyrec"></tty-player>
</center>
</div>
<div id="k8s-on-openstack-for-rook" class="slide section level1">
<h1>K8s-on-openstack for Rook</h1>
<p>A Cinder volume attached to each of the 3 minions for use by Rook</p>
<p>env.sh: </p>
<pre>
export NODE_EXTRA_VOLUME="True"
export NODE_EXTRA_VOLUME_SIZE="80"
</pre>
</div>
<div id="rook-1" class="slide section level1">
<h1>Rook</h1>
<p>Three step process:</p>
<ul>
<li>Common</li>
<li>Operator</li>
<li>Cluster</li>
</ul>
</div>
<div id="rook-operator" class="slide section level1">
<h1>Rook Operator</h1>
<p>An operator handles all the fussy parts of bringing up and managing a Ceph cluster.</p>
<p>Our Ceph cluster is going to be... special.</p>
</div>
<div id="run-rook" class="slide section level1">
<h1>Run Rook</h1>
<p> Install common objects and operator</p>
<center>
<tty-player controls src="recordings/rook-1.ttyrec"></tty-player>
</center>
</div>
<div id="ceph-all-the-way-down" class="slide section level1">
<h1>Ceph All the Way Down</h1>
<p>Vexxhost block devices are backed by Ceph.</p>
<p>If the devices appears to be rotational, Bluestore allocates 64kB chunks by default. Otherwise, it uses 16kB chunks.</p>
<pre>
Option("bluestore_min_alloc_size_hdd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
.set_default(64_K)
.set_flag(Option::FLAG_CREATE)
.set_description("Default min_alloc_size value for rotational media")
.add_see_also("bluestore_min_alloc_size"),
Option("bluestore_min_alloc_size_ssd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
.set_default(16_K)
.set_flag(Option::FLAG_CREATE)
.set_description("Default min_alloc_size value for non-rotational (solid state) media")
.add_see_also("bluestore_min_alloc_size"),
</pre>
</div>
<div id="ceph-all-the-way-down-1" class="slide section level1">
<h1>Ceph All the Way Down</h1>
<p>Storing lots of small files in a Ceph backed by Ceph, there's no reason to allocate larger chunks:</p>
<pre>
---
apiVersion: v1
data:
config: |
[osd]
bluestore_min_alloc_size = 4096
kind: ConfigMap
metadata:
name: rook-config-override
namespace: rook-ceph
</pre>
</div>
<div id="run-rook-1" class="slide section level1">
<h1>Run Rook</h1>
<p> Install our custom config </p>
<center>
<tty-player controls src="recordings/rook-2.ttyrec"></tty-player>
</center>
</div>
<div id="run-rook-1" class="slide section level1">
<h1>Run Rook</h1>
<p> Create the cluster </p>
<center>
<tty-player controls src="recordings/rook-3.ttyrec"></tty-player>
</center>
</div>
<div id="run-rook-1" class="slide section level1">
<h1>Run Rook</h1>
<p> Create the filesystem </p>
<center>
<tty-player controls src="recordings/rook-4.ttyrec"></tty-player>
</center>
</div>
<div id="rook-ran" class="slide section level1">
<h1>Rook Ran</h1>
<ul>
<li>Working Ceph Cluster</li>
<li>Operator used the extra volume on each minion as a Bluestore device</li>
<li>Ceph filesystem</li>
</ul>
</div>
<div id="toolbox" class="slide section level1">
<h1>Toolbox</h1>
<p>To interact with all layers of Ceph (filesystem, Ceph, Rados), use the toolbox.</p>
<ul>
<li>Pod with Ceph tools pre-installed</li>
<li><code>ceph status</code> and friends</li>
<li>Mount filesystem</li>
</ul>
</div>
<div id="run-rook-1" class="slide section level1">
<h1>Toolbox</h1>
<p> Create the toolbox </p>
<center>
<tty-player controls src="recordings/rook-5.ttyrec"></tty-player>
</center>
</div>
<div id="gitea-service-1" class="slide section level1">
<h1>Gitea Service</h1>
<p>Everything is HA.</p>
<p>Dependencies:</p>
<ul>
<li>Shared Filesystem (cephfs)</li>
<li>Database (Percona xtradb)</li>
</ul>
</div>
<div id="percona" class="slide section level1">
<h1>Percona</h1>
<p>Set up Percona XtraDB</p>
<center>
<tty-player controls src="recordings/pxc.ttyrec"></tty-player>
</center>
</div>
<div id="gitea" class="slide section level1">
<h1>Gitea</h1>
<p>Application spec:</p>
<pre>
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
volumes:
- name: gitea-data
flexVolume:
driver: ceph.rook.io/rook
fsType: ceph
options:
fsName: myfs
clusterNamespace: rook-ceph
clusterName: rook-ceph
containers:
- name: gitea
volumeMounts:
- name: gitea-data
mountPath: /data
</pre>
</div>
<div id="gitea-1" class="slide section level1">
<h1>Gitea</h1>
<p>Set up Gitea</p>
<center>
<tty-player controls src="recordings/gitea.ttyrec"></tty-player>
</center>
</div>
<div id="what-is-opendev" class="slide section level1">
<h1>OpenStack and Kubernetes and Rook</h1>
<p>Free software stack</p>
<p>OpenStack provides backend resources to Kubernetes (Cinder, Octavia)</p>
<p>Kubernetes provides a platform for HA services</p>
<p>Operators like Rook simplify running HA services</p>
<p>Self-deployed at: <a href="https://opendev.org/opendev/system-config/src/branch/master/kubernetes">
https://opendev.org/opendev/system-config/src/branch/master/kubernetes</a></p>
</div>
</body>
</html>

BIN
recordings/gitea.ttyrec Normal file

Binary file not shown.

BIN
recordings/k8s-1.ttyrec Normal file

Binary file not shown.

BIN
recordings/k8s-2.ttyrec Normal file

Binary file not shown.

BIN
recordings/pxc.ttyrec Normal file

Binary file not shown.

BIN
recordings/rook-1.ttyrec Normal file

Binary file not shown.

BIN
recordings/rook-2.ttyrec Normal file

Binary file not shown.

BIN
recordings/rook-3.ttyrec Normal file

Binary file not shown.

BIN
recordings/rook-4.ttyrec Normal file

Binary file not shown.

BIN
recordings/rook-5.ttyrec Normal file

Binary file not shown.

View File

@ -1,6 +1,6 @@
/* slidy.js
Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
Copyright (c) 2005-2011 W3C (MIT, ERCIM, Keio), All Rights Reserved.
W3C liability, trademark, document use and software licensing
rules apply, see:
@ -160,7 +160,10 @@ var w3c_slidy = {
// iPhone and iPad, so exclude these from click handler
if (!this.keyboardless)
{
this.add_listener(document.body, "click", this.mouse_button_click);
this.add_listener(document.body, "mousedown", this.mouse_button_down);
}
this.add_listener(document, "keydown", this.key_down);
this.add_listener(document, "keypress", this.key_press);
@ -285,7 +288,8 @@ var w3c_slidy = {
hide_table_of_contents: function (focus) {
w3c_slidy.add_class(w3c_slidy.toc, "hidden");
if (focus && !w3c_slidy.opera)
if (focus && !w3c_slidy.opera &&
!w3c_slidy.has_class(w3c_slidy.toc, "hidden"))
w3c_slidy.help_anchor.focus();
},
@ -456,7 +460,7 @@ var w3c_slidy = {
{
if (abs_dx > 0.5 * abs_dy)
{
if (dx > 0)
if (dx < 0)
w3c_slidy.next_slide(true);
else
w3c_slidy.previous_slide(true);
@ -820,9 +824,9 @@ var w3c_slidy = {
p1.setAttribute("class", "help");
if (this.keyboardless)
p1.innerHTML = "swipe right to move to next slide";
p1.innerHTML = "swipe left to move to next slide";
else
p1.innerHTML = "Space, Right Arrow or swipe right to move to " +
p1.innerHTML = "Space, Right Arrow or swipe left to move to " +
"next slide, click help below for more details";
this.add_listener(prompt, "click", function (e) {
@ -1026,12 +1030,20 @@ var w3c_slidy = {
while (node)
{
if (node.nodeType == 1 && // an element
(node.nodeName == "H1" ||
node.nodeName == "h1" ||
node.nodeName == "DIV" ||
node.nodeName == "div"))
break;
if (node.nodeType == 1) // an element
{
if (node.nodeName == "H1" || node.nodeName == "h1")
break;
if (node.nodeName == "DIV" || node.nodeName == "div")
{
if (this.has_class(node, "slide"))
break;
if (this.has_class(node, "handout"))
break;
}
}
next = node.nextSibling;
node = document.body.removeChild(node);
@ -1214,6 +1226,7 @@ var w3c_slidy = {
// the iframe with script that set's parent's location.hash
// but that won't work for standalone use unless we can
// create the page dynamically via a javascript: URL
// ### use history.pushState if available
set_location: function () {
var uri = w3c_slidy.page_address(location.href);
var hash = "#(" + (w3c_slidy.slide_number+1) + ")";
@ -1221,6 +1234,14 @@ var w3c_slidy = {
if (w3c_slidy.slide_number >= 0)
uri = uri + hash;
if (typeof(history.pushState) != "undefined")
{
document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";
history.pushState(0, document.title, hash);
w3c_slidy.show_slide_number();
return;
}
if (w3c_slidy.ie && (w3c_slidy.ie6 || w3c_slidy.ie7))
w3c_slidy.push_hash(hash);
@ -1706,7 +1727,7 @@ var w3c_slidy = {
if (!w3c_slidy.ns_pos && !w3c_slidy.ie7)
{
w3c_slidy.hide_toolbar();
setTimeout(function () {w3c_slidy.show_toolbar(); }, interval);
setTimeout(function () {w3c_slidy.show_toolbar();}, interval);
}
},
@ -1982,12 +2003,18 @@ var w3c_slidy = {
if (key == 34) // Page Down
{
w3c_slidy.next_slide(!event.shiftKey);
if (w3c_slidy.view_all)
return true;
w3c_slidy.next_slide(false);
return w3c_slidy.cancel(event);
}
else if (key == 33) // Page Up
{
w3c_slidy.previous_slide(!event.shiftKey);
if (w3c_slidy.view_all)
return true;
w3c_slidy.previous_slide(false);
return w3c_slidy.cancel(event);
}
else if (key == 32) // space bar
@ -1997,10 +2024,7 @@ var w3c_slidy = {
}
else if (key == 37) // Left arrow
{
if (w3c_slidy.view_all)
return true;
w3c_slidy.previous_slide(false);
w3c_slidy.previous_slide(!event.shiftKey);
return w3c_slidy.cancel(event);
}
else if (key == 36) // Home
@ -2015,10 +2039,7 @@ var w3c_slidy = {
}
else if (key == 39) // Right arrow
{
if (w3c_slidy.view_all)
return true;
w3c_slidy.next_slide(false);
w3c_slidy.next_slide(!event.shiftKey);
return w3c_slidy.cancel(event);
}
else if (key == 13) // Enter
@ -2099,7 +2120,31 @@ var w3c_slidy = {
window.location = w3c_slidy.help_page;
return w3c_slidy.cancel(event);
}
//else alert("key code is "+ key);
else if (key == 116) // f5 play
{
var all = document.getElementsByTagName("tty-player");
for (var i = 0, max = all.length; i < max; i++) {
var style = window.getComputedStyle(all[i]);
if (!((style.display === 'none') || (style.visibility === 'hidden'))) {
all[i]["play"]();
}
}
return w3c_slidy.cancel(event);
}
else if (key == 88) // x pause
{
var all = document.getElementsByTagName("tty-player");
for (var i = 0, max = all.length; i < max; i++) {
var style = window.getComputedStyle(all[i]);
if (!((style.display === 'none') || (style.visibility === 'hidden'))) {
all[i]["pause"]();
}
}
return w3c_slidy.cancel(event);
}
// else alert("key code is "+ key);
return true;
},
@ -2485,9 +2530,25 @@ var w3c_slidy = {
w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;
},
mouse_button_down: function (e) {
w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;
w3c_slidy.mouse_x = e.clientX;
w3c_slidy.mouse_y = e.clientY;
},
// right mouse button click is reserved for context menus
// it is more reliable to detect rightclick than leftclick
mouse_button_click: function (e) {
if (!e)
var e = window.event;
if (Math.abs(e.clientX -w3c_slidy.mouse_x) +
Math.abs(e.clientY -w3c_slidy.mouse_y) > 10)
return true;
if (w3c_slidy.selected_text_len > 0)
return true;
var rightclick = false;
var leftclick = false;
var middleclick = false;
@ -2554,16 +2615,21 @@ var w3c_slidy = {
return true;
},
special_element: function (e) {
var tag = e.nodeName.toLowerCase();
special_element: function (element) {
if (this.has_class(element, "non-interactive"))
return false;
return e.onkeydown ||
e.onclick ||
var tag = element.nodeName.toLowerCase();
return element.onkeydown ||
element.onclick ||
tag == "a" ||
tag == "embed" ||
tag == "object" ||
tag == "video" ||
tag == "audio" ||
tag == "svg" ||
tag == "canvas" ||
tag == "input" ||
tag == "textarea" ||
tag == "select" ||

2
scripts/term.min.js vendored Normal file

File diff suppressed because one or more lines are too long

26
scripts/tty-player.min.js vendored Normal file
View File

@ -0,0 +1,26 @@
(function(){function G(a){return a instanceof Array||!q?decodeURIComponent(Array.prototype.map.call(a,function(a){return"%"+("0"+a.toString(16)).substr(-2)}).join("")):q.decode(a)}function y(a){a=/^data:([^,]*),([^#]+)/.exec(a);if(null===a)return null;var b=decodeURIComponent(a[2]),d=a[1].replace(/;base64$/,"");return[d,d===a[1]?b:atob(b)]}function H(a){if(!a)return{type:null};switch(/^(?:(.*):)?/.exec(a)[1]){case "npt":return(a=(a=/^(?:npt:)?(?:(?:(\d+):)?(\d+):)?(\d+(?:\.\d+)?)$/i.exec(a))?3600*
(a[1]||0)+60*(a[2]||0)+a[3]:null)?{type:"npt",time:a}:{type:null};case "data":if(a=y(a),/^text\/plain$/i.test(a[0]))return{type:"text",data:a[1]}}return{type:null}}function E(a){a|=0;var b=a/60|0;a=("0"+a%60).substr(-2);if(60<=b){var d=b/60|0,b=("0"+b%60).substr(-2);return d+":"+b+":"+a}return b+":"+a}function m(a){return{get:function(){return this.hasAttribute(a)},set:function(b){b?this.setAttribute(a,""):this.removeAttribute(a)}}}function I(a){function b(a,b){f.label=a;f.icon="data:image/svg+xml,%3C?xml version='1.0' encoding='UTF-8' standalone='no'?%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath stroke='%23999' stroke-width='1' fill='%23eee' d='"+
b+"'/%3E%3C/svg%3E"}function d(){b("Play","m2.5,2 0,12 11,-6z")}var c=document.createElement("menu");if(!("type"in c))return null;try{c.type="context"}catch(e){}if("context"!==c.type)return null;c.id="treplay-contextmenu-"+J++;var f=document.createElement("menuitem");f.onclick=function(){a.paused?a.play():a.pause()};d();a.addEventListener("play",function(){b("Pause","m2.5,1.5 0,13 4,0 0,-13zm7,0 0,13 4,0 0,-13z")});a.addEventListener("pause",d);var n=document.createElement("menuitem");c.aa=function(){n.label=
a.controls?"Hide Controls":"Show Controls"};c.aa();n.onclick=function(){a.controls=!a.controls};c.appendChild(f);c.appendChild(n);return c}function F(a){this.B=a}var q="TextDecoder"in window?new TextDecoder:null,r,k;r=function(a){Object.defineProperty(this,"code",{value:a})};r.prototype=Object.create(MediaError.prototype);var l=document.createElement("video").played;k=function(a){Object.defineProperty(this,"length",{value:a.length});this._=a};k.prototype=Object.create(TimeRanges.prototype);k.prototype.start=
function(a){return a<this.length?this._[a][0]:l.end(0)};k.prototype.end=function(a){return a<this.length?this._[a][1]:l.end(0)};var K={1:["MEDIA_ERR_ABORTED","The fetching process for the media resource was aborted by the user agent at the user's request."],2:["MEDIA_ERR_NETWORK","A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable."],3:["MEDIA_ERR_DECODE","An error of some description occurred while decoding the media resource, after the resource was established to be usable."],
4:["MEDIA_ERR_SRC_NOT_SUPPORTED","The media resource indicated by the \u001b[4msrc\u001b[24m attribute was not suitable."]},J=0,L=Terminal.prototype.reset;Terminal.prototype.reset=function(){L.call(this);"useFocus"in this.options&&!this.options.useFocus&&this.showCursor()};var c=F.prototype;c.ga=function(){var a=this,b=a.B;a.N=document.createElement("div");a.N.className="title";b.appendChild(a.N);a.D=new Terminal({useFocus:!1});a.D.on("title",function(a){b.title=a});a.D.open(b);b.addEventListener("error",
function(){var b=K[a.error.code];a.D.reset();a.D.write("\u001b]2;Error :-(\u0007\r\n\u001b[1mMediaError.\u001b[31m"+b[0]+"\u001b[m (numeric value "+a.error.code+")\r\n\r\n "+b[1]+"\r\n\r\n(Sorry \u2019bout that.)")});var d=+b.getAttribute("rows"),c=+b.getAttribute("cols");b.resize(0<c?c:b.cols,0<d?d:b.rows);a.defaultPlaybackRate=a.playbackRate=1;a.S=0;a.currentSrc="";a.readyState=0;a.networkState=0;a.paused=!0;a.duration=NaN;a.T=b.getAttribute("window-title")||"";a.V=document.createElement("tty-player-poster");
a.V.onclick=function(){b.play()};a.D.on("resize",function(){a.A("resize")});a.K=I(b);a.K&&(b.appendChild(a.K),b.setAttribute("contextmenu",a.K.id));a.G=document.createElement("tty-player-controls");var e=document.createElement("button");e.className="play";e.onclick=function(){b.paused?b.play():b.pause()};b.addEventListener("play",function(){e.className="pause"});b.addEventListener("pause",function(){e.className="play"});a.H=document.createElement("span");a.H.className="current-time";a.H.textContent=
"0:00";a.M=document.createElement("span");a.M.className="duration";a.M.textContent="0:00";a.C=document.createElement("input");a.C.type="range";a.C.value=0;a.C.min=0;a.C.step="any";var f=!1;a.C.addEventListener("input",function(){f||(f=!0,a.I=!0,b.currentTime=a.C.value,a.O(),f=!1)});a.C.addEventListener("change",function(){f||(f=!0,a.I=!1,b.currentTime=a.C.value,a.O(),f=!1)});b.addEventListener("durationchange",function(){a.C.max=a.duration;a.M.textContent=E(a.duration)});b.addEventListener("timeupdate",
function(){f||(f=!0,a.C.value=a.currentTime,a.O(),f=!1)});a.G.appendChild(e);a.G.appendChild(a.H);a.G.appendChild(a.C);a.G.appendChild(a.M);b.appendChild(a.V);b.appendChild(a.G);a.J=!0};Object.defineProperties(c,{J:{get:function(){return this.P},set:function(a){var b=this,d=b.P;a=!!a;var c=H(b.B.poster);b.P=!!a;var e=a&&!b.error;b.V.style.display=e?"":"none";b.G.classList[e?"add":"remove"]("poster");b.C.disabled=a;b.R();if(d!==a||b.da!==c)if(b.da=c,(d||a)&&b.L(),a)switch(c.type){case "npt":b.L();
var f=function(){if(a===b.P&&a){var d=b.currentTime,e=b.I;b.I=!0;b.currentTime=c.time;b.F=0;b.ba();b.I=e;b.currentTime=d}};if(b.data)f();else{var n=function(){b.B.removeEventListener("canplaythrough",n);f()};b.B.addEventListener("canplaythrough",n);b.Z()}break;case "text":b.L(),b.D.write(c.data)}}}});c.A=function(a){var b=document.createEvent("HTMLEvents");b.initEvent(a,!1,!1);a=this.B["on"+a];"function"===typeof a&&a(b);this.B.dispatchEvent(b)};c.R=function(){this.O();this.K&&this.K.aa()};c.O=function(){this.H.textContent=
E(this.currentTime);var a=this.C.offsetLeft-this.H.offsetWidth/2;isNaN(this.duration)||(a+=this.currentTime/this.duration*this.C.offsetWidth);this.H.style.left=a+"px"};c.Y=0;c.ba=function(){0<this.F&&this.data[this.F-1][1]>this.currentTime&&(this.L(),this.F=0);for(;this.F<this.data.length&&this.data[this.F][1]<=this.currentTime;)this.D.write(this.data[this.F][0]),this.F++;if(!this.I)if(this.currentTime>=this.duration&&0<this.playbackRate||0>=this.currentTime&&0>this.playbackRate)this.B.loop?this.B.currentTime=
0<this.playbackRate?0:this.duration:(this.A("timeupdate"),this.B.pause(),this.A("ended"));else{var a=+new Date;100<=a-this.Y&&(this.Y=a,this.A("timeupdate"))}};c.L=function(){this.D.reset();this.B.title=this.T};c.Z=function(){2>this.networkState&&this.$()};c.$=function(){this.L();this.W&&this.W.abort();2!==this.networkState&&1!==this.networkState||this.A("abort");if(0!==this.networkState){this.A("emptied");this.readyState=0;this.paused=!0;clearInterval(this.ca);var a=this.currentTime;this.F=this.currentTime=
0;0!==a&&this.A("timeupdate");this.data=null;this.duration=NaN}this.playbackRate=this.defaultPlaybackRate;this.error=null;this.fa()};c.fa=function(){var a=this;a.networkState=3;a.J=!0;var b=a.B.getAttribute("src");null===b?a.networkState=0:(a.networkState=2,a.A("loadstart"),""===b?a.X():(b=new URL(b.trim(),a.B.baseURI),a.currentSrc=b.toString(),setTimeout(function(){a.ea()},0)))};c.X=function(){this.error=new r(4);this.networkState=3;this.J=!0;this.A("error")};c.ea=function(){function a(){delete d.W}
function b(b,c){if(200===b.status){var e;try{var h;if(c){var f=b.responseText;h=[];for(var p=0;p<f.length;p++)h.push(f.charCodeAt(p)&255)}else h=b.response;for(var k=h instanceof Array,f=!0,p=null,m=[],g=0,l=0,r=k?h.length:h.byteLength;g<r;){var z,A,t;if(k)z=h[g]+(h[g+1]<<8)+(h[g+2]<<16)+(h[g+3]<<24),A=h[g+4]+(h[g+5]<<8)+(h[g+6]<<16)+(h[g+7]<<24),t=h[g+8]+(h[g+9]<<8)+(h[g+10]<<16)+(h[g+11]<<24);else{var B=new DataView(h,g);z=B.getUint32(0,!0);A=B.getUint32(4,!0);t=B.getUint32(8,!0)}var w=z+A/1E6,
g=g+12,u=k?h.slice(g,g+t):new Uint8Array(h,g,t),C;if(f)C=G(u);else{for(var D=u,q=[],v=0;v<D.length;v+=32768)q.push(String.fromCharCode.apply(null,D["subarray"in D?"subarray":"slice"](v,v+32768)));C=q.join("")}u=C;if(12===g){var l=w,x=/^\x1b%(G|@)\x1b\[8;([0-9]+);([0-9]+)t$/.exec(u);x&&(f="G"===x[1],p={rows:+x[2],cols:+x[3]})}w-=l;g+=t;m.push([u,w])}e={ia:1E8<=l?new Date(1E3*l):null,U:p,data:m}}catch(y){a();d.X();return}d.currentTime=0;d.F=0;d.data=e.data;d.duration=0===e.data.length?0:e.data[e.data.length-
1][1];d.A("durationchange");e.U&&d.B.resize(e.U.cols,e.U.rows);d.readyState=1;d.A("loadedmetadata");0<d.S&&(d.currentTime=d.S);d.S=0;d.A("progress");d.networkState=1;d.A("suspend");d.readyState=4;d.A("loadeddata");d.A("canplay");d.A("canplaythrough");a()}else a(),d.X()}var d=this,c;c=y(d.currentSrc);if(null!==c)b({status:200,responseText:c[1]},!0);else{var e=new XMLHttpRequest;"use-credentials"===d.B.crossOrigin?e.withCredentials=!0:"anonymous"===d.B.crossOrigin&&"mozAnon"in e&&(e.ha=!0);e.onabort=
a;e.open("GET",d.currentSrc);c=!("responseType"in e);e.responseType="arraybuffer";"arraybuffer"!==e.responseType&&(c=!0);c?(e.overrideMimeType("text/plain; charset=x-user-defined"),e.onreadystatechange=function(){4===e.readyState&&b(e,!0)}):e.onload=e.onerror=function(){b(e,!1)};d.W=e;try{e.send()}catch(f){b(e,void 0)}}};c=Object.create(HTMLElement.prototype);c.createdCallback=function(){this._=new F(this);this._.ga();"none"!==this.preload&&this.load();this.autoplay&&this.play()};c.attributeChangedCallback=
function(a){"src"===a&&this.hasAttribute("src")?(this.pause(),this.load()):"controls"===a&&this.hasAttribute("controls")?this._.R():"poster"===a&&(this._.J=this._.J)};c.attachedCallback=function(){this._.R()};Object.defineProperties(c,{error:{get:function(){return this._.error}},src:{get:function(){return this._.currentSrc},set:function(a){this.setAttribute("src",a)}},currentSrc:{get:function(){return this._.currentSrc}},crossOrigin:{get:function(){var a=this.getAttribute("crossorigin");return null===
a||"anonymous"===a||"use-credentials"===a?a:"anonymous"},set:function(a){null===a?this.removeAttribute("crossorigin"):"use-credentials"===a?this.setAttribute("crossorigin",a):this.setAttribute("crossorigin","anonymous")}},NETWORK_EMPTY:{value:0},NETWORK_IDLE:{value:1},NETWORK_LOADING:{value:2},NETWORK_NO_SOURCE:{value:3},networkState:{get:function(){return this._.networkState}},preload:{get:function(){var a=this.getAttribute("preload");return"none"===a||"metadata"===a||"auto"===a?a:"auto"},set:function(a){"none"===
a||"metadata"===a||"auto"===a?this.setAttribute("metadata",a):this.removeAttribute("metadata")}},buffered:{get:function(){return this.seekable}},HAVE_NOTHING:{value:0},HAVE_METADATA:{value:1},HAVE_CURRENT_DATA:{value:2},HAVE_FUTURE_DATA:{value:3},HAVE_ENOUGH_DATA:{value:4},readyState:{get:function(){return this._.readyState}},seeking:{value:!1},currentTime:{get:function(){return this._.currentTime},set:function(a){if(!this._.data)throw document.createElement("video").currentTime=1,void 0;this._.currentTime=
Math.max(0,Math.min(a,this.duration));this._.ba()}},duration:{get:function(){return this._.duration}},paused:{get:function(){return this._.paused}},defaultPlaybackRate:{get:function(){return this._.defaultPlaybackRate},set:function(a){a=+a;var b=this._.defaultPlaybackRate!==a;this._.defaultPlaybackRate=a;b&&this._.A("ratechange")}},playbackRate:{get:function(){return this._.playbackRate},set:function(a){a=+a;var b=this._.playbackRate!==a;this._.playbackRate=a;b&&this._.A("ratechange")}},played:{value:l},
seekable:{get:function(){return 4===this.readyState?new k([0,this.duration]):l}},ended:{get:function(){return this.paused&&this.currentTime===(0>this.playbackRate?0:this.duration)}},autoplay:m("autoplay"),loop:m("loop"),controls:m("controls"),defaultMuted:m("muted"),textTracks:{get:function(){return document.createElement("video").textTracks}},title:{get:function(){return this._.N.textContent},set:function(a){this._.N.textContent=a;this._.A("titlechange")}},defaultTitle:{get:function(){return this._.T},
set:function(a){this._.T=a;this._.A("titlechange")}},cols:{get:function(){return this._.D.cols}},rows:{get:function(){return this._.D.rows}},poster:{get:function(){return(this.getAttribute("poster")||"").trim()},set:function(a){this.setAttribute("poster",a)}}});c.load=function(){this._.$()};c.canPlayType=function(){return"maybe"};c.play=function(){function a(){c.ended&&(c.currentTime=0>c.playbackRate?c.duration:0);c._.J=!1;c._.paused=!1;var a=new Date;c._.ca=setInterval(function(){var b=new Date;
c._.I||(c.currentTime+=(b-a)/1E3*c.playbackRate);a=b},16);c._.A("play")}function b(){c.removeEventListener("loadeddata",b);a()}var c=this;this._.paused&&(this._.data?a():(this.addEventListener("loadeddata",b),this._.Z()))};c.pause=function(){this._.paused||(this._.paused=!0,clearInterval(this._.ca),this._.A("pause"))};c.volume=1;c.muted=!1;c.addTextTrack=function(){return null};c.ontitlechange=null;c.resize=function(a,b){this._.D.resize(a,b)};c.pretendToBeAVideo=function(){Object.defineProperties(this,
{tagName:{value:"VIDEO"},width:{get:function(){return this.offsetWidth},set:function(a){this.style.fontSize="100%";this.style.fontSize=a/this.offsetWidth*100+"%"}},height:{get:function(){return this.offsetHeight},set:function(a){this.style.fontSize="100%";this.style.fontSize=a/this.offsetHeight*100+"%"}},videoWidth:{get:function(){return this.width}},videoHeight:{get:function(){return this.height}}})};document.registerElement("tty-player",{prototype:c})})();

13
scripts/webcomponents-lite.min.js vendored Normal file

File diff suppressed because one or more lines are too long

456
styles/local.css Normal file
View File

@ -0,0 +1,456 @@
/* w3c-blue.css
Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
W3C liability, trademark, document use and software licensing
rules apply, see:
http://www.w3.org/Consortium/Legal/copyright-documents
http://www.w3.org/Consortium/Legal/copyright-software
*/
body
{
margin: 0 0 0 0;
padding: 0 0 0 0;
width: 100%;
height: 100%;
color: black;
background-color: white;
font-family: "Open Sans", OpenSans, sans-serif;
font-size: 14pt;
}
div.slide.titlepage {
text-align: center;
}
div.slide.titlepage h1 {
padding-top: 40%;
}
div.slide {
z-index: 20;
margin: 0 0 0 0;
padding: 0;
border-width: 0;
top: 0;
bottom: 0;
left: 0;
right: 0;
line-height: 120%;
background-color: transparent;
}
div.background {
z-index: 1;
position: absolute;
vertical-align: bottom;
left: 0;
right: 0;
top: 0;
bottom: auto;
height: 5.0em;
padding: 0 0 0 0.2em;
margin: 0 0 0 0;
background-color: #fff;
border-bottom: solid 3px #ee265e; /* #071d49; */
}
div.background img {
height: 4em;
}
/* this rule is hidden from IE which doesn't support + selector */
div.slide + div[class].slide { page-break-before: always;}
div.slide h1 {
padding-right: 3em;
padding-top: 1em;
margin-bottom: 1.2em;
margin-left: 5em;
margin-right: 0;
min-height: 2.3em;
color: #ee265e; /* #071d49; */
height: 2.2em;
font-size: 160%;
line-height: 1.1em;
}
div.slide h1 a {
color: white;
text-decoration: none;
}
div.slide h1 a:link {
color: white;
text-decoration: none;
}
div.slide h1 a:visited {
color: white;
text-decoration: none;
}
div.slide h1 a:hover {
color: white;
text-decoration: underline;
}
div.slide h1 a:active {
color: red;
text-decoration: underline;
}
#head-logo {
margin: 0;
margin-top: 0.25em;
padding-top: 0.3em;
padding-bottom: 0.2em;
padding-left: .3em;
padding-right: 0;
height: 3.8em;
width: 5.8em;
float: left;
z-index: 2;
}
#head-logo-fallback {
margin: 0;
padding: 0;
margin-top: -0.8em;
width: 4.8em;
float: right;
z-index: 2;
}
/* the next two classes support vertical and horizontal centering */
div.vbox {
float: left;
height: 40%;
width: 50%;
margin-top: -240px;
}
div.hbox {
width:60%;
margin-top: 0;
margin-left:auto;
margin-right:auto;
height: 60%;
border:1px solid silver;
background:#F0F0F0;
overflow:auto;
text-align:left;
clear:both;
}
/* styling for named background */
div.background.slanty {
z-index: 2;
bottom: 0;
height: 100%;
background: transparent;
}
div.background.slanty img { margin-top: 4em; width: 100%; height: 80% }
/* the following makes the pre background translucent */
/* opacity is a CSS3 property but supported by Mozilla family */
/* filter is an IE specific feature that also requires width */
div.slide.slanty pre {
width: 93%; /* needed for IE filter to work */
opacity: .8;
filter: alpha(opacity=80);
}
img.withBorder {
border: 2px solid #c60;
padding: 4px;
}
li pre { margin-left: 0; }
@media print { pre { font-size: 60% } }
blockquote { font-style: italic }
img { background-color: transparent }
p.copyright { font-size: smaller }
.center { text-align: center }
.footnote { font-size: smaller; margin-left: 2em; }
a img { border-width: 0; border-style: none }
a:visited { color: navy }
a:link { color: navy }
a:hover { color: red; text-decoration: underline }
a:active { color: red; text-decoration: underline }
a {text-decoration: none}
.navbar a:link {color: white}
.navbar a:visited {color: yellow}
.navbar a:active {color: red}
.navbar a:hover {color: red}
ul { list-style-type: square; }
ul ul { list-style-type: disc; }
ul ul ul { list-style-type: circle; }
ul ul ul ul { list-style-type: disc; }
li { margin-left: 0.5em; margin-top: 0.5em; }
li li { font-size: 85%; font-style: italic }
li li li { font-size: 85%; font-style: normal }
div dt
{
margin-left: 0;
margin-top: 1em;
margin-bottom: 0.5em;
font-weight: bold;
}
div dd
{
margin-left: 2em;
margin-bottom: 0.5em;
}
p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {
margin-left: 1.4em;
margin-right: 1em;
}
p.subhead { font-weight: bold; margin-top: 2em; }
div.cover p.explanation {
font-style: italic;
margin-top: 3em;
}
.smaller { font-size: smaller }
td,th { padding: 0.2em }
ul {
margin: 0.5em 1.5em 0.5em 1.5em;
padding: 0;
}
ol {
margin: 0.5em 1.5em 0.5em 1.5em;
padding: 0;
}
ul { list-style-type: square; }
ul ul { list-style-type: disc; }
ul ul ul { list-style-type: circle; }
ul ul ul ul { list-style-type: disc; }
li { margin-left: 0.5em; margin-top: 0.5em; }
li li { font-size: 85%; font-style: italic }
li li li { font-size: 85%; font-style: normal }
ul li {
list-style: none;
margin: 0.1em 0em 0.6em 0;
padding: 0 0 0 40px;
background: transparent url(../graphics/bullet.png) no-repeat 5px 0.3em;
line-height: 140%;
}
/* workaround IE's failure to support background on li for print media */
@media print { ul li { list-style: disc; padding-left: 0; background: none; } }
ol li {
margin: 0.1em 0em 0.6em 1.5em;
padding: 0 0 0 0px;
line-height: 140%;
}
li li {
font-size: 85%;
font-style: italic;
list-style-type: disc;
background: transparent;
padding: 0 0 0 0;
}
li li li {
font-size: 85%;
font-style: normal;
list-style-type: circle;
background: transparent;
padding: 0 0 0 0;
}
li li li li {
list-style-type: disc;
background: transparent;
padding: 0 0 0 0;
}
/* rectangular blue bullet + unfold/nofold/fold widget */
/*
setting class="outline on ol or ul makes it behave as an
ouline list where blocklevel content in li elements is
hidden by default and can be expanded or collapsed with
mouse click. Set class="expand" on li to override default
*/
ol.outline li:hover { cursor: pointer }
ol.outline li.nofold:hover { cursor: default }
ul.outline li:hover { cursor: pointer }
ul.outline li.nofold:hover { cursor: default }
ol.outline { list-style:decimal; }
ol.outline ol { list-style-type:lower-alpha }
ol.outline li.nofold {
padding: 0 0 0 20px;
background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.3em;
}
ol.outline li.unfolded {
padding: 0 0 0 20px;
background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.3em;
}
ol.outline li.folded {
padding: 0 0 0 20px;
background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.3em;
}
ol.outline li.unfolded:hover {
padding: 0 0 0 20px;
background: transparent url(../graphics/fold.gif) no-repeat 0px 0.3em;
}
ol.outline li.folded:hover {
padding: 0 0 0 20px;
background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.3em;
}
ul.outline li.nofold {
padding: 0 0 0 52px;
background: transparent url(../graphics/bullet-nofold-dim.gif) no-repeat 5px 0.3em;
}
ul.outline li.unfolded {
padding: 0 0 0 52px;
background: transparent url(../graphics/bullet-fold-dim.gif) no-repeat 5px 0.3em;
}
ul.outline li.folded {
padding: 0 0 0 52px;
background: transparent url(../graphics/bullet-unfold-dim.gif) no-repeat 5px 0.3em;
}
ul.outline li.unfolded:hover {
padding: 0 0 0 52px;
background: transparent url(../graphics/bullet-fold.gif) no-repeat 5px 0.3em;
}
ul.outline li.folded:hover {
padding: 0 0 0 52px;
background: transparent url(../graphics/bullet-unfold.gif) no-repeat 5px 0.3em;
}
li ul.outline li.nofold {
padding: 0 0 0 21px;
background: transparent url(../graphics/nofold-dim.gif) no-repeat 5px 0.3em;
}
li ul.outline li.unfolded {
padding: 0 0 0 21px;
background: transparent url(../graphics/fold-dim.gif) no-repeat 5px 0.3em;
}
li ul.outline li.folded {
padding: 0 0 0 21px;
background: transparent url(../graphics/unfold-dim.gif) no-repeat 5px 0.3em;
}
li ul.outline li.unfolded:hover {
padding: 0 0 0 21px;
background: transparent url(../graphics/fold.gif) no-repeat 5px 0.3em;
}
li ul.outline li.folded:hover {
padding: 0 0 0 21px;
background: transparent url(../graphics/unfold.gif) no-repeat 5px 0.3em;
}
img {
image-rendering: optimize-quality;
}
img.withBorder {
border: 2px solid #c60;
padding: 4px;
}
div.header {
position: absolute;
z-index: 2;
left: 0;
right: 0;
top: 0;
bottom: auto;
height: 2.95em;
width: 100%;
padding: 0 0 0 0;
margin: 0 0 0 0;
border-width: 0;
border-style: solid;
background-color: #005A9C;
border-bottom-width: thick;
border-bottom-color: #95ABD0;
}
div.footer {
position: absolute;
z-index: 80;
left: 0;
right: 0;
top: auto;
bottom: 0;
height: 3.5em;
margin: 0;
font-size: 80%;
font-weight: bold;
padding-left: 1em;
padding-right: 0;
padding-top: 0.3em;
padding-bottom: 0;
color: #003366;
background-color: #95ABD0;
}
/* this is a hack to hide property from IE6 and below */
div[class="footer"] {
position: fixed;
}
#hidden-bullet {
visibility: hidden;
display: none;
}
div.slide.cover {
padding-top: 0;
padding-right: 0;
}
div.slide.cover h1 {
margin-top:3em;
height: auto;
}
#cover {
/* background-image: url("../graphics/banner.jpg"); */
background-position: center center;
background-size: cover;
height: 18em;
text-align: center;
position: relative;
margin-top: 6.0em;
}
/* for Bert as an ardent user of the old W3C slidemaker tool */
div.comment { display: none; visibility: hidden }
@media print {
div.slide h1 { background: transparent; color: black }
div.slide.cover { background: transparent; color: black }
div.slide.cover h1 { background: transparent; color: black }
div.comment { display: block; visibility: visible }
}

View File

@ -160,6 +160,10 @@ div.toc-heading {
text-align: center;
}
img {
image-rendering: optimize-quality;
}
pre {
font-size: 80%;
font-weight: bold;

223
styles/tty-player.css Normal file
View File

@ -0,0 +1,223 @@
.terminal {
font-family: monospace, monospace;
cursor: text;
line-height: initial;
font-size: 12pt;
}
.terminal-cursor {
background: #00ff00;
color: black;
}
tty-player {
border: 2px solid #285577;
border-top: 1px solid #4c7899;
}
tty-player .title {
background: #285577;
border-bottom: 1px solid #4c7899;
color: #fff;
font-family: sans-serif;
font-weight: bold;
padding: 0.2em;
line-height: 1;
height: 1em;
cursor: default;
}
tty-player menu {
display: none;
}
tty-player {
display: inline-block;
position: relative;
}
tty-player:not([controls]) tty-player-controls {
display: none;
}
tty-player-poster {
/* XXX: <video> has an overlay with play button if [controls] over the poster *image*, but here we have an overlay with play button regardless. Perhaps specifying a poster currentTime or script might work? */
background: rgba(53, 47, 47, 0.5);
opacity: 0.5;
transition: opacity 0.2s linear;
background-repeat: no-repeat;
background-position: center;
background-image: url("data:image/svg+xml,%3C?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3E%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='66'%20height='66'%3E%3Cfilter%20id='f'%3E%3CfeColorMatrix%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20.5%200'/%3E%3CfeGaussianBlur%20result='r'%20stdDeviation='2'/%3E%3CfeComposite%20in='SourceGraphic'%20in2='r'/%3E%3C/filter%3E%3Cpath%20fill='%23ddd'%20stroke='%23ccc'%20stroke-width='1'%20d='M33,5.5A27.5,27.5%200%200%200%205.5,33%2027.5,27.5%200%200%200%2033,60.5%2027.5,27.5%200%200%200%2060.5,33%2027.5,27.5%200%200%200%2033,5.5Zm-9.5,13%2025,14.5-25,14.5%200,-29z'%20filter='url(%23f)'/%3E%3C/svg%3E");
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
tty-player[controls] tty-player-poster {
bottom: 28px;
}
tty-player:hover tty-player-poster {
opacity: 1;
}
tty-player-controls {
position: absolute;
left: 0;
right: 0;
bottom: 0;
background: rgba(53, 47, 47, 0.5);
opacity: 0;
display: flex;
flex-direction: row;
transition: opacity 0.2s linear;
cursor: default;
}
/* Browsers tend to show the controls when a <video> ends, too; I, however, am not doing this for now at least as the controls will overlap with what is often the most important part of the terminal (the bottom). For this reason, I havent hooked up any support for that either, only showing controls persistently when the poster is up. */
tty-player-controls.poster,
tty-player:hover tty-player-controls {
opacity: 1;
}
tty-player-controls input[type=range], tty-player-controls button {
margin: 0;
padding: 0;
border: none;
background: none;
font: inherit;
line-height: inherit;
-moz-appearance: none;
-webkit-appearance: none;
}
tty-player-controls button {
padding: 0;
background: none;
opacity: 0.75;
flex: 0 1 auto;
line-height: 1;
width: 28px;
height: 28px;
}
tty-player-controls button:hover {
color: #777;
opacity: 1;
}
tty-player-controls input[type=range] {
flex: 1;
height: 8px;
margin: 10px 5px;
}
tty-player-controls button {
background-repeat: no-repeat;
background-position: center;
}
tty-player-controls button.play {
background-image: url("data:image/svg+xml,%3C?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3E%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='14'%20height='16'%3E%3Cpath%20fill='%23ccc'%20d='M0,0%200,16%2014,8Z'/%3E%3C/svg%3E");
}
tty-player-controls button.pause {
background-image: url("data:image/svg+xml,%3C?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3E%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='14'%20height='16'%3E%3Cpath%20fill='%23ccc'%20d='M1,0L1,16L5,16L5,0L0,0zM9,0L9,16L13,16L13,0L9,0z'/%3E%3C/svg%3E");
}
tty-player-controls input[type=range]:focus {
box-shadow: none;
outline: none;
}
tty-player-controls input[type=range]::-moz-range-track,
tty-player-controls input[type=range]::-moz-range-thumb,
tty-player-controls input[type=range]::-moz-range-progress {
border-radius: 4px;
height: 8px;
}
tty-player-controls input[type=range]::-moz-range-track {
background: rgba(255, 255, 255, 0.5);
}
tty-player-controls input[type=range]::-moz-range-thumb {
-moz-appearance: none;
width: 0;
background: transparent;
border: 0;
border-radius: 0;
box-shadow: 0;
position: relative;
}
tty-player-controls input[type=range]::-moz-range-progress {
background: #fff;
}
input[type=range] {
overflow: hidden;
}
tty-player-controls input[type=range]::-webkit-slider-runnable-track {
-webkit-appearance: none;
height: 8px;
background: rgba(255, 255, 255, 0.5);
//border-radius: 4px;
}
tty-player-controls input[type=range]::-webkit-slider-thumb:before {
position: absolute;
top: 0;
right: 50%;
left: -9999px;
background: #fff;
content: '';
height: 8px;
pointer-events: none;
}
tty-player-controls input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
width: 0;
height: 0;
position: relative;
}
/* I have not altered IEs styles because I feel them already satisfactory */
tty-player-controls .current-time {
position: absolute;
color: #ddd;
background: #888;
font-family: sans-serif;
font-size: 12px;
display: block;
box-shadow: 0 1px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.5), inset 0 1px rgba(255, 255, 255, 0.2);
padding: 0 5px;
line-height: 16px;
border-radius: 4px;
top: -7px;
}
tty-player-controls .current-time::after {
content: "";
position: absolute;
width: 8px;
height: 8px;
background: linear-gradient(-45deg, #888 50%, transparent 50%);
box-shadow: 1px 1px rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5);
bottom: -3px;
left: 50%;
margin-left: -5px;
transform: rotate(45deg);
}
tty-player-controls .duration {
font-family: sans-serif;
font-size: 12px;
color: #999;
line-height: 18px;
padding: 5px;
}