Compare commits
49 commits
Author | SHA1 | Date | |
---|---|---|---|
a24451e654 | |||
d044d133b0 | |||
c028a406db | |||
988240c9b6 | |||
a4a147c480 | |||
46b7a26bb1 | |||
ccd6ba2f1e | |||
dd2c475d46 | |||
5d0faa8d75 | |||
98c38e68ce | |||
9dfb9ec976 | |||
a12fc3d710 | |||
8b1089874a | |||
a71cfbb13d | |||
5f546a3ec6 | |||
fbdac64915 | |||
c5fda97fa4 | |||
fa2da6a000 | |||
80bb4c9f96 | |||
b670b2f824 | |||
4d6c5c6d54 | |||
079d92aef7 | |||
63c3144029 | |||
918accf948 | |||
febfbde6b8 | |||
e14a714860 | |||
492e4a1b82 | |||
8f64987e39 | |||
fc18a9f897 | |||
2437a39221 | |||
c0415c3393 | |||
d643999537 | |||
7a238de401 | |||
bd01fd3e61 | |||
d4ba202469 | |||
bd0e972549 | |||
d519ed1f40 | |||
0899b49b3c | |||
f9cf70cb12 | |||
4b1328ae7e | |||
776a746dc7 | |||
4468ee8b5a | |||
4dee14702d | |||
2dd005af22 | |||
28700b8d83 | |||
f4c05b43a7 | |||
dceb7b6821 | |||
8f29083263 | |||
d120cb3fa7 |
13
.gitignore
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.iws
|
||||||
|
*.eml
|
||||||
|
out/
|
||||||
|
.DS_Store
|
||||||
|
.svn
|
||||||
|
log/*.log
|
||||||
|
tmp/**
|
||||||
|
node_modules/
|
||||||
|
.sass-cache
|
||||||
|
css/reveal.min.css
|
||||||
|
js/reveal.min.js
|
82
Gruntfile.js
|
@ -12,7 +12,7 @@ module.exports = function(grunt) {
|
||||||
banner:
|
banner:
|
||||||
'/*!\n' +
|
'/*!\n' +
|
||||||
' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
|
' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' +
|
||||||
' * http://lab.hakim.se/reveal-js\n' +
|
' * http://revealjs.com\n' +
|
||||||
' * MIT licensed\n' +
|
' * MIT licensed\n' +
|
||||||
' *\n' +
|
' *\n' +
|
||||||
' * Copyright (C) 2017 Hakim El Hattab, http://hakim.se\n' +
|
' * Copyright (C) 2017 Hakim El Hattab, http://hakim.se\n' +
|
||||||
|
@ -25,7 +25,8 @@ module.exports = function(grunt) {
|
||||||
|
|
||||||
uglify: {
|
uglify: {
|
||||||
options: {
|
options: {
|
||||||
banner: '<%= meta.banner %>\n'
|
banner: '<%= meta.banner %>\n',
|
||||||
|
screwIE8: false
|
||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
src: 'js/reveal.js',
|
src: 'js/reveal.js',
|
||||||
|
@ -35,34 +36,31 @@ module.exports = function(grunt) {
|
||||||
|
|
||||||
sass: {
|
sass: {
|
||||||
core: {
|
core: {
|
||||||
files: {
|
src: 'css/reveal.scss',
|
||||||
'css/reveal.css': 'css/reveal.scss',
|
dest: 'css/reveal.css'
|
||||||
}
|
|
||||||
},
|
},
|
||||||
themes: {
|
themes: {
|
||||||
files: [
|
expand: true,
|
||||||
{
|
cwd: 'css/theme/source',
|
||||||
expand: true,
|
src: ['*.sass', '*.scss'],
|
||||||
cwd: 'css/theme/source',
|
dest: 'css/theme',
|
||||||
src: ['*.sass', '*.scss'],
|
ext: '.css'
|
||||||
dest: 'css/theme',
|
|
||||||
ext: '.css'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
autoprefixer: {
|
autoprefixer: {
|
||||||
dist: {
|
core: {
|
||||||
src: 'css/reveal.css'
|
src: 'css/reveal.css'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
cssmin: {
|
cssmin: {
|
||||||
|
options: {
|
||||||
|
compatibility: 'ie9'
|
||||||
|
},
|
||||||
compress: {
|
compress: {
|
||||||
files: {
|
src: 'css/reveal.css',
|
||||||
'css/reveal.min.css': [ 'css/reveal.css' ]
|
dest: 'css/reveal.min.css'
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -72,7 +70,7 @@ module.exports = function(grunt) {
|
||||||
eqeqeq: true,
|
eqeqeq: true,
|
||||||
immed: true,
|
immed: true,
|
||||||
esnext: true,
|
esnext: true,
|
||||||
latedef: true,
|
latedef: 'nofunc',
|
||||||
newcap: true,
|
newcap: true,
|
||||||
noarg: true,
|
noarg: true,
|
||||||
sub: true,
|
sub: true,
|
||||||
|
@ -98,22 +96,25 @@ module.exports = function(grunt) {
|
||||||
port: port,
|
port: port,
|
||||||
base: root,
|
base: root,
|
||||||
livereload: true,
|
livereload: true,
|
||||||
open: true
|
open: true,
|
||||||
|
useAvailablePort: true
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
zip: {
|
zip: {
|
||||||
'reveal-js-presentation.zip': [
|
bundle: {
|
||||||
'index.html',
|
src: [
|
||||||
'css/**',
|
'index.html',
|
||||||
'js/**',
|
'css/**',
|
||||||
'lib/**',
|
'js/**',
|
||||||
'images/**',
|
'lib/**',
|
||||||
'plugin/**',
|
'images/**',
|
||||||
'**.md'
|
'plugin/**',
|
||||||
]
|
'**.md'
|
||||||
|
],
|
||||||
|
dest: 'reveal-js-presentation.zip'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -138,7 +139,7 @@ module.exports = function(grunt) {
|
||||||
files: root.map(path => path + '/*.html')
|
files: root.map(path => path + '/*.html')
|
||||||
},
|
},
|
||||||
markdown: {
|
markdown: {
|
||||||
files: root.map(path => path + '/*.md')
|
files: root.map(path => path + '/slides/*.md')
|
||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
livereload: true
|
livereload: true
|
||||||
|
@ -146,25 +147,24 @@ module.exports = function(grunt) {
|
||||||
},
|
},
|
||||||
|
|
||||||
retire: {
|
retire: {
|
||||||
js: ['js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js'],
|
js: [ 'js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js' ],
|
||||||
node: ['.'],
|
node: [ '.' ]
|
||||||
options: {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Dependencies
|
// Dependencies
|
||||||
grunt.loadNpmTasks( 'grunt-contrib-qunit' );
|
grunt.loadNpmTasks( 'grunt-contrib-connect' );
|
||||||
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
|
|
||||||
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
|
grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
|
||||||
|
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
|
||||||
|
grunt.loadNpmTasks( 'grunt-contrib-qunit' );
|
||||||
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
|
grunt.loadNpmTasks( 'grunt-contrib-uglify' );
|
||||||
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
||||||
grunt.loadNpmTasks( 'grunt-sass' );
|
|
||||||
grunt.loadNpmTasks( 'grunt-contrib-connect' );
|
|
||||||
grunt.loadNpmTasks( 'grunt-autoprefixer' );
|
grunt.loadNpmTasks( 'grunt-autoprefixer' );
|
||||||
grunt.loadNpmTasks( 'grunt-zip' );
|
|
||||||
grunt.loadNpmTasks( 'grunt-retire' );
|
grunt.loadNpmTasks( 'grunt-retire' );
|
||||||
|
grunt.loadNpmTasks( 'grunt-sass' );
|
||||||
|
grunt.loadNpmTasks( 'grunt-zip' );
|
||||||
|
|
||||||
// Default task
|
// Default task
|
||||||
grunt.registerTask( 'default', [ 'css', 'js' ] );
|
grunt.registerTask( 'default', [ 'css', 'js' ] );
|
||||||
|
|
||||||
|
|
39
README.md
|
@ -1,3 +1,38 @@
|
||||||
Presentazione fatta ad hackmeeting 0x16
|
Autodifesa Digitale I
|
||||||
|
|
||||||
(intera directory reveal.js)
|
Slides di autodifesa digitale.
|
||||||
|
|
||||||
|
## Usare
|
||||||
|
Questa presentazione e' pensata per essere fatta in 3 sessioni da 2 ore l'una o 2 sessioni da tre ore l'una,
|
||||||
|
ma e' stata fatta anche in una sola sessione da tre ore (tutte le persone presenti sono soprattissute).
|
||||||
|
|
||||||
|
Clona questo repo con:
|
||||||
|
`git clone https://git.lattuga.net/cisti/autodifesa-digitale-parte-1.git`
|
||||||
|
|
||||||
|
Apri `index.html` con qualsiasi browser.
|
||||||
|
|
||||||
|
Se vuoi fare il figo e stai usando un proiettore (non mirrorato)
|
||||||
|
premi `S` (se viene fuori un messaggio di warning riguardo
|
||||||
|
le finestre di popup, abilita i popup per questa tab).
|
||||||
|
|
||||||
|
|
||||||
|
## Modificare
|
||||||
|
|
||||||
|
Clona questo repo con:
|
||||||
|
`git clone https://git.lattuga.net/cisti/autodifesa-digitale-parte-1.git`
|
||||||
|
|
||||||
|
Installa le dipendenze:
|
||||||
|
`npm install` o `yarn`
|
||||||
|
|
||||||
|
Fai partire il server livereload di grunt:
|
||||||
|
`grunt serve`
|
||||||
|
Verrà scritto qualcosa come: `Started connect web server on http://localhost:8000`
|
||||||
|
aprendo quell'indirizzo da un browser dovresti vedere la presentazione.
|
||||||
|
|
||||||
|
Le slides sono scritte in markdown e separate per argomenti nella
|
||||||
|
cartella `/slides`, ad ogni modifica `grunt` farà un refresh del browser,
|
||||||
|
mantenendo la slides corrente.
|
||||||
|
|
||||||
|
|
||||||
|
## Esportare
|
||||||
|
eee ti piacerebbe :) non sono ancora arrivato li', in pdf dovrebbe essere facile pero'.
|
||||||
|
|
42
appunti
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# aggiungere
|
||||||
|
- imsi catcher
|
||||||
|
- adnauseam
|
||||||
|
|
||||||
|
# 2 ore non bastano, dividere in 3/4 puntate,
|
||||||
|
# la teoria e' noiosa, troviamo altri modi per comunicare,
|
||||||
|
# challenge a casa (guarda un sito via tor, visita un .onion, manda una mail cifrata, firmata....)
|
||||||
|
# tanti aneddoti!
|
||||||
|
#
|
||||||
|
# intro - 15 min
|
||||||
|
#
|
||||||
|
|
||||||
|
# intro
|
||||||
|
- ci sarebbero troppe cose da dire
|
||||||
|
- vorresti faticare il meno possibile, ma devi accendere il cervello
|
||||||
|
l'illusione della sicurezza e' molto peggio della consapevolezza netta di essere vulnerabili.
|
||||||
|
- in generale, stai delegando, cerca di farlo meno possibile.
|
||||||
|
- chi dice di non avere nulla da nascondere non prende in considerazione il futuro
|
||||||
|
- intimita' non privacy
|
||||||
|
|
||||||
|
ci sono degli strumenti e degli utilizzi appropriati, la domanda non e'
|
||||||
|
usare o meno le tecnologie, ma quando e perche'.
|
||||||
|
|
||||||
|
--
|
||||||
|
crittografia nei messaggi:
|
||||||
|
- riservatezza (impedire letture terze)
|
||||||
|
autenticita' (l'autore e' chi dice di essere)
|
||||||
|
integrita' (non modificato)
|
||||||
|
|
||||||
|
la crittografia non nasconde i messaggi ma li protegge (steganografia).
|
||||||
|
(metadati nelle comunicazioni)
|
||||||
|
--
|
||||||
|
|
||||||
|
il seminario polpettone che palle, ci vuole interazione,
|
||||||
|
gif animate e immaginine, scenette teatrali pensate bene,
|
||||||
|
forse anche delle challenge (guarda un sito con tor, manda una mail cifrata).
|
||||||
|
|
||||||
|
come funziona internet, dns.
|
||||||
|
|
||||||
|
gestione identita', concetto di identita', pseudonimi, fb, anonymous, luther blissett, anonimato.
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"name": "reveal.js",
|
"name": "reveal.js",
|
||||||
"version": "3.5.0",
|
"version": "3.6.0",
|
||||||
"main": [
|
"main": [
|
||||||
"js/reveal.js",
|
"js/reveal.js",
|
||||||
"css/reveal.css"
|
"css/reveal.css"
|
||||||
],
|
],
|
||||||
"homepage": "http://lab.hakim.se/reveal-js/",
|
"homepage": "http://revealjs.com",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "The HTML Presentation Framework",
|
"description": "The HTML Presentation Framework",
|
||||||
"authors": [
|
"authors": [
|
||||||
|
|
|
@ -144,9 +144,14 @@ ul, ol, div, p {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display slide speaker notes when 'showNotes' is enabled */
|
/* Display slide speaker notes when 'showNotes' is enabled */
|
||||||
|
.reveal.show-notes {
|
||||||
|
max-width: none;
|
||||||
|
max-height: none;
|
||||||
|
}
|
||||||
.reveal .speaker-notes-pdf {
|
.reveal .speaker-notes-pdf {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
max-height: none;
|
max-height: none;
|
||||||
top: auto;
|
top: auto;
|
||||||
right: auto;
|
right: auto;
|
||||||
|
@ -162,6 +167,7 @@ ul, ol, div, p {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
page-break-after: always;
|
page-break-after: always;
|
||||||
|
border: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display slide numbers when 'slideNumber' is enabled */
|
/* Display slide numbers when 'slideNumber' is enabled */
|
||||||
|
|
700
css/reveal.css
402
css/reveal.scss
|
@ -1,6 +1,6 @@
|
||||||
/*!
|
/*!
|
||||||
* reveal.js
|
* reveal.js
|
||||||
* http://lab.hakim.se/reveal-js
|
* http://revealjs.com
|
||||||
* MIT licensed
|
* MIT licensed
|
||||||
*
|
*
|
||||||
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
||||||
|
@ -235,90 +235,279 @@ body {
|
||||||
* CONTROLS
|
* CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
|
@keyframes bounce-right {
|
||||||
|
0%, 10%, 25%, 40%, 50% {transform: translateX(0);}
|
||||||
|
20% {transform: translateX(10px);}
|
||||||
|
30% {transform: translateX(-5px);}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes bounce-down {
|
||||||
|
0%, 10%, 25%, 40%, 50% {transform: translateY(0);}
|
||||||
|
20% {transform: translateY(10px);}
|
||||||
|
30% {transform: translateY(-5px);}
|
||||||
|
}
|
||||||
|
|
||||||
|
$controlArrowSize: 3.6em;
|
||||||
|
$controlArrowSpacing: 1.4em;
|
||||||
|
$controlArrowLength: 2.6em;
|
||||||
|
$controlArrowThickness: 0.5em;
|
||||||
|
$controlsArrowAngle: 45deg;
|
||||||
|
$controlsArrowAngleHover: 40deg;
|
||||||
|
$controlsArrowAngleActive: 36deg;
|
||||||
|
|
||||||
|
@mixin controlsArrowTransform( $angle ) {
|
||||||
|
&:before {
|
||||||
|
transform: translateX(($controlArrowSize - $controlArrowLength)/2) translateY(($controlArrowSize - $controlArrowThickness)/2) rotate( $angle );
|
||||||
|
}
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
transform: translateX(($controlArrowSize - $controlArrowLength)/2) translateY(($controlArrowSize - $controlArrowThickness)/2) rotate( -$angle );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.reveal .controls {
|
.reveal .controls {
|
||||||
|
$spacing: 12px;
|
||||||
|
|
||||||
display: none;
|
display: none;
|
||||||
position: fixed;
|
|
||||||
width: 110px;
|
|
||||||
height: 110px;
|
|
||||||
z-index: 30;
|
|
||||||
right: 10px;
|
|
||||||
bottom: 10px;
|
|
||||||
|
|
||||||
-webkit-user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls button {
|
|
||||||
padding: 0;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
opacity: 0.05;
|
top: auto;
|
||||||
width: 0;
|
bottom: $spacing;
|
||||||
height: 0;
|
right: $spacing;
|
||||||
background-color: transparent;
|
left: auto;
|
||||||
border: 12px solid transparent;
|
z-index: 1;
|
||||||
transform: scale(.9999);
|
color: #000;
|
||||||
transition: all 0.2s ease;
|
pointer-events: none;
|
||||||
-webkit-appearance: none;
|
font-size: 10px;
|
||||||
-webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
|
|
||||||
|
button {
|
||||||
|
position: absolute;
|
||||||
|
padding: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
color: currentColor;
|
||||||
|
transform: scale(.9999);
|
||||||
|
transition: color 0.2s ease,
|
||||||
|
opacity 0.2s ease,
|
||||||
|
transform 0.2s ease;
|
||||||
|
z-index: 2; // above slides
|
||||||
|
pointer-events: auto;
|
||||||
|
font-size: inherit;
|
||||||
|
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls-arrow:before,
|
||||||
|
.controls-arrow:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: $controlArrowLength;
|
||||||
|
height: $controlArrowThickness;
|
||||||
|
border-radius: $controlArrowThickness/2;
|
||||||
|
background-color: currentColor;
|
||||||
|
|
||||||
|
transition: all 0.15s ease, background-color 0.8s ease;
|
||||||
|
transform-origin: floor(($controlArrowThickness/2)*10)/10 50%;
|
||||||
|
will-change: transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls-arrow {
|
||||||
|
position: relative;
|
||||||
|
width: $controlArrowSize;
|
||||||
|
height: $controlArrowSize;
|
||||||
|
|
||||||
|
@include controlsArrowTransform( $controlsArrowAngle );
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@include controlsArrowTransform( $controlsArrowAngleHover );
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
@include controlsArrowTransform( $controlsArrowAngleActive );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigate-left {
|
||||||
|
right: $controlArrowSize + $controlArrowSpacing*2;
|
||||||
|
bottom: $controlArrowSpacing + $controlArrowSize/2;
|
||||||
|
transform: translateX( -10px );
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigate-right {
|
||||||
|
right: 0;
|
||||||
|
bottom: $controlArrowSpacing + $controlArrowSize/2;
|
||||||
|
transform: translateX( 10px );
|
||||||
|
|
||||||
|
.controls-arrow {
|
||||||
|
transform: rotate( 180deg );
|
||||||
|
}
|
||||||
|
|
||||||
|
&.highlight {
|
||||||
|
animation: bounce-right 2s 50 both ease-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigate-up {
|
||||||
|
right: $controlArrowSpacing + $controlArrowSize/2;
|
||||||
|
bottom: $controlArrowSpacing*2 + $controlArrowSize;
|
||||||
|
transform: translateY( -10px );
|
||||||
|
|
||||||
|
.controls-arrow {
|
||||||
|
transform: rotate( 90deg );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigate-down {
|
||||||
|
right: $controlArrowSpacing + $controlArrowSize/2;
|
||||||
|
bottom: 0;
|
||||||
|
transform: translateY( 10px );
|
||||||
|
|
||||||
|
.controls-arrow {
|
||||||
|
transform: rotate( -90deg );
|
||||||
|
}
|
||||||
|
|
||||||
|
&.highlight {
|
||||||
|
animation: bounce-down 2s 50 both ease-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Back arrow style: "faded":
|
||||||
|
// Deemphasize backwards navigation arrows in favor of drawing
|
||||||
|
// attention to forwards navigation
|
||||||
|
&[data-controls-back-arrows="faded"] .navigate-left.enabled,
|
||||||
|
&[data-controls-back-arrows="faded"] .navigate-up.enabled {
|
||||||
|
opacity: 0.3;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Back arrow style: "hidden":
|
||||||
|
// Never show arrows for backwards navigation
|
||||||
|
&[data-controls-back-arrows="hidden"] .navigate-left.enabled,
|
||||||
|
&[data-controls-back-arrows="hidden"] .navigate-up.enabled {
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any control button that can be clicked is "enabled"
|
||||||
|
.enabled {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 0.9;
|
||||||
|
cursor: pointer;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any control button that leads to showing or hiding
|
||||||
|
// a fragment
|
||||||
|
.enabled.fragmented {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.enabled:hover,
|
||||||
|
.enabled.fragmented:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .controls .enabled {
|
// Adjust the layout when there are no vertical slides
|
||||||
opacity: 0.7;
|
.reveal:not(.has-vertical-slides) .controls .navigate-left {
|
||||||
cursor: pointer;
|
bottom: $controlArrowSpacing;
|
||||||
|
right: 0.5em + $controlArrowSpacing + $controlArrowSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .controls .enabled:active {
|
.reveal:not(.has-vertical-slides) .controls .navigate-right {
|
||||||
margin-top: 1px;
|
bottom: $controlArrowSpacing;
|
||||||
|
right: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .controls .navigate-left {
|
// Adjust the layout when there are no horizontal slides
|
||||||
top: 42px;
|
.reveal:not(.has-horizontal-slides) .controls .navigate-up {
|
||||||
|
right: $controlArrowSpacing;
|
||||||
|
bottom: $controlArrowSpacing + $controlArrowSize;
|
||||||
|
}
|
||||||
|
.reveal:not(.has-horizontal-slides) .controls .navigate-down {
|
||||||
|
right: $controlArrowSpacing;
|
||||||
|
bottom: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
border-right-width: 22px;
|
// Invert arrows based on background color
|
||||||
border-right-color: #000;
|
.reveal.has-dark-background .controls {
|
||||||
}
|
color: #fff;
|
||||||
.reveal .controls .navigate-left.fragmented {
|
}
|
||||||
opacity: 0.3;
|
.reveal.has-light-background .controls {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disable active states on touch devices
|
||||||
|
.reveal.no-hover .controls .controls-arrow:hover,
|
||||||
|
.reveal.no-hover .controls .controls-arrow:active {
|
||||||
|
@include controlsArrowTransform( $controlsArrowAngle );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edge aligned controls layout
|
||||||
|
@media screen and (min-width: 500px) {
|
||||||
|
|
||||||
|
$spacing: 8px;
|
||||||
|
|
||||||
|
.reveal .controls[data-controls-layout="edges"] {
|
||||||
|
& {
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .controls .navigate-right {
|
.navigate-left,
|
||||||
left: 74px;
|
.navigate-right,
|
||||||
top: 42px;
|
.navigate-up,
|
||||||
|
.navigate-down {
|
||||||
border-left-width: 22px;
|
bottom: auto;
|
||||||
border-left-color: #000;
|
right: auto;
|
||||||
}
|
|
||||||
.reveal .controls .navigate-right.fragmented {
|
|
||||||
opacity: 0.3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .controls .navigate-up {
|
.navigate-left {
|
||||||
left: 42px;
|
top: 50%;
|
||||||
|
left: $spacing;
|
||||||
border-bottom-width: 22px;
|
margin-top: -$controlArrowSize/2;
|
||||||
border-bottom-color: #000;
|
|
||||||
}
|
|
||||||
.reveal .controls .navigate-up.fragmented {
|
|
||||||
opacity: 0.3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .controls .navigate-down {
|
.navigate-right {
|
||||||
left: 42px;
|
top: 50%;
|
||||||
top: 74px;
|
right: $spacing;
|
||||||
|
margin-top: -$controlArrowSize/2;
|
||||||
border-top-width: 22px;
|
|
||||||
border-top-color: #000;
|
|
||||||
}
|
|
||||||
.reveal .controls .navigate-down.fragmented {
|
|
||||||
opacity: 0.3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navigate-up {
|
||||||
|
top: $spacing;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -$controlArrowSize/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigate-down {
|
||||||
|
bottom: $spacing;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -$controlArrowSize/2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
position: fixed;
|
position: absolute;
|
||||||
display: none;
|
display: none;
|
||||||
height: 3px;
|
height: 3px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -327,21 +516,22 @@ body {
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
|
||||||
background-color: rgba( 0, 0, 0, 0.2 );
|
background-color: rgba( 0, 0, 0, 0.2 );
|
||||||
|
color: #fff;
|
||||||
}
|
}
|
||||||
.reveal .progress:after {
|
.reveal .progress:after {
|
||||||
content: '';
|
content: '';
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
height: 20px;
|
height: 10px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
top: -20px;
|
top: -10px;
|
||||||
}
|
}
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
display: block;
|
display: block;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 0px;
|
width: 0px;
|
||||||
|
|
||||||
background-color: #000;
|
background-color: currentColor;
|
||||||
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,6 +569,16 @@ body {
|
||||||
touch-action: none;
|
touch-action: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mobile Safari sometimes overlays a header at the top
|
||||||
|
// of the page when in landscape mode. Using fixed
|
||||||
|
// positioning ensures that reveal.js reduces its height
|
||||||
|
// when this header is visible.
|
||||||
|
@media only screen and (orientation : landscape) {
|
||||||
|
.reveal.ua-iphone {
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.reveal .slides {
|
.reveal .slides {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -1336,12 +1536,13 @@ body {
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
.reveal .playback {
|
.reveal .playback {
|
||||||
position: fixed;
|
position: absolute;
|
||||||
left: 15px;
|
left: 15px;
|
||||||
bottom: 20px;
|
bottom: 20px;
|
||||||
z-index: 30;
|
z-index: 30;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all 400ms ease;
|
transition: all 400ms ease;
|
||||||
|
-webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal.overview .playback {
|
.reveal.overview .playback {
|
||||||
|
@ -1410,37 +1611,84 @@ body {
|
||||||
.reveal .speaker-notes {
|
.reveal .speaker-notes {
|
||||||
display: none;
|
display: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 70%;
|
width: 25vw;
|
||||||
max-height: 15%;
|
height: 100%;
|
||||||
left: 15%;
|
top: 0;
|
||||||
bottom: 26px;
|
left: 100%;
|
||||||
padding: 10px;
|
padding: 14px 18px 14px 18px;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
color: #fff;
|
border: 1px solid rgba( 0, 0, 0, 0.05 );
|
||||||
background-color: rgba(0,0,0,0.5);
|
color: #222;
|
||||||
|
background-color: #f5f5f5;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-family: Helvetica, sans-serif;
|
font-family: Helvetica, sans-serif;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
|
|
||||||
|
.notes-placeholder {
|
||||||
|
color: #ccc;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: 'Speaker notes';
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal .speaker-notes.visible:not(:empty) {
|
|
||||||
|
.reveal.show-notes {
|
||||||
|
max-width: 75vw;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reveal.show-notes .speaker-notes {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 1024px) {
|
@media screen and (min-width: 1600px) {
|
||||||
.reveal .speaker-notes {
|
.reveal .speaker-notes {
|
||||||
font-size: 14px;
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1024px) {
|
||||||
|
.reveal.show-notes {
|
||||||
|
border-left: 0;
|
||||||
|
max-width: none;
|
||||||
|
max-height: 70%;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reveal.show-notes .speaker-notes {
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: (30/0.7)*1%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 600px) {
|
@media screen and (max-width: 600px) {
|
||||||
|
.reveal.show-notes {
|
||||||
|
max-height: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reveal.show-notes .speaker-notes {
|
||||||
|
top: 100%;
|
||||||
|
height: (40/0.6)*1%;
|
||||||
|
}
|
||||||
|
|
||||||
.reveal .speaker-notes {
|
.reveal .speaker-notes {
|
||||||
width: 90%;
|
font-size: 14px;
|
||||||
left: 5%;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ Themes are written using Sass to keep things modular and reduce the need for rep
|
||||||
|
|
||||||
## Creating a Theme
|
## Creating a Theme
|
||||||
|
|
||||||
To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js)) when you run `grunt css-themes`.
|
To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js)) when you run `npm run build -- css-themes`.
|
||||||
|
|
||||||
Each theme file does four things in the following order:
|
Each theme file does four things in the following order:
|
||||||
|
|
||||||
|
|
|
@ -126,10 +126,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -160,7 +156,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -255,42 +252,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #8b743d; }
|
||||||
border-right-color: #8b743d; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #8b743d; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #8b743d; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #8b743d; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #c0a86e; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #c0a86e; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #c0a86e; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #c0a86e; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #8b743d; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #8b743d;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -15,7 +15,7 @@ body {
|
||||||
background-color: #222; }
|
background-color: #222; }
|
||||||
|
|
||||||
.reveal {
|
.reveal {
|
||||||
font-family: "Source Sans Pro", Helvetica, sans-serif;
|
font-family: "Lato Light", "Source Sans Pro", Helvetica, sans-serif;
|
||||||
font-size: 42px;
|
font-size: 42px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #fff; }
|
color: #fff; }
|
||||||
|
@ -46,7 +46,7 @@ body {
|
||||||
.reveal h6 {
|
.reveal h6 {
|
||||||
margin: 0 0 20px 0;
|
margin: 0 0 20px 0;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-family: "Source Sans Pro", Helvetica, sans-serif;
|
font-family: "Lato Light", "Source Sans Pro", Helvetica, sans-serif;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
letter-spacing: normal;
|
letter-spacing: normal;
|
||||||
|
@ -122,10 +122,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -156,7 +152,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -251,42 +248,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #42affa; }
|
||||||
border-right-color: #42affa; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #42affa; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #42affa; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #42affa; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #8dcffc; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #8dcffc; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #8dcffc; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #8dcffc; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #42affa; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #42affa;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -125,10 +125,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -159,7 +155,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -254,42 +251,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #a23; }
|
||||||
border-right-color: #a23; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #a23; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #a23; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #a23; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #dd5566; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #dd5566; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #dd5566; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #dd5566; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #a23; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #a23;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -128,10 +128,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -162,7 +158,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -257,42 +254,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #13DAEC; }
|
||||||
border-right-color: #13DAEC; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #13DAEC; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #13DAEC; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #13DAEC; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #71e9f4; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #71e9f4; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #71e9f4; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #71e9f4; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #13DAEC; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #13DAEC;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -126,10 +126,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -160,7 +156,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -255,42 +252,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #268bd2; }
|
||||||
border-right-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #78b9e6; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #78b9e6; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #78b9e6; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #78b9e6; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #268bd2; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #268bd2;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -120,10 +120,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -154,7 +150,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -249,42 +246,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #e7ad52; }
|
||||||
border-right-color: #e7ad52; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #e7ad52; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #e7ad52; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #e7ad52; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #f3d7ac; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #f3d7ac; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #f3d7ac; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #f3d7ac; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #e7ad52; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #e7ad52;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -122,10 +122,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -156,7 +152,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -251,42 +248,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #51483D; }
|
||||||
border-right-color: #51483D; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #51483D; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #51483D; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #51483D; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #8b7c69; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #8b7c69; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #8b7c69; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #8b7c69; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #51483D; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #51483D;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -125,10 +125,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -159,7 +155,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -254,42 +251,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #00008B; }
|
||||||
border-right-color: #00008B; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #00008B; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #00008B; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #00008B; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #0000f1; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #0000f1; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #0000f1; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #0000f1; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #00008B; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #00008B;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -129,10 +129,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -163,7 +159,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -258,42 +255,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #3b759e; }
|
||||||
border-right-color: #3b759e; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #3b759e; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #3b759e; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #3b759e; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #74a7cb; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #74a7cb; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #74a7cb; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #74a7cb; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #3b759e; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #3b759e;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -126,10 +126,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -160,7 +156,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -255,42 +252,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #268bd2; }
|
||||||
border-right-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #268bd2; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #78b9e6; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #78b9e6; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #78b9e6; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #78b9e6; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #268bd2; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #268bd2;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
|
@ -22,8 +22,8 @@ $mainColor: #fff;
|
||||||
$headingColor: #fff;
|
$headingColor: #fff;
|
||||||
|
|
||||||
$mainFontSize: 42px;
|
$mainFontSize: 42px;
|
||||||
$mainFont: 'Source Sans Pro', Helvetica, sans-serif;
|
$mainFont: 'Lato Light', 'Source Sans Pro', Helvetica, sans-serif;
|
||||||
$headingFont: 'Source Sans Pro', Helvetica, sans-serif;
|
$headingFont: 'Lato Light', 'Source Sans Pro', Helvetica, sans-serif;
|
||||||
$headingTextShadow: none;
|
$headingTextShadow: none;
|
||||||
$headingLetterSpacing: normal;
|
$headingLetterSpacing: normal;
|
||||||
$headingTextTransform: uppercase;
|
$headingTextTransform: uppercase;
|
||||||
|
|
|
@ -134,11 +134,6 @@ body {
|
||||||
margin-left: 40px;
|
margin-left: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -174,8 +169,10 @@ body {
|
||||||
|
|
||||||
box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
|
box-shadow: 0px 0px 6px rgba(0,0,0,0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
|
text-transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
|
@ -297,40 +294,8 @@ body {
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
|
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: $linkColor;
|
||||||
border-right-color: $linkColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: $linkColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: $linkColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: $linkColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: $linkColorHover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: $linkColorHover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: $linkColorHover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: $linkColorHover;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -340,10 +305,9 @@ body {
|
||||||
|
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0,0,0,0.2);
|
background: rgba(0,0,0,0.2);
|
||||||
|
color: $linkColor;
|
||||||
}
|
}
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: $linkColor;
|
|
||||||
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
|
||||||
|
|
|
@ -122,10 +122,6 @@ body {
|
||||||
.reveal dd {
|
.reveal dd {
|
||||||
margin-left: 40px; }
|
margin-left: 40px; }
|
||||||
|
|
||||||
.reveal q,
|
|
||||||
.reveal blockquote {
|
|
||||||
quotes: none; }
|
|
||||||
|
|
||||||
.reveal blockquote {
|
.reveal blockquote {
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -156,7 +152,8 @@ body {
|
||||||
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); }
|
||||||
|
|
||||||
.reveal code {
|
.reveal code {
|
||||||
font-family: monospace; }
|
font-family: monospace;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
.reveal pre code {
|
.reveal pre code {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -251,42 +248,17 @@ body {
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* NAVIGATION CONTROLS
|
* NAVIGATION CONTROLS
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .controls .navigate-left,
|
.reveal .controls {
|
||||||
.reveal .controls .navigate-left.enabled {
|
color: #2a76dd; }
|
||||||
border-right-color: #2a76dd; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right,
|
|
||||||
.reveal .controls .navigate-right.enabled {
|
|
||||||
border-left-color: #2a76dd; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up,
|
|
||||||
.reveal .controls .navigate-up.enabled {
|
|
||||||
border-bottom-color: #2a76dd; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down,
|
|
||||||
.reveal .controls .navigate-down.enabled {
|
|
||||||
border-top-color: #2a76dd; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-left.enabled:hover {
|
|
||||||
border-right-color: #6ca0e8; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-right.enabled:hover {
|
|
||||||
border-left-color: #6ca0e8; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-up.enabled:hover {
|
|
||||||
border-bottom-color: #6ca0e8; }
|
|
||||||
|
|
||||||
.reveal .controls .navigate-down.enabled:hover {
|
|
||||||
border-top-color: #6ca0e8; }
|
|
||||||
|
|
||||||
/*********************************************
|
/*********************************************
|
||||||
* PROGRESS BAR
|
* PROGRESS BAR
|
||||||
*********************************************/
|
*********************************************/
|
||||||
.reveal .progress {
|
.reveal .progress {
|
||||||
background: rgba(0, 0, 0, 0.2); }
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
color: #2a76dd; }
|
||||||
|
|
||||||
.reveal .progress span {
|
.reveal .progress span {
|
||||||
background: #2a76dd;
|
|
||||||
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
-moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
|
||||||
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
|
||||||
|
|
10
demo.html
|
@ -44,7 +44,7 @@
|
||||||
<h1>Reveal.js</h1>
|
<h1>Reveal.js</h1>
|
||||||
<h3>The HTML Presentation Framework</h3>
|
<h3>The HTML Presentation Framework</h3>
|
||||||
<p>
|
<p>
|
||||||
<small>Created by <a href="http://hakim.se">Hakim El Hattab</a> / <a href="http://twitter.com/hakimel">@hakimel</a></small>
|
<small>Created by <a href="http://hakim.se">Hakim El Hattab</a> and <a href="https://github.com/hakimel/reveal.js/graphs/contributors">contributors</a></small>
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
<section>
|
<section>
|
||||||
<h2>Slides</h2>
|
<h2>Slides</h2>
|
||||||
<p>
|
<p>
|
||||||
Not a coder? Not a problem. There's a fully-featured visual editor for authoring these, try it out at <a href="http://slides.com" target="_blank">http://slides.com</a>.
|
Not a coder? Not a problem. There's a fully-featured visual editor for authoring these, try it out at <a href="https://slides.com" target="_blank">https://slides.com</a>.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -295,8 +295,7 @@ function linkify( selector ) {
|
||||||
<section>
|
<section>
|
||||||
<h2>Clever Quotes</h2>
|
<h2>Clever Quotes</h2>
|
||||||
<p>
|
<p>
|
||||||
These guys come in two forms, inline: <q cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
|
These guys come in two forms, inline: <q cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">The nice thing about standards is that there are so many to choose from</q> and block:
|
||||||
“The nice thing about standards is that there are so many to choose from”</q> and block:
|
|
||||||
</p>
|
</p>
|
||||||
<blockquote cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
|
<blockquote cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations">
|
||||||
“For years there has been a theory that millions of monkeys typing at random on millions of typewriters would
|
“For years there has been a theory that millions of monkeys typing at random on millions of typewriters would
|
||||||
|
@ -370,7 +369,7 @@ Reveal.addEventListener( 'customevent', function() {
|
||||||
<section style="text-align: left;">
|
<section style="text-align: left;">
|
||||||
<h1>THE END</h1>
|
<h1>THE END</h1>
|
||||||
<p>
|
<p>
|
||||||
- <a href="http://slides.com">Try the online editor</a> <br>
|
- <a href="https://slides.com">Try the online editor</a> <br>
|
||||||
- <a href="https://github.com/hakimel/reveal.js">Source code & documentation</a>
|
- <a href="https://github.com/hakimel/reveal.js">Source code & documentation</a>
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
@ -399,6 +398,7 @@ Reveal.addEventListener( 'customevent', function() {
|
||||||
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
||||||
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
||||||
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
|
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
|
||||||
|
{ src: 'plugin/search/search.js', async: true },
|
||||||
{ src: 'plugin/zoom-js/zoom.js', async: true },
|
{ src: 'plugin/zoom-js/zoom.js', async: true },
|
||||||
{ src: 'plugin/notes/notes.js', async: true }
|
{ src: 'plugin/notes/notes.js', async: true }
|
||||||
]
|
]
|
||||||
|
|
BIN
img/ai-book-cover-hi.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
img/anon.jpg
Normal file
After Width: | Height: | Size: 580 KiB |
BIN
img/antani.jpg
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
img/brodino.jpg
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
img/comunicazione.jpg
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
img/copertina.png
Normal file
After Width: | Height: | Size: 193 KiB |
BIN
img/cybertonia.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
img/freedom.jpg
Normal file
After Width: | Height: | Size: 158 KiB |
BIN
img/hd.jpg
Normal file
After Width: | Height: | Size: 431 KiB |
BIN
img/il-materiale-informatico-sequestrato-dalla-polizia.jpg
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
img/internet.jpg
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
img/metadata.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
img/passhint.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
img/password-requisiti.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
img/password_strength.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
img/pasta-e-forchetta.jpg
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
img/scimmia.jpg
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
img/think.jpg
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
img/this-is-your-brain-on-apps.jpg
Normal file
After Width: | Height: | Size: 237 KiB |
BIN
img/tor.png
Normal file
After Width: | Height: | Size: 46 KiB |
807
index.html
|
@ -1,660 +1,153 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||||
|
|
||||||
<title>reveal.js</title>
|
<title>Autodifesa Digitale I</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/reveal.css">
|
<link rel="stylesheet" href="css/reveal.css">
|
||||||
<link rel="stylesheet" href="css/theme/black.css">
|
<link rel="stylesheet" href="css/theme/black.css">
|
||||||
|
|
||||||
<!-- Theme used for syntax highlighting of code -->
|
<!-- Theme used for syntax highlighting of code -->
|
||||||
<link rel="stylesheet" href="lib/css/zenburn.css">
|
<link rel="stylesheet" href="lib/css/zenburn.css">
|
||||||
|
|
||||||
<!-- Printing and PDF exports -->
|
<!-- User style -->
|
||||||
<script>
|
<style>
|
||||||
var link = document.createElement( 'link' );
|
.red { color: #ff2c2d; }
|
||||||
link.rel = 'stylesheet';
|
.green { color: #17ff2e; }
|
||||||
link.type = 'text/css';
|
.blue { color: #1b91ff; }
|
||||||
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
|
.slides section { text-align: right; }
|
||||||
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
.top-right { top: -200px; }
|
||||||
</script>
|
.reveal section img { max-height: 400px; }
|
||||||
<style type="text/css">
|
</style>
|
||||||
.right { float: right; }
|
<!-- Printing and PDF exports -->
|
||||||
</style>
|
<script>
|
||||||
</head>
|
var link = document.createElement( 'link' );
|
||||||
<body>
|
link.rel = 'stylesheet';
|
||||||
<div class="reveal">
|
link.type = 'text/css';
|
||||||
<div class="slides">
|
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
|
||||||
|
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
||||||
<section data-markdown>
|
</script>
|
||||||
|
</head>
|
||||||
# Autodifesa digitale
|
<body>
|
||||||
## (parte 1)
|
|
||||||
|
<div class="reveal">
|
||||||
</section>
|
<div class="slides">
|
||||||
<section data-markdown>
|
<section>
|
||||||
|
<section
|
||||||
# Perchè questo workshop
|
data-separator="^--$"
|
||||||
|
data-markdown="slides/intro.md"></section>
|
||||||
## Necessità di autodifesa digitale
|
</section>
|
||||||
|
<section>
|
||||||
</section>
|
<section
|
||||||
<section data-markdown>
|
data-separator="^--$"
|
||||||
|
data-markdown="slides/liberta.md"></section>
|
||||||
## Cosa vedremo oggi?
|
</section>
|
||||||
|
<section>
|
||||||
* Installazione Sistema Operativo Linux
|
<section
|
||||||
|
data-separator="^--$"
|
||||||
* Configurazione di strumenti base per proteggere nostri dati
|
data-markdown="slides/password.md">
|
||||||
|
</section>
|
||||||
</section>
|
<section id='passwordTest'>
|
||||||
<section data-markdown>
|
<p>Vediamo quanto sei bravo/a ad inventare una password:</p>
|
||||||
|
<input type="password"
|
||||||
# Perchè Linux?
|
v-model='password'
|
||||||
|
@input='checkStrength'
|
||||||
## Free e Open Source
|
:class="['score' + estimationScore]"/>
|
||||||
|
<button :disabled="estimationScore!==4"> ➜</button>
|
||||||
### Libertà di:
|
<p v-if='password.length>2'>
|
||||||
* eseguire software per qualsiasi scopo.
|
Questa password è {{score[estimationScore]}}, dopo un sequestro uno bravo
|
||||||
* studiare il software e modificarlo.
|
ci mette più o meno <b>{{slowCrackTime}}</b> a scoprirla,
|
||||||
* ridistribuire copie (anche modificate)
|
la CIA circa <b>{{fastCrackTime}}</b>:
|
||||||
|
</p>
|
||||||
</section>
|
|
||||||
|
<li v-for="s in sequence">
|
||||||
<section data-markdown>
|
<span v-if="s.pattern=='bruteforce'"> {{s.token}} forza bruta</span>
|
||||||
# Inoltre Linux
|
<span v-else-if="s.pattern=='dictionary'">
|
||||||
|
{{s.token}} dizionario: {{s.dictionary_name}}
|
||||||
* Molto personalizzabile
|
{{s.reversed?'(invertita ' + s.matched_word + ')':''}}
|
||||||
* Leggero (funziona bene anche su pc datati e poco potenti)
|
{{s.l33t?'(con sostituzione ' + s.sub_display +')':''}}
|
||||||
</section>
|
{{s.uppercase_variations>1?'(con maiuscola)':''}}
|
||||||
<section data-markdown>
|
</span>
|
||||||
|
<span v-else-if="s.pattern=='sequence'"> {{s.token}} sequenze: ({{s.sequence_name}})</span>
|
||||||
# Distribuzioni Linux
|
<span v-else-if="s.pattern=='spatial'"> {{s.token}} sequenze spaziali: ({{s.graph}})</span>
|
||||||
|
<span v-else-if="s.pattern=='repeat'"> {{s.token}} ripetizione: ({{s.base_token}})</span>
|
||||||
Una distribuzione Linux (gergalmente "distro") è un insieme di software che costituisce un sistema operativo realizzato a partire da un kernel Linux comune(cuore).
|
<span v-else-if="s.pattern=='date'"> {{s.token}} data {{s.day}}/{{s.month}}/{{s.year}}</span>
|
||||||
|
<span v-else-if="s.pattern=='regex'"> {{s.token}} pattern {{s.regex_name}}</span>
|
||||||
</section>
|
<span v-else> {{s}}</span>
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
<script src='js/moment.js'></script>
|
||||||
|
<script src='js/vue.min.js'></script>
|
||||||
# Scelta della distribuzione
|
<script src='js/zxcvbn.js'></script>
|
||||||
|
<script src='js/password.js'></script>
|
||||||
Useremo Xubuntu LTS (long time support) dura 5 anni (https://xubuntu.org/getxubuntu/ a 64bit)
|
</section>
|
||||||
|
</section>
|
||||||
Altre: Debian, Mint
|
<section>
|
||||||
|
<section
|
||||||
</section>
|
data-separator="^--$"
|
||||||
<section data-markdown>
|
data-markdown="slides/dati.md"></section>
|
||||||
|
</section>
|
||||||
### Xubuntu
|
<section>
|
||||||
|
<section
|
||||||
![](./img/xubuntu.png)
|
data-separator="^--$"
|
||||||
|
data-markdown="slides/navigare.md"></section>
|
||||||
</section>
|
</section>
|
||||||
<section data-markdown>
|
<section>
|
||||||
### Debian
|
<section
|
||||||
|
data-separator="^--$"
|
||||||
![](./img/debiangnome.png)
|
data-markdown="slides/metadata.md"></section>
|
||||||
|
</section>
|
||||||
</section>
|
<section>
|
||||||
<section data-markdown>
|
<section
|
||||||
### Mint
|
data-separator="^--$"
|
||||||
|
data-markdown="slides/smartphone.md"></section>
|
||||||
![](./img/cinnamon2.png)
|
</section>
|
||||||
|
<section>
|
||||||
</section>
|
<section
|
||||||
</section>
|
data-separator="^--$"
|
||||||
|
data-markdown="slides/comunicare.md"></section>
|
||||||
<section data-markdown>
|
</section>
|
||||||
|
<section>
|
||||||
### Perchè usiamo questa distribuzione?
|
<section
|
||||||
|
data-separator="^--$"
|
||||||
* performante anche su vecchi pc
|
data-markdown="slides/anonimato.md"></section>
|
||||||
* ambiente grafico abbastanza leggero e funzionale
|
</section>
|
||||||
* anche per utenti alle prime armi perchè molto simile all'interfaccia a cui si è abituati.
|
<section>
|
||||||
|
<section
|
||||||
|
data-separator="^--$"
|
||||||
</section>
|
data-markdown="slides/strumenti-radicali.md"></section>
|
||||||
<section>
|
</section>
|
||||||
<section data-markdown>
|
|
||||||
|
</div>
|
||||||
## Prima di iniziare l'installazione
|
|
||||||
|
</div>
|
||||||
Creazione CD o chiavetta USB con Xubuntu
|
|
||||||
![](./img/usb-cd.jpg)
|
<script src="lib/js/head.min.js"></script>
|
||||||
|
<script src="js/reveal.js"></script>
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
<script>
|
||||||
## Download Immagine e verifica MD5
|
// More info about config & dependencies:
|
||||||
|
// - https://github.com/hakimel/reveal.js#configuration
|
||||||
(Approfondimento)
|
// - https://github.com/hakimel/reveal.js#dependencies
|
||||||
</section>
|
Reveal.initialize({
|
||||||
</section>
|
width: 1300,
|
||||||
<section>
|
height: 600,
|
||||||
<section data-markdown>
|
minScale: 0.1,
|
||||||
|
history: true,
|
||||||
# Modifiche al BIOS
|
progress: true,
|
||||||
|
controls: true,
|
||||||
* Ordine di Boot (usb, cdrom)
|
maxScale: 3,
|
||||||
* Salva e riavvia
|
center: false,
|
||||||
</section>
|
defaultTiming: 120,
|
||||||
<section data-markdown>
|
slideNumber: 'c/t',
|
||||||
## Boot
|
dependencies: [
|
||||||
![](./img/bios-boot.jpg)
|
{ src: 'plugin/markdown/marked.js' },
|
||||||
</section>
|
{ src: 'plugin/markdown/markdown.js' },
|
||||||
<section data-markdown>
|
{ src: 'plugin/notes/notes.js', async: true },
|
||||||
## save and exit
|
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
|
||||||
![](./img/bios-save.png)
|
]
|
||||||
</section>
|
});
|
||||||
<section data-markdown>
|
</script>
|
||||||
# UEFI
|
</body>
|
||||||
|
|
||||||
(Approfondimento)
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
## Fasi dell'installazione
|
|
||||||
|
|
||||||
### Passaggi semplici:
|
|
||||||
Lingua, tipo di tastiera, timezone
|
|
||||||
|
|
||||||
### Passaggi importanti:
|
|
||||||
Cifratura disco e partizionamento, utente e password
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Inizio
|
|
||||||
![](./screenshots/00_start.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Preparazione
|
|
||||||
![](./screenshots/01_update_3parti.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Tastiera
|
|
||||||
![](./screenshots/06_tastiera.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Timezone
|
|
||||||
![](./screenshots/07_timezone.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Cifratura disco
|
|
||||||
|
|
||||||
cosa è
|
|
||||||
|
|
||||||
a cosa serve
|
|
||||||
<!--
|
|
||||||
quando funziona? quando è spento
|
|
||||||
quando non funziona? quando è acceso
|
|
||||||
se si lascia il computer incostudito spegnerlo
|
|
||||||
se è per poco tempo mettere lo screensaver con password)
|
|
||||||
-->
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Cifratura
|
|
||||||
![](./screenshots/02_scegliere_cifratura.jpg)
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Passphrase
|
|
||||||
|
|
||||||
cos'è una passphrase buona?
|
|
||||||
|
|
||||||
a cosa serve questa passphrase?
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
## Passphrase
|
|
||||||
|
|
||||||
![](./img/passwd.png)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Chiave di sicurezza
|
|
||||||
![](./screenshots/03_passphrase_discreta.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Chiave di sicurezza
|
|
||||||
![](./screenshots/04_passphrase_buona.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Partizionamento
|
|
||||||
![](./screenshots/05_partizionamento.jpg)
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Utente e password
|
|
||||||
|
|
||||||
* perchè si crea l'utente?
|
|
||||||
* cos'è una password buona?
|
|
||||||
* a cosa serve questa password?
|
|
||||||
|
|
||||||
** non usare le stesse password **
|
|
||||||
|
|
||||||
*(se il pc è acceso e lasciato incustodito...)*
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Utente e Password
|
|
||||||
![](./screenshots/08_user_pwfragile.jpg)
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Blocco schermo
|
|
||||||
|
|
||||||
## ScreenSaver
|
|
||||||
|
|
||||||
Ctrl+L
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Fine installazione
|
|
||||||
# Primo avvio
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Completamento
|
|
||||||
![](./screenshots/09_waiting.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Fine
|
|
||||||
![](./screenshots/10_end.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Passphrase
|
|
||||||
![](./screenshots/11_ask_passphrase.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Login
|
|
||||||
![](./screenshots/12_login.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Menu
|
|
||||||
![](./screenshots/13_menu.jpg)
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# PASSWORD
|
|
||||||
|
|
||||||
#### Se le password sono:
|
|
||||||
|
|
||||||
* lunghissime
|
|
||||||
|
|
||||||
* complicate e poco mnemoniche
|
|
||||||
|
|
||||||
* sempre diverse
|
|
||||||
|
|
||||||
Come facciamo a ricordarci le password? Se le scordo?
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Password manager
|
|
||||||
|
|
||||||
## Keepassx
|
|
||||||
|
|
||||||
Mi permette di salvare le credenziali (user/password) e un po' di informazioni correlate
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Master password
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Keepass
|
|
||||||
|
|
||||||
* creare più db (con differente master password)
|
|
||||||
* creare gruppi per migliorare la ricerca
|
|
||||||
* aggiungere credenziali
|
|
||||||
* cercare tra le informazioni
|
|
||||||
* riaprire i db salvati
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Keypass
|
|
||||||
![](./screenshots/13_menu_keypassx.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Keypass
|
|
||||||
![](./screenshots/14_keypassx.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Crea Db
|
|
||||||
![](./screenshots/15_nuovodb.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Scegli password
|
|
||||||
![](./screenshots/15_setpw.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Aggiungi credenziali
|
|
||||||
![](./screenshots/16_addcredenziali.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Aggiungi credenziali
|
|
||||||
![](./screenshots/16_addcredenziali2.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Lista credenziali
|
|
||||||
![](./screenshots/19_2credenziali.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Salva Db
|
|
||||||
![](./screenshots/20_savedb.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Cerca
|
|
||||||
![](./screenshots/21_search_francia.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Apri
|
|
||||||
![](./screenshots/22_reopen.jpg)
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
## Cifratura dispositivi USB
|
|
||||||
|
|
||||||
Perchè crittare una memoria USB?
|
|
||||||
|
|
||||||
Alcune ragioni come quelle sul sistema operativo
|
|
||||||
Probabilmente contiene foto, documenti o materiale da passare ad un'altra persona
|
|
||||||
|
|
||||||
|
|
||||||
Facile da perdere
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
### gnome-disk-utility
|
|
||||||
|
|
||||||
**E' molto semplice**
|
|
||||||
|
|
||||||
1. Installa gnome-disk-utility
|
|
||||||
|
|
||||||
2. Lo trovi in Tutto -> Dischi
|
|
||||||
|
|
||||||
3. Inserisci la chiavetta, comparirà nella lista a sinistra
|
|
||||||
|
|
||||||
4. Clicchi sulla chiavetta (accertarsi che sia quella)
|
|
||||||
|
|
||||||
5. Scegliere luks + ext4
|
|
||||||
|
|
||||||
Una volta creata la chiavetta crittata fare caso al lucchetto chiuso nell'icona
|
|
||||||
|
|
||||||
Una volta decrittata fare caso al lucchetto aperto nell'icona
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Menu
|
|
||||||
![](./screenshots/23_usbdisk_menu_tutto.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Applicazione
|
|
||||||
![](./screenshots/24_usbdisk_menu_search_dischi.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Elenco dischi
|
|
||||||
![](./screenshots/25_usbdisk_diskutility.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Scelgo di cifrare
|
|
||||||
![](./screenshots/26_usbdisk_scelgo_crittare.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Scelta della chiave
|
|
||||||
![](./screenshots/27_usbdisk_chiaverobusta.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Inserimento chiave
|
|
||||||
![](./screenshots/28_usbdisk_creata_chiedepw.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Lucchetto aperto
|
|
||||||
![](./screenshots/29_usbdisk_decrittata.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
### CANCELLAZIONE SICURA
|
|
||||||
|
|
||||||
Normalmente quando si cancella un file, il file finisce nel cestino.
|
|
||||||
|
|
||||||
Quando si svuota il cestino i file spariscono dal computer ma in realtà sono fisicamente
|
|
||||||
ancora leggibili dal disco fisso con software fatti apposta per recuperare i dati.
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
### Cancellazione Sicura
|
|
||||||
|
|
||||||
Esistono dei software fatti apposta per eliminare i dati che al posto di cancellarli ci
|
|
||||||
scrivono sopra più volte e solo alla fine eliminano il file.
|
|
||||||
|
|
||||||
E' una operazione costosa per il disco e anche in termini di tempo. Più il file è grosso
|
|
||||||
più tempo ci vuole.
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Wipe
|
|
||||||
|
|
||||||
programmi: wipe -f -c -q -r %F
|
|
||||||
|
|
||||||
-f forza la cancellazione
|
|
||||||
|
|
||||||
-c chiede il permesso se ne ha bisogno
|
|
||||||
|
|
||||||
-q non emette output
|
|
||||||
|
|
||||||
-r va in ricorsione se è una directory
|
|
||||||
|
|
||||||
%F passa tutta i files e le directory selezionate
|
|
||||||
|
|
||||||
come si usano: https://askubuntu.com/questions/57572/how-to-delete-files-in-secure-manner
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
### Modalità d'uso
|
|
||||||
|
|
||||||
- installo wipe
|
|
||||||
- apro la cartella home(casa) che trovo sul desktop
|
|
||||||
- vado in alto nel menù Modifica -> Imposta Azioni Personalizzate
|
|
||||||
- premo sul + per aggiungere un azione
|
|
||||||
- imposto l'azione
|
|
||||||
- salvo ed esco
|
|
||||||
- selezione il/i file(s) e clicco con il destro
|
|
||||||
- ora nel menù esce "Cancellazione Sicura"
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Imposta azione personalizzata
|
|
||||||
![](./screenshots/30_wipe_azionepers.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Aggiungo azione
|
|
||||||
![](./screenshots/31_wipe_aggiungoazione.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Aggiungo azione
|
|
||||||
![](./screenshots/32_wipe_settandoazione1.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Quali file
|
|
||||||
![](./screenshots/33_wipe_settandoazione2.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Tasto destro
|
|
||||||
![](./screenshots/34_wipe_file_dir.jpg)
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# METADATI
|
|
||||||
|
|
||||||
Cosa sono?
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
Che informazioni si portano con se? (video, immagini, documenti)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
## Immagine
|
|
||||||
![](./screenshots/35_metadata_brutti.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Pdf
|
|
||||||
![](./screenshots/36_metadata_brutti2pdf.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Documento testo
|
|
||||||
![](./screenshots/37_metadata_brutti3doc.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# mat
|
|
||||||
|
|
||||||
* installare mat
|
|
||||||
* creare una azione personalizzata (vedi sopra)
|
|
||||||
* mat %F
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Imposta azione personalizzata
|
|
||||||
![](./screenshots/38_metadata_azionepers.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Aggiungo azione
|
|
||||||
![](./screenshots/39_metadata_aggiungoazione.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Dettagli azione
|
|
||||||
![](./screenshots/40_metadata_settandoazione1.jpg)
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
## Quali file
|
|
||||||
![](./screenshots/42_metadata_settandoazione2.jpg)
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
# Per smartphone
|
|
||||||
|
|
||||||
[obscurecam](https://play.google.com/store/apps/details?id=org.witness.sscphase1&hl=it)
|
|
||||||
|
|
||||||
camv (link)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Navigazione in Internet
|
|
||||||
|
|
||||||
Autodifesa digitale parte 2
|
|
||||||
|
|
||||||
Oggi alle 16:00
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
# grazie
|
|
||||||
</section>
|
|
||||||
<!--
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
NAVIGAZIONE DI TUTTI I GIORNI
|
|
||||||
|
|
||||||
(NON HO SLIDE)
|
|
||||||
|
|
||||||
- https(menarla, perchè usano password wifi deboli..
|
|
||||||
mostrare che può essere vettore di attacco?)
|
|
||||||
- disconnect, ublock per diminuire la profilazione(att.ne a volte,
|
|
||||||
alcuni siti non funzionano)
|
|
||||||
- noscript
|
|
||||||
- cookie?
|
|
||||||
- salvare le password nel browser?
|
|
||||||
- navigazione incognito(disambiguare) navigazione anonima intallare tor browser prossimo talk
|
|
||||||
|
|
||||||
</section>
|
|
||||||
-->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script src="lib/js/head.min.js"></script>
|
|
||||||
<script src="js/reveal.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// More info about config & dependencies:
|
|
||||||
// - https://github.com/hakimel/reveal.js#configuration
|
|
||||||
// - https://github.com/hakimel/reveal.js#dependencies
|
|
||||||
Reveal.initialize({
|
|
||||||
dependencies: [
|
|
||||||
{ src: 'plugin/markdown/marked.js' },
|
|
||||||
{ src: 'plugin/markdown/markdown.js' },
|
|
||||||
{ src: 'plugin/notes/notes.js', async: true },
|
|
||||||
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
|
|
||||||
]
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
|
1
js/moment.js
Normal file
22
js/password.js
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
moment.locale('it');
|
||||||
|
var app = new Vue({
|
||||||
|
el: '#passwordTest',
|
||||||
|
data: {
|
||||||
|
password: '',
|
||||||
|
estimationScore: 0,
|
||||||
|
score: ['inutile', 'pessima', 'brutta', 'così così', 'buona'],
|
||||||
|
scoreColor: 'red',
|
||||||
|
slowCrackTime: '',
|
||||||
|
fastCrackTime: '',
|
||||||
|
sequence: [],
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
checkStrength (e) {
|
||||||
|
var estimation = zxcvbn(this.password, ['diocane', 'dioporco', 'porcodio', 'madonnacane'])
|
||||||
|
this.estimationScore = estimation.score;
|
||||||
|
this.slowCrackTime = moment.duration(estimation.crack_times_seconds.offline_slow_hashing_1e4_per_second, 'seconds').humanize();
|
||||||
|
this.fastCrackTime = moment.duration(estimation.crack_times_seconds.offline_fast_hashing_1e10_per_second, 'seconds').humanize();
|
||||||
|
this.sequence = estimation.sequence;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
277
js/reveal.js
|
@ -1,6 +1,6 @@
|
||||||
/*!
|
/*!
|
||||||
* reveal.js
|
* reveal.js
|
||||||
* http://lab.hakim.se/reveal-js
|
* http://revealjs.com
|
||||||
* MIT licensed
|
* MIT licensed
|
||||||
*
|
*
|
||||||
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
* Copyright (C) 2017 Hakim El Hattab, http://hakim.se
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
var Reveal;
|
var Reveal;
|
||||||
|
|
||||||
// The reveal.js version
|
// The reveal.js version
|
||||||
var VERSION = '3.5.0';
|
var VERSION = '3.6.0';
|
||||||
|
|
||||||
var SLIDES_SELECTOR = '.slides section',
|
var SLIDES_SELECTOR = '.slides section',
|
||||||
HORIZONTAL_SLIDES_SELECTOR = '.slides>section',
|
HORIZONTAL_SLIDES_SELECTOR = '.slides>section',
|
||||||
|
@ -49,9 +49,20 @@
|
||||||
minScale: 0.2,
|
minScale: 0.2,
|
||||||
maxScale: 2.0,
|
maxScale: 2.0,
|
||||||
|
|
||||||
// Display controls in the bottom right corner
|
// Display presentation control arrows
|
||||||
controls: true,
|
controls: true,
|
||||||
|
|
||||||
|
// Help the user learn the controls by providing hints, for example by
|
||||||
|
// bouncing the down arrow when they first encounter a vertical slide
|
||||||
|
controlsTutorial: true,
|
||||||
|
|
||||||
|
// Determines where controls appear, "edges" or "bottom-right"
|
||||||
|
controlsLayout: 'bottom-right',
|
||||||
|
|
||||||
|
// Visibility rule for backwards navigation arrows; "faded", "hidden"
|
||||||
|
// or "visible"
|
||||||
|
controlsBackArrows: 'faded',
|
||||||
|
|
||||||
// Display a presentation progress bar
|
// Display a presentation progress bar
|
||||||
progress: true,
|
progress: true,
|
||||||
|
|
||||||
|
@ -106,14 +117,16 @@
|
||||||
showNotes: false,
|
showNotes: false,
|
||||||
|
|
||||||
// Global override for autolaying embedded media (video/audio/iframe)
|
// Global override for autolaying embedded media (video/audio/iframe)
|
||||||
// - null: Media will only autoplay if data-autoplay is present
|
// - null: Media will only autoplay if data-autoplay is present
|
||||||
// - true: All media will autoplay, regardless of individual setting
|
// - true: All media will autoplay, regardless of individual setting
|
||||||
// - false: No media will autoplay, regardless of individual setting
|
// - false: No media will autoplay, regardless of individual setting
|
||||||
autoPlayMedia: null,
|
autoPlayMedia: null,
|
||||||
|
|
||||||
// Number of milliseconds between automatically proceeding to the
|
// Controls automatic progression to the next slide
|
||||||
// next slide, disabled when set to 0, this value can be overwritten
|
// - 0: Auto-sliding only happens if the data-autoslide HTML attribute
|
||||||
// by using a data-autoslide attribute on your slides
|
// is present on the current slide or fragment
|
||||||
|
// - 1+: All slides will progress automatically at the given interval
|
||||||
|
// - false: No auto-sliding, even if data-autoslide is present
|
||||||
autoSlide: 0,
|
autoSlide: 0,
|
||||||
|
|
||||||
// Stop auto-sliding after user input
|
// Stop auto-sliding after user input
|
||||||
|
@ -132,6 +145,8 @@
|
||||||
hideAddressBar: true,
|
hideAddressBar: true,
|
||||||
|
|
||||||
// Opens links in an iframe preview overlay
|
// Opens links in an iframe preview overlay
|
||||||
|
// Add `data-preview-link` and `data-preview-link="false"` to customise each link
|
||||||
|
// individually
|
||||||
previewLinks: false,
|
previewLinks: false,
|
||||||
|
|
||||||
// Exposes the reveal.js API through window.postMessage
|
// Exposes the reveal.js API through window.postMessage
|
||||||
|
@ -207,6 +222,10 @@
|
||||||
|
|
||||||
previousBackground,
|
previousBackground,
|
||||||
|
|
||||||
|
// Remember which directions that the user has navigated towards
|
||||||
|
hasNavigatedRight = false,
|
||||||
|
hasNavigatedDown = false,
|
||||||
|
|
||||||
// Slides may hold a data-state attribute which we pick up and apply
|
// Slides may hold a data-state attribute which we pick up and apply
|
||||||
// as a class to the body. This list contains the combined state of
|
// as a class to the body. This list contains the combined state of
|
||||||
// all current slides.
|
// all current slides.
|
||||||
|
@ -444,6 +463,8 @@
|
||||||
*/
|
*/
|
||||||
function start() {
|
function start() {
|
||||||
|
|
||||||
|
loaded = true;
|
||||||
|
|
||||||
// Make sure we've got all the DOM elements we need
|
// Make sure we've got all the DOM elements we need
|
||||||
setupDOM();
|
setupDOM();
|
||||||
|
|
||||||
|
@ -471,8 +492,6 @@
|
||||||
// Enable transitions now that we're loaded
|
// Enable transitions now that we're loaded
|
||||||
dom.slides.classList.remove( 'no-transition' );
|
dom.slides.classList.remove( 'no-transition' );
|
||||||
|
|
||||||
loaded = true;
|
|
||||||
|
|
||||||
dom.wrapper.classList.add( 'ready' );
|
dom.wrapper.classList.add( 'ready' );
|
||||||
|
|
||||||
dispatchEvent( 'ready', {
|
dispatchEvent( 'ready', {
|
||||||
|
@ -508,6 +527,20 @@
|
||||||
// Prevent transitions while we're loading
|
// Prevent transitions while we're loading
|
||||||
dom.slides.classList.add( 'no-transition' );
|
dom.slides.classList.add( 'no-transition' );
|
||||||
|
|
||||||
|
if( isMobileDevice ) {
|
||||||
|
dom.wrapper.classList.add( 'no-hover' );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dom.wrapper.classList.remove( 'no-hover' );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( /iphone/gi.test( UA ) ) {
|
||||||
|
dom.wrapper.classList.add( 'ua-iphone' );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dom.wrapper.classList.remove( 'ua-iphone' );
|
||||||
|
}
|
||||||
|
|
||||||
// Background element
|
// Background element
|
||||||
dom.background = createSingletonNode( dom.wrapper, 'div', 'backgrounds', null );
|
dom.background = createSingletonNode( dom.wrapper, 'div', 'backgrounds', null );
|
||||||
|
|
||||||
|
@ -516,11 +549,11 @@
|
||||||
dom.progressbar = dom.progress.querySelector( 'span' );
|
dom.progressbar = dom.progress.querySelector( 'span' );
|
||||||
|
|
||||||
// Arrow controls
|
// Arrow controls
|
||||||
createSingletonNode( dom.wrapper, 'aside', 'controls',
|
dom.controls = createSingletonNode( dom.wrapper, 'aside', 'controls',
|
||||||
'<button class="navigate-left" aria-label="previous slide"></button>' +
|
'<button class="navigate-left" aria-label="previous slide"><div class="controls-arrow"></div></button>' +
|
||||||
'<button class="navigate-right" aria-label="next slide"></button>' +
|
'<button class="navigate-right" aria-label="next slide"><div class="controls-arrow"></div></button>' +
|
||||||
'<button class="navigate-up" aria-label="above slide"></button>' +
|
'<button class="navigate-up" aria-label="above slide"><div class="controls-arrow"></div></button>' +
|
||||||
'<button class="navigate-down" aria-label="below slide"></button>' );
|
'<button class="navigate-down" aria-label="below slide"><div class="controls-arrow"></div></button>' );
|
||||||
|
|
||||||
// Slide number
|
// Slide number
|
||||||
dom.slideNumber = createSingletonNode( dom.wrapper, 'div', 'slide-number', '' );
|
dom.slideNumber = createSingletonNode( dom.wrapper, 'div', 'slide-number', '' );
|
||||||
|
@ -533,9 +566,6 @@
|
||||||
// Overlay graphic which is displayed during the paused mode
|
// Overlay graphic which is displayed during the paused mode
|
||||||
createSingletonNode( dom.wrapper, 'div', 'pause-overlay', null );
|
createSingletonNode( dom.wrapper, 'div', 'pause-overlay', null );
|
||||||
|
|
||||||
// Cache references to elements
|
|
||||||
dom.controls = document.querySelector( '.reveal .controls' );
|
|
||||||
|
|
||||||
dom.wrapper.setAttribute( 'role', 'application' );
|
dom.wrapper.setAttribute( 'role', 'application' );
|
||||||
|
|
||||||
// There can be multiple instances of controls throughout the page
|
// There can be multiple instances of controls throughout the page
|
||||||
|
@ -546,6 +576,10 @@
|
||||||
dom.controlsPrev = toArray( document.querySelectorAll( '.navigate-prev' ) );
|
dom.controlsPrev = toArray( document.querySelectorAll( '.navigate-prev' ) );
|
||||||
dom.controlsNext = toArray( document.querySelectorAll( '.navigate-next' ) );
|
dom.controlsNext = toArray( document.querySelectorAll( '.navigate-next' ) );
|
||||||
|
|
||||||
|
// The right and down arrows in the standard reveal.js controls
|
||||||
|
dom.controlsRightArrow = dom.controls.querySelector( '.navigate-right' );
|
||||||
|
dom.controlsDownArrow = dom.controls.querySelector( '.navigate-down' );
|
||||||
|
|
||||||
dom.statusDiv = createStatusDiv();
|
dom.statusDiv = createStatusDiv();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -789,7 +823,7 @@
|
||||||
|
|
||||||
// If no node was found, create it now
|
// If no node was found, create it now
|
||||||
var node = document.createElement( tagname );
|
var node = document.createElement( tagname );
|
||||||
node.classList.add( classname );
|
node.className = classname;
|
||||||
if( typeof innerHTML === 'string' ) {
|
if( typeof innerHTML === 'string' ) {
|
||||||
node.innerHTML = innerHTML;
|
node.innerHTML = innerHTML;
|
||||||
}
|
}
|
||||||
|
@ -982,14 +1016,22 @@
|
||||||
*/
|
*/
|
||||||
function configure( options ) {
|
function configure( options ) {
|
||||||
|
|
||||||
var numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;
|
var oldTransition = config.transition;
|
||||||
|
|
||||||
dom.wrapper.classList.remove( config.transition );
|
|
||||||
|
|
||||||
// New config options may be passed when this method
|
// New config options may be passed when this method
|
||||||
// is invoked through the API after initialization
|
// is invoked through the API after initialization
|
||||||
if( typeof options === 'object' ) extend( config, options );
|
if( typeof options === 'object' ) extend( config, options );
|
||||||
|
|
||||||
|
// Abort if reveal.js hasn't finished loading, config
|
||||||
|
// changes will be applied automatically once loading
|
||||||
|
// finishes
|
||||||
|
if( loaded === false ) return;
|
||||||
|
|
||||||
|
var numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;
|
||||||
|
|
||||||
|
// Remove the previously configured transition class
|
||||||
|
dom.wrapper.classList.remove( oldTransition );
|
||||||
|
|
||||||
// Force linear transition based on browser capabilities
|
// Force linear transition based on browser capabilities
|
||||||
if( features.transforms3d === false ) config.transition = 'linear';
|
if( features.transforms3d === false ) config.transition = 'linear';
|
||||||
|
|
||||||
|
@ -1001,6 +1043,9 @@
|
||||||
dom.controls.style.display = config.controls ? 'block' : 'none';
|
dom.controls.style.display = config.controls ? 'block' : 'none';
|
||||||
dom.progress.style.display = config.progress ? 'block' : 'none';
|
dom.progress.style.display = config.progress ? 'block' : 'none';
|
||||||
|
|
||||||
|
dom.controls.setAttribute( 'data-controls-layout', config.controlsLayout );
|
||||||
|
dom.controls.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );
|
||||||
|
|
||||||
if( config.shuffle ) {
|
if( config.shuffle ) {
|
||||||
shuffle();
|
shuffle();
|
||||||
}
|
}
|
||||||
|
@ -1025,12 +1070,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if( config.showNotes ) {
|
if( config.showNotes ) {
|
||||||
dom.speakerNotes.classList.add( 'visible' );
|
|
||||||
dom.speakerNotes.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );
|
dom.speakerNotes.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
dom.speakerNotes.classList.remove( 'visible' );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( config.mouseWheel ) {
|
if( config.mouseWheel ) {
|
||||||
document.addEventListener( 'DOMMouseScroll', onDocumentMouseScroll, false ); // FF
|
document.addEventListener( 'DOMMouseScroll', onDocumentMouseScroll, false ); // FF
|
||||||
|
@ -1235,6 +1276,8 @@
|
||||||
a[ i ] = b[ i ];
|
a[ i ] = b[ i ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return a;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1261,7 +1304,7 @@
|
||||||
if( value === 'null' ) return null;
|
if( value === 'null' ) return null;
|
||||||
else if( value === 'true' ) return true;
|
else if( value === 'true' ) return true;
|
||||||
else if( value === 'false' ) return false;
|
else if( value === 'false' ) return false;
|
||||||
else if( value.match( /^[\d\.]+$/ ) ) return parseFloat( value );
|
else if( value.match( /^-?[\d\.]+$/ ) ) return parseFloat( value );
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
|
@ -1791,7 +1834,7 @@
|
||||||
else {
|
else {
|
||||||
dom.slides.style.zoom = '';
|
dom.slides.style.zoom = '';
|
||||||
dom.slides.style.left = '50%';
|
dom.slides.style.left = '50%';
|
||||||
dom.slides.style.top = '50%';
|
dom.slides.style.top = '40%';
|
||||||
dom.slides.style.bottom = 'auto';
|
dom.slides.style.bottom = 'auto';
|
||||||
dom.slides.style.right = 'auto';
|
dom.slides.style.right = 'auto';
|
||||||
transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );
|
transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );
|
||||||
|
@ -2463,13 +2506,14 @@
|
||||||
updateSlideNumber();
|
updateSlideNumber();
|
||||||
updateSlidesVisibility();
|
updateSlidesVisibility();
|
||||||
updateBackground( true );
|
updateBackground( true );
|
||||||
|
updateNotesVisibility();
|
||||||
updateNotes();
|
updateNotes();
|
||||||
|
|
||||||
formatEmbeddedContent();
|
formatEmbeddedContent();
|
||||||
|
|
||||||
// Start or stop embedded content depending on global config
|
// Start or stop embedded content depending on global config
|
||||||
if( config.autoPlayMedia === false ) {
|
if( config.autoPlayMedia === false ) {
|
||||||
stopEmbeddedContent( currentSlide );
|
stopEmbeddedContent( currentSlide, { unloadIframes: false } );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
startEmbeddedContent( currentSlide );
|
startEmbeddedContent( currentSlide );
|
||||||
|
@ -2706,10 +2750,10 @@
|
||||||
|
|
||||||
// Show the horizontal slide if it's within the view distance
|
// Show the horizontal slide if it's within the view distance
|
||||||
if( distanceX < viewDistance ) {
|
if( distanceX < viewDistance ) {
|
||||||
showSlide( horizontalSlide );
|
loadSlide( horizontalSlide );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
hideSlide( horizontalSlide );
|
unloadSlide( horizontalSlide );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( verticalSlidesLength ) {
|
if( verticalSlidesLength ) {
|
||||||
|
@ -2722,16 +2766,32 @@
|
||||||
distanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );
|
distanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );
|
||||||
|
|
||||||
if( distanceX + distanceY < viewDistance ) {
|
if( distanceX + distanceY < viewDistance ) {
|
||||||
showSlide( verticalSlide );
|
loadSlide( verticalSlide );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
hideSlide( verticalSlide );
|
unloadSlide( verticalSlide );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Flag if there are ANY vertical slides, anywhere in the deck
|
||||||
|
if( dom.wrapper.querySelectorAll( '.slides>section>section' ).length ) {
|
||||||
|
dom.wrapper.classList.add( 'has-vertical-slides' );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dom.wrapper.classList.remove( 'has-vertical-slides' );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flag if there are ANY horizontal slides, anywhere in the deck
|
||||||
|
if( dom.wrapper.querySelectorAll( '.slides>section' ).length > 1 ) {
|
||||||
|
dom.wrapper.classList.add( 'has-horizontal-slides' );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dom.wrapper.classList.remove( 'has-horizontal-slides' );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2746,12 +2806,39 @@
|
||||||
|
|
||||||
if( config.showNotes && dom.speakerNotes && currentSlide && !isPrintingPDF() ) {
|
if( config.showNotes && dom.speakerNotes && currentSlide && !isPrintingPDF() ) {
|
||||||
|
|
||||||
dom.speakerNotes.innerHTML = getSlideNotes() || '';
|
dom.speakerNotes.innerHTML = getSlideNotes() || '<span class="notes-placeholder">No notes on this slide.</span>';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the visibility of the speaker notes sidebar that
|
||||||
|
* is used to share annotated slides. The notes sidebar is
|
||||||
|
* only visible if showNotes is true and there are notes on
|
||||||
|
* one or more slides in the deck.
|
||||||
|
*/
|
||||||
|
function updateNotesVisibility() {
|
||||||
|
|
||||||
|
if( config.showNotes && hasNotes() ) {
|
||||||
|
dom.wrapper.classList.add( 'show-notes' );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dom.wrapper.classList.remove( 'show-notes' );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if there are speaker notes for ANY slide in the
|
||||||
|
* presentation.
|
||||||
|
*/
|
||||||
|
function hasNotes() {
|
||||||
|
|
||||||
|
return dom.slides.querySelectorAll( '[data-notes], aside.notes' ).length > 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the progress bar to reflect the current slide.
|
* Updates the progress bar to reflect the current slide.
|
||||||
*/
|
*/
|
||||||
|
@ -2882,6 +2969,26 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( config.controlsTutorial ) {
|
||||||
|
|
||||||
|
// Highlight control arrows with an animation to ensure
|
||||||
|
// that the viewer knows how to navigate
|
||||||
|
if( !hasNavigatedDown && routes.down ) {
|
||||||
|
dom.controlsDownArrow.classList.add( 'highlight' );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dom.controlsDownArrow.classList.remove( 'highlight' );
|
||||||
|
|
||||||
|
if( !hasNavigatedRight && routes.right && indexv === 0 ) {
|
||||||
|
dom.controlsRightArrow.classList.add( 'highlight' );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dom.controlsRightArrow.classList.remove( 'highlight' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3061,14 +3168,9 @@
|
||||||
*
|
*
|
||||||
* @param {HTMLElement} slide Slide to show
|
* @param {HTMLElement} slide Slide to show
|
||||||
*/
|
*/
|
||||||
/**
|
function loadSlide( slide, options ) {
|
||||||
* Called when the given slide is within the configured view
|
|
||||||
* distance. Shows the slide element and loads any content
|
options = options || {};
|
||||||
* that is set to load lazily (data-src).
|
|
||||||
*
|
|
||||||
* @param {HTMLElement} slide Slide to show
|
|
||||||
*/
|
|
||||||
function showSlide( slide ) {
|
|
||||||
|
|
||||||
// Show the slide element
|
// Show the slide element
|
||||||
slide.style.display = config.display;
|
slide.style.display = config.display;
|
||||||
|
@ -3076,6 +3178,7 @@
|
||||||
// Media elements with data-src attributes
|
// Media elements with data-src attributes
|
||||||
toArray( slide.querySelectorAll( 'img[data-src], video[data-src], audio[data-src]' ) ).forEach( function( element ) {
|
toArray( slide.querySelectorAll( 'img[data-src], video[data-src], audio[data-src]' ) ).forEach( function( element ) {
|
||||||
element.setAttribute( 'src', element.getAttribute( 'data-src' ) );
|
element.setAttribute( 'src', element.getAttribute( 'data-src' ) );
|
||||||
|
element.setAttribute( 'data-lazy-loaded', '' );
|
||||||
element.removeAttribute( 'data-src' );
|
element.removeAttribute( 'data-src' );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
@ -3086,6 +3189,7 @@
|
||||||
toArray( media.querySelectorAll( 'source[data-src]' ) ).forEach( function( source ) {
|
toArray( media.querySelectorAll( 'source[data-src]' ) ).forEach( function( source ) {
|
||||||
source.setAttribute( 'src', source.getAttribute( 'data-src' ) );
|
source.setAttribute( 'src', source.getAttribute( 'data-src' ) );
|
||||||
source.removeAttribute( 'data-src' );
|
source.removeAttribute( 'data-src' );
|
||||||
|
source.setAttribute( 'data-lazy-loaded', '' );
|
||||||
sources += 1;
|
sources += 1;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
@ -3146,7 +3250,7 @@
|
||||||
background.appendChild( video );
|
background.appendChild( video );
|
||||||
}
|
}
|
||||||
// Iframes
|
// Iframes
|
||||||
else if( backgroundIframe ) {
|
else if( backgroundIframe && options.excludeIframes !== true ) {
|
||||||
var iframe = document.createElement( 'iframe' );
|
var iframe = document.createElement( 'iframe' );
|
||||||
iframe.setAttribute( 'allowfullscreen', '' );
|
iframe.setAttribute( 'allowfullscreen', '' );
|
||||||
iframe.setAttribute( 'mozallowfullscreen', '' );
|
iframe.setAttribute( 'mozallowfullscreen', '' );
|
||||||
|
@ -3175,12 +3279,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the given slide is moved outside of the
|
* Unloads and hides the given slide. This is called when the
|
||||||
* configured view distance.
|
* slide is moved outside of the configured view distance.
|
||||||
*
|
*
|
||||||
* @param {HTMLElement} slide
|
* @param {HTMLElement} slide
|
||||||
*/
|
*/
|
||||||
function hideSlide( slide ) {
|
function unloadSlide( slide ) {
|
||||||
|
|
||||||
// Hide the slide element
|
// Hide the slide element
|
||||||
slide.style.display = 'none';
|
slide.style.display = 'none';
|
||||||
|
@ -3192,6 +3296,18 @@
|
||||||
background.style.display = 'none';
|
background.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset lazy-loaded media elements with src attributes
|
||||||
|
toArray( slide.querySelectorAll( 'video[data-lazy-loaded][src], audio[data-lazy-loaded][src]' ) ).forEach( function( element ) {
|
||||||
|
element.setAttribute( 'data-src', element.getAttribute( 'src' ) );
|
||||||
|
element.removeAttribute( 'src' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
// Reset lazy-loaded media elements with <source> children
|
||||||
|
toArray( slide.querySelectorAll( 'video[data-lazy-loaded] source[src], audio source[src]' ) ).forEach( function( source ) {
|
||||||
|
source.setAttribute( 'data-src', source.getAttribute( 'src' ) );
|
||||||
|
source.removeAttribute( 'src' );
|
||||||
|
} );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3267,6 +3383,13 @@
|
||||||
_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );
|
_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );
|
||||||
_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );
|
_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );
|
||||||
|
|
||||||
|
// Always show media controls on mobile devices
|
||||||
|
if( isMobileDevice ) {
|
||||||
|
toArray( dom.slides.querySelectorAll( 'video, audio' ) ).forEach( function( el ) {
|
||||||
|
el.controls = true;
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3411,7 +3534,12 @@
|
||||||
*
|
*
|
||||||
* @param {HTMLElement} element
|
* @param {HTMLElement} element
|
||||||
*/
|
*/
|
||||||
function stopEmbeddedContent( element ) {
|
function stopEmbeddedContent( element, options ) {
|
||||||
|
|
||||||
|
options = extend( {
|
||||||
|
// Defaults
|
||||||
|
unloadIframes: true
|
||||||
|
}, options || {} );
|
||||||
|
|
||||||
if( element && element.parentNode ) {
|
if( element && element.parentNode ) {
|
||||||
// HTML5 media elements
|
// HTML5 media elements
|
||||||
|
@ -3442,13 +3570,15 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Lazy loading iframes
|
if( options.unloadIframes === true ) {
|
||||||
toArray( element.querySelectorAll( 'iframe[data-src]' ) ).forEach( function( el ) {
|
// Unload lazy-loaded iframes
|
||||||
// Only removing the src doesn't actually unload the frame
|
toArray( element.querySelectorAll( 'iframe[data-src]' ) ).forEach( function( el ) {
|
||||||
// in all browsers (Firefox) so we set it to blank first
|
// Only removing the src doesn't actually unload the frame
|
||||||
el.setAttribute( 'src', 'about:blank' );
|
// in all browsers (Firefox) so we set it to blank first
|
||||||
el.removeAttribute( 'src' );
|
el.setAttribute( 'src', 'about:blank' );
|
||||||
} );
|
el.removeAttribute( 'src' );
|
||||||
|
} );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3736,25 +3866,12 @@
|
||||||
*/
|
*/
|
||||||
function getSlideBackground( x, y ) {
|
function getSlideBackground( x, y ) {
|
||||||
|
|
||||||
// When printing to PDF the slide backgrounds are nested
|
var slide = getSlide( x, y );
|
||||||
// inside of the slides
|
if( slide ) {
|
||||||
if( isPrintingPDF() ) {
|
return slide.slideBackgroundElement;
|
||||||
var slide = getSlide( x, y );
|
|
||||||
if( slide ) {
|
|
||||||
return slide.slideBackgroundElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var horizontalBackground = dom.wrapper.querySelectorAll( '.backgrounds>.slide-background' )[ x ];
|
return undefined;
|
||||||
var verticalBackgrounds = horizontalBackground && horizontalBackground.querySelectorAll( '.slide-background' );
|
|
||||||
|
|
||||||
if( verticalBackgrounds && verticalBackgrounds.length && typeof y === 'number' ) {
|
|
||||||
return verticalBackgrounds ? verticalBackgrounds[ y ] : undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
return horizontalBackground;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4016,7 +4133,7 @@
|
||||||
|
|
||||||
cancelAutoSlide();
|
cancelAutoSlide();
|
||||||
|
|
||||||
if( currentSlide ) {
|
if( currentSlide && config.autoSlide !== false ) {
|
||||||
|
|
||||||
var fragment = currentSlide.querySelector( '.current-fragment' );
|
var fragment = currentSlide.querySelector( '.current-fragment' );
|
||||||
|
|
||||||
|
@ -4134,6 +4251,8 @@
|
||||||
|
|
||||||
function navigateRight() {
|
function navigateRight() {
|
||||||
|
|
||||||
|
hasNavigatedRight = true;
|
||||||
|
|
||||||
// Reverse for RTL
|
// Reverse for RTL
|
||||||
if( config.rtl ) {
|
if( config.rtl ) {
|
||||||
if( ( isOverview() || previousFragment() === false ) && availableRoutes().right ) {
|
if( ( isOverview() || previousFragment() === false ) && availableRoutes().right ) {
|
||||||
|
@ -4158,6 +4277,8 @@
|
||||||
|
|
||||||
function navigateDown() {
|
function navigateDown() {
|
||||||
|
|
||||||
|
hasNavigatedDown = true;
|
||||||
|
|
||||||
// Prioritize revealing fragments
|
// Prioritize revealing fragments
|
||||||
if( ( isOverview() || nextFragment() === false ) && availableRoutes().down ) {
|
if( ( isOverview() || nextFragment() === false ) && availableRoutes().down ) {
|
||||||
slide( indexh, indexv + 1 );
|
slide( indexh, indexv + 1 );
|
||||||
|
@ -4204,6 +4325,9 @@
|
||||||
*/
|
*/
|
||||||
function navigateNext() {
|
function navigateNext() {
|
||||||
|
|
||||||
|
hasNavigatedRight = true;
|
||||||
|
hasNavigatedDown = true;
|
||||||
|
|
||||||
// Prioritize revealing fragments
|
// Prioritize revealing fragments
|
||||||
if( nextFragment() === false ) {
|
if( nextFragment() === false ) {
|
||||||
if( availableRoutes().down ) {
|
if( availableRoutes().down ) {
|
||||||
|
@ -4872,7 +4996,7 @@
|
||||||
this.context.beginPath();
|
this.context.beginPath();
|
||||||
this.context.arc( x, y, radius, 0, Math.PI * 2, false );
|
this.context.arc( x, y, radius, 0, Math.PI * 2, false );
|
||||||
this.context.lineWidth = this.thickness;
|
this.context.lineWidth = this.thickness;
|
||||||
this.context.strokeStyle = '#666';
|
this.context.strokeStyle = 'rgba( 255, 255, 255, 0.2 )';
|
||||||
this.context.stroke();
|
this.context.stroke();
|
||||||
|
|
||||||
if( this.playing ) {
|
if( this.playing ) {
|
||||||
|
@ -4988,6 +5112,11 @@
|
||||||
isOverview: isOverview,
|
isOverview: isOverview,
|
||||||
isPaused: isPaused,
|
isPaused: isPaused,
|
||||||
isAutoSliding: isAutoSliding,
|
isAutoSliding: isAutoSliding,
|
||||||
|
isSpeakerNotes: isSpeakerNotes,
|
||||||
|
|
||||||
|
// Slide preloading
|
||||||
|
loadSlide: loadSlide,
|
||||||
|
unloadSlide: unloadSlide,
|
||||||
|
|
||||||
// Adds or removes all internal event listeners (such as keyboard)
|
// Adds or removes all internal event listeners (such as keyboard)
|
||||||
addEventListeners: addEventListeners,
|
addEventListeners: addEventListeners,
|
||||||
|
|
6
js/vue.min.js
vendored
Normal file
31
js/zxcvbn.js
Normal file
|
@ -78,3 +78,14 @@ based on dark.css by Ivan Sagalaev
|
||||||
.hljs-strong {
|
.hljs-strong {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input, button {
|
||||||
|
font-size: 100%;
|
||||||
|
margin: 0px;
|
||||||
|
border: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
margin-left: -10px;
|
||||||
|
}
|
1758
npm-debug.log
5498
package-lock.json
generated
Normal file
31
package.json
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"name": "reveal.js",
|
"name": "reveal.js",
|
||||||
"version": "3.5.0",
|
"version": "3.6.0",
|
||||||
"description": "The HTML Presentation Framework",
|
"description": "The HTML Presentation Framework",
|
||||||
"homepage": "http://lab.hakim.se/reveal-js",
|
"homepage": "http://revealjs.com",
|
||||||
"subdomain": "revealjs",
|
"subdomain": "revealjs",
|
||||||
"main": "js/reveal.js",
|
"main": "js/reveal.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -23,22 +23,21 @@
|
||||||
"node": ">=4.0.0"
|
"node": ">=4.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"express": "~4.14.0",
|
"express": "^4.15.2",
|
||||||
"grunt": "~1.0.1",
|
"grunt": "^1.0.1",
|
||||||
"grunt-autoprefixer": "~3.0.3",
|
"grunt-autoprefixer": "^3.0.4",
|
||||||
"grunt-cli": "~1.2.0",
|
"grunt-cli": "^1.2.0",
|
||||||
"grunt-contrib-connect": "~0.11.2",
|
"grunt-contrib-connect": "^1.0.2",
|
||||||
"grunt-contrib-cssmin": "~0.14.0",
|
"grunt-contrib-cssmin": "^2.1.0",
|
||||||
"grunt-contrib-jshint": "~0.11.3",
|
"grunt-contrib-jshint": "^1.1.0",
|
||||||
"grunt-contrib-qunit": "~1.2.0",
|
"grunt-contrib-qunit": "~1.2.0",
|
||||||
"grunt-contrib-uglify": "~0.9.2",
|
"grunt-contrib-uglify": "^2.3.0",
|
||||||
"grunt-contrib-watch": "~1.0.0",
|
"grunt-contrib-watch": "^1.0.0",
|
||||||
"grunt-sass": "~1.2.0",
|
"grunt-sass": "^2.0.0",
|
||||||
"grunt-retire": "~0.3.10",
|
"grunt-retire": "^1.0.7",
|
||||||
"grunt-zip": "~0.17.1",
|
"grunt-zip": "~0.17.1",
|
||||||
"mustache": "~2.2.1",
|
"mustache": "^2.3.0",
|
||||||
"node-sass": "~3.13.0",
|
"socket.io": "^1.7.3"
|
||||||
"socket.io": "^1.4.8"
|
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,13 @@
|
||||||
</script>
|
</script>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<!-- Images -->
|
||||||
|
<section data-markdown>
|
||||||
|
<script type="text/template">
|
||||||
|
![Sample image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png)
|
||||||
|
</script>
|
||||||
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -29,3 +29,8 @@ Content 3.1
|
||||||
## External 3.2
|
## External 3.2
|
||||||
|
|
||||||
Content 3.2
|
Content 3.2
|
||||||
|
|
||||||
|
|
||||||
|
## External 3.3
|
||||||
|
|
||||||
|
![External Image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png)
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
}( this, function( marked ) {
|
}( this, function( marked ) {
|
||||||
|
|
||||||
var DEFAULT_SLIDE_SEPARATOR = '^\r?\n---\r?\n$',
|
var DEFAULT_SLIDE_SEPARATOR = '^\r?\n---\r?\n$',
|
||||||
DEFAULT_NOTES_SEPARATOR = 'note:',
|
DEFAULT_NOTES_SEPARATOR = 'notes?:',
|
||||||
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
|
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
|
||||||
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';
|
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// post once the page is loaded, so the client follows also on "open URL".
|
||||||
|
window.addEventListener( 'load', post );
|
||||||
|
|
||||||
// Monitor events that trigger a change in state
|
// Monitor events that trigger a change in state
|
||||||
Reveal.addEventListener( 'slidechanged', post );
|
Reveal.addEventListener( 'slidechanged', post );
|
||||||
Reveal.addEventListener( 'fragmentshown', post );
|
Reveal.addEventListener( 'fragmentshown', post );
|
||||||
|
@ -28,4 +31,4 @@
|
||||||
Reveal.addEventListener( 'paused', post );
|
Reveal.addEventListener( 'paused', post );
|
||||||
Reveal.addEventListener( 'resumed', post );
|
Reveal.addEventListener( 'resumed', post );
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "reveal-js-multiplex",
|
"name": "reveal-js-multiplex",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "reveal.js multiplex server",
|
"description": "reveal.js multiplex server",
|
||||||
"homepage": "http://lab.hakim.se/reveal-js",
|
"homepage": "http://revealjs.com",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index.js"
|
"start": "node index.js"
|
||||||
},
|
},
|
||||||
|
|
|
@ -675,7 +675,7 @@
|
||||||
document.body.setAttribute( 'data-speaker-layout', value );
|
document.body.setAttribute( 'data-speaker-layout', value );
|
||||||
|
|
||||||
// Persist locally
|
// Persist locally
|
||||||
if( window.localStorage ) {
|
if( supportsLocalStorage() ) {
|
||||||
window.localStorage.setItem( 'reveal-speaker-layout', value );
|
window.localStorage.setItem( 'reveal-speaker-layout', value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -687,7 +687,7 @@
|
||||||
*/
|
*/
|
||||||
function getLayout() {
|
function getLayout() {
|
||||||
|
|
||||||
if( window.localStorage ) {
|
if( supportsLocalStorage() ) {
|
||||||
var layout = window.localStorage.getItem( 'reveal-speaker-layout' );
|
var layout = window.localStorage.getItem( 'reveal-speaker-layout' );
|
||||||
if( layout ) {
|
if( layout ) {
|
||||||
return layout;
|
return layout;
|
||||||
|
@ -701,6 +701,19 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function supportsLocalStorage() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
localStorage.setItem('test', 'test');
|
||||||
|
localStorage.removeItem('test');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch( e ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function zeroPadInteger( num ) {
|
function zeroPadInteger( num ) {
|
||||||
|
|
||||||
var str = '00' + parseInt( num );
|
var str = '00' + parseInt( num );
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* phantomjs script for printing presentations to PDF.
|
* phantomjs script for printing presentations to PDF.
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf
|
* phantomjs print-pdf.js "http://revealjs.com?print-pdf" reveal-demo.pdf
|
||||||
*
|
*
|
||||||
* @author Manuel Bieh (https://github.com/manuelbieh)
|
* @author Manuel Bieh (https://github.com/manuelbieh)
|
||||||
* @author Hakim El Hattab (https://github.com/hakimel)
|
* @author Hakim El Hattab (https://github.com/hakimel)
|
||||||
|
|
|
@ -21,7 +21,7 @@ function Hilitor(id, tag)
|
||||||
|
|
||||||
var targetNode = document.getElementById(id) || document.body;
|
var targetNode = document.getElementById(id) || document.body;
|
||||||
var hiliteTag = tag || "EM";
|
var hiliteTag = tag || "EM";
|
||||||
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM|SPAN)$");
|
var skipTags = new RegExp("^(?:" + hiliteTag + "|SCRIPT|FORM)$");
|
||||||
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
|
var colors = ["#ff6", "#a0ffff", "#9f9", "#f99", "#f6f"];
|
||||||
var wordColor = [];
|
var wordColor = [];
|
||||||
var colorIdx = 0;
|
var colorIdx = 0;
|
||||||
|
@ -53,11 +53,11 @@ function Hilitor(id, tag)
|
||||||
if(node.nodeType == 3) { // NODE_TEXT
|
if(node.nodeType == 3) { // NODE_TEXT
|
||||||
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
|
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
|
||||||
//find the slide's section element and save it in our list of matching slides
|
//find the slide's section element and save it in our list of matching slides
|
||||||
var secnode = node.parentNode;
|
var secnode = node;
|
||||||
while (secnode.nodeName != 'SECTION') {
|
while (secnode != null && secnode.nodeName != 'SECTION') {
|
||||||
secnode = secnode.parentNode;
|
secnode = secnode.parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
var slideIndex = Reveal.getIndices(secnode);
|
var slideIndex = Reveal.getIndices(secnode);
|
||||||
var slidelen = matchingSlides.length;
|
var slidelen = matchingSlides.length;
|
||||||
var alreadyAdded = false;
|
var alreadyAdded = false;
|
||||||
|
@ -69,7 +69,7 @@ function Hilitor(id, tag)
|
||||||
if (! alreadyAdded) {
|
if (! alreadyAdded) {
|
||||||
matchingSlides.push(slideIndex);
|
matchingSlides.push(slideIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!wordColor[regs[0].toLowerCase()]) {
|
if(!wordColor[regs[0].toLowerCase()]) {
|
||||||
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
|
wordColor[regs[0].toLowerCase()] = colors[colorIdx++ % colors.length];
|
||||||
}
|
}
|
||||||
|
@ -110,20 +110,26 @@ function Hilitor(id, tag)
|
||||||
|
|
||||||
function openSearch() {
|
function openSearch() {
|
||||||
//ensure the search term input dialog is visible and has focus:
|
//ensure the search term input dialog is visible and has focus:
|
||||||
|
var inputboxdiv = document.getElementById("searchinputdiv");
|
||||||
var inputbox = document.getElementById("searchinput");
|
var inputbox = document.getElementById("searchinput");
|
||||||
inputbox.style.display = "inline";
|
inputboxdiv.style.display = "inline";
|
||||||
inputbox.focus();
|
inputbox.focus();
|
||||||
inputbox.select();
|
inputbox.select();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function closeSearch() {
|
||||||
|
var inputboxdiv = document.getElementById("searchinputdiv");
|
||||||
|
inputboxdiv.style.display = "none";
|
||||||
|
if(myHilitor) myHilitor.remove();
|
||||||
|
}
|
||||||
|
|
||||||
function toggleSearch() {
|
function toggleSearch() {
|
||||||
var inputbox = document.getElementById("searchinput");
|
var inputboxdiv = document.getElementById("searchinputdiv");
|
||||||
if (inputbox.style.display !== "inline") {
|
if (inputboxdiv.style.display !== "inline") {
|
||||||
openSearch();
|
openSearch();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
inputbox.style.display = "none";
|
closeSearch();
|
||||||
myHilitor.remove();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,19 +138,27 @@ function Hilitor(id, tag)
|
||||||
if (searchboxDirty) {
|
if (searchboxDirty) {
|
||||||
var searchstring = document.getElementById("searchinput").value;
|
var searchstring = document.getElementById("searchinput").value;
|
||||||
|
|
||||||
//find the keyword amongst the slides
|
if (searchstring === '') {
|
||||||
myHilitor = new Hilitor("slidecontent");
|
if(myHilitor) myHilitor.remove();
|
||||||
matchedSlides = myHilitor.apply(searchstring);
|
matchedSlides = null;
|
||||||
currentMatchedIndex = 0;
|
}
|
||||||
|
else {
|
||||||
|
//find the keyword amongst the slides
|
||||||
|
myHilitor = new Hilitor("slidecontent");
|
||||||
|
matchedSlides = myHilitor.apply(searchstring);
|
||||||
|
currentMatchedIndex = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//navigate to the next slide that has the keyword, wrapping to the first if necessary
|
if (matchedSlides) {
|
||||||
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
|
//navigate to the next slide that has the keyword, wrapping to the first if necessary
|
||||||
currentMatchedIndex = 0;
|
if (matchedSlides.length && (matchedSlides.length <= currentMatchedIndex)) {
|
||||||
}
|
currentMatchedIndex = 0;
|
||||||
if (matchedSlides.length > currentMatchedIndex) {
|
}
|
||||||
Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
|
if (matchedSlides.length > currentMatchedIndex) {
|
||||||
currentMatchedIndex++;
|
Reveal.slide(matchedSlides[currentMatchedIndex].h, matchedSlides[currentMatchedIndex].v);
|
||||||
|
currentMatchedIndex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +171,8 @@ function Hilitor(id, tag)
|
||||||
searchElement.classList.add( 'searchdiv' );
|
searchElement.classList.add( 'searchdiv' );
|
||||||
searchElement.style.position = 'absolute';
|
searchElement.style.position = 'absolute';
|
||||||
searchElement.style.top = '10px';
|
searchElement.style.top = '10px';
|
||||||
searchElement.style.left = '10px';
|
searchElement.style.right = '10px';
|
||||||
|
searchElement.style.zIndex = 10;
|
||||||
//embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
|
//embedded base64 search icon Designed by Sketchdock - http://www.sketchdock.com/:
|
||||||
searchElement.innerHTML = '<span><input type="search" id="searchinput" class="searchinput" style="vertical-align: top;"/><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJiSURBVHjatFZNaxNBGH5md+Mmu92NVdKDRipSAyqCghgQD4L4cRe86UUtAQ+eFCxoa4/25EXBFi8eBE+eRPoDhB6KgiiixdAPCEkx2pjvTXadd9yNsflwuyUDD/O+u8PzzDPvzOwyx3EwyCZhwG3gAkp7MnpjgbopjsltcD4gjuXZZKeAR348MYLYTm3LzOs/y3j3JTfZxgXWXmTuwPHIc4VmoOmv5IrI53+AO2DdHLjkDWQ3GoEEVFXtXQOvkSnPWcyUceviLhwbDYv8/XIVj97kse7TodLvZXxYxrPUHkQ1ufXs3FEdybEIxucySOesoNvUgWU1cP3MkCBfTFdw9fGaAMVmRELq7LBw2Q3/FaAxxWIRpw+ZIr/7IouPqzUBiqmdHAv7EuhRAwf1er2Vy4x1jW3b2d5Jfvu5IPp7l2LYbcgCFFNb+FoJ7oBqEAqFMPNqFcmEgVMJDfMT+1tvN0pNjERlMS6QA5pFOKxiKVPFhakPeL3It+WGJUDxt2wFR+JhzI7v5ctkd8DXOZAkCYYxhO+lKm4+Xfqz/rIixBuNBl7eOYzkQQNzqX249mRl6zUgEcYkaJrGhUwBinVdh6IouPzwE6/DL5w4oLkH8y981aDf+uq6hlKpJESiUdNfDZi7/ehG9K6KfiA3pml0PLcsq+cSMTj2NL9ukc4UOmz7AZ3+crkC4mHujFvXNaMFB3bEr8xPS6p5O+jXxq4VZtaen7/PwzrntjcLUE0iHPS1Ud1cdiEJl/8WivZk0wXd7zWOMkeF8s0CcAmkNrC2nvXZDbbbN73ccYnZoH9bfgswAFzAe9/h3dbKAAAAAElFTkSuQmCC" id="searchbutton" class="searchicon" style="vertical-align: top; margin-top: -1px;"/></span>';
|
searchElement.innerHTML = '<span><input type="search" id="searchinput" class="searchinput" style="vertical-align: top;"/><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJiSURBVHjatFZNaxNBGH5md+Mmu92NVdKDRipSAyqCghgQD4L4cRe86UUtAQ+eFCxoa4/25EXBFi8eBE+eRPoDhB6KgiiixdAPCEkx2pjvTXadd9yNsflwuyUDD/O+u8PzzDPvzOwyx3EwyCZhwG3gAkp7MnpjgbopjsltcD4gjuXZZKeAR348MYLYTm3LzOs/y3j3JTfZxgXWXmTuwPHIc4VmoOmv5IrI53+AO2DdHLjkDWQ3GoEEVFXtXQOvkSnPWcyUceviLhwbDYv8/XIVj97kse7TodLvZXxYxrPUHkQ1ufXs3FEdybEIxucySOesoNvUgWU1cP3MkCBfTFdw9fGaAMVmRELq7LBw2Q3/FaAxxWIRpw+ZIr/7IouPqzUBiqmdHAv7EuhRAwf1er2Vy4x1jW3b2d5Jfvu5IPp7l2LYbcgCFFNb+FoJ7oBqEAqFMPNqFcmEgVMJDfMT+1tvN0pNjERlMS6QA5pFOKxiKVPFhakPeL3It+WGJUDxt2wFR+JhzI7v5ctkd8DXOZAkCYYxhO+lKm4+Xfqz/rIixBuNBl7eOYzkQQNzqX249mRl6zUgEcYkaJrGhUwBinVdh6IouPzwE6/DL5w4oLkH8y981aDf+uq6hlKpJESiUdNfDZi7/ehG9K6KfiA3pml0PLcsq+cSMTj2NL9ukc4UOmz7AZ3+crkC4mHujFvXNaMFB3bEr8xPS6p5O+jXxq4VZtaen7/PwzrntjcLUE0iHPS1Ud1cdiEJl/8WivZk0wXd7zWOMkeF8s0CcAmkNrC2nvXZDbbbN73ccYnZoH9bfgswAFzAe9/h3dbKAAAAAElFTkSuQmCC" id="searchbutton" class="searchicon" style="vertical-align: top; margin-top: -1px;"/></span>';
|
||||||
dom.wrapper.appendChild( searchElement );
|
dom.wrapper.appendChild( searchElement );
|
||||||
|
@ -179,18 +194,13 @@ function Hilitor(id, tag)
|
||||||
}
|
}
|
||||||
}, false );
|
}, false );
|
||||||
|
|
||||||
// Open the search when the 's' key is hit (yes, this conflicts with the notes plugin, disabling for now)
|
|
||||||
/*
|
|
||||||
document.addEventListener( 'keydown', function( event ) {
|
document.addEventListener( 'keydown', function( event ) {
|
||||||
// Disregard the event if the target is editable or a
|
if( event.key == "F" && (event.ctrlKey || event.metaKey) ) {//Control+Shift+f
|
||||||
// modifier is present
|
|
||||||
if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return;
|
|
||||||
|
|
||||||
if( event.keyCode === 83 ) {
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
openSearch();
|
toggleSearch();
|
||||||
}
|
}
|
||||||
}, false );
|
}, false );
|
||||||
*/
|
if( window.Reveal ) Reveal.registerKeyboardShortcut( 'Ctrl-Shift-F', 'Search' );
|
||||||
|
closeSearch();
|
||||||
return { open: openSearch };
|
return { open: openSearch };
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -1,40 +1,27 @@
|
||||||
// Custom reveal.js integration
|
// Custom reveal.js integration
|
||||||
(function(){
|
(function(){
|
||||||
var isEnabled = true;
|
var revealElement = document.querySelector( '.reveal' );
|
||||||
|
if( revealElement ) {
|
||||||
|
|
||||||
document.querySelector( '.reveal .slides' ).addEventListener( 'mousedown', function( event ) {
|
revealElement.addEventListener( 'mousedown', function( event ) {
|
||||||
var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : 'alt' ) + 'Key';
|
var defaultModifier = /Linux/.test( window.navigator.platform ) ? 'ctrl' : 'alt';
|
||||||
|
|
||||||
var zoomPadding = 20;
|
var modifier = ( Reveal.getConfig().zoomKey ? Reveal.getConfig().zoomKey : defaultModifier ) + 'Key';
|
||||||
var revealScale = Reveal.getScale();
|
var zoomLevel = ( Reveal.getConfig().zoomLevel ? Reveal.getConfig().zoomLevel : 2 );
|
||||||
|
|
||||||
if( event[ modifier ] && isEnabled ) {
|
if( event[ modifier ] && !Reveal.isOverview() ) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
var bounds;
|
zoom.to({
|
||||||
var originalDisplay = event.target.style.display;
|
x: event.clientX,
|
||||||
|
y: event.clientY,
|
||||||
// Get the bounding rect of the contents, not the containing box
|
scale: zoomLevel,
|
||||||
if( window.getComputedStyle( event.target ).display === 'block' ) {
|
pan: false
|
||||||
event.target.style.display = 'inline-block';
|
});
|
||||||
bounds = event.target.getBoundingClientRect();
|
|
||||||
event.target.style.display = originalDisplay;
|
|
||||||
} else {
|
|
||||||
bounds = event.target.getBoundingClientRect();
|
|
||||||
}
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
zoom.to({
|
}
|
||||||
x: ( bounds.left * revealScale ) - zoomPadding,
|
|
||||||
y: ( bounds.top * revealScale ) - zoomPadding,
|
|
||||||
width: ( bounds.width * revealScale ) + ( zoomPadding * 2 ),
|
|
||||||
height: ( bounds.height * revealScale ) + ( zoomPadding * 2 ),
|
|
||||||
pan: false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
|
|
||||||
Reveal.addEventListener( 'overviewshown', function() { isEnabled = false; } );
|
|
||||||
Reveal.addEventListener( 'overviewhidden', function() { isEnabled = true; } );
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -283,6 +270,3 @@ var zoom = (function(){
|
||||||
}
|
}
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
122
slides/anonimato.md
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
<!-- .slide: data-background="img/anon.jpg" -->
|
||||||
|
|
||||||
|
## anonimato
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## anonimato
|
||||||
|
|
||||||
|
Come la sicurezza, non è una proprietà, non si compra, non si installa, ci
|
||||||
|
devi mettere il cervello. stacce.
|
||||||
|
|
||||||
|
Ci sono strumenti, da usare in determinate occasioni, dipende dal vostro
|
||||||
|
modello di rischio.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## chi sono?
|
||||||
|
|
||||||
|
L'indirizzo ip è un numero composto da 4 cifre da 0 a 255 che indica il
|
||||||
|
dispositivo che ci collega ad internet in un momento X (anche il telefono
|
||||||
|
ne ha uno).
|
||||||
|
|
||||||
|
Gli operatori telefonici tengono dei registri delle assegnazioni di questi
|
||||||
|
indirizzi.
|
||||||
|
|
||||||
|
Quando interagisco con un sito (ad esempio invio la foto di un corteo),
|
||||||
|
quel sito e tutti quelli che sono tra me e il sito, sapranno l'indirizzo ip
|
||||||
|
del mittente, quindi se quella foto è problematica, verranno a bussarmi
|
||||||
|
sotto casa.
|
||||||
|
|
||||||
|
notes: pippa su ipv6
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Tor
|
||||||
|
|
||||||
|
Tor è lo "strumento" più famoso per ottenere l'anonimato in rete.
|
||||||
|
|
||||||
|
In sostanza un'altra persona si prende l'accollo e la responsabilità delle
|
||||||
|
tue attività, senza poter sapere chi sei e cosa vuoi (ma perchè lo fa?).
|
||||||
|
|
||||||
|
Un'eventuale ascoltatore (attaccante) vedrà che stai interagendo attraverso
|
||||||
|
la rete Tor, ma non cosa fai e con chi.
|
||||||
|
|
||||||
|
Numeri: utenti: più di 2milioni al giorno nodi: 7mila
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
<!-- .slide: data-background="img/tor.png" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Tor Browser
|
||||||
|
|
||||||
|
Tor Browser è un browser appositamente studiato per funzionare attraverso
|
||||||
|
la rete Tor in automatico e senza troppo sbattimento.
|
||||||
|
|
||||||
|
Si occupa anche di preservare l'anonimato in altri modi.
|
||||||
|
|
||||||
|
Su android ci sono Tor Browser e Orbot!
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Deanonimizzare
|
||||||
|
|
||||||
|
La tua identità non è correlata solamente ad un indirizzo ip.
|
||||||
|
|
||||||
|
Se postate un commento dal vostro account facebook con Tor Browser, mi
|
||||||
|
serve l'ip per capire chi ha scritto quel commento?
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Deanonimizzare
|
||||||
|
|
||||||
|
Ci sono mille altri modi per deanonimizzare, in sostanza si cerca di creare
|
||||||
|
un'impronta univoca vostra, attraverso varie tecniche:
|
||||||
|
|
||||||
|
- la risoluzione del monitor che state usando
|
||||||
|
- caratteristiche del browser (lingue supportate, font, sistema operativo,
|
||||||
|
plugin installati, impostazioni, velocità)
|
||||||
|
- attacchi basati su tempo/spazio particolari.
|
||||||
|
- comportamenti particolari ([biometria](https://www.typingdna.com/)
|
||||||
|
[comportamentale](https://www.keytrac.net/en/tryout))
|
||||||
|
- aneddoto hardvard
|
||||||
|
|
||||||
|
[Tor Browser](https://www.torproject.org/download/download-easy.html.en)
|
||||||
|
cerca di risolvere la maggior parte di questi attacchi.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## VPN
|
||||||
|
|
||||||
|
Le VPN sono un modo sicuro di collegare computer su internet.
|
||||||
|
|
||||||
|
Vengono utilizzate ad esempio per collegare uffici di una stessa azienda
|
||||||
|
senza che nessuno possa sbirciare il traffico (il collegamento è cifrato).
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## VPN
|
||||||
|
|
||||||
|
Ci sono VPN che vengono invece usate per offrire protezione agli utenti
|
||||||
|
facendoli accedere ad internet attraverso di loro
|
||||||
|
([riseup](https://riseup.net/en/vpn) [protonvpn](https://protonvpn.com/))
|
||||||
|
|
||||||
|
- proteggervi dal controllo da parte dei provider (ISP)
|
||||||
|
- ovviare alla censura di stato
|
||||||
|
- accedere a servizi vietati nel vostro paese
|
||||||
|
- bypassare il firewall del vostro ufficio
|
||||||
|
- rendere più sicuro il vostro traffico su reti Wi-Fi non protette
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Tails
|
||||||
|
|
||||||
|
[The amnesic incognito live system](https://tails.boum.org/index.it.html)
|
||||||
|
|
||||||
|
E' un sistema operativo live, vuole dire che non lo installi ma parte da
|
||||||
|
una pennetta USB:
|
||||||
|
|
||||||
|
- non lascia tracce delle tue scorribande perche' non salva niente.
|
||||||
|
- usa Tor per tutto.
|
51
slides/comunicare.md
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<!-- .slide: data-background="img/comunicazione.jpg" -->
|
||||||
|
|
||||||
|
## Comunicazione
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## uno a uno
|
||||||
|
|
||||||
|
- mail
|
||||||
|
- telefonata
|
||||||
|
- sms
|
||||||
|
- whatsapp
|
||||||
|
- telegram
|
||||||
|
- jabber
|
||||||
|
- cifrare lecomunicazioni
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## molti a molti (gruppi)
|
||||||
|
|
||||||
|
- whatsapp
|
||||||
|
- telegram
|
||||||
|
- facebook
|
||||||
|
- mailing list
|
||||||
|
- jabber
|
||||||
|
- irc
|
||||||
|
- mastodon
|
||||||
|
- cifrare le comunicazioni
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Ma quindi...
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## PGP (mail cifrate)
|
||||||
|
|
||||||
|
- criptografia forte
|
||||||
|
- funziona
|
||||||
|
- è un casino da usare
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Signal
|
||||||
|
|
||||||
|
- criptografia forte
|
||||||
|
- come qualsiasi app di messaggistica
|
||||||
|
- comunicazione real time
|
||||||
|
- autodistruzione dei messaggi
|
||||||
|
- si può impostare il pin (fatelo!)
|
||||||
|
|
76
slides/dati.md
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
<!-- .slide: data-background="img/hd.jpg" -->
|
||||||
|
|
||||||
|
### Sicurezza dei dati
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Sicurezza dei dati
|
||||||
|
|
||||||
|
Puoi perdere/rompere un dispositivo o possono sequestrarlo.
|
||||||
|
Prima o poi succede...
|
||||||
|
|
||||||
|
![think](img/think.jpg)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Come risolvo?
|
||||||
|
|
||||||
|
- con frequenti backup
|
||||||
|
- cifrando i dati
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Backup
|
||||||
|
|
||||||
|
- disco locale (ok, ma se nel nostro modello di rischio c'e' un probabile sequestro non funziona)
|
||||||
|
- remoto (ok, cifrato va bene dove vogliamo, anche su google/dropbox)
|
||||||
|
|
||||||
|
dei programmi che ci sentiamo di consigliare sono:
|
||||||
|
- per linux [Déjà Dup](https://wiki.gnome.org/Apps/DejaDup) che si basa su [duplicity](http://duplicity.nongnu.org/)
|
||||||
|
- per android consigliamo [adb](https://www.androidworld.it/2018/03/27/backup-android-543009/) agli smanettoni
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Cifratura disco
|
||||||
|
|
||||||
|
E' facile! Richiede solo l'inserimento di una passphrase all'avvio del computer o di un pin all'avvio del telefono.
|
||||||
|
|
||||||
|
Con una [buona passphrase](#/2/11)/pin il contenuto del disco sarà al sicuro per un po'.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Alcune precisazioni
|
||||||
|
|
||||||
|
I dati sono in chiaro a computer acceso,
|
||||||
|
quindi non lasciarlo incustodito (per poco tempo blocca lo schermo per qualsiasi modello di rischio),
|
||||||
|
un'alternativa e' fare un'altra partizione cifrata da aprire
|
||||||
|
solo quando lavori con quel materiale sensibile.
|
||||||
|
|
||||||
|
notes:
|
||||||
|
se suonano alla porta, spegni il computer o smonta la partizione cifrata prima di aprire.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Cancellazione sicura dei dati
|
||||||
|
|
||||||
|
Per ottimizzare, quando eliminiamo un file, il sistema operativo segna solo
|
||||||
|
come libero il posto che occupa, non ne sovrascrive il contenuto.
|
||||||
|
E' possibile recuperarne il contenuto.
|
||||||
|
|
||||||
|
Nel caso il disco sia cifrato il pericolo e' minore, anche nel caso
|
||||||
|
il disco sia un SSD.
|
||||||
|
|
||||||
|
Se passate la frontiera o vendete il vostro computer, consideratelo:
|
||||||
|
esistono vari programmi per eliminare in maniera sicura i file.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Compartimentazione
|
||||||
|
|
||||||
|
Ho bisogno di avere tutti i dati su ogni dispositivo?
|
||||||
|
|
||||||
|
- mi servono le mail sul telefono?
|
||||||
|
- ho bisogno delle chat sul computer?
|
||||||
|
|
||||||
|
Spesso la miglior tutela dei dati si ottiene non avendoli ;)
|
101
slides/intro.md
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
<!-- .slide: data-background="./img/copertina.png" -->
|
||||||
|
|
||||||
|
## Autodifesa<br/>digitale
|
||||||
|
|
||||||
|
|
||||||
|
[underscore_to hacklab](https://autistici.org/underscore)
|
||||||
|
<footer>
|
||||||
|
<small>
|
||||||
|
per presentazioni premi `s` e abilita i popup
|
||||||
|
premi **ESC** per una panoramica
|
||||||
|
premi **F11** per fullscreen (must)
|
||||||
|
per domande scrivici a **underscore [at] autistici.org**
|
||||||
|
</small>
|
||||||
|
</footer>
|
||||||
|
notes:
|
||||||
|
qui compariranno delle note...
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## INTRO
|
||||||
|
Queste slide intendono essere una panoramica concisa di autodifesa digitale.
|
||||||
|
|
||||||
|
Rappresentano un'insieme di conoscenze e buone pratiche tratte da varie fonti
|
||||||
|
ed esperienze.
|
||||||
|
|
||||||
|
Sono pensate per essere usufruibili anche da web quindi abbiamo scritto tanto.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Riservatezza, sicurezza, intimità digitali
|
||||||
|
|
||||||
|
- Non sono proprietà.
|
||||||
|
- Non si comprano, non è un programma che installi e bona.
|
||||||
|
- E' un processo, bisogna provare, sbagliare, imparare, **metterci attenzione**<!-- .element: class="fragment highlight-red" -->, stacce.
|
||||||
|
- E' un approccio mentale.
|
||||||
|
- In generale, stai delegando, cerca di farlo il meno possibile e fallo almeno in rapporti di fiducia.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Ma è sicuro?
|
||||||
|
- La sicurezza non è mai 100%, dobbiamo attuare una politica di riduzione del danno, non abbiamo altro.
|
||||||
|
- L'illusione della sicurezza è decisamente peggio della consapevolezza di essere vulnerabili.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
Inoltre comportamenti e strumenti da adottare in alcuni casi,
|
||||||
|
in altri non vanno bene.
|
||||||
|
|
||||||
|
![](./img/pasta-e-forchetta.jpg)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
![](./img/brodino.jpg)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Modello di rischio
|
||||||
|
Bisogna che tu capisca il tuo modello di rischio
|
||||||
|
rispondendo alle seguenti domande:
|
||||||
|
|
||||||
|
- **da chi voglio proteggermi?<!-- .element: class="red"-->** (la mamma, il/la compagn*, facebook, il datore di lavoro, la digos, i rettiliani)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
- **cosa voglio proteggere?**<!-- .element: class="red"--> (l'identità, i contatti, le preferenze sessuali, le comunicazioni)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
- **quali sono gli attacchi più probabili?**<!-- .element: class="red"--> (sequestro, intercettazione, leak)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Esempi
|
||||||
|
|
||||||
|
- il tempo cambia sia i rapporti di fiducia (es. un/una ex) ..
|
||||||
|
- sia i livelli di rischio
|
||||||
|
- perdiamo il telefono
|
||||||
|
- sequestro
|
||||||
|
|
||||||
|
notes: proporre una riflessione collettiva su uno scenario
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### E quindi?
|
||||||
|
Che modello di rischio scegliamo noi?
|
||||||
|
Siccome e' impossibile difendersi da un attaccante sufficientemente potente,
|
||||||
|
ma soprattutto, la maggior parte di noi non deve avere a che fare con l'NSA o NSO,
|
||||||
|
prendiamo come modello di rischio quello che vede un'autorita' locale voler
|
||||||
|
in qualche modo indagare su di noi.
|
||||||
|
|
||||||
|
--
|
||||||
|
### Dai, ma chi mi caga?
|
||||||
|
|
||||||
|
Guardando la spesa statale per le tecnologie di sorveglianza ad uso poliziesco, qualcuno ti considera.
|
||||||
|
|
||||||
|
|
||||||
|
- [quanto spende il ministero dell'interno](https://motherboard.vice.com/it/article/padegg/quanto-spende-il-governo-italiano-per-le-tecnologie-di-sorveglianza)
|
||||||
|
- [quanto spende il ministero della giustizia](https://www.vice.com/it/article/43ja4q/listino-prezzi-intercettazioni-dispositivi-procura-milano-mercato-malware)
|
||||||
|
- [statistiche ministero della giustizia](https://archive.org/details/DeterminazioneDeiNuoviPrezziIntercettazioni/page/n3)
|
||||||
|
- [filiera delle intercettazioni](https://www.ilsole24ore.com/art/notizie/2018-08-03/le-intercettazioni-costano-169-milioni-2017-oltre-127mila-bersagli-190839.shtml)
|
||||||
|
- [prezzi intercettazioni](https://archive.org/details/DeterminazioneDeiNuoviPrezziIntercettazioni/page/n3)
|
||||||
|
- [paranoia gratuita](https://motherboard.vice.com/it/article/evv3xp/i-video-che-metti-online-vengono-spiati-dalla-polizia-italiana)
|
||||||
|
- [aggiornamenti legge italiana uso trojan](https://motherboard.vice.com/it/article/7xedna/la-legge-italiana-sulluso-dei-trojan-e-un-disastro)
|
69
slides/liberta.md
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
<!-- .slide: data-background="img/freedom.jpg" -->
|
||||||
|
|
||||||
|
### Free
|
||||||
|
### Software
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Free Software
|
||||||
|
|
||||||
|
Per parlare del software libero (free non vuol dire gratuito) ci vorrebbero ore,
|
||||||
|
ma qui ci interessa solo sottolineare quali sono le principali differenze,
|
||||||
|
tra i sistemi operativi e le applicazioni dal punto di vista della **sicurezza**<!-- .element: class="fragment highlight-red" -->.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Proprietario? No thanks
|
||||||
|
|
||||||
|
I sistemi operativi e le applicazioni proprietarie (es. Windows, MacOS, iOS),
|
||||||
|
sono sistemi chiusi.
|
||||||
|
|
||||||
|
Significa che nessuno puo' conoscerne il contenuto.
|
||||||
|
|
||||||
|
Svolgono delle funzioni, ma come lo fanno o se mentre svolgono le loro funzioni facciano anche altre cose noi non lo sappiamo.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Se è Libero ... MEGLIO!
|
||||||
|
|
||||||
|
Il software libero, invece è accessibile a tutti.
|
||||||
|
|
||||||
|
Di qualsiasi programma o parte del sistema sono disponibili e pubblici,
|
||||||
|
i sorgenti.
|
||||||
|
|
||||||
|
Chiunque abbia la giusta competenza può controllare cosa e come svolgono
|
||||||
|
le loro funzioni.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Fiducia
|
||||||
|
|
||||||
|
La comunità che collabora allo sviluppo del software libero è,
|
||||||
|
essa stessa garanzia di controllo sui suoi contenuti.
|
||||||
|
|
||||||
|
Su una comunità così numerosa si può essere confidenti che eventuali,
|
||||||
|
problemi siano tempestivamente individuati e segnalati.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Consigli
|
||||||
|
|
||||||
|
- Sul computer installate [linux](http://www.linux.it/distro) (facile)
|
||||||
|
- Se avete un telefono con android potete
|
||||||
|
installare [LineageOS](https://www.lineageos.org/) (meno facile)
|
||||||
|
|
||||||
|
notes:
|
||||||
|
parlare di fdroid (https://www.reddit.com/r/privacy/comments/3cjj2e/how_secure_is_fdroid/) https://f-droid.org/en/docs/Security_Model/
|
||||||
|
|
||||||
|
--
|
||||||
|
### Alcuni numeri
|
||||||
|
|
||||||
|
dal 2005 ad oggi circa 13500 sviluppatori hanno contribuito al solo sviluppo del kernel linux.
|
||||||
|
|
||||||
|
- [GitHub](https://github.com): conta quasi 5M di repositories.
|
||||||
|
- [SourceForge](https://sourceforge.net) ospita 324000 progetti.
|
||||||
|
- [Ohloh](https://www.openhub.net) ospita 550000 progetti.
|
||||||
|
- [Queste slides](https://git.lattuga.net/cisti/autodifesa-digitale-parte-1/) sono libere (sono un fork bolognese).
|
||||||
|
|
||||||
|
notes:
|
||||||
|
vlc, android, gnome, arduino, open hardware
|
100
slides/metadata.md
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
<!-- .slide: data-background="img/metadata.jpg" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## MetaDati
|
||||||
|
|
||||||
|
> We kill people based on metadata
|
||||||
|
|
||||||
|
Michael Hayden, former CIA and NSA director /
|
||||||
|
[source](https://www.youtube.com/watch?v=UdQiz0Vavmc#t=27s)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Metadati
|
||||||
|
|
||||||
|
Sono dati che descrivono pezzi di informazione tranne l'informazione
|
||||||
|
stessa. Il contenuto di un messaggio non è il metadato, ma chi l'ha
|
||||||
|
mandato, a chi, da dove e quando sono tutti esempi di metadati.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Metadati
|
||||||
|
|
||||||
|
Ogni informazione digitalizzata si porta dietro dei metadati:
|
||||||
|
- le comunicazioni (sms/telefonate/chat/WA)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
- immagini/pdf (autore, geolocalizzazione, etc..)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
- email (soggetto, destinatario, ora invio)
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## A che servono i contenuti se...
|
||||||
|
|
||||||
|
- so che hai chiamato una sex line alle 2.24 e hai parlato per 18 minuti
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
- che alle 4 del pomeriggio hai chiamato un numero verde per la prevenzione
|
||||||
|
suicidi.
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
- hai ricevuto una mail da un servizio di check HIV e poi hai chiamato il
|
||||||
|
tuo medico di base e visitato un forum di sieropositivi nella stessa ora.
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
- hai chiamato la tua ginecologa, ci hai parlato per mezz'ora e poi hai
|
||||||
|
chiamato una clinica privata specializzata in aborti
|
||||||
|
<!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## E quindi?
|
||||||
|
|
||||||
|
In molti sistemi legali solitamente si progettono i contenuti molto meglio
|
||||||
|
dei metadati, ad esempio in italia le telefonate vengono registrate
|
||||||
|
solamente in caso di indagini in corso per reati di un certo livello,
|
||||||
|
mentre gli operatori telefonici sono per legge obbligati a mantenere i
|
||||||
|
metadati delle telefonate per 24 mesi, i famosi tabulati telefonici.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## METADATI vs CONTENUTI
|
||||||
|
|
||||||
|
La narrazione riguardo questa distinzione, cioe' il trattamento differente
|
||||||
|
dei contenuti rispetto a quello dei metadati, descrive i metadati come se
|
||||||
|
non fossero un grande problema, come se fossero molto meno invasivi della
|
||||||
|
persona rispetto al contenuto vero e proprio delle comunicazioni. In
|
||||||
|
realtà è vero il contrario
|
||||||
|
|
||||||
|
notes: per quanto riguarda il controllo massivo...
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## issue
|
||||||
|
|
||||||
|
I metadati sono in forma testuale ed e' quindi possibile fare delle
|
||||||
|
ricerche massive su di essi, indicizzarli, categorizzarli, cosa impossibile
|
||||||
|
da fare con le comunicazioni vere e proprie.
|
||||||
|
|
||||||
|
Avendo i metadati e' possibile cercare tutte le telefonate effettuate verso
|
||||||
|
un numero, o da un numero, o in un lasso di tempo, o da un luogo
|
||||||
|
specificato, nessuna di queste ricerche risulta possibile invece avendo
|
||||||
|
solo il contenuto delle comunicazioni. <!-- .element: class="fragment" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Aneddoto
|
||||||
|
|
||||||
|
- [mcafee](https://www.npr.org/sections/thetwo-way/2012/12/04/166487197/betrayed-by-metadata-john-mcafee-admits-hes-really-in-guatemala?t=1543618516954)
|
||||||
|
- [mcafee
|
||||||
|
2](https://nakedsecurity.sophos.com/2012/12/03/john-mcafee-location-exif/)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Come mi proteggo?
|
||||||
|
|
||||||
|
La consapevolezza è già un grande passo avanti. Puoi usare alcuni
|
||||||
|
strumenti per rimuovere i metadati dai file:
|
||||||
|
|
||||||
|
- per android c'è [Scrambled
|
||||||
|
Exif](https://f-droid.org/en/packages/com.jarsilio.android.scrambledeggsif/)
|
||||||
|
- su linux c'è [mat](https://0xacab.org/jvoisin/mat2)
|
87
slides/navigare.md
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
<!-- .slide: data-background="img/internet.jpg" -->
|
||||||
|
|
||||||
|
## Navigazione nell'Internet
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
Finora non abbiamo parlato dei pericoli della rete, ma solo quelli del
|
||||||
|
nostro dispositivo, considerandolo disconnesso.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Come ci connettiamo?
|
||||||
|
|
||||||
|
- Wifi? Cambiate la password di default.
|
||||||
|
- [Disabilitate il WPS del
|
||||||
|
router](https://www.tomshw.it/sistema-wps-router-vulnerabile-meglio-spegnerlo-37486).
|
||||||
|
- Wifi pubbliche? usare VPN, vedi dopo.
|
||||||
|
- Dal telefono, disabilitare il wifi quando non lo usate.
|
||||||
|
- Preferite il cavo di rete quando potete.
|
||||||
|
|
||||||
|
notes: i dispositivi wifi broadcastano i MAC ai router se non impostati per
|
||||||
|
non farlo (esempio metro di londra)
|
||||||
|
https://tfl.gov.uk/corporate/publications-and-reports/wifi-data-collection
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Buone pratiche
|
||||||
|
|
||||||
|
- Controlla la barra di navigazione (https? il sito è giusto?)
|
||||||
|
- Sui link sospetti, controlla prima di cliccarci sopra
|
||||||
|
- Cambiare motore di ricerca di default (usate
|
||||||
|
[duckduckgo](https://duckduckgo.com))
|
||||||
|
- Salvare le password? (meglio di no)
|
||||||
|
- Usate i Feed/RSS, ad esempio con [Brief](https://addons.mozilla.org/it/firefox/addon/brief/)
|
||||||
|
- Usate [Tor
|
||||||
|
Browser](https://www.torproject.org/download/download-easy.html.en)
|
||||||
|
- Usate profili differenti o containers per non condividere cookie
|
||||||
|
- Gli allegati delle mail sono un classico vettore di malware, occhio
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Ctrl+C... Ctrl+V
|
||||||
|
### AKA: Attenzione al copia/incolla
|
||||||
|
Se ti capita di copia-incollare comandi dall'internet al tuo terminale, il consiglio è di farci
|
||||||
|
un po' di attenzione.
|
||||||
|
Non sempre quello che si vede è esattamente quello che c'è.
|
||||||
|
Dietro ad un comando apparententemente innocuo tipo "sudo apt update" si può [nascondere del codice](https://www.bleepingcomputer.com/news/security/dont-copy-paste-commands-from-webpages-you-can-get-hacked/) che può essere anche moooolto dannoso.
|
||||||
|
|
||||||
|
Consiglio: prima di incollare un comando nel terminale, incollalo in un qualsiasi editor di testo;
|
||||||
|
questo ti permetterà di verificare cosa, effettivamente, hai copiato.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Estensioni utili
|
||||||
|
|
||||||
|
- [duckduckgo privacy
|
||||||
|
essentials](https://chrome.google.com/webstore/detail/duckduckgo-privacy-essent/bkdgflcldnnnapblkhphbgpggdiikppg)
|
||||||
|
- ublock/[adblock plus](https://adblockplus.org/)
|
||||||
|
- [disconnect](https://addons.mozilla.org/en-US/firefox/addon/disconnect/)
|
||||||
|
- [facebook
|
||||||
|
container](https://addons.mozilla.org/en-US/firefox/addon/facebook-container/)
|
||||||
|
- [decentraleyes](https://addons.mozilla.org/en-US/firefox/addon/decentraleyes/)
|
||||||
|
- [multi-account
|
||||||
|
containers](https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/)
|
||||||
|
- [adnauseam](https://adnauseam.io/)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Navigazione in incognito
|
||||||
|
|
||||||
|
Non c'entra niente con l'anonimato, vi protegge dagli attacchi del vostro
|
||||||
|
coinquilino che vi guarda la cronologia mentre andate in bagno.
|
||||||
|
|
||||||
|
E' una modalità di navigazione che, contrariamente a quanto avviene
|
||||||
|
normalmente:
|
||||||
|
- non salva la cronologia
|
||||||
|
- i file scaricati non vengono mostrati nei download
|
||||||
|
- niente cache
|
||||||
|
- non salva i cookie (non sono loggato in sessioni successive)
|
||||||
|
|
||||||
|
notes:
|
||||||
|
https://blog.mozilla.org/security/2010/03/31/plugging-the-css-history-leak/
|
||||||
|
https://www.ghacks.net/2018/11/04/browser-history-sniffing-is-still-a-thing/
|
||||||
|
|
||||||
|
l'attacco permette attivamente a un sito web di provare diverse url e
|
||||||
|
vedere se sono gia state visitate dal browser di chi lo visita, nell'ordine
|
||||||
|
di migliaia di url al secondo.
|
132
slides/password.md
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
<!-- .slide:
|
||||||
|
data-background="https://ak7.picdn.net/shutterstock/videos/25863227/thumb/5.jpg"
|
||||||
|
--> <br/><br/>
|
||||||
|
|
||||||
|
# Password
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
Le password sono la prima barriera di accesso a dati che vogliamo tenere
|
||||||
|
per noi.
|
||||||
|
|
||||||
|
|
||||||
|
Le usiamo leggere la posta, per ritirare al bancomat (pin), per entrare nel
|
||||||
|
computer e nei mille servizi digitali a cui accediamo.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Ma... Non siamo bravi a scegliere delle buone password
|
||||||
|
|
||||||
|
- <!-- .element: class="fragment" --> E' la password di gmail? <span>➜
|
||||||
|
ci mettiamo `gmail` <!-- .element: class="red" --> in mezzo</span> <!--
|
||||||
|
.element: class="fragment" -->
|
||||||
|
- <!-- .element: class="fragment" --> Usiamo concetti ricordabili <span>➜
|
||||||
|
date di nascita, nomi di amic\*/compagn\*</span> <!-- .element: class="fragment" -->
|
||||||
|
- <!-- .element: class="fragment" --> Riusiamo la stessa password in
|
||||||
|
molti posti.
|
||||||
|
|
||||||
|
<br/> In pratica scegliamo password facilmente indovinabili. <!--
|
||||||
|
.element: class="fragment" -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
Spinti a migliorare le nostre password
|
||||||
|
|
||||||
|
![img/passhint.png](./img/password-requisiti.png)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
scegliamo le soluzioni piu' semplici e prevedibili
|
||||||
|
- <!-- .element: class="fragment" --> e' la password di facebook ➜
|
||||||
|
**facebookpassword**
|
||||||
|
- <!-- .element: class="fragment" --> inserisci almeno una maiuscola ➜
|
||||||
|
**Facebookpassword**
|
||||||
|
- <!-- .element: class="fragment" --> inserisci almeno un numero ➜
|
||||||
|
**Facebookpassword1**
|
||||||
|
- <!-- .element: class="fragment" --> inserisci almeno un simbolo ➜
|
||||||
|
**Facebookpassword1!**
|
||||||
|
|
||||||
|
notes: Sono tutti schemi facilmente immaginabili.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Ma soprattutto..
|
||||||
|
|
||||||
|
Usiamo la stessa password per più siti/servizi
|
||||||
|
|
||||||
|
![scimmia](./img/scimmia.jpg) <!-- .element: class="fragment" --> notes:
|
||||||
|
chiedere perche' e' un problema....
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Orrore!
|
||||||
|
|
||||||
|
<!-- .element: class="fragment" --> i dipendenti di ogni servizio hanno
|
||||||
|
accesso ad ogni altro servizio!
|
||||||
|
|
||||||
|
<!-- .element: class="fragment" --> quando (non se) uno dei servizi viene
|
||||||
|
bucato, gente a caso ha accesso ad ogni vostro servizio (succede un giorno
|
||||||
|
si e l'altro pure).
|
||||||
|
|
||||||
|
<!-- .element: class="fragment" --> E' talmente diffusa la cosa che mozilla
|
||||||
|
ha un servizio per fare un check ➜
|
||||||
|
[monitor.firefox.com](https://monitor.firefox.com)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Leak
|
||||||
|
|
||||||
|
Negli ultimi anni sono stati bucati tanti servizi e milioni di password
|
||||||
|
sono diventate pubbliche (leak) permettendo di farci ricerca sopra e si, le
|
||||||
|
password piu' usate sono `123456` e `password`, gli schemi usati sono
|
||||||
|
drammaticamente ricorrenti e la maggior parte delle persone riusa le
|
||||||
|
password in piu' servizi.
|
||||||
|
|
||||||
|
Una lista di servizi la cui compromissione è pubblica è
|
||||||
|
[qui](https://haveibeenpwned.com/PwnedWebsites). Un posto dove poter
|
||||||
|
studiare le statistiche
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Password Cracking
|
||||||
|
|
||||||
|
Esistono programmi e servizi che tentano ripetutamente password basandosi
|
||||||
|
sulla nostra prevedibilità e si basano comunemente su dizionari a cui
|
||||||
|
vengono applicate delle regole (permutazioni, aggiunte di
|
||||||
|
prefissi/suffissi, cambio di caratteri comuni, maiuscole/minuscole).
|
||||||
|
|
||||||
|
Considerate che i file dizionario in attacchi mirati vengono creati ad-hoc
|
||||||
|
prendendo tutto il material digitale del target. notes: Mostrare un
|
||||||
|
piccolo esempio di `hashcat` (da preparare)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### E quindi?
|
||||||
|
|
||||||
|
Se non siamo capaci a fare qualcosa, cerchiamo qualcuno in grado di farlo.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### Password manager
|
||||||
|
|
||||||
|
Usiamo i password manager.
|
||||||
|
|
||||||
|
Sono dei programmi che generano e si ricordano delle password sicure, in
|
||||||
|
cambio di una sola master password (passphrase).
|
||||||
|
|
||||||
|
notes: spiegare master password, che e' possibile fare piu' liste di
|
||||||
|
password, suggerire buone pratiche.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
### E la master password? Per le poche passphrase che non possiamo salvare
|
||||||
|
usiamo i seguenti accorgimenti:
|
||||||
|
|
||||||
|
- mai riusare una passphrase (dai te ne devi ricordare massimo 4, stacce)
|
||||||
|
- mai condividere una passphrase (no no no e no)
|
||||||
|
- mai scrivere una passphrase (a parte se sai quello che stai facendo)
|
||||||
|
- usa 4 parole a caso (veramente a caso) e costruiscici una storia sopra
|
||||||
|
per ricordarle.
|
||||||
|
|
||||||
|
notes: il `4` del primo punto e' un numero a caso. esempio live di scelta
|
||||||
|
passphrase.
|
138
slides/smartphone.md
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
<!-- .slide: data-background="img/this-is-your-brain-on-apps.jpg" -->
|
||||||
|
|
||||||
|
## Smartphone
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Smartphone
|
||||||
|
|
||||||
|
- Sono ovunque, sono Lo strumento usato per comunicare
|
||||||
|
- Telefonate, internet, chat, foto, video, etc..
|
||||||
|
- Non sono stati progettati per essere sicuri
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Meno controllo
|
||||||
|
|
||||||
|
Rispetto ad un computer è più complicato:
|
||||||
|
- sostituire il sistema operativo (pensate a quanto vi abbiamo rotto con
|
||||||
|
linux)
|
||||||
|
- investigare presenza di malware/virus
|
||||||
|
- disinstallare programmi di default (telefoni brandizzati)
|
||||||
|
- prevenire il monitoraggio
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Obsolescenza..
|
||||||
|
|
||||||
|
Inoltre il produttore del telefono dichiarando lo stesso obsoleto smette di
|
||||||
|
fornire aggiornamenti software (lasciando aperte vulnerabilità di pubblico
|
||||||
|
dominio)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Geolocalizzazione - Cell
|
||||||
|
|
||||||
|
Un telefono acceso si collega ad una cella della rete telefonica, quale
|
||||||
|
cella e quale telefono vengono segnati dall'operatore, che tiene per molto
|
||||||
|
tempo questa informazione.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Geolocalizzazione - Cell
|
||||||
|
|
||||||
|
E' possibile triangolare un dispositivo stimando la potenza del segnale
|
||||||
|
ricevuto da celle vicine, si attiva chiamando il 118 e tipo se siete sotto
|
||||||
|
sorveglianza.
|
||||||
|
|
||||||
|
Non c'è modo di evitare questo attacco se non lasciando il telefono a casa
|
||||||
|
:)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Geolocalizzazione - IMSI
|
||||||
|
|
||||||
|
IMSI Catcher, un simulatore di antenne telefoniche sicuramente
|
||||||
|
[usato](https://www.ilfattoquotidiano.it/2015/06/13/con-limsi-catcher-cellulari-a-rischio-attenzione-il-cacciatore-ti-ascolta/1770363/)
|
||||||
|
[in
|
||||||
|
Italia](https://duckduckgo.com/?q=capitolatotecnicoradiomobili+site%3Apoliziadistato.it).
|
||||||
|
|
||||||
|
Può rispondere a domande del tipo: "dammi tutti i numeri di telefono
|
||||||
|
presenti in questa zona, quel giorno" senza farne richiesta al magistrato.
|
||||||
|
|
||||||
|
E'
|
||||||
|
[diffuso](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Unmasked-Spies),
|
||||||
|
se volete divertirvi potete costruire un [imsi catcher
|
||||||
|
detector](https://seaglass.cs.washington.edu/)
|
||||||
|
|
||||||
|
notes: disabilitare 2g/3g e il roaming
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Geolocalizzazione
|
||||||
|
|
||||||
|
- WIFI Il telefono va' in giro [urlando ai quattro venti un suo
|
||||||
|
identificativo
|
||||||
|
univoco](http://www.gizmodo.co.uk/2017/02/heres-what-tfl-learned-from-tracking-your-phone-on-the-tube/).
|
||||||
|
|
||||||
|
notes: Disabilita il bluetooth e il wifi quando esci di casa.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Geolocalizzazione
|
||||||
|
|
||||||
|
- GPS Il vostro telefono non parla con i satelliti, avviene il contrario.
|
||||||
|
Ma quando conosce la sua posizione puo' comunicarla su altri canali.
|
||||||
|
|
||||||
|
La geolocalizzazione usa anche la [lista delle reti
|
||||||
|
wireless]((https://location.services.mozilla.com/map) che trova intorno a
|
||||||
|
te. notes:
|
||||||
|
- Il GPS riceve solamente (accuracy ~5 metri a scopo civile)
|
||||||
|
- Si geolocalizza anche senza GPS ma col
|
||||||
|
[WIFI](https://location.services.mozilla.com/map#2/15.0/10.0) (~78 metri)
|
||||||
|
Faccio una lista delle reti wifi nel posto dove mi trovo e mi segno la
|
||||||
|
potenza del segnale di ognuna e/o il tempo di risposta.
|
||||||
|
- O con il cellular positioning (~600 metri)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Malware Vedi
|
||||||
|
|
||||||
|
[qui](https://www.autistici.org/underscore/di-trojan-di-stato.html) e
|
||||||
|
[qui](https://www.autistici.org/underscore/di-trojan-di-stato-details.html)
|
||||||
|
che ne abbiamo parlato un sacco.
|
||||||
|
|
||||||
|
Tenete aggiornati i vostri dispositivi, installate solo le app che vi
|
||||||
|
servono, disinstallate le app di default, usate [software
|
||||||
|
libero](https://lineageos.org/).
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Buone pratiche
|
||||||
|
|
||||||
|
- Ma ascolta anche quando è spento?
|
||||||
|
- Devo togliere la batteria?
|
||||||
|
|
||||||
|
Per discorsi sensibili, lasciate i telefoni in un'altra stanza, se 20
|
||||||
|
persone contemporaneamente spengono il telefono in uno stesso luogo
|
||||||
|
l'operatore lo sa.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Attacchi fisici
|
||||||
|
|
||||||
|
- Inserite un pin, una passphrase o una sequenza per sbloccare lo schermo
|
||||||
|
- No impronte digitali (stanno sul
|
||||||
|
[telefono](https://www.ccc.de/en/updates/2014/ursel) e sui
|
||||||
|
[server](https://apple.slashdot.org/story/19/03/24/0015213/how-the-fbi-easily-retrieved-michael-cohens-data-from-both-apple-and-google))
|
||||||
|
- [Cifrate il
|
||||||
|
telefono](https://trovalost.it/come-cifrare-un-telefono-android/)
|
||||||
|
|
||||||
|
notes: che sia il vostro coinquilino dell'altra stanza, un vostro ex, il
|
||||||
|
vostro capo o la digos, se qualcuno prende il vostro telefono in mano e non
|
||||||
|
c'e' protezione alcuna, non e' una bella cosa, Anche se non vi sequestrano
|
||||||
|
il telefono, in poco tempo e' possibile installare malware o addirittura in
|
||||||
|
alcuni casi reinstallare l'intero sistema operativo avendone accesso
|
||||||
|
fisico. Altra cosa, cifrate il telefono, nelle impostazioni -> sicurezza
|
||||||
|
potete mettere la stessa sequenza/pin/password per accendere il telefono e
|
||||||
|
per abilitarlo
|
53
slides/strumenti-radicali.md
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<!-- .slide: data-background="img/cybertonia.jpg" -->
|
||||||
|
|
||||||
|
## **Server Radicali** <!-- .element: class="red"-->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Fiducia
|
||||||
|
|
||||||
|
È difficile fare tutto da sol*
|
||||||
|
|
||||||
|
- mi faccio il mio server mail
|
||||||
|
- il mio nodo jabber
|
||||||
|
- la mia istanza mastodon
|
||||||
|
- il mio server di backup
|
||||||
|
|
||||||
|
tocca fidarsi di qualcuno...
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Autistici.org
|
||||||
|
|
||||||
|
> Crediamo che questo non sia affatto il migliore dei mondi possibili. La
|
||||||
|
> nostra risposta è offrire ad attivisti, gruppi e collettivi piattaforme
|
||||||
|
> per una comunicazione più libera e strumenti digitali per l’autodifesa
|
||||||
|
> della privacy, come per esempio email, blog, mailing list, instant
|
||||||
|
> messaging e altro.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Riseup.net
|
||||||
|
|
||||||
|
> Riseup provides online communication tools for people and groups working
|
||||||
|
> on liberatory social change. We are a project to create democratic
|
||||||
|
> alternatives and practice self-determination by controlling our own
|
||||||
|
> secure means of communications.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Molti altri
|
||||||
|
|
||||||
|
Cerca altri [server radicali](https://riseup.net/en/security/resources/radical-servers)
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## Cisti.org
|
||||||
|
|
||||||
|
> Uno spazio digitale liberato.
|
||||||
|
>
|
||||||
|
> Un server scapestrato e autogestito.
|
||||||
|
>
|
||||||
|
> Anticapitalista, antifascista, antirazzista, antisessista.
|
||||||
|
>
|
||||||
|
|
|
@ -1,287 +0,0 @@
|
||||||
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Autodifesa digitale
|
|
||||||
## (parte 1)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Perchè questo workshop
|
|
||||||
|
|
||||||
## Necessità di autodifesa digitale ;;
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Cosa vedremo oggi?
|
|
||||||
|
|
||||||
### Installazione Sistema Operativo Linux
|
|
||||||
|
|
||||||
### Configurazione di strumenti base per proteggere nostri dati
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Perchè Linux?
|
|
||||||
|
|
||||||
## Free e Open Souce
|
|
||||||
|
|
||||||
* Libertà di eseguire il programma per qualsiasi scopo.
|
|
||||||
* Libertà di studiare il programma e modificarlo.
|
|
||||||
* Libertà di ridistribuire copie del programma in modo da aiutare il prossimo.
|
|
||||||
* Libertà di migliorare il programma e di distribuirne pubblicamente i miglioramenti
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Cos'è una distribuzione Linux?
|
|
||||||
|
|
||||||
Una distribuzione Linux (gergalmente "distro") è un insieme di software che costituisce un sistema operativo realizzato a partire da un kernel Linux comune(cuore).
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Scegliere la distribuzione.
|
|
||||||
|
|
||||||
Useremo Xubuntu LTS (long time support) dura 5 anni (https://xubuntu.org/getxubuntu/ a 64bit)
|
|
||||||
|
|
||||||
Altre: Debian, Mint
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Ambienti Grafici screenshot x 3
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Perchè usiamo questa distribuzione?
|
|
||||||
|
|
||||||
Ha un ambiente grafico abbastanza leggero da poter essere installato anche su vecchi pc ma allo stesso tempo abbastanza funzionale per utenti alle prime armi perchè molto simile all'interfaccia a cui si è abituati.
|
|
||||||
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Prima di iniziare l'installazione
|
|
||||||
|
|
||||||
## Creazione CD o chiavetta USB (Approfondimento)
|
|
||||||
## Modifiche al BIOS
|
|
||||||
|
|
||||||
* Ordine di Boot (usb, cdrom)
|
|
||||||
* Salva e riavvia
|
|
||||||
|
|
||||||
(foto) nested UEFI (Approfondimento)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Diverse Fasi:
|
|
||||||
|
|
||||||
### Passaggi semplici:
|
|
||||||
* Lingua, tipo di tastiera, timezone
|
|
||||||
|
|
||||||
### Passaggi importanti:
|
|
||||||
* Cifratura disco e partizionamento, utente e password
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Cifratura disco
|
|
||||||
|
|
||||||
cosa è e a cosa serve
|
|
||||||
(quando funziona? quando è spento
|
|
||||||
quando non funziona? quando è acceso
|
|
||||||
se si lascia il computer incostudito spegnerlo
|
|
||||||
se è per poco tempo mettere lo screensaver con password)
|
|
||||||
|
|
||||||
(esempi)
|
|
||||||
|
|
||||||
(slide)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Passphrase
|
|
||||||
|
|
||||||
cos'è una passphrase buona?
|
|
||||||
a cosa serve questa passphrase?
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
img kiki
|
|
||||||
(es brute force)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
utente e password
|
|
||||||
|
|
||||||
perchè si crea l'utente?
|
|
||||||
cos'è una password buona?
|
|
||||||
a cosa serve questa password?
|
|
||||||
non usare le stesse password
|
|
||||||
|
|
||||||
(se il pc è acceso e lasciato incustodito... istallazione)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Blocco schermo
|
|
||||||
|
|
||||||
## ScreenSaver
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Fine installazione
|
|
||||||
# Primo avvio
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
PASSWORD
|
|
||||||
|
|
||||||
|
|
||||||
Se le password sono:
|
|
||||||
|
|
||||||
lunghissime
|
|
||||||
complicate e poco mnemoniche
|
|
||||||
sempre diverse
|
|
||||||
|
|
||||||
Come facciamo a ricordarci le password? Se le scordo?
|
|
||||||
(slide 14)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# Password manager
|
|
||||||
|
|
||||||
## Keepassx
|
|
||||||
|
|
||||||
Mi permette di salvare le credenziali(user/password) e un po' di informazioni correlate
|
|
||||||
|
|
||||||
- creare più db (con differente master password)
|
|
||||||
- creare gruppi per migliorare la ricerca
|
|
||||||
- aggiungere credenziali
|
|
||||||
- cercare tra le informazioni
|
|
||||||
- riaprire i db salvati
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
Master password
|
|
||||||
|
|
||||||
Vediamo esempi (slide)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
Cifratura dispositivi USB
|
|
||||||
|
|
||||||
(Immagini)
|
|
||||||
Perchè crittare un usb?
|
|
||||||
Alcune ragioni come quelle sul sistema operativo ma in +
|
|
||||||
Può contenere foto, documenti o materiale da passare ad un'altra persona e la si può perdere
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# gnome-disk-utility
|
|
||||||
|
|
||||||
E' molto semplice
|
|
||||||
|
|
||||||
- Installa gnome-disk-utility
|
|
||||||
- Lo trovi in Tutto -> Dischi
|
|
||||||
- Inserisci la chiavetta, comparirà nella lista a sinistra
|
|
||||||
- Clicchi sulla chiavetta(attenzione accertarsi che sia quella)
|
|
||||||
- Scegliere luks + ext4
|
|
||||||
- Una volta creata la chiavetta crittata fare caso al lucchetto chiuso nell'icona
|
|
||||||
- Una volta decrittata fare caso al lucchetto aperto nell'icona
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
# CANCELLAZIONE SICURA
|
|
||||||
|
|
||||||
Normalmente quando si cancella un file, il file finisce nel cestino.
|
|
||||||
|
|
||||||
Quando si svuota il cestino i file spariscono dal computer ma in realtà sono fisicamente
|
|
||||||
ancora leggibili dal disco fisso con software fatti apposta per recuperare i dati.
|
|
||||||
|
|
||||||
Esistono dei software fatti apposta per cancellare i dati che al posto di cancellarli ci
|
|
||||||
scrivono sopra un TOT di volte e solo alla fine cancellano il file.
|
|
||||||
|
|
||||||
E' una operazione costosa per il disco e anche in termini di tempo. Più il file è grosso
|
|
||||||
più tempo ci vuole.
|
|
||||||
|
|
||||||
Se si ha il disco cifrato occorre comunque fare questo tipo di cancellazione?
|
|
||||||
|
|
||||||
Va valutato di volta in volta, ma in alcuni casi, per file particolarmente sensibili è meglio comunque farlo. (Scaricato da emule pe sbaglio un film pedofilo, non voglio rischiare)
|
|
||||||
|
|
||||||
programmi: wipe -f -c -q -r %F, shred(non lo trova)
|
|
||||||
-f forza non la cancelazione
|
|
||||||
-c chiede il permesso se ne ha bisogno
|
|
||||||
-q non emette output
|
|
||||||
-r va in recursione se è una directory
|
|
||||||
%F passa tutta i files e le directory selezionate
|
|
||||||
|
|
||||||
come si usano: https://askubuntu.com/questions/57572/how-to-delete-files-in-secure-manner
|
|
||||||
|
|
||||||
- installo wipe
|
|
||||||
- apro la cartella home(casa) che trovo sul desktop
|
|
||||||
- vado in alto nel menù Modifica -> Imposta Azioni Personalizzate
|
|
||||||
- premo sul + per aggiungere un azione
|
|
||||||
- imposto l'azione
|
|
||||||
- salvo ed esco
|
|
||||||
- selezione il/i file(s) e clicco con il destro
|
|
||||||
- ora nel menù esce "Cancellazione Sicura"
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
Screensaver
|
|
||||||
Blocco computer
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
METADATI
|
|
||||||
|
|
||||||
- Cosa sono?
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
- Che informazioni si portano con se? (video, immagini, documenti)
|
|
||||||
(slide)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
nome programma mat
|
|
||||||
|
|
||||||
- installare mat
|
|
||||||
- creare una azione personalizzata
|
|
||||||
- mat %F
|
|
||||||
(slide)
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section data-markdown>
|
|
||||||
|
|
||||||
NAVIGAZIONE DI TUTTI I GIORNI
|
|
||||||
|
|
||||||
(NON HO SLIDE)
|
|
||||||
|
|
||||||
- https(menarla, perchè usano password wifi deboli..
|
|
||||||
mostrare che può essere vettore di attacco?)
|
|
||||||
- disconnect, ublock per diminuire la profilazione(att.ne a volte,
|
|
||||||
alcuni siti non funzionano)
|
|
||||||
- noscript
|
|
||||||
- cookie?
|
|
||||||
- salvare le password nel browser?
|
|
||||||
- navigazione incognito(disambiguare) navigazione anonima intallare tor browser prossimo talk
|
|
||||||
|
|
||||||
</section>
|
|