├── Presentations └── KPI-2017-SCHOOL-02 │ ├── kpi.sh │ ├── i-ev.jpg │ ├── i-kpi.jpg │ ├── i-code.png │ ├── i-home.jpg │ ├── i-mem-1.jpg │ ├── i-mem-2.jpg │ ├── logo-hpw.png │ ├── i-china-1.jpg │ ├── i-china-2.jpg │ ├── i-nodejs-5.jpg │ ├── i-nodejs-6.jpg │ ├── i-nodejs-7.jpg │ ├── i-nodejs-8.jpg │ ├── i-nodejs-9.jpg │ ├── i-nodejs-a.jpg │ ├── i-nodejs-d.jpg │ ├── i-lecture-1.jpg │ ├── lib │ ├── font │ │ ├── league-gothic │ │ │ ├── LICENSE │ │ │ ├── league-gothic.eot │ │ │ ├── league-gothic.ttf │ │ │ ├── league-gothic.woff │ │ │ └── league-gothic.css │ │ └── source-sans-pro │ │ │ ├── source-sans-pro-italic.eot │ │ │ ├── source-sans-pro-italic.ttf │ │ │ ├── source-sans-pro-italic.woff │ │ │ ├── source-sans-pro-regular.eot │ │ │ ├── source-sans-pro-regular.ttf │ │ │ ├── source-sans-pro-regular.woff │ │ │ ├── source-sans-pro-semibold.eot │ │ │ ├── source-sans-pro-semibold.ttf │ │ │ ├── source-sans-pro-semibold.woff │ │ │ ├── source-sans-pro-semibolditalic.eot │ │ │ ├── source-sans-pro-semibolditalic.ttf │ │ │ ├── source-sans-pro-semibolditalic.woff │ │ │ ├── source-sans-pro.css │ │ │ └── LICENSE │ ├── js │ │ ├── html5shiv.js │ │ └── classList.js │ └── css │ │ └── zenburn.css │ ├── reveal.json │ ├── plugin │ ├── markdown │ │ ├── example.md │ │ └── example.html │ ├── multiplex │ │ ├── client.js │ │ ├── package.json │ │ ├── master.js │ │ └── index.js │ ├── print-pdf │ │ └── print-pdf.js │ ├── math │ │ └── math.js │ ├── notes-server │ │ ├── index.js │ │ └── client.js │ └── notes │ │ └── notes.js │ ├── css │ ├── theme │ │ ├── source │ │ │ ├── night.scss │ │ │ ├── serif.scss │ │ │ ├── league.scss │ │ │ ├── simple.scss │ │ │ ├── sky.scss │ │ │ ├── beige.scss │ │ │ ├── black.scss │ │ │ ├── white.scss │ │ │ ├── moon.scss │ │ │ ├── solarized.scss │ │ │ └── blood.scss │ │ ├── template │ │ │ ├── settings.scss │ │ │ └── mixins.scss │ │ ├── README.md │ │ ├── night.css │ │ ├── serif.css │ │ ├── moon.css │ │ ├── solarized.css │ │ ├── white.css │ │ └── b.css │ └── print │ │ ├── pdf.css │ │ └── paper.css │ └── kpi.md ├── Docs ├── RSOI │ ├── RSOI-Lectures.pdf │ └── RSOI-Questions-01.pdf ├── NODEJS │ ├── node-kpi-2016.pdf │ └── README.md ├── UNISTACK │ └── 20160310-UNISTACK.pdf ├── ACS │ ├── Labs │ │ ├── Лабораторные 1_2АКС.doc │ │ └── Лабораторные 3_4 АКС.doc │ ├── Materials │ │ ├── Темы Работ АКС_кор2.doc │ │ ├── Компоненты прикладного ПО.doc │ │ ├── Робоча навч програма АКС_англ.doc │ │ ├── Архитектура прикладной сети вуза.doc │ │ ├── Роб_Программа_АрхиКС_2014_д_07_14_кор.doc │ │ ├── Структура зон и ярусов безопасности КПИ.doc │ │ ├── Навчальна програма з дисципліни АКС_2014_кор1.doc │ │ ├── Архитектура прикладной сети университета по зонам безопасности.doc │ │ └── Архітектура системи віртуальних електронних сховищ відкритого доступу.doc │ └── Lectures │ │ ├── 3 Процесс разработки архитектр.doc │ │ ├── 0 Процесс разработки архитектур.doc │ │ ├── 1 Процесс разработки архитектур.doc │ │ ├── 10 Процесс разработки архитектур.doc │ │ ├── 11 Процесс разработки архитектур.doc │ │ ├── 12 Процессразработки архитектуры.doc │ │ ├── 2 Процесс разработки архитектур.doc │ │ ├── 4 Процесс разработки архитектур.doc │ │ ├── 5 Процесс разработки архитектур.doc │ │ ├── 6 Процесс разработки архитектур.doc │ │ ├── 7 Процесс разработки архитектур.doc │ │ ├── 8 Процесс разработки архитектур.doc │ │ └── 9 Процесс разработки архитектур.doc ├── PROTOCOLS │ ├── Protocols-Timoshin.pdf │ ├── Protocols-Questions-01.md │ ├── Protocols-Questions-02.md │ └── Protocols-Questions-03.md ├── TOOLS │ └── README.md ├── PROG │ └── README.md └── SOFTARCH │ └── README.md ├── KPI-2017-Summer ├── node-kpi-2017.pdf ├── Lecture6.md ├── Lecture5.md ├── Lecture4.md ├── Meetings.md └── Lecture3.md ├── KPI-2016-Summer ├── 01-NodeJs-Platform-Basics.pdf ├── 03-JavaScript-Generators.pdf ├── Meetings.md ├── README.md └── Intro.md ├── KPI-2017-Autumn ├── Lecture6.md ├── Lecture5.md ├── Lecture2.md ├── Lecture3.md ├── Lecture7.md ├── Lecture1.md └── Lecture4.md ├── KPI-2016-Spring ├── Letter4.md ├── Letter5.md ├── Letter1.md ├── Letter3.md ├── Meetings.md ├── Letter3a.md ├── Intro.md └── Letter2.md ├── Tasks └── JavaScript │ └── 1-Basics │ ├── generate.js │ └── data.js ├── KPI-2017-Spring ├── Letter2.md └── Letter1.md ├── Discussions └── method-2017-04-10.md └── README.md /Presentations/KPI-2017-SCHOOL-02/kpi.sh: -------------------------------------------------------------------------------- 1 | reveal-md kpi.md 2 | -------------------------------------------------------------------------------- /Docs/RSOI/RSOI-Lectures.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/RSOI/RSOI-Lectures.pdf -------------------------------------------------------------------------------- /Docs/NODEJS/node-kpi-2016.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/NODEJS/node-kpi-2016.pdf -------------------------------------------------------------------------------- /Docs/RSOI/RSOI-Questions-01.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/RSOI/RSOI-Questions-01.pdf -------------------------------------------------------------------------------- /Docs/UNISTACK/20160310-UNISTACK.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/UNISTACK/20160310-UNISTACK.pdf -------------------------------------------------------------------------------- /KPI-2017-Summer/node-kpi-2017.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/KPI-2017-Summer/node-kpi-2017.pdf -------------------------------------------------------------------------------- /Docs/ACS/Labs/Лабораторные 1_2АКС.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Labs/Лабораторные 1_2АКС.doc -------------------------------------------------------------------------------- /Docs/PROTOCOLS/Protocols-Timoshin.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/PROTOCOLS/Protocols-Timoshin.pdf -------------------------------------------------------------------------------- /Docs/ACS/Labs/Лабораторные 3_4 АКС.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Labs/Лабораторные 3_4 АКС.doc -------------------------------------------------------------------------------- /Docs/ACS/Materials/Темы Работ АКС_кор2.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Темы Работ АКС_кор2.doc -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-ev.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-ev.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-kpi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-kpi.jpg -------------------------------------------------------------------------------- /KPI-2016-Summer/01-NodeJs-Platform-Basics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/KPI-2016-Summer/01-NodeJs-Platform-Basics.pdf -------------------------------------------------------------------------------- /KPI-2016-Summer/03-JavaScript-Generators.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/KPI-2016-Summer/03-JavaScript-Generators.pdf -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-code.png -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-home.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-home.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-mem-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-mem-1.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-mem-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-mem-2.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/logo-hpw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/logo-hpw.png -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-china-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-china-1.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-china-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-china-2.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-nodejs-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-nodejs-5.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-nodejs-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-nodejs-6.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-nodejs-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-nodejs-7.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-nodejs-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-nodejs-8.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-nodejs-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-nodejs-9.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-nodejs-a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-nodejs-a.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-nodejs-d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-nodejs-d.jpg -------------------------------------------------------------------------------- /Docs/ACS/Materials/Компоненты прикладного ПО.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Компоненты прикладного ПО.doc -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/i-lecture-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/i-lecture-1.jpg -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/LICENSE: -------------------------------------------------------------------------------- 1 | SIL Open Font License (OFL) 2 | http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL 3 | -------------------------------------------------------------------------------- /Docs/ACS/Lectures/3 Процесс разработки архитектр.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/3 Процесс разработки архитектр.doc -------------------------------------------------------------------------------- /Docs/ACS/Materials/Робоча навч програма АКС_англ.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Робоча навч програма АКС_англ.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/0 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/0 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/1 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/1 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/10 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/10 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/11 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/11 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/12 Процессразработки архитектуры.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/12 Процессразработки архитектуры.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/2 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/2 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/4 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/4 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/5 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/5 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/6 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/6 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/7 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/7 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/8 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/8 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Lectures/9 Процесс разработки архитектур.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Lectures/9 Процесс разработки архитектур.doc -------------------------------------------------------------------------------- /Docs/ACS/Materials/Архитектура прикладной сети вуза.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Архитектура прикладной сети вуза.doc -------------------------------------------------------------------------------- /Docs/ACS/Materials/Роб_Программа_АрхиКС_2014_д_07_14_кор.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Роб_Программа_АрхиКС_2014_д_07_14_кор.doc -------------------------------------------------------------------------------- /Docs/ACS/Materials/Структура зон и ярусов безопасности КПИ.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Структура зон и ярусов безопасности КПИ.doc -------------------------------------------------------------------------------- /Docs/ACS/Materials/Навчальна програма з дисципліни АКС_2014_кор1.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Навчальна програма з дисципліни АКС_2014_кор1.doc -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/league-gothic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/league-gothic.eot -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/league-gothic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/league-gothic.ttf -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/league-gothic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/league-gothic.woff -------------------------------------------------------------------------------- /Docs/ACS/Materials/Архитектура прикладной сети университета по зонам безопасности.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Архитектура прикладной сети университета по зонам безопасности.doc -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-italic.eot -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-italic.ttf -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-italic.woff -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-regular.eot -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-regular.ttf -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-regular.woff -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibold.eot -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibold.ttf -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibold.woff -------------------------------------------------------------------------------- /Docs/ACS/Materials/Архітектура системи віртуальних електронних сховищ відкритого доступу.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Docs/ACS/Materials/Архітектура системи віртуальних електронних сховищ відкритого доступу.doc -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HowProgrammingWorks/Letters/HEAD/Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/reveal.json: -------------------------------------------------------------------------------- 1 | { 2 | "controls": false, 3 | "progress": false, 4 | "hideAddressBar": true, 5 | "transition": "slide", 6 | "transitionSpeed": "default", 7 | "backgroundTransition": "fade", 8 | "viewDistance": 3 9 | } 10 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/js/html5shiv.js: -------------------------------------------------------------------------------- 1 | document.createElement('header'); 2 | document.createElement('nav'); 3 | document.createElement('section'); 4 | document.createElement('article'); 5 | document.createElement('aside'); 6 | document.createElement('footer'); 7 | document.createElement('hgroup'); -------------------------------------------------------------------------------- /KPI-2017-Summer/Lecture6.md: -------------------------------------------------------------------------------- 1 | # Лекция 6: Файлы, потоки и буферы, и фронтенд 2 | 3 | Краткий план со ссылками на примеры кода: 4 | 5 | - [Работа с файлами](https://github.com/HowProgrammingWorks/Files) 6 | - [Буферы](https://github.com/HowProgrammingWorks/Buffers) 7 | - [Файловые потоки](https://github.com/HowProgrammingWorks/Streams) 8 | -------------------------------------------------------------------------------- /Docs/TOOLS/README.md: -------------------------------------------------------------------------------- 1 | # Инструментарий разработчика 2 | 3 | - [Node.js](https://nodejs.org/en/download/current/) для Linux, MacOS и Windows. Или скрипты автоматического развертывания для [Fedora, CentOS, Debian, Ubuntu](https://github.com/metarhia/Impress/tree/master/deploy) из бинарноков без префикса, а из исходников с префиксом `-src.sh` 4 | - [MongoDB](https://www.mongodb.com/download-center) для 5 | 6 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/league-gothic/league-gothic.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'League Gothic'; 3 | src: url('league-gothic.eot'); 4 | src: url('league-gothic.eot?#iefix') format('embedded-opentype'), 5 | url('league-gothic.woff') format('woff'), 6 | url('league-gothic.ttf') format('truetype'); 7 | 8 | font-weight: normal; 9 | font-style: normal; 10 | } -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/markdown/example.md: -------------------------------------------------------------------------------- 1 | # Markdown Demo 2 | 3 | 4 | 5 | ## External 1.1 6 | 7 | Content 1.1 8 | 9 | Note: This will only appear in the speaker notes window. 10 | 11 | 12 | ## External 1.2 13 | 14 | Content 1.2 15 | 16 | 17 | 18 | ## External 2 19 | 20 | Content 2.1 21 | 22 | 23 | 24 | ## External 3.1 25 | 26 | Content 3.1 27 | 28 | 29 | ## External 3.2 30 | 31 | Content 3.2 32 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/multiplex/client.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var multiplex = Reveal.getConfig().multiplex; 3 | var socketId = multiplex.id; 4 | var socket = io.connect(multiplex.url); 5 | 6 | socket.on(multiplex.id, function(data) { 7 | // ignore data from sockets that aren't ours 8 | if (data.socketId !== socketId) { return; } 9 | if( window.location.host === 'localhost:1947' ) return; 10 | 11 | Reveal.setState(data.state); 12 | }); 13 | }()); 14 | -------------------------------------------------------------------------------- /KPI-2017-Autumn/Lecture6.md: -------------------------------------------------------------------------------- 1 | # Лекции #6 "Композиция функций, частичное применение, обертки" 2 | 3 | ### Примеры кода 4 | - [Композиция функций](https://github.com/HowProgrammingWorks/Composition) 5 | - [Частичное применение функций](https://github.com/HowProgrammingWorks/PartialApplication) 6 | - Каррирование функций (см. в репозитории с частичным применением) 7 | - [Функции-обертки](https://github.com/HowProgrammingWorks/Wrapper) 8 | - [Примеры императивного и функционального кода](https://github.com/HowProgrammingWorks/Abstractions) 9 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/multiplex/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reveal-js-multiplex", 3 | "version": "1.0.0", 4 | "description": "reveal.js multiplex server", 5 | "homepage": "http://lab.hakim.se/reveal-js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "engines": { 10 | "node": "~4.1.1" 11 | }, 12 | "dependencies": { 13 | "express": "~4.13.3", 14 | "grunt-cli": "~0.1.13", 15 | "mustache": "~2.3.2", 16 | "socket.io": "~1.3.7" 17 | }, 18 | "license": "MIT" 19 | } 20 | -------------------------------------------------------------------------------- /KPI-2016-Spring/Letter4.md: -------------------------------------------------------------------------------- 1 | ## Письмо 4 2 | 3 | Дата: 2016-06-06 4 | Группы: ИП-31, ИП-32, ИП-41, ИП-42, ИП-43, ИП-44 5 | 6 | Добрый день, 7 | 8 | 1. Публикую вопросы на экзамен: 9 | https://github.com/HowProgrammingWorks/Letters/tree/master/Docs/SOFTARCH 10 | 11 | 2. Кто имеет задолженности по лабораторным и хочет поднять свой балл, 12 | приходите на контрольную работу по материалу всего курса (см. экзаменационные билеты) 13 | в среду 2016-06-08 в 11:00 в 25-18 14 | 15 | 3. Будет летняя школа по JavaScript и Node.js, о чем сообщу дополнительно 16 | 17 | С уважением, 18 | ~Тимур Шемсединов 19 | -------------------------------------------------------------------------------- /KPI-2017-Autumn/Lecture5.md: -------------------------------------------------------------------------------- 1 | # Лекции #5 "JavaSctipt for Babies" 2 | 3 | Домашнее задание: попробуйте объявлять переменные, функции с простыми 4 | математическими операциями, делать выражения с функциями и операторами, 5 | выводить результаты вычисления выражений на экран. 6 | 7 | Примеры кода смотрим в репозиториях, находя их в оглавлении курса: 8 | https://github.com/HowProgrammingWorks/Index/blob/master/README.ru.md 9 | 10 | Скоро у нас будут дополнительные занятия, повторы лекций, семинары и 11 | кружки программирования, где можно будет выяснить непонятные вещи 12 | сначала у тех студентов, кто уже освоил материал, а если они не смогут 13 | объяснить, то у меня. 14 | -------------------------------------------------------------------------------- /KPI-2017-Autumn/Lecture2.md: -------------------------------------------------------------------------------- 1 | # Лекция #2 Основы JS: переменные, типы и функции 2 | 3 | Примеры кода, которые я показывал на лекции в этих двух репозиториях: 4 | - [Переменные и типы данных](https://github.com/HowProgrammingWorks/DataTypes), 5 | скалярные и ссылочные типы, объекты, массивы и структуры данных. 6 | - [Функции](https://github.com/HowProgrammingWorks/Function) включая анонимные 7 | и лямбда-выражения. 8 | 9 | Домашнее задание: 10 | - Осваиваем синтаксис языка по примерам и 11 | [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript) 12 | - Смотрим примеры, которые были на лекции и пробуем их изменить и запустить. 13 | Для запуска пока можно использовать консоль браузера Chrome, которую можно 14 | вызвать нажатием F12 или установите [Node.js](https://nodejs.org/en/) 15 | -------------------------------------------------------------------------------- /KPI-2017-Summer/Lecture5.md: -------------------------------------------------------------------------------- 1 | # Лекция 5: Замыкания, примеси, обертки, функторы 2 | 3 | Краткий план со ссылками на примеры кода: 4 | 5 | - Чистые функции (pure functions) и побочные эффекты (side effects) 6 | - Суперпозиция (superposition) и [конпозиция](https://github.com/HowProgrammingWorks/Composition) 7 | функций (composition) 8 | - [Частичное применение](https://github.com/HowProgrammingWorks/PartialApplication) 9 | (partial aplication) и каррирование (curry) функций 10 | - [Замыкания](https://github.com/HowProgrammingWorks/Closure) (closure) 11 | - [Функции-обертки](https://github.com/HowProgrammingWorks/Wrapper) (wreppers) 12 | - Функции [высшего порядка](https://github.com/HowProgrammingWorks/HigherOrderFunction) 13 | (higher order function) 14 | - [Проецирование наборов данных](https://github.com/HowProgrammingWorks/Projection) 15 | (dataset projection) 16 | 17 | Домашнее задание я нипишу после завтрашней лекции 18 | -------------------------------------------------------------------------------- /KPI-2017-Autumn/Lecture3.md: -------------------------------------------------------------------------------- 1 | # Лекции #3 "Настройка среды: git, github" 2 | 3 | Инструкции о том, как установить и пользоваться системой контроля версий 4 | git можно найти тут: 5 | [VersionControl](https://github.com/HowProgrammingWorks/VersionControl) 6 | 7 | Домашнее задание: 8 | - На сайте гитхаба сделайте форки репозиториев с примерами JavaScript, 9 | которые мы смотрели на предыдущей лекции: 10 | [DataTypes](https://github.com/HowProgrammingWorks/DataTypes) и 11 | [Function](https://github.com/HowProgrammingWorks/Function) 12 | - Зпустите терминал (я рекомендую поставить terminator) 13 | - Установите git (если он еще не установлен в ОС) 14 | - В своей домашней папке создайте каталог для лабораторок 15 | - Сделайте `git clone` своим формкам репозиториев 16 | - Измените файлы и добавьте их в коммит `git add -A` 17 | - Создайте коммнит `git commit` и дайте ему заголовок и описание 18 | - Отправьте коммит на сервер Github в сфой форк через `git push` 19 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/multiplex/master.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | // Don't emit events from inside of notes windows 4 | if ( window.location.search.match( /receiver/gi ) ) { return; } 5 | 6 | var multiplex = Reveal.getConfig().multiplex; 7 | 8 | var socket = io.connect( multiplex.url ); 9 | 10 | function post() { 11 | 12 | var messageData = { 13 | state: Reveal.getState(), 14 | secret: multiplex.secret, 15 | socketId: multiplex.id 16 | }; 17 | 18 | socket.emit( 'multiplex-statechanged', messageData ); 19 | 20 | }; 21 | 22 | // Monitor events that trigger a change in state 23 | Reveal.addEventListener( 'slidechanged', post ); 24 | Reveal.addEventListener( 'fragmentshown', post ); 25 | Reveal.addEventListener( 'fragmenthidden', post ); 26 | Reveal.addEventListener( 'overviewhidden', post ); 27 | Reveal.addEventListener( 'overviewshown', post ); 28 | Reveal.addEventListener( 'paused', post ); 29 | Reveal.addEventListener( 'resumed', post ); 30 | 31 | }()); -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/night.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Black theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | // Include theme-specific fonts 15 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700); 16 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); 17 | 18 | 19 | // Override theme settings (see ../template/settings.scss) 20 | $backgroundColor: #111; 21 | 22 | $mainFont: 'Open Sans', sans-serif; 23 | $linkColor: #e7ad52; 24 | $linkColorHover: lighten( $linkColor, 20% ); 25 | $headingFont: 'Montserrat', Impact, sans-serif; 26 | $headingTextShadow: none; 27 | $headingLetterSpacing: -0.03em; 28 | $headingTextTransform: none; 29 | $selectionBackgroundColor: #e7ad52; 30 | $mainFontSize: 30px; 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/serif.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is brown. 4 | * 5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. 6 | */ 7 | 8 | 9 | // Default mixins and settings ----------------- 10 | @import "../template/mixins"; 11 | @import "../template/settings"; 12 | // --------------------------------------------- 13 | 14 | 15 | 16 | // Override theme settings (see ../template/settings.scss) 17 | $mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 18 | $mainColor: #000; 19 | $headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; 20 | $headingColor: #383D3D; 21 | $headingTextShadow: none; 22 | $headingTextTransform: none; 23 | $backgroundColor: #F0F1EB; 24 | $linkColor: #51483D; 25 | $linkColorHover: lighten( $linkColor, 20% ); 26 | $selectionBackgroundColor: #26351C; 27 | 28 | .reveal a { 29 | line-height: 1.3em; 30 | } 31 | 32 | 33 | // Theme template ------------------------------ 34 | @import "../template/theme"; 35 | // --------------------------------------------- 36 | -------------------------------------------------------------------------------- /KPI-2016-Spring/Letter5.md: -------------------------------------------------------------------------------- 1 | ## Письмо 5 2 | 3 | Дата: 2016-06-12 4 | Группы: ИП-31, ИП-32, ИП-41, ИП-42, ИП-43, ИП-44 5 | 6 | Добрый день, 7 | 8 | 1. Консультация по экзамену будет для всех групп в 13 июня в понедельник в 9 | 10:25 в 25 комнате 18 корпуса. С экзаменационными вопросами предварительно 10 | ознакомиться можно тут и оставить тут же свои вопросы и комментарии: 11 | https://github.com/HowProgrammingWorks/Letters/tree/master/Docs/SOFTARCH 12 | 13 | 2. Внимание! Экзамены будут по такому графику, обратите внимание на время: 14 | 15 | | Группа | Дата | Время | Где | 16 | |--- |--- |--- |--- | 17 | | ИП-44 | ПН 13 яюня | 12:00 | 25-18 | 18 | | ИП-43 | ВТ 14 яюня | 10:25 | 25-18 | 19 | | ИП-31 | СР 15 яюня | 10:25 | 25-18 | 20 | | ИП-32 | СБ 18 яюня | 10:25 | 25-18 | 21 | | ИП-41 | ВТ 21 яюня | 10:25 | 25-18 | 22 | | ИП-42 | СР 22 яюня | 10:25 | 25-18 | 23 | 24 | И еще: Кто ищет работу по программированию и хочет летом пойти на практику или 25 | сразу на работу и пока не знает куда и как, то можете писать мне на почту 26 | с указанием своих предпочтений по языку, стеку технологий и тематике работы. 27 | Ко мне обращаются компании и я могу рекомендовать вас. 28 | 29 | С уважением, 30 | ~Тимур Шемсединов 31 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/template/settings.scss: -------------------------------------------------------------------------------- 1 | // Base settings for all themes that can optionally be 2 | // overridden by the super-theme 3 | 4 | // Background of the presentation 5 | $backgroundColor: #2b2b2b; 6 | 7 | // Primary/body text 8 | $mainFont: 'Lato', sans-serif; 9 | $mainFontSize: 36px; 10 | $mainColor: #eee; 11 | 12 | // Vertical spacing between blocks of text 13 | $blockMargin: 20px; 14 | 15 | // Headings 16 | $headingMargin: 0 0 $blockMargin 0; 17 | $headingFont: 'League Gothic', Impact, sans-serif; 18 | $headingColor: #eee; 19 | $headingLineHeight: 1.2; 20 | $headingLetterSpacing: normal; 21 | $headingTextTransform: uppercase; 22 | $headingTextShadow: none; 23 | $headingFontWeight: normal; 24 | $heading1TextShadow: $headingTextShadow; 25 | 26 | $heading1Size: 3.77em; 27 | $heading2Size: 2.11em; 28 | $heading3Size: 1.55em; 29 | $heading4Size: 1.00em; 30 | 31 | // Links and actions 32 | $linkColor: #13DAEC; 33 | $linkColorHover: lighten( $linkColor, 20% ); 34 | 35 | // Text selection 36 | $selectionBackgroundColor: #FF5E99; 37 | $selectionColor: #fff; 38 | 39 | // Generates the presentation background, can be overridden 40 | // to return a background image or gradient 41 | @mixin bodyBackground() { 42 | background: $backgroundColor; 43 | } -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/league.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * League theme for reveal.js. 3 | * 4 | * This was the default theme pre-3.0.0. 5 | * 6 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 7 | */ 8 | 9 | 10 | // Default mixins and settings ----------------- 11 | @import "../template/mixins"; 12 | @import "../template/settings"; 13 | // --------------------------------------------- 14 | 15 | 16 | 17 | // Include theme-specific fonts 18 | @import url(../../lib/font/league-gothic/league-gothic.css); 19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 20 | 21 | // Override theme settings (see ../template/settings.scss) 22 | $headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); 23 | $heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); 24 | 25 | // Background generator 26 | @mixin bodyBackground() { 27 | @include radial-gradient( rgba(28,30,32,1), rgba(85,90,95,1) ); 28 | } 29 | 30 | 31 | 32 | // Theme template ------------------------------ 33 | @import "../template/theme"; 34 | // --------------------------------------------- -------------------------------------------------------------------------------- /KPI-2017-Summer/Lecture4.md: -------------------------------------------------------------------------------- 1 | # Лекция 4: Введение в Node.js и серверный JavaScript 2 | 3 | - Презентация тут: [node-kpi-2017.pdf](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Summer/node-kpi-2017.pdf) 4 | - В качестве домашнего задания берем пустой шаблон [HowProgrammingWorks/Project](https://github.com/HowProgrammingWorks/Project) 5 | - Клонируем через `git clone https://github.com/HowProgrammingWorks/Project` 6 | - Устанавливаем зависимости через `npm install` 7 | - Добавить в него через `npm install concolor` библиотеку 8 | [concolor](https://www.npmjs.com/package/concolor), тут же лежит документация, 9 | как делать разноцветный вывод и задавать стили шрифта 10 | - Открыть файл `main.js` и подгрузить `concolor` через `require` по примеру 11 | того, как подгружена библиотека `metasync` 12 | - При помощи `Object.keys(metasync)` берем все методы из `metasync` в массив 13 | строк и итерируем их через `for..of` или `Array.prototype.forEach()`. 14 | Подсмотриеть синтаксис можно на [MDN](https://developer.mozilla.org/) 15 | - Теперь можно вывести их на экран, добавляя кол-во параметров и оформляя 16 | вывод разными цветами 17 | - Проверяем сиснтаксис через `eslint .` или `npm run lint` 18 | - Запускаем через `node main` 19 | - Все вмест (линтер и запуск) через `npm test` 20 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/css/zenburn.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov 4 | based on dark.css by Ivan Sagalaev 5 | 6 | */ 7 | 8 | .hljs { 9 | display: block; 10 | overflow-x: auto; 11 | padding: 0.5em; 12 | background: #3f3f3f; 13 | color: #dcdcdc; 14 | } 15 | 16 | .hljs-keyword, 17 | .hljs-selector-tag, 18 | .hljs-tag { 19 | color: #e3ceab; 20 | } 21 | 22 | .hljs-template-tag { 23 | color: #dcdcdc; 24 | } 25 | 26 | .hljs-number { 27 | color: #8cd0d3; 28 | } 29 | 30 | .hljs-variable, 31 | .hljs-template-variable, 32 | .hljs-attribute { 33 | color: #efdcbc; 34 | } 35 | 36 | .hljs-literal { 37 | color: #efefaf; 38 | } 39 | 40 | .hljs-subst { 41 | color: #8f8f8f; 42 | } 43 | 44 | .hljs-title, 45 | .hljs-name, 46 | .hljs-selector-id, 47 | .hljs-selector-class, 48 | .hljs-section, 49 | .hljs-type { 50 | color: #efef8f; 51 | } 52 | 53 | .hljs-symbol, 54 | .hljs-bullet, 55 | .hljs-link { 56 | color: #dca3a3; 57 | } 58 | 59 | .hljs-deletion, 60 | .hljs-string, 61 | .hljs-built_in, 62 | .hljs-builtin-name { 63 | color: #cc9393; 64 | } 65 | 66 | .hljs-addition, 67 | .hljs-comment, 68 | .hljs-quote, 69 | .hljs-meta { 70 | color: #7f9f7f; 71 | } 72 | 73 | 74 | .hljs-emphasis { 75 | font-style: italic; 76 | } 77 | 78 | .hljs-strong { 79 | font-weight: bold; 80 | } 81 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/simple.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is darkblue. 4 | * 5 | * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed. 6 | * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 7 | */ 8 | 9 | 10 | // Default mixins and settings ----------------- 11 | @import "../template/mixins"; 12 | @import "../template/settings"; 13 | // --------------------------------------------- 14 | 15 | 16 | 17 | // Include theme-specific fonts 18 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); 19 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 20 | 21 | 22 | // Override theme settings (see ../template/settings.scss) 23 | $mainFont: 'Lato', sans-serif; 24 | $mainColor: #000; 25 | $headingFont: 'News Cycle', Impact, sans-serif; 26 | $headingColor: #000; 27 | $headingTextShadow: none; 28 | $headingTextTransform: none; 29 | $backgroundColor: #fff; 30 | $linkColor: #00008B; 31 | $linkColorHover: lighten( $linkColor, 20% ); 32 | $selectionBackgroundColor: rgba(0, 0, 0, 0.99); 33 | 34 | 35 | 36 | // Theme template ------------------------------ 37 | @import "../template/theme"; 38 | // --------------------------------------------- -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/sky.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Sky theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | 15 | // Include theme-specific fonts 16 | @import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); 17 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); 18 | 19 | 20 | // Override theme settings (see ../template/settings.scss) 21 | $mainFont: 'Open Sans', sans-serif; 22 | $mainColor: #333; 23 | $headingFont: 'Quicksand', sans-serif; 24 | $headingColor: #333; 25 | $headingLetterSpacing: -0.08em; 26 | $headingTextShadow: none; 27 | $backgroundColor: #f7fbfc; 28 | $linkColor: #3b759e; 29 | $linkColorHover: lighten( $linkColor, 20% ); 30 | $selectionBackgroundColor: #134674; 31 | 32 | // Fix links so they are not cut off 33 | .reveal a { 34 | line-height: 1.3em; 35 | } 36 | 37 | // Background generator 38 | @mixin bodyBackground() { 39 | @include radial-gradient( #add9e4, #f7fbfc ); 40 | } 41 | 42 | 43 | 44 | // Theme template ------------------------------ 45 | @import "../template/theme"; 46 | // --------------------------------------------- 47 | -------------------------------------------------------------------------------- /KPI-2017-Summer/Meetings.md: -------------------------------------------------------------------------------- 1 | ## Расписание летней школы 2017 года 2 | 3 | Все лекции проводятся в 7 корпусе КПИ, аудитория 101 4 | 5 | | Дата | Время | Описание | 6 | |--- |--- |--- | 7 | | сб 19 августа | 13:00-16:00 | [Обзор курса и обсуждение структуры курса](https://www.meetup.com/NodeUA/events/242527631/) | 8 | | пн 21 августа | 19:00-21:00 | [Настройка среды: git, node.js, npm, eslint, ci](https://www.meetup.com/NodeUA/events/242527689/) | 9 | | вт 22 августа | 19:00-21:00 | [JavaScript, как ассемблер нашего времени](https://www.meetup.com/NodeUA/events/242527741/) | 10 | | ср 23 августа | 19:00-21:00 | [Введение в Node.js и серверный JavaScript](https://www.meetup.com/NodeUA/events/242527780/) | 11 | | пт 25 августа | 19:00-21:00 | [Замыкания, примеси, обертки, функторы, события](https://www.meetup.com/NodeUA/events/242527807/) | 12 | | сб 26 августа | 13:00-18:00 | [Файлы, потоки, буферы, сеть, сокеты, ошибки](https://www.meetup.com/NodeUA/events/242527821/) | 13 | | пи 28 августа | 19:00-21:00 | [Асинхронное программирование](https://www.meetup.com/NodeUA/events/242527845/) | 14 | | вт 29 августа | 19:00-21:00 | [Песочницы, IoC, DI, IPC, структура приложений](https://www.meetup.com/NodeUA/events/242527908/) | 15 | | ср 30 августа | 19:00-21:00 | [Архитектура приложений и метапрограммирование](https://www.meetup.com/NodeUA/events/242527949/) | 16 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/beige.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Beige theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | 15 | // Include theme-specific fonts 16 | @import url(../../lib/font/league-gothic/league-gothic.css); 17 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 18 | 19 | 20 | // Override theme settings (see ../template/settings.scss) 21 | $mainColor: #333; 22 | $headingColor: #333; 23 | $headingTextShadow: none; 24 | $backgroundColor: #f7f3de; 25 | $linkColor: #8b743d; 26 | $linkColorHover: lighten( $linkColor, 20% ); 27 | $selectionBackgroundColor: rgba(79, 64, 28, 0.99); 28 | $heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); 29 | 30 | // Background generator 31 | @mixin bodyBackground() { 32 | @include radial-gradient( rgba(247,242,211,1), rgba(255,255,255,1) ); 33 | } 34 | 35 | 36 | 37 | // Theme template ------------------------------ 38 | @import "../template/theme"; 39 | // --------------------------------------------- -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/black.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Black theme for reveal.js. This is the opposite of the 'white' theme. 3 | * 4 | * By Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | // Include theme-specific fonts 15 | @import url(../../lib/font/source-sans-pro/source-sans-pro.css); 16 | 17 | 18 | // Override theme settings (see ../template/settings.scss) 19 | $backgroundColor: #222; 20 | 21 | $mainColor: #fff; 22 | $headingColor: #fff; 23 | 24 | $mainFontSize: 38px; 25 | $mainFont: 'Source Sans Pro', Helvetica, sans-serif; 26 | $headingFont: 'Source Sans Pro', Helvetica, sans-serif; 27 | $headingTextShadow: none; 28 | $headingLetterSpacing: normal; 29 | $headingTextTransform: uppercase; 30 | $headingFontWeight: 600; 31 | $linkColor: #42affa; 32 | $linkColorHover: lighten( $linkColor, 15% ); 33 | $selectionBackgroundColor: lighten( $linkColor, 25% ); 34 | 35 | $heading1Size: 2.5em; 36 | $heading2Size: 1.6em; 37 | $heading3Size: 1.3em; 38 | $heading4Size: 1.0em; 39 | 40 | section.has-light-background { 41 | &, h1, h2, h3, h4, h5, h6 { 42 | color: #222; 43 | } 44 | } 45 | 46 | 47 | // Theme template ------------------------------ 48 | @import "../template/theme"; 49 | // --------------------------------------------- -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/white.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * White theme for reveal.js. This is the opposite of the 'black' theme. 3 | * 4 | * By Hakim El Hattab, http://hakim.se 5 | */ 6 | 7 | 8 | // Default mixins and settings ----------------- 9 | @import "../template/mixins"; 10 | @import "../template/settings"; 11 | // --------------------------------------------- 12 | 13 | 14 | // Include theme-specific fonts 15 | @import url(../../lib/font/source-sans-pro/source-sans-pro.css); 16 | 17 | 18 | // Override theme settings (see ../template/settings.scss) 19 | $backgroundColor: #fff; 20 | 21 | $mainColor: #222; 22 | $headingColor: #222; 23 | 24 | $mainFontSize: 38px; 25 | $mainFont: 'Source Sans Pro', Helvetica, sans-serif; 26 | $headingFont: 'Source Sans Pro', Helvetica, sans-serif; 27 | $headingTextShadow: none; 28 | $headingLetterSpacing: normal; 29 | $headingTextTransform: uppercase; 30 | $headingFontWeight: 600; 31 | $linkColor: #2a76dd; 32 | $linkColorHover: lighten( $linkColor, 15% ); 33 | $selectionBackgroundColor: lighten( $linkColor, 25% ); 34 | 35 | $heading1Size: 2.5em; 36 | $heading2Size: 1.6em; 37 | $heading3Size: 1.3em; 38 | $heading4Size: 1.0em; 39 | 40 | section.has-dark-background { 41 | &, h1, h2, h3, h4, h5, h6 { 42 | color: #fff; 43 | } 44 | } 45 | 46 | 47 | // Theme template ------------------------------ 48 | @import "../template/theme"; 49 | // --------------------------------------------- -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/print-pdf/print-pdf.js: -------------------------------------------------------------------------------- 1 | /** 2 | * phantomjs script for printing presentations to PDF. 3 | * 4 | * Example: 5 | * phantomjs print-pdf.js "http://lab.hakim.se/reveal-js?print-pdf" reveal-demo.pdf 6 | * 7 | * By Manuel Bieh (https://github.com/manuelbieh) 8 | */ 9 | 10 | // html2pdf.js 11 | var page = new WebPage(); 12 | var system = require( 'system' ); 13 | 14 | var slideWidth = system.args[3] ? system.args[3].split( 'x' )[0] : 960; 15 | var slideHeight = system.args[3] ? system.args[3].split( 'x' )[1] : 700; 16 | 17 | page.viewportSize = { 18 | width: slideWidth, 19 | height: slideHeight 20 | }; 21 | 22 | // TODO 23 | // Something is wrong with these config values. An input 24 | // paper width of 1920px actually results in a 756px wide 25 | // PDF. 26 | page.paperSize = { 27 | width: Math.round( slideWidth * 2 ), 28 | height: Math.round( slideHeight * 2 ), 29 | border: 0 30 | }; 31 | 32 | var inputFile = system.args[1] || 'index.html?print-pdf'; 33 | var outputFile = system.args[2] || 'slides.pdf'; 34 | 35 | if( outputFile.match( /\.pdf$/gi ) === null ) { 36 | outputFile += '.pdf'; 37 | } 38 | 39 | console.log( 'Printing PDF (Paper size: '+ page.paperSize.width + 'x' + page.paperSize.height +')' ); 40 | 41 | page.open( inputFile, function( status ) { 42 | window.setTimeout( function() { 43 | console.log( 'Printed successfully' ); 44 | page.render( outputFile ); 45 | phantom.exit(); 46 | }, 1000 ); 47 | } ); 48 | 49 | -------------------------------------------------------------------------------- /Docs/PROTOCOLS/Protocols-Questions-01.md: -------------------------------------------------------------------------------- 1 | Вопросы на первую контрольную по проектированию протоколов (2 вопроса в на человека): 2 | 3 | Объяснить понятия: 4 | 1. Сериализация объекта 5 | 2. Десериализация объекта 6 | 3. Рукопожатие протокола 7 | 4. Хартбит протокола 8 | 5. Заголовок и тело пакета 9 | 6. Таймаут протокола 10 | 7. Парсинг синтаксических структур 11 | 8. BNF, ABNF, EBNF 12 | 9. Регулярные выражения 13 | 10. Пакет и поток 14 | 11. Сетевой фрейм 15 | 12. Сокет 16 | 13. Протокол 17 | 14. Интерфейс 18 | 15. Уровень (в модели ISO/OSI) 19 | 16. RPC 20 | 17. Очереди MQ 21 | 18. Шина событий 22 | 19. Хост и IP 23 | 20. Порт в TCP/IP 24 | 21. Маршрутизация 25 | 22. Разрешение имен 26 | 23. Связывание (binding) 27 | 24. Маршалинг 28 | 25. API 29 | 26. Интроспекция интерфейса и протокола 30 | 27. Стек протоколов 31 | 28. Проксирование 32 | 29. Реверсивное проксирование 33 | 30. Балансировка нагрузки 34 | 31. Приклеивание (IP sticky) 35 | 32. Сессия протокола 36 | 33. Прикладные протоколы 37 | 34. Межсетевой протокол 38 | 35. Транспортный протокол 39 | 36. Прикладной протокол 40 | 41 | Раскрыть отличия: 42 | 1. С установлением соединения и без установления 43 | 2. Точка-точка и широковещательная передача 44 | 3. Авторизация и аутентификация 45 | 4. Пакетные и потоковые протоколы 46 | 5. Парсинг регулярными выражениями и парсинг операциями со строками 47 | 6. Синхронное и асинхронное взаимодействие 48 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/moon.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Solarized Dark theme for reveal.js. 3 | * Author: Achim Staebler 4 | */ 5 | 6 | 7 | // Default mixins and settings ----------------- 8 | @import "../template/mixins"; 9 | @import "../template/settings"; 10 | // --------------------------------------------- 11 | 12 | 13 | 14 | // Include theme-specific fonts 15 | @import url(../../lib/font/league-gothic/league-gothic.css); 16 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 17 | 18 | /** 19 | * Solarized colors by Ethan Schoonover 20 | */ 21 | html * { 22 | color-profile: sRGB; 23 | rendering-intent: auto; 24 | } 25 | 26 | // Solarized colors 27 | $base03: #002b36; 28 | $base02: #073642; 29 | $base01: #586e75; 30 | $base00: #657b83; 31 | $base0: #839496; 32 | $base1: #93a1a1; 33 | $base2: #eee8d5; 34 | $base3: #fdf6e3; 35 | $yellow: #b58900; 36 | $orange: #cb4b16; 37 | $red: #dc322f; 38 | $magenta: #d33682; 39 | $violet: #6c71c4; 40 | $blue: #268bd2; 41 | $cyan: #2aa198; 42 | $green: #859900; 43 | 44 | // Override theme settings (see ../template/settings.scss) 45 | $mainColor: $base1; 46 | $headingColor: $base2; 47 | $headingTextShadow: none; 48 | $backgroundColor: $base03; 49 | $linkColor: $blue; 50 | $linkColorHover: lighten( $linkColor, 20% ); 51 | $selectionBackgroundColor: $magenta; 52 | 53 | 54 | 55 | // Theme template ------------------------------ 56 | @import "../template/theme"; 57 | // --------------------------------------------- 58 | -------------------------------------------------------------------------------- /KPI-2017-Autumn/Lecture7.md: -------------------------------------------------------------------------------- 1 | # Лекции #7 "Введение в Node.js" 2 | 3 | ### Ссылки: 4 | - [Пример проекта на JavaScript для Node.js](https://github.com/HowProgrammingWorks/Project) 5 | - Презентация с лекции лежит тут: 6 | [node-kpi-2017.pdf](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Summer/node-kpi-2017.pdf) 7 | - Простая установка через [nvm (node version manager)](https://github.com/creationix/nvm) 8 | - Сайт [Node.js](https://nodejs.org/en/) 9 | - Менеджер пакетов [npm](https://www.npmjs.com/) 10 | 11 | ### Задание: 12 | - Установить Node.js или обновить версию (подходит версия >= 6.0, лучше ставить 8.5) 13 | - Попробовать сделать проект 14 | - создать пустой каталог, войти в него и написать `npm init`, 15 | ввести обязательные поля 16 | - создать файл `main.js` и написать в нем немного кода 17 | - запустить файл из консоли `node main` или `node main.js` 18 | - добавьте библиотеку в зависимости `npm install concolor` 19 | - подключите зависимость через `require` 20 | - попробуйте вывести что-то в консоль разными цветами с использованием 21 | `concolor`, документация находится тут: https://www.npmjs.com/package/concolor 22 | - Попробуйте подключить встроенный модуль os 23 | - Его не нужно устанавливать через npm 24 | - Просто получите ссылку на него через `require` 25 | - Документация к модулю: https://nodejs.org/api/os.html 26 | - Так же просмотрите возможности модулей: 27 | - `process` https://nodejs.org/api/process.html 28 | - `readline` https://nodejs.org/api/readline.html 29 | - `console` https://nodejs.org/api/console.html 30 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/js/classList.js: -------------------------------------------------------------------------------- 1 | /*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/ 2 | if(typeof document!=="undefined"&&!("classList" in document.createElement("a"))){(function(j){var a="classList",f="prototype",m=(j.HTMLElement||j.Element)[f],b=Object,k=String[f].trim||function(){return this.replace(/^\s+|\s+$/g,"")},c=Array[f].indexOf||function(q){var p=0,o=this.length;for(;p { 19 | text += 'Задание для студента №' + personTask.personId + '\n'; 20 | personTask.tasks.forEach(aTask => { 21 | text += ( 22 | 'Задание №' + aTask.order + '\n' + 23 | 'Текст задания: ' + aTask.task + '\n' 24 | ); 25 | aTask.variants.forEach(variant => { 26 | text += 'Вариант: ' + variant + '\n'; 27 | }); 28 | text += '\n'; 29 | }); 30 | text += '--------------------\n'; 31 | }); 32 | fs.writeFileSync('tasks.txt', text); 33 | 34 | let csv = ''; 35 | taskList.forEach(personTask => { 36 | csv += 'Задание для студента №;"' + personTask.personId + '"\n'; 37 | personTask.tasks.forEach(aTask => { 38 | csv += ( 39 | '№' + aTask.order + ';' + aTask.task + ';' 40 | ); 41 | aTask.variants.forEach(variant => { 42 | csv += variant + ';'; 43 | }); 44 | csv += '\n'; 45 | }); 46 | csv += '\n\n'; 47 | }); 48 | fs.writeFileSync('tasks.csv', csv); 49 | 50 | function generateTask(personId) { 51 | let result = { personId, tasks: [] }; 52 | data.forEach((item, n) => { 53 | let aTask = { 54 | order: n + 1, 55 | task: item.task, 56 | variants: [] 57 | }; 58 | for (let i = 0; i < item.select; i++) { 59 | let v = (personId + i) % item.options.length; 60 | aTask.variants.push(item.options[v]); 61 | } 62 | result.tasks.push(aTask); 63 | }); 64 | return result; 65 | } 66 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/math/math.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A plugin which enables rendering of math equations inside 3 | * of reveal.js slides. Essentially a thin wrapper for MathJax. 4 | * 5 | * @author Hakim El Hattab 6 | */ 7 | var RevealMath = window.RevealMath || (function(){ 8 | 9 | var options = Reveal.getConfig().math || {}; 10 | options.mathjax = options.mathjax || 'https://cdn.mathjax.org/mathjax/latest/MathJax.js'; 11 | options.config = options.config || 'TeX-AMS_HTML-full'; 12 | 13 | loadScript( options.mathjax + '?config=' + options.config, function() { 14 | 15 | MathJax.Hub.Config({ 16 | messageStyle: 'none', 17 | tex2jax: { 18 | inlineMath: [['$','$'],['\\(','\\)']] , 19 | skipTags: ['script','noscript','style','textarea','pre'] 20 | }, 21 | skipStartupTypeset: true 22 | }); 23 | 24 | // Typeset followed by an immediate reveal.js layout since 25 | // the typesetting process could affect slide height 26 | MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] ); 27 | MathJax.Hub.Queue( Reveal.layout ); 28 | 29 | // Reprocess equations in slides when they turn visible 30 | Reveal.addEventListener( 'slidechanged', function( event ) { 31 | 32 | MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, event.currentSlide ] ); 33 | 34 | } ); 35 | 36 | } ); 37 | 38 | function loadScript( url, callback ) { 39 | 40 | var head = document.querySelector( 'head' ); 41 | var script = document.createElement( 'script' ); 42 | script.type = 'text/javascript'; 43 | script.src = url; 44 | 45 | // Wrapper for callback to make sure it only fires once 46 | var finish = function() { 47 | if( typeof callback === 'function' ) { 48 | callback.call(); 49 | callback = null; 50 | } 51 | } 52 | 53 | script.onload = finish; 54 | 55 | // IE 56 | script.onreadystatechange = function() { 57 | if ( this.readyState === 'loaded' ) { 58 | finish(); 59 | } 60 | } 61 | 62 | // Normal browsers 63 | head.appendChild( script ); 64 | 65 | } 66 | 67 | })(); 68 | -------------------------------------------------------------------------------- /KPI-2017-Autumn/Lecture1.md: -------------------------------------------------------------------------------- 1 | # Лекция #1 Введение в программную инженерию 2 | 3 | - Учебные материалы и справочник по JavaScript лучше всего брать на 4 | MDN (Mozilla Developer Network) предпочтительно на 5 | [английском](https://developer.mozilla.org/en-US/docs/Web/JavaScript) языке, 6 | но есть и на [русском](https://developer.mozilla.org/ru/docs/Web/JavaScript), 7 | и на [украинском](https://developer.mozilla.org/uk/docs/Web/JavaScript), но там 8 | не все переведено и может быть гораздо меньше информации в переводах. 9 | - Все учебные примеры, которые мы смотрим на лекциях лежат в Github в организации 10 | [HowProgrammingWorks](https://github.com/HowProgrammingWorks). Там очень много 11 | репозиториев, поэтому есть 12 | [интекс](https://github.com/HowProgrammingWorks/Index/blob/master/README.ru.md) 13 | - Будет хорошо, если вы посмотрите 4 видеолекуии 14 | [Александра Степанова](https://www.youtube.com/playlist?list=PLHhi8ymDMrQb4sVDBsN5y14X4BoAUU6Sh) 15 | по связи математики и программирования. 16 | - Расписание лекций всегда можно найти в 17 | [календаре](https://www.meetup.com/HowProgrammingWorks/events/) 18 | который постоянно дополняется. Календарь содержит лекции для 1, 3 и 4 курсов, 19 | я уточняю, какие из них вам обязательны, а какие по желанию. Скоро в календаре 20 | появятся еще консультации, семинары и встречи с более старшими программистами, 21 | которые могут поделиться опытом и которым можно задать вопросы. 22 | - Для тех, кому материал очень сложный, будут отдельные лекции 23 | "JavaScript for Babies", следите за каналом в телеграме и календарем. 24 | - Для тех, кому материал простой и не интересный, тоже будут отдельные занятия, 25 | о которых я объявлю. Но можно писать мне в телеграм и на почту. 26 | - В качестве операционной системы нам подойдет любой дистрибутив Linux, Unix и 27 | MacOS, можно использовать даже виндовс, но это будет мучение и я рекомендую 28 | установить [Fedora](https://getfedora.org/ru/) как основную или вторую 29 | операционную систему. Не бойтесь, это гораздо проще, чем кажется. И осваивайте 30 | командную строку. 31 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/multiplex/index.js: -------------------------------------------------------------------------------- 1 | var http = require('http'); 2 | var express = require('express'); 3 | var fs = require('fs'); 4 | var io = require('socket.io'); 5 | var crypto = require('crypto'); 6 | 7 | var app = express(); 8 | var staticDir = express.static; 9 | var server = http.createServer(app); 10 | 11 | io = io(server); 12 | 13 | var opts = { 14 | port: process.env.PORT || 1948, 15 | baseDir : __dirname + '/../../' 16 | }; 17 | 18 | io.on( 'connection', function( socket ) { 19 | socket.on('multiplex-statechanged', function(data) { 20 | if (typeof data.secret == 'undefined' || data.secret == null || data.secret === '') return; 21 | if (createHash(data.secret) === data.socketId) { 22 | data.secret = null; 23 | socket.broadcast.emit(data.socketId, data); 24 | }; 25 | }); 26 | }); 27 | 28 | [ 'css', 'js', 'plugin', 'lib' ].forEach(function(dir) { 29 | app.use('/' + dir, staticDir(opts.baseDir + dir)); 30 | }); 31 | 32 | app.get("/", function(req, res) { 33 | res.writeHead(200, {'Content-Type': 'text/html'}); 34 | 35 | var stream = fs.createReadStream(opts.baseDir + '/index.html'); 36 | stream.on('error', function( error ) { 37 | res.write('

reveal.js multiplex server.

Generate token'); 38 | res.end(); 39 | }); 40 | stream.on('readable', function() { 41 | stream.pipe(res); 42 | }); 43 | }); 44 | 45 | app.get("/token", function(req,res) { 46 | var ts = new Date().getTime(); 47 | var rand = Math.floor(Math.random()*9999999); 48 | var secret = ts.toString() + rand.toString(); 49 | res.send({secret: secret, socketId: createHash(secret)}); 50 | }); 51 | 52 | var createHash = function(secret) { 53 | var cipher = crypto.createCipher('blowfish', secret); 54 | return(cipher.final('hex')); 55 | }; 56 | 57 | // Actually listen 58 | server.listen( opts.port || null ); 59 | 60 | var brown = '\033[33m', 61 | green = '\033[32m', 62 | reset = '\033[0m'; 63 | 64 | console.log( brown + "reveal.js:" + reset + " Multiplex running on port " + green + opts.port + reset ); -------------------------------------------------------------------------------- /Tasks/JavaScript/1-Basics/data.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | task: 'Объявить массив 25 строк', 4 | select: 1, 5 | options: [ 6 | 'города', 'реки', 'страны', 'острова', 'планеты', 'животные', 'герои книг', 7 | 'писатели фантасты', 'писатели худлит', 'поэты', 'композиторы', 'музыканты', 8 | 'ученые', 'императоры', 'президенты', 'музыкальные группы', 'марки автомобилей', 9 | 'специальности', 'галактики', 'цветы', 'деревья', 'собаки', 'цвета', 'фильмы', 10 | 'науки', 'напитки', 'блюда', 'одежда', 'мебель', 'музыкальные инструменты', 11 | 'операционные системы', 'валюты', 'обувь', 'национальности', 'философы', 'птицы', 12 | 'рыбы', 'киностудии', 'университеты', 'игры', 'художники', 'спортсмены', 'грибы' 13 | ] 14 | }, 15 | { 16 | task: 'Отфильтровать', 17 | select: 1, 18 | options: [ 19 | 'подходят не длинее 10 букв', 20 | 'подходят только с одним словом в названии', 21 | 'подходят только с двумя словами в названии', 22 | 'в названии могут быть только буквы', 23 | 'должно начинаться с заглавной буквы', 24 | 'должно начинаться со строчной буквы', 25 | 'не должно содержать дефис', 26 | 'должно содержать дефис' 27 | ] 28 | }, 29 | { 30 | task: 'Отсортировать', 31 | select: 1, 32 | options: [ 33 | 'по алфавиту в прямом порядке А-Я', 34 | 'по алфавиту в обратном порядке Я-А', 35 | 'по возростанию длины слов', 36 | 'по убыванию длины слов', 37 | 'по кол-ву гласных букв', 38 | 'по кол-ву слов в названии' 39 | ] 40 | }, 41 | { 42 | task: 'Для каждого элемента сгенерировать', 43 | select: 2, 44 | options: [ 45 | 'массив кодов символов', 46 | 'массив слов, встречающихся в строке', 47 | 'массив частоты использования символов', 48 | 'массив встречающихся дифтонгов' 49 | ] 50 | }, 51 | { 52 | task: 'Создать API для работы с массивом', 53 | select: 2, 54 | options: [ 55 | 'поиск строк в массиве по подстроке', 56 | 'поиск строк массива в тексте', 57 | 'хеширование и поиск по хешу', 58 | 'шифрование и дешифрование' 59 | ] 60 | } 61 | ]; 62 | -------------------------------------------------------------------------------- /KPI-2017-Spring/Letter2.md: -------------------------------------------------------------------------------- 1 | ## Введение в Node.js 2 | 3 | Дата: 2017-03-02 4 | Группы: ИП-51, ИП-52, ИП-53, ИП-54 5 | 6 | Добрый день, 7 | 8 | Пришло время делать лабораторные работы. Повторяю, что они у нас не 9 | обязательные, как и посещение. Это нужно, в первую очередь, вам, как возможность 10 | показать мне свой код и получить советы, как его улучшить по размеру, стилю, 11 | производительности и концептуально. Мы начнем с чего-то простого, для того, 12 | чтобы вы потренировались писать на JavaScript. Задания у нас по выбору, любое 13 | из перечисленных ниже, можно несколько, а если кому интересно что-то свое, то 14 | можете написать такое, чтобы меня удивить. Все задания я завел в GitHub, 15 | в соответствующих репозиториях. 16 | 17 | Cписок заданий: 18 | 1. Переписать с прототипного наследования на классовое пример с двусвязными 19 | списками: https://github.com/HowProgrammingWorks/LinkedList/issues/5 20 | 2. Добавить в LinkedList еще методы, можно взять из списка, можно свои: 21 | https://github.com/HowProgrammingWorks/LinkedList/issues/6 22 | 3. Переписать дерево с прототипного наследования на классовое: 23 | https://github.com/HowProgrammingWorks/TreeNode/issues/7 24 | 4. Добавить дереву методов: 25 | https://github.com/HowProgrammingWorks/TreeNode/issues/6 26 | 5. Написать оринтированный граф (можно на прототипах, классах, функциях) 27 | https://github.com/HowProgrammingWorks/DirectedGraph 28 | 6. Модифицировать https://github.com/HowProgrammingWorks/KnowledgeMap 29 | Задания есть тут: https://github.com/HowProgrammingWorks/KnowledgeMap/issues 30 | 7. Сравнить производительность прототипного, классового и наследования на 31 | замыканиях, в эту репу: https://github.com/HowProgrammingWorks/Benchmark 32 | 33 | Кто хочет, вместо лаб или дополнительно к ним нужно помочь преподавателю АСОИУ, 34 | Баклану Игорю Всеволодовичу, который у вас будет читать декларативное и 35 | функциональное программирование, переложить его материалы и примеры кода с сайта 36 | http://baklaniv.at.ua/ (на котором куча рекламы и не очень удобно), на GitHub в 37 | эту нашу организацию https://github.com/HowProgrammingWorks/ 38 | 39 | С уважением, 40 | ~Тимур Шемсединов 41 | 42 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/notes-server/index.js: -------------------------------------------------------------------------------- 1 | var http = require('http'); 2 | var express = require('express'); 3 | var fs = require('fs'); 4 | var io = require('socket.io'); 5 | var Mustache = require('mustache'); 6 | 7 | var app = express(); 8 | var staticDir = express.static; 9 | var server = http.createServer(app); 10 | 11 | io = io(server); 12 | 13 | var opts = { 14 | port : 1947, 15 | baseDir : __dirname + '/../../' 16 | }; 17 | 18 | io.on( 'connection', function( socket ) { 19 | 20 | socket.on( 'new-subscriber', function( data ) { 21 | socket.broadcast.emit( 'new-subscriber', data ); 22 | }); 23 | 24 | socket.on( 'statechanged', function( data ) { 25 | delete data.state.overview; 26 | socket.broadcast.emit( 'statechanged', data ); 27 | }); 28 | 29 | socket.on( 'statechanged-speaker', function( data ) { 30 | delete data.state.overview; 31 | socket.broadcast.emit( 'statechanged-speaker', data ); 32 | }); 33 | 34 | }); 35 | 36 | [ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) { 37 | app.use( '/' + dir, staticDir( opts.baseDir + dir ) ); 38 | }); 39 | 40 | app.get('/', function( req, res ) { 41 | 42 | res.writeHead( 200, { 'Content-Type': 'text/html' } ); 43 | fs.createReadStream( opts.baseDir + '/index.html' ).pipe( res ); 44 | 45 | }); 46 | 47 | app.get( '/notes/:socketId', function( req, res ) { 48 | 49 | fs.readFile( opts.baseDir + 'plugin/notes-server/notes.html', function( err, data ) { 50 | res.send( Mustache.to_html( data.toString(), { 51 | socketId : req.params.socketId 52 | })); 53 | }); 54 | 55 | }); 56 | 57 | // Actually listen 58 | server.listen( opts.port || null ); 59 | 60 | var brown = '\033[33m', 61 | green = '\033[32m', 62 | reset = '\033[0m'; 63 | 64 | var slidesLocation = 'http://localhost' + ( opts.port ? ( ':' + opts.port ) : '' ); 65 | 66 | console.log( brown + 'reveal.js - Speaker Notes' + reset ); 67 | console.log( '1. Open the slides at ' + green + slidesLocation + reset ); 68 | console.log( '2. Click on the link in your JS console to go to the notes page' ); 69 | console.log( '3. Advance through your slides and your notes will advance automatically' ); 70 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/notes-server/client.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | // don't emit events from inside the previews themselves 4 | if( window.location.search.match( /receiver/gi ) ) { return; } 5 | 6 | var socket = io.connect( window.location.origin ), 7 | socketId = Math.random().toString().slice( 2 ); 8 | 9 | console.log( 'View slide notes at ' + window.location.origin + '/notes/' + socketId ); 10 | 11 | window.open( window.location.origin + '/notes/' + socketId, 'notes-' + socketId ); 12 | 13 | /** 14 | * Posts the current slide data to the notes window 15 | */ 16 | function post() { 17 | 18 | var slideElement = Reveal.getCurrentSlide(), 19 | notesElement = slideElement.querySelector( 'aside.notes' ); 20 | 21 | var messageData = { 22 | notes: '', 23 | markdown: false, 24 | socketId: socketId, 25 | state: Reveal.getState() 26 | }; 27 | 28 | // Look for notes defined in a slide attribute 29 | if( slideElement.hasAttribute( 'data-notes' ) ) { 30 | messageData.notes = slideElement.getAttribute( 'data-notes' ); 31 | } 32 | 33 | // Look for notes defined in an aside element 34 | if( notesElement ) { 35 | messageData.notes = notesElement.innerHTML; 36 | messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string'; 37 | } 38 | 39 | socket.emit( 'statechanged', messageData ); 40 | 41 | } 42 | 43 | // When a new notes window connects, post our current state 44 | socket.on( 'new-subscriber', function( data ) { 45 | post(); 46 | } ); 47 | 48 | // When the state changes from inside of the speaker view 49 | socket.on( 'statechanged-speaker', function( data ) { 50 | Reveal.setState( data.state ); 51 | } ); 52 | 53 | // Monitor events that trigger a change in state 54 | Reveal.addEventListener( 'slidechanged', post ); 55 | Reveal.addEventListener( 'fragmentshown', post ); 56 | Reveal.addEventListener( 'fragmenthidden', post ); 57 | Reveal.addEventListener( 'overviewhidden', post ); 58 | Reveal.addEventListener( 'overviewshown', post ); 59 | Reveal.addEventListener( 'paused', post ); 60 | Reveal.addEventListener( 'resumed', post ); 61 | 62 | // Post the initial state 63 | post(); 64 | 65 | }()); 66 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/source/blood.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Blood theme for reveal.js 3 | * Author: Walther http://github.com/Walther 4 | * 5 | * Designed to be used with highlight.js theme 6 | * "monokai_sublime.css" available from 7 | * https://github.com/isagalaev/highlight.js/ 8 | * 9 | * For other themes, change $codeBackground accordingly. 10 | * 11 | */ 12 | 13 | // Default mixins and settings ----------------- 14 | @import "../template/mixins"; 15 | @import "../template/settings"; 16 | // --------------------------------------------- 17 | 18 | // Include theme-specific fonts 19 | 20 | @import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic); 21 | 22 | // Colors used in the theme 23 | $blood: #a23; 24 | $coal: #222; 25 | $codeBackground: #23241f; 26 | 27 | $backgroundColor: $coal; 28 | 29 | // Main text 30 | $mainFont: Ubuntu, 'sans-serif'; 31 | $mainFontSize: 36px; 32 | $mainColor: #eee; 33 | 34 | // Headings 35 | $headingFont: Ubuntu, 'sans-serif'; 36 | $headingTextShadow: 2px 2px 2px $coal; 37 | 38 | // h1 shadow, borrowed humbly from 39 | // (c) Default theme by Hakim El Hattab 40 | $heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); 41 | 42 | // Links 43 | $linkColor: $blood; 44 | $linkColorHover: lighten( $linkColor, 20% ); 45 | 46 | // Text selection 47 | $selectionBackgroundColor: $blood; 48 | $selectionColor: #fff; 49 | 50 | 51 | // Theme template ------------------------------ 52 | @import "../template/theme"; 53 | // --------------------------------------------- 54 | 55 | // some overrides after theme template import 56 | 57 | .reveal p { 58 | font-weight: 300; 59 | text-shadow: 1px 1px $coal; 60 | } 61 | 62 | .reveal h1, 63 | .reveal h2, 64 | .reveal h3, 65 | .reveal h4, 66 | .reveal h5, 67 | .reveal h6 { 68 | font-weight: 700; 69 | } 70 | 71 | .reveal p code { 72 | background-color: $codeBackground; 73 | display: inline-block; 74 | border-radius: 7px; 75 | } 76 | 77 | .reveal small code { 78 | vertical-align: baseline; 79 | } -------------------------------------------------------------------------------- /KPI-2017-Autumn/Lecture4.md: -------------------------------------------------------------------------------- 1 | # Лекции #4 "Структуры данных, строки, композиция функций" 2 | 3 | ### Примеры кода: 4 | - [Структуры данных](https://github.com/HowProgrammingWorks/DataStructures) 5 | - [Операции со строками](https://github.com/HowProgrammingWorks/String) 6 | - [Композиция функций](https://github.com/HowProgrammingWorks/Composition) 7 | 8 | ### Домашнее задание: 9 | На свой выбор найти любую таблицу с данными, например: 10 | - Плотность и количество населения городов, сел, стран, областей 11 | - Персонажи книг, киноактеры, композиторы, писатели и поэты, ученые 12 | - Автомобили, животные, растения, музыкальные группы, рецепты еды 13 | - Олимпиады, чемпионаты, матчи, и турнирные таблицы спортивных событий 14 | - Географические и геологические объекты: реки, леса, горы, моря 15 | - Исторические события, личности, страны, войны, миграция населения 16 | Подойдут любые вещи, из которых можно сделать таблицу 15-30 строк и 4-6 17 | колонок. Нам эти данные понадобятся дальше для лабораторных работ. 18 | Пока подготовьте двумерный массив в `.js` файле, вот пример: 19 | 20 | ```js 21 | const cities = [ 22 | [ 'City', 'Population', 'Area', 'Density', 'Country'], 23 | [ 'Shanghai', 24256801, 6341, 3827, 'China' ], 24 | [ 'Beijing', 21516001, 16412, 1312, 'China' ], 25 | [ 'Delhi', 16787942, 1485, 11314, 'India' ], 26 | [ 'Lagos', 16060304, 1172, 13713, 'Nigeria' ], 27 | [ 'Tianjin', 15200001, 11761, 1294, 'China' ], 28 | [ 'Karachi', 14910353, 3528, 4573, 'Pakistan' ], 29 | [ 'Istanbul', 14160468, 5462, 2594, 'Turkey' ], 30 | [ 'Tokyo', 13513735, 2192, 6169, 'Japan' ], 31 | [ 'Guangzhou', 13080501, 7435, 1760, 'China' ], 32 | [ 'Mumbai', 12442374, 6035, 20681, 'India' ], 33 | ]; 34 | ``` 35 | 36 | Дальше попробуйте поработать с этим массивом, запуская JavaScript код в Node.js: 37 | - выведите его содержимое через `console.dir()` 38 | - возьмите его размер через `cities.length` 39 | - удалите первую строку (заголовок) из массива через `cities.shift()` 40 | - обратитесь к строке и ячейке по индексу, например: `cities[5][0]` 41 | - прочитайте строчное значение из массива в переменную и попробуйте 42 | применить к ней операции со строками, которые мы изучали 43 | - прочитайте числовое значение и попробуйте операции с числами 44 | - запишите в массив значение 45 | - выведите массив опять в консоль 46 | 47 | Почитайте документацию по строкам и массивам в MDN и попробуйте разные функции, 48 | описанные там. 49 | -------------------------------------------------------------------------------- /KPI-2016-Spring/Letter3.md: -------------------------------------------------------------------------------- 1 | ## Письмо 3 2 | 3 | Дата: 2016-03-20 4 | Группы: ИП-31, ИП-32, ИП-41, ИП-42, ИП-43, ИП-44 5 | 6 | Добрый день, 7 | 8 | Напоминаю, что в этот понедельник 2016-03-21 в 17:00 (длительность 2 часа) 9 | в 306-18 будет семинар "Быстрая разработка высоконагруженных **API на Node.js**" 10 | 11 | Полное **актуальное расписание** и архив писем всегда можно смотреть тут: 12 | [HowProgrammingWorks/Letters](https://github.com/HowProgrammingWorks/Letters) 13 | 14 | Кроме этого, в **четверг** 2016-03-24 в 17:00 (длительность 2-3 часа) будет встреча 15 | по стыковке **Qt и Node.js** и разработке фреймворка для оконных приложений для ноды 16 | на Qt и мы сделаем специальный синтаксис для описания пользовательских 17 | интерфейсов. Всем, кто понимает или хочет разобраться в Node.js и в Qt: поищите 18 | в интернете и почитайте статей, что уже есть по этому поводу, я не проводил 19 | предварительного исследования, прошу это сделать вас. А я буду рассказывать, что 20 | нужно сделать и зачем. Результат этого проекта можно будет использовать для: 21 | * для разработки тонкого клиента (браузера баз данных со скафолдингом форм) 22 | * нашей платформы интерактивного телевидения SinceTV 23 | * курсовых и дипломных проектов 24 | 25 | В следующий **понедельник** 2016-03-28 в 17:00 (длительность 2 часа) будет семинар 26 | на тему: "Протокол **JSTP** для клиент-сервера и **СУБД**". Всем, кому интересно 27 | принять участие в создании нового протокола и новой СУБД или использовать их 28 | для своих проектов, например мобильных приложений, чатов, игр и т.д., 29 | предлагаю почитать набросок спецификации протокола 30 | [HowProgrammingWorks/JSTP](https://github.com/HowProgrammingWorks/JSTP) 31 | и подготовить вопросы. 32 | Я сформирую группы, которые будут делать библиотеки для этого протокола для: 33 | JavaScript, C#, Java, Swift, Python и других языков и технологических стеков. 34 | 35 | На этой неделе, с некоторыми группами (у которых больше пар), мы перейдем к 36 | **лабораторной работе №3**. Можете заранее скачать и посмотреть код: 37 | [HowProgrammingWorks/InterProcessCommunication](https://github.com/HowProgrammingWorks/InterProcessCommunication) 38 | а теорию мы по ней закончим разбирать на паре во вторник. Подготовьте свои 39 | вопросы по межпроцессовому взаимодействию. И для **аттестации** Максим проверит 40 | результаты по лабораторным №1 и №2, если кто-то показывал их мне, то подойдете 41 | ко мне, напомните на паре и я передам это Максиму. 42 | 43 | С уважением, 44 | ~Тимур Шемсединов 45 | -------------------------------------------------------------------------------- /KPI-2017-Spring/Letter1.md: -------------------------------------------------------------------------------- 1 | ## Введение в Node.js 2 | 3 | Дата: 2017-02-20 4 | Группы: ИП-51, ИП-52, ИП-53, ИП-54 5 | 6 | Добрый день, 7 | 8 | 1. Установите и попробуйте node.js, eslint, git. Ссылки собраны тут: 9 | https://github.com/HowProgrammingWorks/Tools/blob/master/JavaScript/README.ru.md 10 | 11 | 2. Зарегистрируйтесь в гитхабе и создайте пробный репозиторий, залейте в него 12 | [код примера](https://github.com/HowProgrammingWorks/Tools/blob/master/JavaScript/examples/example.js) 13 | и [файлы конфигурации](https://github.com/HowProgrammingWorks/Tools/tree/master/JavaScript/examples) 14 | для гита и линтера. По конфигурации тревиса и батхаунда - это по желанию. 15 | 16 | 3. Создайте [package.json](https://docs.npmjs.com/files/package.json) для 17 | своего примера и добавьте зависимости, например [concolor](https://www.npmjs.com/package/concolor), 18 | [metasync](https://www.npmjs.com/package/metasync) или другие библиотеки из npm. 19 | 20 | 4. Расширьте пример кода тем, что вы запомнили с лекций, найдете в документации 21 | по ноде или электронных учебниках по JavaScript. Закоммитьте код в git, в этот 22 | раз мне его присылать не нужно. Вы просто тренируетесь. 23 | 24 | Повторю те ссылки, что я давал на парах и на вводных лекциях в прошлом году: 25 | 26 | 1. В качестве книги по JavaScript можно использовать MDN (Mozilla Developer Network). 27 | Там не все переведено, и я рекомендую читать это на английском языке. 28 | - Индекс всех материалов https://developer.mozilla.org/ru/docs/Web/JavaScript 29 | - Руководствао по JS https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide 30 | 31 | 2. Если вы что-то не найдете в MDN, то есть книги по JavaScript (но их уровень 32 | ниже и в них встречается бред временами, хотя большинство программистов 33 | пользуются, жадно впитывая): 34 | - https://learn.javascript.ru/ 35 | - http://gabdrahimov.ru/javascript-uchebnik 36 | 37 | 3. Презентации, которые я показывал на лекциях в 2016 можно найти тут: 38 | https://github.com/HowProgrammingWorks/Letters/blob/master/Docs/NODEJS/node-kpi-2016.pdf 39 | Видео к слайдам есть ниже в этом письме. 40 | 41 | 4. Можно посмотреть скринкасты по node.js, смотрите только "Часть 1", оно немного 42 | устарело, но общее понятие дает и это лучшее, что у нес имеется сейчас: 43 | http://learn.javascript.ru/screencast/nodejs 44 | 45 | 5. Если хочется сразу потренироваться и поделать практические задания, если кто 46 | свободно ориентируется и в JavaScript и в Node.js, то пробуйте тут: http://nodeschool.io/ 47 | 48 | С уважением, 49 | ~Тимур Шемсединов 50 | -------------------------------------------------------------------------------- /Discussions/method-2017-04-10.md: -------------------------------------------------------------------------------- 1 | # Методсеминар по программной инженерии 2 | Дата: 10 Апреля 2017 3 | 4 | Выжимка из предложений: 5 | * Всем группам читаем одну базовую программу 6 | - это касается только основ программирования на 1 курсе 7 | - пока не ясно, будет ли это один преподаватель или несколько 8 | - нам нужны специальные разделы математики, которые дажут 9 | - связь понятия функции в программировании и математике 10 | - отображения, орбиты, теория множеств, теория типов 11 | * Не потерять заинтересованность студентов на 1 курсе 12 | - Низкий порог вхождения для общей массы 13 | - Апробировано на компьютерной инженерии (ВТ) 14 | - Варианты первого языка: ANSI С, Python, Swift, JavaScript 15 | * Построить логичную последовательность с 1 по 5 курс 16 | - предложен такой вариант: [github.com/HowProgrammingWorks/Index](https://github.com/HowProgrammingWorks/Index/blob/master/README.ru.md) 17 | * От основ нужно постепенно переходить к тому, что: 18 | - актуально на сегодняшний момент и перспективно 19 | - затребованао индустрией разработки ПО 20 | * Предложены альтернативные подходы: 21 | - изучать язык, через него доходить до теории и обобщений 22 | - не привязываться к языку, изучать общую теорию 23 | - давать теорию на примере 1 языка, но не ограничивать в выборе 24 | * Со стороны индустрии есть запросы: 25 | - На C и C++ написано большинство ПО в мире: ОС, СУБД, браузеры, офисы... 26 | - Java, C# пишется весь сектор корпоративного булшита и лютый энтерпрайз 27 | - Python иммет низкий порог входа, но JavaScrip в этом плане не хуже 28 | - JavaScript сейчас обязательный язык почти во всех сферах 29 | * Хорошо бы разделить программы для слабых и сильных студентов 30 | - Слабым в программировании нужно давать базовый материал и профориентацию 31 | - Сильным нужно сложный материал и задания, чтоб не потерять их интерес тоже 32 | * Педагогические вопросы: 33 | - ближе к студентам, чтоб не боялись 34 | - чтобы они могли всегда обратиться, как старшему коллеге 35 | * Методические предложения: 36 | - Опорный конспект, который дополняется на лекциях 37 | - Видео и аудио могут освободить время для семинаров 38 | - Ввести лайвкодинг и кодревью 39 | - Сдача лабораторных через github 40 | * Статистика stackoverflow: 41 | - По популярности языков: [2017#technology-programming-languages](https://stackoverflow.com/insights/survey/2017#technology-programming-languages) 42 | - По системам контроля версий: [2017#work-version-control](https://stackoverflow.com/insights/survey/2017#work-version-control) 43 | - По по технологиям и платформам: [2017#technology-programming-languages](https://stackoverflow.com/insights/survey/2017#technology-programming-languages) 44 | -------------------------------------------------------------------------------- /KPI-2016-Summer/Meetings.md: -------------------------------------------------------------------------------- 1 | ## Семинары на лето 2016 года 2 | 3 | Внимание: аудитория сменилась на 301 корпус 18, она больше, чем 307 4 | 5 | | Дата | Время | Описание | 6 | |--- |--- |--- | 7 | | сб 06 авг | 11:00 (3 часа) | Структура курса, знакомство и обсуждение | 8 | | вт 09 авг | 18:45 (3 часа) | Введение в технологию Node.js | 9 | | ср 10 авг | 18:45 (3 часа) | Синтаксис JS продвинутый | 10 | | чт 11 авг | 18:45 (3 часа) | Парадигмы в JS и Node.js | 11 | | пт 12 авг | 18:45 (3 часа) | IoC, DI, DL, Sandboxes | 12 | | сб 13 авг | 11:00 (3 часа) | Node.js как бекенд для игровых приложений | 13 | | вт 16 авг | 18:45 (3 часа) | Асинхронное программирование на Node.js | 14 | | ср 17 авг | 18:45 (3 часа) | Промисы, генераторы, async/await, metasync, async | 15 | | чт 18 авг | 18:45 (3 часа) | Метапрограммирование на Node.js | 16 | | пт 19 авг | 18:45 (3 часа) | Сервера для ветхого веба, HTTP на Node.js | 17 | | сб 20 авг | 11:00 (3 часа) | Node.js как бекенд для мобильных приложений | 18 | | вт 23 авг | 18:45 (3 часа) | Интерактивные приложения, пример чата, WS, TCP, JSTP | 19 | | чт 25 авг | 18:45 (3 часа) | Межпроцессовое взаимодействие и масштабирование | 20 | | пт 26 авг | 18:45 (3 часа) | Пример реализации многопольз. электронных таблиц | 21 | | уточняется | 18:45 (3 часа) | Потоки (файлы, память, сеть, чтение, запись) | 22 | | уточняется | 18:45 (3 часа) | Сервер приложений Impress, разработка API, RPC, MQ | 23 | | уточняется | 18:45 (3 часа) | Альтернативный технологический стек Metarhia/JSTP | 24 | | уточняется | 18:45 (3 часа) | Работа с UDP протоколом на Node.js | 25 | 26 | ## Расписание дня на школу 27 | 28 | | Время | | 29 | |--- |--- | 30 | | 18:45 | Начало | 31 | | 19:00 | Лекция по теме дня 40 мин | 32 | | 19:40 | Вопросы и ответы 20 мин | 33 | | 20:00 | Доп.темы (сложняк) 40 мин | 34 | | 20:40 | Вопросы 20 мин | 35 | | 21:00 | Остаются стойкие и живое обсуждение | 36 | | 22:00 | А тут нас выгоняют из корпуса | 37 | 38 | ## Расписание на митапы по субботам 39 | 40 | | Время | | 41 | |--- |--- | 42 | | 11:00 | Доклад 40 мин | 43 | | 11:40 | Вопросы и ответы 20 мин | 44 | | 12:00 | Доп.темы 40 мин | 45 | | 12:40 | Вопросы 20 мин | 46 | | 13:00 | Обсуждение | 47 | | 14:00 | Конец | 48 | 49 | ## 307-18 50 | 51 | Борщаговская 126, 18 корпус КПИ, аудитория 307, 52 | 2 этаж, направо от входа подняться по леснице на второй этаж. 53 | -------------------------------------------------------------------------------- /KPI-2016-Spring/Meetings.md: -------------------------------------------------------------------------------- 1 | ## Семинары на весну 2016 года 2 | 3 | Порядок: новые сверху. 4 | 5 | | Дата | Время | Где | Описание | 6 | |--- |--- |--- |--- | 7 | | 2016-04-28 чт | 17:00 (3 часа) | [25-18](#207-18) | Лабораторные работы по Node.js из [HowProgrammingWorks](https://github.com/HowProgrammingWorks) | 8 | | 2016-04-26 вт | 14:30 | 323-18 | Доклады на [IOT-2016](http://fiot.kpi.ua/?page_id=5939) по проделанной работе | 9 | | 2016-04-25 пн | весь день | [25-18](#25-18) | Подготовка докладов по [Metarhia](https://github.com/metarhia) на [IOT-2016](http://fiot.kpi.ua/?page_id=5939) | 10 | | 2016-04-21 чт | 18:00 (2 часа) | [25-18](#25-18) | Подготовка статей по [Metarhia](https://github.com/metarhia) на [IOT-2016](http://fiot.kpi.ua/?page_id=5939) | 11 | | 2016-04-18 пн | 18:00 (2 часа) | [25-18](#25-18) | Обсуждение функций и API GlobalStorage | 12 | | 2016-04-14 чт | 18:00 (2 часа) | [25-18](#25-18) | Доклады разработчиков по JSTP и GlobalStorage | 13 | | 2016-04-11 пн | 18:00 (2 часа) | [25-18](#25-18) | Обсуждение примеров кода для GlobalStorage, GUI Console и JSTP | 14 | | 2016-04-07 чт | 17:00 (3 часа) | [25-18](#25-18) | Обсуждение реализации стека технологий [Metarhia](https://github.com/metarhia) | 15 | | 2016-04-04 пн | 17:00 (3 часа) | [25-18](#25-18) | Концепция стека технологий [Metarhia](https://github.com/metarhia) | 16 | | 2016-03-31 чт | 17:00 (3 часа) | [25-18](#25-18) | Обсуждение в группах по GlobalStorage СУБД, GUI Console и JSTP | 17 | | 2016-03-28 пн | 17:00 (2 часа) | [25-18](#25-18) | Протокол JSTP для клиент-сервера и СУБД | 18 | | 2016-03-24 чт | 17:00 (3 часа) | [25-18](#25-18) | Синтаксис описания GUI для Qt, iOS, Android, Web и Node.js | 19 | | 2016-03-21 пн | 17:00 (2 часа) | [25-18](#25-18) | Быстрая разработка высоконагруженных API на Node.js | 20 | | 2016-03-15 чт | 17:00 (3 часа) | [25-18](#25-18) | Архитектура нового "Кампуса" на Node.js | 21 | | 2016-03-14 пн | 17:00 (3 часа) | [306-18](#306-18) | Node.js и JavaScript | 22 | | 2016-03-11 пт | 17:00 (2 часа) | [25-18](#25-18) | UNISTACK и его реализация в NFX для C# и .NET | 23 | | 2016-03-10 чт | 19:00 (2 часа) | [25-18](#25-18) | Встреча по поводу написания нового "Кампуса" | 24 | | 2016-02-29 пн | 17:30 (2 часа) | [25-18](#25-18) | Организация безопасного слоя доступа к данным | 25 | 26 | ## 25-18 27 | 28 | Борщаговская 126, 18 корпус КПИ, 1 этаж, направо от входа, вторая от входа аудитория. 29 | Карта КПИ: http://kpi.ua/map.html 30 | 31 | ## 306-18 32 | 33 | Борщаговская 126, 18 корпус КПИ, 2 этаж, направо от входа подняться по леснице на второй этаж. 34 | 35 | ## 307-18 36 | 37 | Борщаговская 126, 18 корпус КПИ, 2 этаж, направо от входа подняться по леснице на второй этаж. 38 | -------------------------------------------------------------------------------- /KPI-2016-Spring/Letter3a.md: -------------------------------------------------------------------------------- 1 | ## Письмо 3.a 2 | 3 | Дата: 2016-03-20 4 | Группы: ИТ-42, ИТ-43, ИК-51м, ИК-52с 5 | 6 | Добрый день, 7 | 8 | Напоминаю, что в этот понедельник 2016-03-21 в 17:00 (длительность 2 часа) 9 | в 306-18 будет семинар "Быстрая разработка высоконагруженных **API на Node.js**" 10 | 11 | Полное **актуальное расписание** и архив писем всегда можно смотреть тут: 12 | [HowProgrammingWorks/Letters](https://github.com/HowProgrammingWorks/Letters) 13 | 14 | Кроме этого, в **четверг** 2016-03-24 в 17:00 (длительность 2-3 часа) будет встреча 15 | по стыковке **Qt и Node.js** и разработке фреймворка для оконных приложений для ноды 16 | на Qt и мы сделаем специальный синтаксис для описания пользовательских 17 | интерфейсов. Всем, кто понимает или хочет разобраться в Node.js и в Qt: поищите 18 | в интернете и почитайте статей, что уже есть по этому поводу, я не проводил 19 | предварительного исследования, прошу это сделать вас. А я буду рассказывать, что 20 | нужно сделать и зачем. Результат этого проекта можно будет использовать для: 21 | * для разработки тонкого клиента (браузера баз данных со скафолдингом форм) 22 | * нашей платформы интерактивного телевидения SinceTV 23 | * курсовых и дипломных проектов 24 | 25 | В следующий **понедельник** 2016-03-28 в 17:00 (длительность 2 часа) будет семинар 26 | на тему: "Протокол **JSTP** для клиент-сервера и **СУБД**". Всем, кому интересно 27 | принять участие в создании нового протокола и новой СУБД или использовать их 28 | для своих проектов, например мобильных приложений, чатов, игр и т.д., 29 | предлагаю почитать набросок спецификации протокола 30 | [HowProgrammingWorks/JSTP](https://github.com/HowProgrammingWorks/JSTP) 31 | и подготовить вопросы. 32 | Я сформирую группы, которые будут делать библиотеки для этого протокола для: 33 | JavaScript, C#, Java, Swift, Python и других языков и технологических стеков. 34 | 35 | Если кого-то интересует для себя поделать лабораторки и посмотреть код, который я вам показывал: 36 | 37 | 1. **Инверсия управления** и внедрение зависимостей 38 | [HowProgrammingWorks/sandboxedModule](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/sandboxedModule/ru) 39 | 40 | 2. **Оборачивание программных интерфейсов** и прослойки 41 | [HowProgrammingWorks/interfaceWrapper/ru](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/interfaceWrapper/ru) 42 | 43 | 3. **Межпроцессовое взаимодействие** на базе IPC и сокетов 44 | [HowProgrammingWorks/InterProcessCommunication](https://github.com/HowProgrammingWorks/InterProcessCommunication) 45 | 46 | 4. Реализация простого **HTTP сервера на Node.js** 47 | [node-server/native-simple](https://github.com/perfectjs/node-server/tree/master/native-simple) 48 | 49 | 5. Реализация **многопоточного HTTP сервера** на Node.js 50 | [node-server/native-cluster](https://github.com/perfectjs/node-server/tree/master/native-cluster) 51 | 52 | 6. Реализация **HTTP с параметрами** на Node.js 53 | [node-server/native-advanced](https://github.com/perfectjs/node-server/tree/master/native-advanced) 54 | 55 | С уважением, 56 | ~Тимур Шемсединов 57 | -------------------------------------------------------------------------------- /Docs/NODEJS/README.md: -------------------------------------------------------------------------------- 1 | # Планы обучения для "Программной инженерии" по треку Node.js 2 | 3 | ## Введение в технологию 4 | Это отдельная лекция на 2-4 часа. 5 | Материалы к лекции: https://github.com/HowProgrammingWorks/Letters/blob/master/Docs/NODEJS/node-kpi-2016.pdf 6 | 7 | ## Курс переподготовки JavaScript разработчиков 8 | Предполагает базовые знания JavaScript для браузеров ветхого веба. 9 | Рассчитан на 8 часов лекций и 16 часов лабораторных работ. 10 | В результате человек получит возможность быстро делать бекенд и 11 | 12 | 1. Среда исполнения Node.js и ее особенности 13 | 1.1. JavaScript везде: один язык, один формат данных, одна парадигма, одна архитектура 14 | 1.2. Как исполняется JavaScript код на сервере, асинхронность, компиляция в машинный код, прогревание и оптимизация, песочницы, изоляция и безопасность, выделение памяти и сборка мусора 15 | 1.3. Основные идеи Node.js, сферы применения, какие задачи хорошо решает и как быть с остальными задачами 16 | 2. Рекомендации по структуре приложений 17 | 2.1. Выбор парадигмы, стиля, инструментов отладки, среды разработки, менеджеров пакетов и библиотек для проекта 18 | 2.2. Структура каталогов, конфигурация приложения, управление зависимостями, командная строка node.js и npm 19 | 2.3. Порождение процессов и межпроцессовое взаимодействие 20 | 2.4. Структура кода, планирование зависимостей между модулями, компоненты приложения и внедрении внешних и внутренних зависимостей 21 | 2.5. Инверсия управления, слои абстракции и формирование экранированных контекстов и виртуальных областей видимости 22 | 2.6. Достижение хорошего стиля кода и высокой гибкости приложения при постоянном изменении ТЗ 23 | 3. Асинхронное программирование 24 | 3.1. Реактор и очередь, модель системы массового обслуживания СМО 25 | 3.2. Асинхронный ввод/вывод 26 | 3.3. Удобное структурирование асинхронного кода, библиотека async, промисы, и красивое оформление на обычных колбеках 27 | 4. Высокая производительность 28 | 4.1. Факторы, влияющие на скорость Node.js приложений и оптимизация производительности 29 | 4.2. Масштабирование приложений в рамках одного сервера, кластеризация и балансировка 30 | 4.3. Построение многосерверного кластера и оптимизация балансировки, избежание бутылочного горлышка при высоких нагрузках 31 | 4.4. Балансировка на стороне клиента 32 | 5. Отладка 33 | 5.1. Средства отладки и профилирования кода 34 | 5.2. Обработка ошибок 35 | 5.3. Управление памятью 36 | 5.4. Юниттесты и интеграционное тестирование на Node.js 37 | 6. Доступ к данным 38 | 6.1. Работа с реляционными СУБД, построение слоя доступа к данным, ORM и CRUD на примере PostgreSQL 39 | 6.2. Работа с бессхемными и документными СУБД на примере MongoDB 40 | 6.3. Моделирование структур данных в памяти 41 | 6.4. Оптимизация кеширования распределение данных в адресном пространстве разных процессов кластера 42 | 7. Быстрая разработка API 43 | 7.1. Создание метода, доступного, через AJAX с ответом в JSON 44 | 7.2. Создание RPC протокола и проброс API вызовов через вебсокеты 45 | 7.3. Примеры разработки API 46 | 47 | ## Курс обучения для студентов КПИ 48 | Направление "Программная инженерия" по предметам "Архитектура и проектирование программных систем" и "Практика программной инженерии" треку Node.js. 49 | Будет опубликован позже. 50 | -------------------------------------------------------------------------------- /KPI-2017-Summer/Lecture3.md: -------------------------------------------------------------------------------- 1 | # Лекция 3: JavaScript, как ассемблер нашего времени 2 | 3 | - Основной репозиторий на Github: [HowProgrammingWorks](https://github.com/HowProgrammingWorks) 4 | - Основы JavaScript, синтаксис, типы, операторы - все это лучше всего брать 5 | на [MDN: Mozilla Developer Network](https://developer.mozilla.org/ru/docs/Web/JavaScript) 6 | где они есть и на английском языке (предпочтительно) и в переводе на множество 7 | других языков. Можно помогать сообществу дописывать статьи и учебник. 8 | - Абстракции как сущность программирования и инженерии 9 | - [Переменные и типы данных](https://github.com/HowProgrammingWorks/DataTypes), 10 | скалярные и ссылочные типы, объекты, массивы и структуры данных 11 | - [Функции](https://github.com/HowProgrammingWorks/Function) включая анонимные 12 | и лямбда-выражения 13 | - Домашнее задание: 14 | - Осваиваем синтаксис языка по MDN 15 | - Еще раз смотрим примеры, которые были на лекции 16 | - Попробуйте модифицировать простые примеры и написать что-то сложнее 17 | - Если Вы увидели что улучшить в примерах, то сделайте форк репозитория, 18 | склонируйте его через гит к себе, сделайте коммит, откройте пул-реквест 19 | и я рассмотрю и добавлю Ваши улучшения, если они улучшат код примеров. 20 | - В последнем файле [d-decompose.js](https://github.com/HowProgrammingWorks/Function/blob/master/JavaScript/d-decompose.js) 21 | есть много кода, который можно изучить и попробовать модифицировать. 22 | - Найдите функцию `badIntrospect` - это пример плохого кода, хоть стиль и 23 | соблюден, код написан ровно и максимально понятно, но функция огромная. 24 | Что она делает в общем, понять сложно. Она берет программный интерфейс (API) 25 | и перебирает в нем все методы, парсит (делает синтаксический разбор текста) 26 | и превращает заголовки функций в структуры данных для последующей генерации 27 | документации. 28 | - Чуть выше в файле есть тот же код, но декомпозированный (разделенный 29 | логически) на три функции: `parseLines`, `parseSignature`, `introspect`. 30 | Посмотрите их и сравните с `badIntrospect`. 31 | - Еще есть в файле 2 функции поменьше: `merge` и `section`, они еще лучше 32 | в плане простоты и понятности. Функция `section` используется как в простом, 33 | так и в сложном примере кода. Она разделяет строку на две, по подстроке, 34 | отдавая массив с двумя элементами: часть до подстроки и часть после. 35 | Функция `merge` объединяет несколько массивов в один. 36 | - Попробуйте декомпозировать (разделить) `badIntrospect` на несколько функций 37 | лучше, чем в примере или разделить три функции `parseLines`, `parseSignature`, 38 | `introspect` на более мелкие, или выделить из них какие-то обобщения 39 | (повторяющиеся места). Таким образом построив новые программные абстракции, 40 | которые могут повторно использоваться, независимо тестироваться, проще 41 | восприниматься и модифицироваться. 42 | - Попробуйте оптимизировать сам алгоритм парсинга, улучшить его, упростить, 43 | ускорить или сделать более понятным. 44 | - Попробуйте сгенерировать документацию из структур данных, полученных в 45 | результате работы этих функций в форматах md или html. 46 | 47 | Конечно, сделать все это за сутки нельзя, но можно продолжить на выходных или 48 | после завершения летней школы продолжить разбираться самостоятельно, ведь я даю 49 | только основы, а программирование так устроено, что большую часть нужно постигать 50 | самостоятельно и на практике. Я же нужен для обзора, задания общего направления, 51 | ответов на вопросы и примеров кода. Жду Вас на лекции #4 сегодня. 52 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/print/pdf.css: -------------------------------------------------------------------------------- 1 | /** 2 | * This stylesheet is used to print reveal.js 3 | * presentations to PDF. 4 | * 5 | * https://github.com/hakimel/reveal.js#pdf-export 6 | */ 7 | 8 | * { 9 | -webkit-print-color-adjust: exact; 10 | } 11 | 12 | body { 13 | margin: 0 auto !important; 14 | border: 0; 15 | padding: 0; 16 | float: none !important; 17 | overflow: visible; 18 | } 19 | 20 | html { 21 | width: 100%; 22 | height: 100%; 23 | overflow: visible; 24 | } 25 | 26 | /* Remove any elements not needed in print. */ 27 | .nestedarrow, 28 | .reveal .controls, 29 | .reveal .progress, 30 | .reveal .playback, 31 | .reveal.overview, 32 | .fork-reveal, 33 | .share-reveal, 34 | .state-background { 35 | display: none !important; 36 | } 37 | 38 | h1, h2, h3, h4, h5, h6 { 39 | text-shadow: 0 0 0 #000 !important; 40 | } 41 | 42 | .reveal pre code { 43 | overflow: hidden !important; 44 | font-family: Courier, 'Courier New', monospace !important; 45 | } 46 | 47 | ul, ol, div, p { 48 | visibility: visible; 49 | position: static; 50 | width: auto; 51 | height: auto; 52 | display: block; 53 | overflow: visible; 54 | margin: auto; 55 | } 56 | .reveal { 57 | width: auto !important; 58 | height: auto !important; 59 | overflow: hidden !important; 60 | } 61 | .reveal .slides { 62 | position: static; 63 | width: 100%; 64 | height: auto; 65 | 66 | left: auto; 67 | top: auto; 68 | margin: 0 !important; 69 | padding: 0 !important; 70 | 71 | overflow: visible; 72 | display: block; 73 | 74 | -webkit-perspective: none; 75 | -moz-perspective: none; 76 | -ms-perspective: none; 77 | perspective: none; 78 | 79 | -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */ 80 | -moz-perspective-origin: 50% 50%; 81 | -ms-perspective-origin: 50% 50%; 82 | perspective-origin: 50% 50%; 83 | } 84 | 85 | .reveal .slides section { 86 | page-break-after: always !important; 87 | 88 | visibility: visible !important; 89 | position: relative !important; 90 | display: block !important; 91 | position: relative !important; 92 | 93 | margin: 0 !important; 94 | padding: 0 !important; 95 | box-sizing: border-box !important; 96 | min-height: 1px; 97 | 98 | opacity: 1 !important; 99 | 100 | -webkit-transform-style: flat !important; 101 | -moz-transform-style: flat !important; 102 | -ms-transform-style: flat !important; 103 | transform-style: flat !important; 104 | 105 | -webkit-transform: none !important; 106 | -moz-transform: none !important; 107 | -ms-transform: none !important; 108 | transform: none !important; 109 | } 110 | 111 | .reveal section.stack { 112 | margin: 0 !important; 113 | padding: 0 !important; 114 | page-break-after: avoid !important; 115 | height: auto !important; 116 | min-height: auto !important; 117 | } 118 | 119 | .reveal img { 120 | box-shadow: none; 121 | } 122 | 123 | .reveal .roll { 124 | overflow: visible; 125 | line-height: 1em; 126 | } 127 | 128 | /* Slide backgrounds are placed inside of their slide when exporting to PDF */ 129 | .reveal section .slide-background { 130 | display: block !important; 131 | position: absolute; 132 | top: 0; 133 | left: 0; 134 | width: 100%; 135 | z-index: -1; 136 | } 137 | 138 | /* All elements should be above the slide-background */ 139 | .reveal section>* { 140 | position: relative; 141 | z-index: 1; 142 | } 143 | 144 | /* Display slide speaker notes when 'showNotes' is enabled */ 145 | .reveal .speaker-notes-pdf { 146 | display: block; 147 | width: 100%; 148 | max-height: none; 149 | left: auto; 150 | top: auto; 151 | z-index: 100; 152 | } 153 | 154 | /* Display slide numbers when 'slideNumber' is enabled */ 155 | .reveal .slide-number-pdf { 156 | display: block; 157 | position: absolute; 158 | font-size: 14px; 159 | } 160 | 161 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/kpi.md: -------------------------------------------------------------------------------- 1 | ## «Ваше положение таково, что понять вам его невозможно» 2 | 3 | --- 4 | 5 | ### Тимур Шемсединов 6 |
7 | КПИ ФИВТ 8 | 9 | --- 10 | 11 | 12 | 13 | --- 14 | 15 | ### Что я нашел в КПИ на 1 курсе 16 | - коллектив профессионалов 17 | - большие реальные проекты 18 | - примеры кода и процесса 19 | - мне ставили сложные задачи 20 | - и научили их не бояться 21 | - 20 лет проработал в НИИ СТ 22 | 23 | --- 24 | 25 | 26 |
27 | github.com/HowProgrammingWorks 28 | 29 | --- 30 | 31 | ### Я возвращался в КПИ много раз 32 | - прочитать серию лекций 33 | - работать над проектами в НИИ 34 | - искать кадры для своих проектов 35 | - писать кандидатскую диссертацию 36 | 37 | --- 38 | 39 | 40 | 41 | --- 42 | 43 | ### К чему я пришел 44 | - кадры решают все и учить их нужно самому 45 | - студенты 2-3 курса могут невообразимое 46 | - в ВУЗе много сложностей, но преодолимых 47 | - коллектив должен воспроизводить себя 48 | - нужно передавать опыт 49 | - есть возможность ВУЗам существовать 50 | 51 | --- 52 | 53 | 54 | 55 | --- 56 | 57 | 58 | 59 | --- 60 | 61 | 62 | 63 | --- 64 | 65 | ### Переселился в КПИ 66 | 67 | 68 | 69 | --- 70 | 71 | ### Что сделано за 2 года 72 | - изменения в курсе программной инженерии 73 | - внедрены JavaScript и Node.js 74 | - студенческое конструкторское бюро 75 | - дополнительные семинары и лекции 76 | - летние и зимнии школы 77 | - митапы KievNodeJS теперь проводится в КПИ 78 | - 100-200 участников 79 | - более 1100 подписчиков 80 | 81 | --- 82 | 83 | 84 | 85 | --- 86 | 87 | 88 | 89 | --- 90 | 91 | 92 | 93 | --- 94 | 95 | 96 | 97 | --- 98 | 99 | ### Стек технологий Metarhia 100 | - цельно спроектированный стек 101 | - унифицированный и free 102 | - коллектив разработчиков-фанатиков 103 | - сервер приложений Impress 104 | - сетевой протокол JSTP >10 ЯП 105 | - СУБД GlobalStorage 106 | - модули: metasync, tickplate и др. 107 | 108 | --- 109 | 110 | 111 | 112 | --- 113 | 114 | 115 | 116 | --- 117 | 118 | ### Внедрено в отраслях: 119 | - интерактивное телевидение SinceTV 120 | - системы высокочастотной торговли 121 | - игры, коммуникационное ПО 122 | - медицина, умная электроника 123 | - управление прикладными облаками 124 | 125 | --- 126 | 127 | 128 | 129 | --- 130 | 131 | 132 | 133 | --- 134 | 135 | ### Open Souce / Free Software 136 | - контрибьютеры Node.js 137 | - не менее 5 преподавателей 138 | - сотрудничество с Китаем 139 | - ни какого страха - только NIH 140 | - люди должны любить свою работу 141 | - интересную, сложную, крутую 142 | - галеры - на переработку 143 | 144 | --- 145 | 146 | Вы поймете, как это работает 147 | 148 | ```js 149 | const projection = (meta, obj) => (Object 150 | .keys(meta) 151 | .reduce((hash, key) => (hash[key] = meta[key] 152 | .reduce( 153 | (val, fn, i) => i === 0 ? obj[fn] : fn(val), null 154 | ), hash), {} 155 | ) 156 | ); 157 | ``` 158 | 159 | --- 160 | 161 | И это... оно же просто красивое 162 | 163 | 164 | 165 | --- 166 | 167 | 168 | 169 | --- 170 | 171 | ### Контакты и ссылки 172 | 173 | https://github.com/HowProgrammingWorks 174 | https://github.com/metarhia 175 | https://www.meetup.com/KievNodeJS 176 | 177 | Тимур Шемсединов 178 |
179 | timur.shemsedinov@gmail.com 180 | 181 | --- 182 | 183 | ## «Да у нас дыра,
но сквозь эту дыру
сквозит будущее» 184 | -------------------------------------------------------------------------------- /Docs/PROG/README.md: -------------------------------------------------------------------------------- 1 | # Парадигмы программирования 2 | 3 | ## Первый семестр 4 | 5 | ### Базовый синтаксис 6 | 7 | * Синтаксис, стиль и конвенции кода: [CodeStyle](https://github.com/HowProgrammingWorks/CodeStyle) 8 | * Функции: [Function](https://github.com/HowProgrammingWorks/Function) 9 | * Итерирование: [Iteration](https://github.com/HowProgrammingWorks/Iteration) 10 | * Работа со строками: [String](https://github.com/HowProgrammingWorks/String) 11 | * Примеси (миксыны): [Mixin](https://github.com/HowProgrammingWorks/Mixin) 12 | * Множества: [Set](https://github.com/HowProgrammingWorks/Set) 13 | 14 | ### Базовые концепции 15 | 16 | * Замыкания: [Closure](https://github.com/HowProgrammingWorks/Closure) 17 | * Суперпозиция и композиция: [Composition](https://github.com/HowProgrammingWorks/Composition) 18 | * Функции высшего порядка: [HigherOrderFunction](https://github.com/HowProgrammingWorks/HigherOrderFunction) 19 | * Частичное применение: [PartialApplication](https://github.com/HowProgrammingWorks/PartialApplication) 20 | * Обертки функций: [Wrapper](https://github.com/HowProgrammingWorks/Wrapper) 21 | * Функции генераторы: [Generator](https://github.com/HowProgrammingWorks/Generator) 22 | * Мемоизация (кешировние): [Memoization](https://github.com/HowProgrammingWorks/Memoization) 23 | * Функторы: [Functor](https://github.com/HowProgrammingWorks/Functor) 24 | 25 | ### Структуры данных 26 | 27 | * Общий обзор структур: [DataStructures](https://github.com/HowProgrammingWorks/DataStructures) 28 | * Связанные списки: [LinkedList](https://github.com/HowProgrammingWorks/LinkedList) 29 | * Деревья: [TreeNode](https://github.com/HowProgrammingWorks/TreeNode) 30 | * Графы: [DirectedGraph](https://github.com/HowProgrammingWorks/DirectedGraph) 31 | 32 | ## Второй семестр 33 | 34 | ### Концепции и техники 35 | 36 | * События: [EventEmitter](https://github.com/HowProgrammingWorks/EventEmitter) 37 | * Регулярные выражения: [RegExp](https://github.com/HowProgrammingWorks/RegExp) 38 | * Сериализация: [Serialization](https://github.com/HowProgrammingWorks/Serialization) 39 | * Проекция данных: [Projection](https://github.com/HowProgrammingWorks/Projection) 40 | * Промисы: [Promise](https://github.com/HowProgrammingWorks/Promise) 41 | * Тесты производительности: [Benchmark](https://github.com/HowProgrammingWorks/Benchmark) 42 | 43 | ### Парадигмы и техники программирования 44 | 45 | * Событийное программирование: [EventDrivenProgramming](https://github.com/HowProgrammingWorks/EventDrivenProgramming) 46 | * Асинхронное программирование: [AsynchronousProgramming](https://github.com/HowProgrammingWorks/AsynchronousProgramming) 47 | * Оптимизация асинхронности: [async](https://github.com/caolan/async) 48 | * Метаасинхронные функции: [MetaSync](https://github.com/metarhia/MetaSync) 49 | * Программирование управляемое данными: [DataDrivenProgramming](https://github.com/HowProgrammingWorks/DataDrivenProgramming) 50 | 51 | ## Третий семестр 52 | 53 | ### Системная архитектура программ 54 | 55 | * Песочницы: [Sandboxes](https://github.com/HowProgrammingWorks/Sandboxes) 56 | * Инверсия управления: [InversionOfControl](https://github.com/HowProgrammingWorks/InversionOfControl) 57 | * Внедрение зависимостей: [DependencyInjection](https://github.com/HowProgrammingWorks/DependencyInjection) 58 | * Межпроцессовое взаимодействие: [InterProcessCommunication](https://github.com/HowProgrammingWorks/InterProcessCommunication) 59 | * Модели конкурентных процессов: [Concurrency](https://github.com/HowProgrammingWorks/Concurrency) 60 | * Разделение слоев абстракции: [AbstractionLayers](https://github.com/HowProgrammingWorks/AbstractionLayers) 61 | 62 | ### Комплексные примеры проектов 63 | 64 | * Веб-сервер: [NodeServer](https://github.com/HowProgrammingWorks/NodeServer) 65 | * Чат в веб-браузере: [WebsocketChat](https://github.com/HowProgrammingWorks/WebsocketChat) 66 | * Многопользовательские таблицы: [LiveTable](https://github.com/HowProgrammingWorks/LiveTable) 67 | 68 | ### Метапрограммирование 69 | 70 | * Базовые понятия: [Metaprogramming](https://github.com/HowProgrammingWorks/Metaprogramming) 71 | -------------------------------------------------------------------------------- /KPI-2016-Spring/Intro.md: -------------------------------------------------------------------------------- 1 | ## Введение в Node.js 2 | 3 | Дата: 2016-06-06 4 | Группы: ИП-51, ИП-52, ИП-53, ИП-54 5 | 6 | Добрый день, 7 | 8 | 1. Презентации, которые я показывал на двух предыдущих лекциях можно найти тут: 9 | https://github.com/HowProgrammingWorks/Letters/blob/master/Docs/NODEJS/node-kpi-2016.pdf 10 | Видео к слайдам есть ниже в этом письме. 11 | 12 | 2. Многие писали мне с просьбой прислать лабораторные работы, но я спросил у Максима и 13 | Ирины Павловны, оказалось, что у вас не хватает для этого пар. Могу сделать объяснения 14 | лабораторных в среду на 2 паре, отведя для этого половину лекции, а сами работы вы 15 | сделаете дома. 16 | 17 | 3. Или есть другой вариант, в любом случае будет летняя школа по JavaScript и Node.js, 18 | это уже после всех экзаменов и все смогут уже спокойно ее посещать, расписание 19 | сообщу дополнительно. 20 | 21 | 4. Структура нашего курса на следующий год будет скоро опубликована, 22 | но пока вы можете посмотреть структуру краткого курса по переподготовке Node.js 23 | разработчиков из JavaScript программистов, из нее видно основной набор знаний по Node.js, 24 | который актуален сейчас и будет включен частью нашего большого курса: 25 | https://github.com/HowProgrammingWorks/Letters/tree/master/Docs/NODEJS 26 | До Node.js мы конечнобудем подробнее изучать JavaScript, паттерны программирования 27 | для JavaScript и Node.js, архитектуру и парадигмы, потому, что JavaScript это 28 | мульипарадигменный язык, в котором можно смешивать подходы: структурное, функциональное, 29 | объектное, прототипное, асинхронное, реактивное, декларативное программирование и 30 | метапрограммирование. Все это будет входить в программу курса вместе с примерами. 31 | 32 | 5. Кому интересно посмотреть вопросы на экзамен по Архитектуре и проектированию 33 | программного обеспечения для 2 курса, их можно найти тут: 34 | https://github.com/HowProgrammingWorks/Letters/tree/master/Docs/SOFTARCH 35 | 36 | 6. Кто хочет самостоятельно подучить JavaScript или обновить свои знания, то есть 37 | две электронные книги: https://learn.javascript.ru/ и http://gabdrahimov.ru/javascript-uchebnik 38 | 39 | 7. Несколько моих лекций по Node.js и докладов на конференциях тут: 40 | * Архитектура программных систем на Node.js 41 | https://www.youtube.com/watch?v=Try7lmWikao 42 | * Вводная лекция по Node.js (с коллегами) 43 | https://www.youtube.com/watch?v=0oIiPJtfUpw 44 | * Примеры быстрой разработки API на масштабируемом сервера приложений 45 | https://www.youtube.com/watch?v=f6McffaVq78 46 | 47 | 8. Несколько моих статей можно почитать тут: 48 | * Impress Application Server простыми словами 49 | https://habrahabr.ru/post/247543/ 50 | * Метапрограммирование (с примерами на JavaScript) 51 | https://habrahabr.ru/post/227753/ 52 | * Назад, к технологиям верхнего палеолита, от любимых всеми REST, STATEless, CRUD, CGI, FastСGI и MVC 53 | https://habrahabr.ru/post/204958/ 54 | * А MVC ли это? 55 | https://habrahabr.ru/post/117791/ 56 | * Как исправить ошибку в NodeJS и нечаянно поднять производительность в 2 раза 57 | https://habrahabr.ru/post/264851/ 58 | 59 | 9. Как установить Node.js и подготовить среду для разработки: 60 | * Все есть на первой странице https://nodejs.org/ 61 | * Ставьте версию 6.2.1 (или последнюю на текущий момент) 62 | * или вот тут лежат у меня скрипты установки для разных версий Ubuntu, Debian, CentOS 63 | https://github.com/tshemsedinov/impress/tree/master/deploy 64 | Скрипт ставит полный набор, MongoDB, Node.js, Impress и вспомогательные вещи. 65 | Из скрипта можно взять только команды для установки ноды. 66 | Например, для установки на Ubuntu сразу бинарников: 67 | ``` 68 | sudo apt-get -y install build-essential openssl libssl-dev pkg-config python 69 | curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - 70 | sudo apt-get install -y nodejs 71 | ``` 72 | Скрипты, которые `*-src.sh` это для установки из исходников, т.е. для сборки, 73 | это работает долго, но можете попробовать, если хотите, для опыта. 74 | 75 | С уважением, 76 | ~Тимур Шемсединов 77 | -------------------------------------------------------------------------------- /Docs/SOFTARCH/README.md: -------------------------------------------------------------------------------- 1 | ## Архитектура и проектирование программного обеспечения 2 | 3 | Билет содержит два теоретических вопроса и одно практическое задание. 4 | 5 | ### Теоретические вопросы на экзамен 6 | 7 | Экзамен письменный, писать нужно разборчиво, иначе нужно будет зачитать свое творение или давать пояснения устно. 8 | 9 | 1. Что такое архитектура ПО, основные ее задачи и методы 10 | 2. Обзор топологий компоновки программных компонентов 11 | 3. Клиент-серверная архитектура и трехуровневая (трехзвенная) архитектура 12 | 4. Слои абстракции в программных системах и примеры слоев абстракции 13 | 5. Модульность и подходы к ее реализации 14 | 6. Принцип инверсии управления IoC (Inversion of Control) 15 | 7. Принцип инверсии зависимостей DIP (Dependency Inversion Principle) 16 | 8. Принцип внедрения зависимостей (Dependency Injection) 17 | 9. Связь принципа инверсии управления (IoC) и внедрения зависимостей (DI) 18 | 10. Разница между внедрением зависимостей (DI) и Dependency Lookup (DL) 19 | 11. Понятие программного интерфейса (API) 20 | 12. Обертки (wrappers) и примеры их применения 21 | 13. Основные парадигмы программирования и сферы их применения 22 | 14. Разница между прототипным наследованием и классовым 23 | 15. Парадигма функционального программирования и его задачи 24 | 16. Разница между императивным и декларативным программированием 25 | 17. Событийно-ориентированное программирование и принцип работы EventEmitter 26 | 18. Асинхронное программирование и особенности асинхронного кода 27 | 19. Блокирующий и неблокирующий ввод/вывод (non-blocking I/O) 28 | 20. Понятие метаданных, метапрограммирование и его различные реализации 29 | 21. Программирование, управляемое данными (Data-driven Programming) 30 | 22. Межпроцессное взаимодействие (Interprocess Communication), классификация 31 | 23. Балансировка нагрузки в многопоточных приложениях, серверная и клиентская 32 | 24. Понятия сетевого протокола, сокета и порта 33 | 25. Непрерывная интеграция CI (Continuous integration) 34 | 26. Системы контроля версий, их задачи и применение 35 | 27. Семейство паттернов MV* и их место в программных системах 36 | 28. Реактивное программирование с примерами использования 37 | 29. Стиль кода и необходимость использования соглашений о стиле 38 | 30. Рефакторинг и декомпозиция кода, повышение уровня абстракции кода 39 | 31. Языки с ручным и автоматическим управлением памятью 40 | 32. Сборщики мусора и подсчет ссылок, утечки памяти и их предотвращение 41 | 33. Классификация языков программирования по уровню абстракции 42 | 34. Классификация языков программирования по управлению памятью 43 | 35. Языки со статической и динамической типизацией 44 | 36. Сильная и слабая типизация, явная и неявная типизация 45 | 37. Принцип утиной типизации и проблемы, которые она решает (duck typing) 46 | 38. Раннее и позднее связывание, сильная и слабая связность кода 47 | 39. Статическое и динамическое связывание 48 | 40. Классификация способов непрямого наследования 49 | 41. Примеси и их применение для непрямого наследования (mixin) 50 | 42. Принцип композиции как замена наследованию 51 | 43. Понятие функции высшего порядка и суперпозиции функций 52 | 44. Анонимные функции и передача функций как аргументов 53 | 45. Каррирование и частичное применение функций (currying) 54 | 46. Замыкания (closure) и их применение, для чего используется, как работает 55 | 47. Контексты и управление видимостью в контекстах 56 | 48. Оптимизирующие компиляторы и их особенности 57 | 49. Специализированные языки DSL (Domain Specific Language) 58 | 50. Классификация DSL (Domain Specific Language) 59 | 51. BNF, ABNF, регулярные выражения и синтаксисы 60 | 52. Причины создания языков высокого уровня абстракции 61 | 53. Глобальное состояние и комбинаторный взрыв 62 | 54. Способы минимизации глобального состояния 63 | 55. Использование итераторов и масштабирование вычислений 64 | 56. Использование хешей (ассоциативных массивов) как замена if/switch 65 | 57. Организация слоя доступа к данным DAC (Data Access Layer) 66 | 58. Место кода бизнес-логики, интерфейсов и фреймворка в архитектуре ПО 67 | 59. Экранирование модулей приложения друг от друга (sandboxing) 68 | 60. Парсинг, сериализация и десериализация (serialization) 69 | 70 | ### Практические задания на экзамен 71 | 72 | Задачи не публикуются, но будут связаны с лабораторными и лекциями курса. 73 | Для реализация практического задания можно использовать любой язык программирования, который позволяет решить задачу. 74 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/lib/font/source-sans-pro/LICENSE: -------------------------------------------------------------------------------- 1 | SIL Open Font License 2 | 3 | Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. 4 | 5 | This Font Software is licensed under the SIL Open Font License, Version 1.1. 6 | This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL 7 | 8 | —————————————————————————————- 9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 10 | —————————————————————————————- 11 | 12 | PREAMBLE 13 | The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. 14 | 15 | The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. 16 | 17 | DEFINITIONS 18 | “Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. 19 | 20 | “Reserved Font Name” refers to any names specified as such after the copyright statement(s). 21 | 22 | “Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s). 23 | 24 | “Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. 25 | 26 | “Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. 27 | 28 | PERMISSION & CONDITIONS 29 | Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 30 | 31 | 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 32 | 33 | 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 34 | 35 | 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 36 | 37 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 38 | 39 | 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. 40 | 41 | TERMINATION 42 | This license becomes null and void if any of the above conditions are not met. 43 | 44 | DISCLAIMER 45 | THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- /Docs/PROTOCOLS/Protocols-Questions-02.md: -------------------------------------------------------------------------------- 1 | ## Проектирование сетевых протоколов 2 | 3 | ### Теоретические вопросы на экзамен 4 | 5 | 1. Модель OSI / ISO і зв'язок з протоколами, інтерфейсами і стеком протоколів 6 | 2. Види і типи протоколів для різних рівнів моделі OSI/ISO 7 | 3. Поняття рукостискання, протоколи з встановленням з'єднання і без встановлення 8 | 4. Гарантована доставка та не гарантована доставка 9 | 5. Контрольні суми, маршрутизація, порти, хости, сокети 10 | 6. Способи опису структури пакетів, для текстових RegExp і ABNF, та нотація для двійкових пакунків 11 | 7. Поняття заголовків (headers), тіла (payload), шари абстракцій і стеки протоколів 12 | 8. Принципи взаємодії систем: request/responce, принципи pool/push 13 | 9. Принципи взаємодії систем: повідомлення і шини повідомлень, трансляція подій, хаб, брокер 14 | 10. Принципи взаємодії систем: шина, широкомовна передача, клієнт-сервер 15 | 11. Ідентифікація та адресація, URI, URL, URN, IPv4, IPv6 16 | 12. Протоколи з гарантованою доставкою, приклади використання 17 | 13. Призначення контрольних сум, алгоритми образхування сум, хеш функції 18 | 14. Способи інтеграції систем в гетерогенній мережевому середовищі 19 | 15. Оптимізація складності взаємодії, топологія мереж 20 | 16. Виклик віддалених процедур, маршалінг, серіалізація і десеріалізація, заглушки 21 | 17. Архітектури: файл-сервер, клієнт-сервер, трьохрівнева, багаторівнева 22 | 18. Товстий і тонкий клієнт 23 | 19. Шари абстракцій в ІС і зв'язування шарів інтерфейсами і протоколами 24 | 20. Веб-сервіси. Стек протоколів для веб-додатків і веб-архітектури 25 | 21. Огляд протоколів: TCP, UDP, ICMP, HTTP, FTP, ARP, IMAP, RDP, POP3 26 | 22. Огляд протоколів: SMTP, SNMP, XMPP, DHCP, TLS, VPN, L2TP 27 | 23. Огляд форматів серіалізації і представлення даних в протоколах: MIME, BASE64, JSON, YAML, XML 28 | 24. Огляд форматів серіалізації і представлення даних в протоколах: HTML, UUE, CSV, BSON, URLENCODE 29 | 25. Принципи вибору стека протоколів і бібліотек реалізації, на прикладі інформаційних систем для роботи з базами даних 30 | 26. Принципи вибору стека протоколів і бібліотек реалізації, на прикладі інформаційних систем для роботи здокументообігу 31 | 27. Питання безпеки: використання аутентифікації, авторизації, підтримки сесій, багатофакторна перевірка справжності 32 | 28. Питання безпеки: сертифікати шифрування, відкритий і закритий ключі (асиметричне шифрування), PGP, SSL, TLS, HTTPS, RSA 33 | 29. Захист від атак за допомогою протоколів: переповнення буфера, ін'єкції коду, ескейпінг, валідація. 34 | 30. Захист від атак за допомогою протоколів: фільтрація пакетів, аксес-листи і блек-листи, капча, захист автентичності від DOS/DDOS 35 | 31. Балансування навантаження серверів, протоколи ініціалізації з'єднання, проксі і реверспроксі 36 | 32. Раундробін, хеш-функції для розсіювання навантажень 37 | 33. Питання надійності в високонавантажених системах з використанням протоколів 38 | 34. Протоколи зі станом і без стану, особливості REST 39 | 35. Особливості використання транзакційних протоколів та відкати стану 40 | 36. Приклад проектування протоколу виклику віддалених процедур з трансляцією подій 41 | 37. Приклад оптимізації формату серіалізації для представлення даних в міжпроцесній взаємодії 42 | 38. Особливості застосування протоколів з брокерами запитів 43 | 39. Особливості протоколів, використовуваних в локальних і глобальних мережах 44 | 40. Характеристика протоколів стеку TCP/IP 45 | 41. Протоколи мережевого рівня, приклади та особливості 46 | 42. Протоколи транспортного рівня, приклади та особливості 47 | 43. Протоколи прикладного рівня, приклади та особливості 48 | 44. Веб-сервіси як засіб інтеграції додатків 49 | 45. Веб-служби: концепції та протоколи 50 | 46. Стандарти систем управління на основі протоколу SNMP, примітиви протоколу SNMP 51 | 47. Стандарти систем управління на основі протоколу SNMP, формати і імена об'єктів SNMP MIB 52 | 48. Брокери запитів Їх функції і особливості 53 | 49. Розкрити відмінність: сеанс із встановленням з'єднання і без встановлення 54 | 50. Розкрити відмінність: точка-точка і широкомовна передача 55 | 51. Розкрити відмінність понять: авторизація і аутентифікація 56 | 52. Розкрити відмінність: пакетні і потокові протоколи 57 | 53. Розкрити відмінність: парсинг регулярними виразами і парсинг операціями з рядками 58 | 54. Розкрити відмінність: синхронна і асинхронна взаємодія 59 | 55. Блокирующий и неблокирующий ввод/вывод 60 | 56. Межпроцессное взаимодействие (Interprocess Communication), классификация 61 | 57. Балансировка нагрузки в многопоточных приложениях, серверная и клиентская 62 | 58. Использование итераторов и масштабирование распределенных вычислений 63 | 59. Организация слоя доступа к данным 64 | 60. Парсинг, сериализация и десериализация 65 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/notes/notes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Handles opening of and synchronization with the reveal.js 3 | * notes window. 4 | * 5 | * Handshake process: 6 | * 1. This window posts 'connect' to notes window 7 | * - Includes URL of presentation to show 8 | * 2. Notes window responds with 'connected' when it is available 9 | * 3. This window proceeds to send the current presentation state 10 | * to the notes window 11 | */ 12 | var RevealNotes = (function() { 13 | 14 | function openNotes( notesFilePath ) { 15 | 16 | if( !notesFilePath ) { 17 | var jsFileLocation = document.querySelector('script[src$="notes.js"]').src; // this js file path 18 | jsFileLocation = jsFileLocation.replace(/notes\.js(\?.*)?$/, ''); // the js folder path 19 | notesFilePath = jsFileLocation + 'notes.html'; 20 | } 21 | 22 | var notesPopup = window.open( notesFilePath, 'reveal.js - Notes', 'width=1100,height=700' ); 23 | 24 | /** 25 | * Connect to the notes window through a postmessage handshake. 26 | * Using postmessage enables us to work in situations where the 27 | * origins differ, such as a presentation being opened from the 28 | * file system. 29 | */ 30 | function connect() { 31 | // Keep trying to connect until we get a 'connected' message back 32 | var connectInterval = setInterval( function() { 33 | notesPopup.postMessage( JSON.stringify( { 34 | namespace: 'reveal-notes', 35 | type: 'connect', 36 | url: window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search, 37 | state: Reveal.getState() 38 | } ), '*' ); 39 | }, 500 ); 40 | 41 | window.addEventListener( 'message', function( event ) { 42 | var data = JSON.parse( event.data ); 43 | if( data && data.namespace === 'reveal-notes' && data.type === 'connected' ) { 44 | clearInterval( connectInterval ); 45 | onConnected(); 46 | } 47 | } ); 48 | } 49 | 50 | /** 51 | * Posts the current slide data to the notes window 52 | */ 53 | function post() { 54 | 55 | var slideElement = Reveal.getCurrentSlide(), 56 | notesElement = slideElement.querySelector( 'aside.notes' ); 57 | 58 | var messageData = { 59 | namespace: 'reveal-notes', 60 | type: 'state', 61 | notes: '', 62 | markdown: false, 63 | whitespace: 'normal', 64 | state: Reveal.getState() 65 | }; 66 | 67 | // Look for notes defined in a slide attribute 68 | if( slideElement.hasAttribute( 'data-notes' ) ) { 69 | messageData.notes = slideElement.getAttribute( 'data-notes' ); 70 | messageData.whitespace = 'pre-wrap'; 71 | } 72 | 73 | // Look for notes defined in an aside element 74 | if( notesElement ) { 75 | messageData.notes = notesElement.innerHTML; 76 | messageData.markdown = typeof notesElement.getAttribute( 'data-markdown' ) === 'string'; 77 | } 78 | 79 | notesPopup.postMessage( JSON.stringify( messageData ), '*' ); 80 | 81 | } 82 | 83 | /** 84 | * Called once we have established a connection to the notes 85 | * window. 86 | */ 87 | function onConnected() { 88 | 89 | // Monitor events that trigger a change in state 90 | Reveal.addEventListener( 'slidechanged', post ); 91 | Reveal.addEventListener( 'fragmentshown', post ); 92 | Reveal.addEventListener( 'fragmenthidden', post ); 93 | Reveal.addEventListener( 'overviewhidden', post ); 94 | Reveal.addEventListener( 'overviewshown', post ); 95 | Reveal.addEventListener( 'paused', post ); 96 | Reveal.addEventListener( 'resumed', post ); 97 | 98 | // Post the initial state 99 | post(); 100 | 101 | } 102 | 103 | connect(); 104 | 105 | } 106 | 107 | if( !/receiver/i.test( window.location.search ) ) { 108 | 109 | // If the there's a 'notes' query set, open directly 110 | if( window.location.search.match( /(\?|\&)notes/gi ) !== null ) { 111 | openNotes(); 112 | } 113 | 114 | // Open the notes when the 's' key is hit 115 | document.addEventListener( 'keydown', function( event ) { 116 | // Disregard the event if the target is editable or a 117 | // modifier is present 118 | if ( document.querySelector( ':focus' ) !== null || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey ) return; 119 | 120 | // Disregard the event if keyboard is disabled 121 | if ( Reveal.getConfig().keyboard === false ) return; 122 | 123 | if( event.keyCode === 83 ) { 124 | event.preventDefault(); 125 | openNotes(); 126 | } 127 | }, false ); 128 | 129 | // Show our keyboard shortcut in the reveal.js help overlay 130 | if( window.Reveal ) Reveal.registerKeyboardShortcut( 'S', 'Speaker notes view' ); 131 | 132 | } 133 | 134 | return { open: openNotes }; 135 | 136 | })(); 137 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/plugin/markdown/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | reveal.js - Markdown Demo 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 |
23 | 24 | 25 |
26 | 36 |
37 | 38 | 39 |
40 | 54 |
55 | 56 | 57 |
58 | 69 |
70 | 71 | 72 |
73 | 77 |
78 | 79 | 80 |
81 | 86 |
87 | 88 | 89 |
90 | 100 |
101 | 102 |
103 |
104 | 105 | 106 | 107 | 108 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /Docs/PROTOCOLS/Protocols-Questions-03.md: -------------------------------------------------------------------------------- 1 | ## Проектирование сетевых протоколов 2 | 3 | ### Базовые теоретические вопросы на экзамен 4 | 5 | 1. Модель OSI / ISO і зв'язок з протоколами, інтерфейсами і стеком протоколів 6 | http://citforum.ru/nets/switche/osi.shtml 7 | 2. Види і типи протоколів для різних рівнів моделі OSI/ISO 8 | http://doc.hive.kiev.ua/BSDA-course/apbs01.html 9 | http://bourabai.ru/lan/osi.htm 10 | 3. Поняття рукостискання, протоколи з встановленням з'єднання і без встановлення 11 | http://rus-linux.net/MyLDP/BOOKS/POSA/secrets/figure4_ru.png 12 | 4. Гарантована доставка та не гарантована доставка 13 | https://sites.google.com/site/exemsenko/23-garantirovannaa-i-negarantirovannaa-dostavka-soobsenij-v-ip-setah-protokoly-tcp-urovna 14 | 5. Контрольні суми, маршрутизація, порти, хости, сокети 15 | https://ru.wikipedia.org/wiki/Контрольная_сумма 16 | https://ru.wikipedia.org/wiki/Маршрутизация 17 | https://ru.wikipedia.org/wiki/Сокет_(программный_интерфейс) 18 | 6. Принципи взаємодії систем: request/responce, принципи pool/push 19 | https://ru.wikipedia.org/wiki/Технология_Push 20 | https://ru.wikipedia.org/wiki/Технология_Pull 21 | 7. Принципи взаємодії систем: повідомлення і шини повідомлень, трансляція подій, хаб, брокер 22 | http://zguide.zeromq.org/page:all 23 | 8. Принципи взаємодії систем: шина, широкомовна передача, клієнт-сервер 24 | http://infocisco.ru/types_communication.html 25 | 9. Ідентифікація та адресація, URI, URL, URN, IPv4, IPv6 26 | http://citforum.ck.ua/internet/xml/uri/ 27 | 10. Протоколи з гарантованою доставкою, приклади використання 28 | https://sites.google.com/site/exemsenko/23-garantirovannaa-i-negarantirovannaa-dostavka-soobsenij-v-ip-setah-protokoly-tcp-urovna 29 | 11. Призначення контрольних сум, алгоритми образхування сум, хеш функції 30 | https://ru.wikipedia.org/wiki/Хеширование 31 | https://ru.wikipedia.org/wiki/Контрольная_сумма 32 | 12. Виклик віддалених процедур, маршалінг, серіалізація і десеріалізація, заглушки 33 | http://citforum.ck.ua/programming/cpp/com_4_12.shtml 34 | 13. Архітектури: файл-сервер, клієнт-сервер, трьохрівнева, багаторівнева 35 | http://bourabai.ru/dbt/client1.htm 36 | http://bourabai.ru/dbt/client21.htm 37 | http://bourabai.ru/dbt/client22.htm 38 | 14. Товстий і тонкий клієнт 39 | http://bourabai.ru/dbt/richclient.htm 40 | 15. Веб-сервіси. Стек протоколів для веб-додатків і веб-архітектури 41 | https://habrahabr.ru/post/46374/ 42 | 16. Огляд протоколів: TCP, UDP, ICMP, HTTP, FTP, ARP, IMAP, RDP, POP3 43 | 17. Огляд протоколів: SMTP, SNMP, XMPP, DHCP, TLS, VPN, L2TP 44 | 18. Огляд форматів серіалізації і представлення даних в протоколах: MIME, BASE64, JSON, YAML, XML 45 | 19. Огляд форматів серіалізації і представлення даних в протоколах: HTML, UUE, CSV, BSON, URLENCODE 46 | 20. Питання безпеки: використання аутентифікації, авторизації, підтримки сесій, багатофакторна перевірка справжності 47 | 21. Питання безпеки: сертифікати шифрування, відкритий і закритий ключі (асиметричне шифрування), PGP, SSL, TLS, HTTPS, RSA 48 | 22. Питання надійності в високонавантажених системах з використанням протоколів 49 | 23. Протоколи зі станом і без стану, особливості REST 50 | https://habrahabr.ru/post/204958/ 51 | https://habrahabr.ru/post/38730/ 52 | https://habrahabr.ru/post/131343/ 53 | https://habrahabr.ru/post/265845/ 54 | 24. Характеристика протоколів стеку TCP/IP 55 | 25. Протоколи мережевого рівня, приклади та особливості 56 | 26. Протоколи транспортного рівня, приклади та особливості 57 | 27. Протоколи прикладного рівня, приклади та особливості 58 | 28. Веб-сервіси як засіб інтеграції додатків 59 | https://habrahabr.ru/post/46374/ 60 | https://habrahabr.ru/post/204958/ 61 | 29. Веб-служби: концепції та протоколи 62 | 30. Стандарти систем управління на основі протоколу SNMP 63 | 31. Брокери запитів Їх функції і особливості 64 | http://citforum.ck.ua/database/articles/corba.shtml 65 | 32. Розкрити відмінність: сеанс із встановленням з'єднання і без встановлення 66 | 33. Розкрити відмінність: точка-точка і широкомовна передача 67 | 34. Розкрити відмінність понять: авторизація і аутентифікація 68 | https://www.opennet.ru/docs/BSD/qa/authoriz-vs-authent.html 69 | 35. Розкрити відмінність: пакетні і потокові протоколи 70 | https://habrahabr.ru/post/209144/ 71 | https://habrahabr.ru/post/209524/ 72 | https://habrahabr.ru/post/213559/ 73 | https://habrahabr.ru/post/276067/ 74 | 36. Розкрити відмінність: парсинг регулярними виразами і парсинг операціями з рядками 75 | 37. Розкрити відмінність: синхронна і асинхронна взаємодія 76 | http://rsdn.ru/forum/network/2030564.flat 77 | 38. Блокуючие і неблоуюче введення/виведення 78 | https://habrahabr.ru/post/128772/ 79 | 39. Міжпроцесова взаємодія (Interprocess Communication), класифікація 80 | https://rsdn.ru/article/baseserv/ipc.xml 81 | 40. Парсинг, сериалізация і десеріалізація 82 | https://ru.wikipedia.org/wiki/Синтаксический_анализ 83 | https://ru.wikipedia.org/wiki/Регулярные_выражения 84 | -------------------------------------------------------------------------------- /KPI-2016-Spring/Letter2.md: -------------------------------------------------------------------------------- 1 | ## Письмо 2 2 | 3 | Дата: 2016-03-09 4 | Группы: ИП-31, ИП-32, ИП-41, ИП-42, ИП-43, ИП-44 5 | 6 | Добрый день, 7 | 8 | На повестке дня у нас новые материалы, ссылки, которые я обещал, но сначала 9 | дополнительные семинары и лекции, которые пройдут в к.25 18 корпуса в ближайшие 10 | недели: 11 | 12 | 1. Четверг 2016-03-10 в 19:00 встреча по поводу написания нового "Кампуса" 13 | (программного обеспечения для КПИ). Я буду заниматься архитектурой проекта, 14 | поэтому можно будет получить дополнительный практический опыт, а при хороших 15 | результатах, КПИ и КБ ИС могут вознаграждать отличившихся. 16 | 2. Пятница 2016-03-11 в 17:00 встреча по формированию группы разработчиков на 17 | C# и .NET, для которых будут читаться отдельные дополнительные лекции по 18 | вечерам, а отличившиеся получат предложения поучаствовать в самых передовых 19 | проектах на этой платформе. 20 | 3. Понедельник 2016-03-14 в 17:00 встреча по формированию группы разработчиков 21 | на Node.js и JavaScript, для которых тоже будут читаться отдельные лекции по 22 | вечерам и будет возможность практического участия как в коммерческих проектах, 23 | так и в проектх в открытом коде. Так же, я будут помогать студентам с их 24 | собственными проектами, если они будут интересные и перспективные. Лекции и 25 | консультации будут регулярно, обычно в это время по понедельникам. 26 | 27 | Точное время и полное расписание будет появляться тут: 28 | [KPI-2016-Spring/Meetings.md](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Meetings.md) 29 | 30 | ### Материалы и ссылки: 31 | 32 | 1. Для тех, кому JavaScript был в новинку и у кого были сложности с пониманием 33 | синтаксиса, надеюсь, что у вас успехи на https://learn.javascript.ru/ который я 34 | рекомендовал, это действительно очень простой язык и его крайне необходимо 35 | хорошо знать в современном мире, это совершенно безальтернативное знание, его ни 36 | чем не заменить. Поэтому, если возникли сложности с освоением, вот еще один 37 | учебник, он еще проще и короче: http://gabdrahimov.ru/javascript-uchebnik 38 | 39 | 2. Кто пропустил первую лабораторную работу, может найти их тут на русском и 40 | английском языках соответственно: 41 | * [HowProgrammingWorks/InversionOfControl/sandboxedModule/ru](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/sandboxedModule/ru) 42 | * [HowProgrammingWorks/InversionOfControl/sandboxedModule/en](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/sandboxedModule/en) 43 | 44 | 3. На этой денеле мы переходим ко второй лабораторной: 45 | * [HowProgrammingWorks/InversionOfControl/interfaceWrapper/ru](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/interfaceWrapper/ru) 46 | * [HowProgrammingWorks/InversionOfControl/interfaceWrapper/en](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/interfaceWrapper/en) 47 | 48 | 4. Книги, которые я хочу посоветовать к прочтению, они все короткие и точные: 49 | * Рене Декарт "Рассуждение о методе" хоть и была написана задолго до появления 50 | электроных вычислений, но для понимания архитектуры программного обеспечения, 51 | это чуть ли ни самая важная книга: http://psylib.org.ua/books/dekar01/index.htm 52 | * Эдсгер Дейкстра "Заметки по структурному программированию" (Notes on 53 | Structured Programming). 54 | На русском: http://meta-systems.com.ua/Books/Dijkstra/index.html 55 | На английском: https://www.cs.utexas.edu/~EWD/ewd02xx/EWD249.PDF 56 | 57 | 5. Полезные статьи: 58 | * "Я веб-разработчик и уже 10 дней не могу написать простейшее приложение" 59 | https://habrahabr.ru/post/277323/ это перевод, она есть и на английском языке, 60 | ссылка в начале статьи. 61 | * Еще скандальная тема "Почему объектно-ориентированное программирование 62 | провалилось?" статью читать обязательно, ноть в ней и мало фактов, на мой 63 | взгляд, но в ней много ссылок и затронута важная тема, по которой я уже 64 | давал пояснения и мы ее еще отдельно подробнее разберем. 65 | http://blogerator.ru/page/oop_why-objects-have-failed 66 | 67 | 6. Дополнительное чтение, можно отложить до лета, поищите бумажные варианты: 68 | * Для тех, кто хочет умняковых эссе, предупреждаю, длинное и интересное, займет 69 | много времени: Умберто Эко "Поиски совершенного языка". Эссе об истории 70 | лингвистических моделей данных, начиная от каббалистов и искателей первоязыка, 71 | создателей комбинаторных моделей и алфавитов, полиграфий и философских языков, 72 | попыток всеобщей классификации и кодификации знаний, до гипертекста и 73 | современных течений. http://www.ex.ua/2152662 74 | * Классическая книга по кибернетике Норберт Винер "Кибернетика, или Управление 75 | и связь в животном и машине" (Norbert Wiener "Cybernetics: Or Control and 76 | Communication in the Animal and the Machine") 1948. Это замечательная книга, 77 | которая объединит ваши знания из разных областей и даст научную карту не только 78 | ИТ отрасли, но и всех смежных наук. http://scisne.net/a-1590 79 | 80 | С уважением, 81 | ~Тимур Шемсединов 82 | -------------------------------------------------------------------------------- /KPI-2016-Summer/README.md: -------------------------------------------------------------------------------- 1 | # Материалы летней школы 2 | 3 | Основной репозиторий на Github: https://github.com/HowProgrammingWorks 4 | 5 | - Начало летней школы по Node.js в КПИ 6 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233058960/) 7 | - [Расписание](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/Meetings.md) и [Статья на Хабре](https://habrahabr.ru/post/307332/) 8 | - Лекция №1 Введение в технологию Node.js 9 | - [Meetup](http://www.meetup.com/KievNodeJS/events/233195325/) 10 | - [Слайды с вводной лекции](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/01-NodeJs-Platform-Basics.pdf) 11 | - Лекция №2 Синтаксис JavaScript (хороший стиль кода и новшества в языке) 12 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195396/) 13 | - [Презентация](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/02-JavaScript-New-Features.md) 14 | - Лекция №3 Парадигмы программирования в JavaScript и Node.js 15 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195433/) 16 | - [Генераторы](https://github.com/HowProgrammingWorks/Generators) 17 | - [Презентация](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/03-JavaScript-Generators.pdf) 18 | - [Примеры](https://github.com/HowProgrammingWorks/Generators) 19 | - [Монады, примеры кода](https://github.com/DzyubSpirit/Monads-in-Javascript) 20 | - [Письмо с материалами после лекции](http://www.meetup.com/KievNodeJS/messages/boards/thread/50053526) 21 | - Лекция №4 Песочницы, инверсия управления, внедрение зависимостей Node.js 22 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195513/) 23 | - [Песочницы / Sandboxes](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/sandboxedModule) 24 | - [Обертки / Wrappers](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/interfaceWrapper) 25 | - [Внедрение зависимостей / Dependency injection](https://github.com/HowProgrammingWorks/InversionOfControl/tree/master/dependencyInjection/ru) 26 | - Лекция №5 Асинхронное программирование на Node.js 27 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195696/) 28 | - [Концептуальные примеры и задания](https://github.com/HowProgrammingWorks/AsynchronousProgramming) 29 | - [Практические примеры](https://github.com/DzyubSpirit/Asynchronous-Javascript) 30 | - Лекция №6 Промисы, генераторы, async, metasync 31 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195731/) 32 | - [Библиотека MetaSync](https://github.com/metarhia/MetaSync) 33 | - [Примеры кода по промисам](https://github.com/HowProgrammingWorks/Promises) 34 | - Лекция №7 Метапрограммирование на Node.js 35 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195745/) 36 | - [Слайды с конференции](http://www.slideshare.net/tshemsedinov/javascript-36636872) 37 | - [Статья на Хабре](https://habrahabr.ru/post/227753/) 38 | - [Примеры кода](https://github.com/HowProgrammingWorks/Metaprogramming) 39 | - Лекция №8 Сервера для ветхого веба, HTTP на Node.js 40 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195763/) 41 | - [Классический сервер из документации](https://github.com/HowProgrammingWorks/NodeServer/tree/master/native-classic) 42 | - [Простой сервер с разделением слоев абстракции](https://github.com/HowProgrammingWorks/NodeServer/tree/master/native-simple) 43 | - [Сервер с масками маршрутов](https://github.com/HowProgrammingWorks/NodeServer/tree/master/native-advanced) 44 | - [Сервер с кластеризацией](https://github.com/HowProgrammingWorks/NodeServer/tree/master/native-cluster) 45 | - [Пример плохого и хорошего стиля обработки запросов](https://github.com/HowProgrammingWorks/AbstractionLayers) 46 | - Лекция №9 Интерактивные приложения, пример чата, WS, TCP, JSTP 47 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195790/) 48 | - [Пример чата на вебсокетах](https://github.com/HowProgrammingWorks/WebsocketChat) 49 | - [Статья на Хабре](https://habrahabr.ru/post/306584/) 50 | - Доклады на [OdessaJS'2016](http://odessajs.org/) 51 | - [Тимур Шемсединов "Node.js Macht Frei"](https://www.youtube.com/watch?v=926UKzrVrqk) 52 | - [Алексей Орленко "Об оверхеде, который вас убивает"](https://www.youtube.com/watch?v=LYqhH2Rk-K4) 53 | - Metarhia на Github: 54 | - [Impress Application Server](https://github.com/metarhia/Impress) 55 | - [JavaScript Transfer Protocol](https://github.com/metarhia/JSTP) реализация в Impress [/lib/api.jstp.js] (https://github.com/metarhia/Impress/blob/master/lib/api.jstp.js) 56 | - Лекция №10 Межпроцессовое взаимодействие и масштабирование 57 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195809/) 58 | - [Примеры кода](https://github.com/HowProgrammingWorks/InterProcessCommunication) 59 | - [Пример реализации протокола поверх TCP](https://github.com/metarhia/Impress/blob/master/lib/api.jstp.js) 60 | - Лекция №11 Пример реализации многопольз. электронных таблиц 61 | - [Объявление на Meetup](http://www.meetup.com/KievNodeJS/events/233195834/) 62 | - [Репозиторий с примерами и заданием](https://github.com/HowProgrammingWorks/EventDrivenProgramming) 63 | - [EventEmitter](https://github.com/HowProgrammingWorks/EventDrivenProgramming/tree/master/EventEmitter) 64 | - [Живые таблицы](https://github.com/HowProgrammingWorks/EventDrivenProgramming/tree/master/LiveTable) 65 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Письма к студентам курса 2 | 3 | # Осень 2017 4 | * Курс "Основы программирования", группы ИП-71, ИП-72, ИП-73, ИП-74, ИТ-71, ИТ-72, ИТ-73, ИТ-74 5 | * [Расписание лекций](https://www.meetup.com/HowProgrammingWorks/events/) все время обновляется и дополняется 6 | * Материалы лекции #1 ["Введение в программную инженерию"](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Autumn/Lecture1.md) 7 | * Материалы лекции #2 ["Основы JavaScript: переменные, типы и функции"](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Autumn/Lecture2.md) 8 | * Материалы лекции #3 ["Настройка среды: git, github"](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Autumn/Lecture3.md) 9 | * Материалы лекции #4 ["Структуры данных, строки, композиция функций"](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Autumn/Lecture4.md) 10 | * Материалы лекции #5 ["JavaSctipt for Babies"](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Autumn/Lecture5.md) 11 | * Материалы лекции #6 ["Композиция функций, частичное применение, обертки"](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Autumn/Lecture6.md) 12 | * Материалы лекции #7 ["Введение в Node.js"](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Autumn/Lecture7.md) 13 | * Материалы лекции #8 "Стиль и конвенции кода на JavaScript" 14 | * Материалы лекции #9 "Условия, итерирование, коллекции" 15 | * Курсы "Технологии разработки программного обеспечения" и "Программирование интернета" 16 | 17 | # Лето 2017 18 | * Летняя школа по JavaScript и Node.js в КПИ 19 | * [Расписание на август](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Summer/Meetings.md) 20 | * Материалы лекции #2: [Настройка окружения и инструментов](https://github.com/HowProgrammingWorks/Environment) 21 | * Материалы лекции #3: [Основы JavaScript](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Summer/Lecture3.md) 22 | * Материалы лекции #4: [Введение в Node.js](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Summer/Lecture4.md) 23 | * Материалы лекции #5: [Замыкания, примеси, обертки, функторы](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Summer/Lecture5.md) 24 | * Материалы лекции #6: [Файлы, потоки и буферы, и фронтенд](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Summer/Lecture6.md) 25 | 26 | # Весна 2017 27 | * Курс "Основы технологй программирования" ИП-51, ИП-52, ИП-53, ИП-54 28 | * [Письмо 1 от 2017-02-20](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Spring/Letter1.md) 29 | * [Письмо 2 от 2017-03-03](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2017-Spring/Letter2.md) 30 | * Курс "Разработка сетевых протоколов" ИТ-42 31 | 32 | # Осень 2016 33 | * Курс "Парадигмы программирования", ИТ-62 34 | * Курс "Практика программной инженерии", трек "Node.js", ИП-41, ИП-42, ИП-43, ИП-44 35 | * Курс "ПИ" (по сути читаю мультипарадигменное программирование), ИТ-31, ИТ-32 36 | 37 | # Лето 2016 38 | * Летняя школа по Node.js в КПИ, [Вступительная лекция](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/Intro.md), 39 | [материалы](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/), 40 | [см. расписание](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/Meetings.md) 41 | * Вводные материалы по Node.js студентам 1 курса, группы ИП-51, ИП-52, ИП-53, ИП-54, 42 | [см. ссылку](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Intro.md) 43 | 44 | # Весна 2016 45 | * Расписание семинаров и дополнительных лекций 46 | [KPI-2016-Spring/Meetings](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Meetings.md) 47 | * Курс "Архитектура и проектирование программного обеспечения" 48 | для групп ИП-31, ИП-32, ИП-41, ИП-42, ИП-43, ИП-44 49 | * [Письмо 1 от 2016-02-20](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter1.md) 50 | * [Письмо 2 от 2016-03-09](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter2.md) 51 | * [Письмо 3 от 2016-03-20](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter3.md) 52 | * [Письмо 4 от 2016-06-06](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter4.md) 53 | * [Билеты на экзамены по АППО](https://github.com/HowProgrammingWorks/Letters/tree/master/Docs/SOFTARCH) 54 | * [Письмо 5 от 2016-06-12](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter5.md) 55 | * Курс "Разработка сетевых протоколов" для группы ИТ-32 56 | * [Письмо 3a от 2016-03-20](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter3a.md) 57 | * Курс "Распределенные системы обработки информации" для группы ИТ-42 58 | * [Письмо 3a от 2016-03-20](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter3a.md) 59 | * Курс "Архитектура корпоративных систем" для групп ИК-52с, ИК-51м 60 | * Электронный конспект от Тимошина Юрия Афанасьевича [/Docs/ACS/Lectures/](https://github.com/HowProgrammingWorks/Letters/blob/master/Docs/ACS/Lectures/) 61 | * Материалы по лабораторным [/Docs/ACS/Labs/](https://github.com/HowProgrammingWorks/Letters/blob/master/Docs/ACS/Labs) 62 | * Материалы к курсу от Тимошина Юрия Афанасьевича [/Docs/ACS/Materials/](https://github.com/HowProgrammingWorks/Letters/blob/master/Docs/ACS/Materials/) 63 | * [Письмо 3a от 2016-03-20](https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Spring/Letter3a.md) 64 | -------------------------------------------------------------------------------- /KPI-2016-Summer/Intro.md: -------------------------------------------------------------------------------- 1 | # Летняя школа по Node.js в КПИ 2 | 3 | ## Вступительная лекция 4 | 5 | Тимур Шемсединов 6 | НИИ Системных Технологий 7 | 8 | Контакты по организационным вопросам: 9 | - [github.com/tshemsedinov](https://github.com/tshemsedinov) 10 | - [habrahabr.ru/users/marcusaurelius](https://habrahabr.ru/users/marcusaurelius/) 11 | - timur.shemsedinov@gmail.com 12 | 13 | Практику будут проводить: 14 | - Тимур Шемсединов 15 | - Алексей Орленко 16 | - Дмитрий Нечай 17 | - Влад Дзюба и другие 18 | 19 | ## Группы митапов 20 | 21 | Группа [meetup.com/KievNodeJS](http://www.meetup.com/KievNodeJS/) 22 | - Группа появилась 11 апреля 2014 года 23 | - За это время было 6 митапов 24 | - Собралось всего 852 человека 25 | 26 | Группа [meetup.com/NodeUA](http://www.meetup.com/NodeUA/) 27 | - Новая группа для более широкого сообщества 28 | - Уже 251 человека 29 | 30 | Чат на гиттере: 31 | https://gitter.im/nodeua/NodeJS 32 | 33 | ## КПИ и Node.js 34 | 35 | Node.js введен в учебные курсы: 36 | - Архитектура и проектирование программных систем (ФИВТ: АСОИУ, ВТ) 37 | - Распределенные системы обработки данных (ТК) 38 | - Архитектура корпоративных систем (ТК) 39 | - Проектирование сетевых протоколов (ТК) 40 | 41 | ## Планы обучения для "Программной инженерии" по треку Node.js 42 | 43 | Ссылка на программу: 44 | https://github.com/HowProgrammingWorks/Letters/tree/master/Docs/NODEJS 45 | 46 | Экзаменационные вопросы по предмету "Архитектура и проектирование программного обеспечения" 47 | https://github.com/HowProgrammingWorks/Letters/tree/master/Docs/SOFTARCH 48 | 49 | Учебные репозитории: 50 | - Оргенизация: https://github.com/HowProgrammingWorks 51 | - Письма студентам: https://github.com/HowProgrammingWorks/Letters 52 | 53 | Примеры лабораторных работ: 54 | - https://github.com/HowProgrammingWorks 55 | - https://github.com/InversionOfControl 56 | - https://github.com/AbstractionLayers 57 | - https://github.com/NodeServer 58 | - https://github.com/Metaprogramming 59 | - https://github.com/WebsocketChat 60 | - https://github.com/InterProcessCommunication 61 | - https://github.com/EventDrivenProgramming 62 | 63 | Репозитории технологического стека Metarhia, который разрабатывает наша команда: 64 | - https://github.com/metarhia 65 | - https://github.com/metarhia/Impress 66 | - https://github.com/metarhia/MetaSync 67 | - https://github.com/metarhia/JSTP 68 | - https://github.com/metarhia/JSQL 69 | - https://github.com/metarhia/GlobalStorage 70 | 71 | ## Еще ссылки 72 | 73 | Несколько моих лекций по Node.js и докладов на конференциях тут: 74 | 75 | - Архитектура программных систем на Node.js 76 | https://www.youtube.com/watch?v=Try7lmWikao 77 | - Вводная лекция по Node.js (с коллегами) 78 | https://www.youtube.com/watch?v=0oIiPJtfUpw 79 | - Примеры быстрой разработки API на масштабируемом сервера приложений 80 | https://www.youtube.com/watch?v=f6McffaVq78 81 | 82 | ## Подготовка среды 83 | 84 | Как установить Node.js и подготовить среду для разработки: 85 | 86 | Все есть на первой странице https://nodejs.org/ 87 | Ставьте версию 6.3.1 (или последнюю на текущий момент) или вот тут лежат у меня скрипты установки для разных версий Ubuntu, Debian, CentOS 88 | 89 | https://github.com/tshemsedinov/impress/tree/master/deploy 90 | 91 | Скрипты, которые ставят полный набор, с MongoDB, Node.js, Impress и вспомогательные вещи. 92 | Там есть варианты, из исходников и бинарные сразу. 93 | 94 | Например, для установки на Ubuntu сразу бинарников: 95 | ``` 96 | sudo apt-get -y install build-essential openssl libssl-dev pkg-config python 97 | curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - 98 | sudo apt-get install -y nodejs 99 | ``` 100 | 101 | Обновить npm можно так: `sudo npm update npm -g` 102 | 103 | ## Основные темы для летней школы 104 | 105 | 1. Особенности мультипарадигменного программирования на JavaScript под Node.js: асинхронное программирование, прототипное и классовое наследование, событийное программирование, реактивное и функциональное программирование, метапрограммирование. 106 | 2. Техники программирования и библиотеки: использование итераторов, библиотека async, параллельная и последовательная коммутация вызовов, промисы, EventEmitter, асинхронное программирование через события. 107 | 3. Работа с файлами, файловыми потоками и буферами, обработка двоичных данных, шифрование. 108 | 4. Работа с сетью, основные понятия и библиотеки для работы с сокетами, протоколы для передачи гипертекста для ветхого веба, создание базовых TCP и UDP серверов, стриминг видео и аудио файлов. 109 | 5. Межпроцессовое взаимодействие, распределенные вычисления, многопользовательский чат, масштабирование серверов событий и чат-серверов, многопользовательские электронные таблицы. 110 | 6. Альтернативные подходы к коммуникации приложений, SPA, XMLHTTPRequest и AJAX, Websocket и Socket.io, Server Sent Events, альтернативный технологический стек Metarhia: JSTP, Impress, JSQL и GlobalStorage. 111 | 7. Метапрограммирование, техники программирования, используемые для метапрограммирования, примеры кода, вебсервер с использованием метапрограммирования, рефлексия, интроспекция, скаффолдинг. 112 | 8. Масштабирование приложений, проектирование систем без узких мест, классификация и выборов принципов балансировки, оптимизация коммуникаций и построение приватных вычислительных и коммуникационных облачных сервисов. 113 | 114 | ## Митапы NodeUA 115 | 116 | 1. Node.js как бекенд для игровых приложений (интерактивность, реактивность реального времени) 117 | сб 13 августа 118 | 2. Node.js как бекенд для мобильных приложений (API, RPC, MQ, уведомления) 119 | сб 20 августа 120 | 3. Node.js как бекенд для корпоративных приложений (базы данных, безопасность, надежность, интеграция) 121 | дата уточняется 122 | 123 | ##Расписание 124 | 125 | Расписание на август 126 | 2016 https://github.com/HowProgrammingWorks/Letters/blob/master/KPI-2016-Summer/Meetings.md 127 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/print/paper.css: -------------------------------------------------------------------------------- 1 | /* Default Print Stylesheet Template 2 | by Rob Glazebrook of CSSnewbie.com 3 | Last Updated: June 4, 2008 4 | 5 | Feel free (nay, compelled) to edit, append, and 6 | manipulate this file as you see fit. */ 7 | 8 | 9 | @media print { 10 | 11 | /* SECTION 1: Set default width, margin, float, and 12 | background. This prevents elements from extending 13 | beyond the edge of the printed page, and prevents 14 | unnecessary background images from printing */ 15 | html { 16 | background: #fff; 17 | width: auto; 18 | height: auto; 19 | overflow: visible; 20 | } 21 | body { 22 | background: #fff; 23 | font-size: 20pt; 24 | width: auto; 25 | height: auto; 26 | border: 0; 27 | margin: 0 5%; 28 | padding: 0; 29 | overflow: visible; 30 | float: none !important; 31 | } 32 | 33 | /* SECTION 2: Remove any elements not needed in print. 34 | This would include navigation, ads, sidebars, etc. */ 35 | .nestedarrow, 36 | .controls, 37 | .fork-reveal, 38 | .share-reveal, 39 | .state-background, 40 | .reveal .progress, 41 | .reveal .backgrounds { 42 | display: none !important; 43 | } 44 | 45 | /* SECTION 3: Set body font face, size, and color. 46 | Consider using a serif font for readability. */ 47 | body, p, td, li, div { 48 | font-size: 20pt!important; 49 | font-family: Georgia, "Times New Roman", Times, serif !important; 50 | color: #000; 51 | } 52 | 53 | /* SECTION 4: Set heading font face, sizes, and color. 54 | Differentiate your headings from your body text. 55 | Perhaps use a large sans-serif for distinction. */ 56 | h1,h2,h3,h4,h5,h6 { 57 | color: #000!important; 58 | height: auto; 59 | line-height: normal; 60 | font-family: Georgia, "Times New Roman", Times, serif !important; 61 | text-shadow: 0 0 0 #000 !important; 62 | text-align: left; 63 | letter-spacing: normal; 64 | } 65 | /* Need to reduce the size of the fonts for printing */ 66 | h1 { font-size: 28pt !important; } 67 | h2 { font-size: 24pt !important; } 68 | h3 { font-size: 22pt !important; } 69 | h4 { font-size: 22pt !important; font-variant: small-caps; } 70 | h5 { font-size: 21pt !important; } 71 | h6 { font-size: 20pt !important; font-style: italic; } 72 | 73 | /* SECTION 5: Make hyperlinks more usable. 74 | Ensure links are underlined, and consider appending 75 | the URL to the end of the link for usability. */ 76 | a:link, 77 | a:visited { 78 | color: #000 !important; 79 | font-weight: bold; 80 | text-decoration: underline; 81 | } 82 | /* 83 | .reveal a:link:after, 84 | .reveal a:visited:after { 85 | content: " (" attr(href) ") "; 86 | color: #222 !important; 87 | font-size: 90%; 88 | } 89 | */ 90 | 91 | 92 | /* SECTION 6: more reveal.js specific additions by @skypanther */ 93 | ul, ol, div, p { 94 | visibility: visible; 95 | position: static; 96 | width: auto; 97 | height: auto; 98 | display: block; 99 | overflow: visible; 100 | margin: 0; 101 | text-align: left !important; 102 | } 103 | .reveal pre, 104 | .reveal table { 105 | margin-left: 0; 106 | margin-right: 0; 107 | } 108 | .reveal pre code { 109 | padding: 20px; 110 | border: 1px solid #ddd; 111 | } 112 | .reveal blockquote { 113 | margin: 20px 0; 114 | } 115 | .reveal .slides { 116 | position: static !important; 117 | width: auto !important; 118 | height: auto !important; 119 | 120 | left: 0 !important; 121 | top: 0 !important; 122 | margin-left: 0 !important; 123 | margin-top: 0 !important; 124 | padding: 0 !important; 125 | zoom: 1 !important; 126 | 127 | overflow: visible !important; 128 | display: block !important; 129 | 130 | text-align: left !important; 131 | -webkit-perspective: none; 132 | -moz-perspective: none; 133 | -ms-perspective: none; 134 | perspective: none; 135 | 136 | -webkit-perspective-origin: 50% 50%; 137 | -moz-perspective-origin: 50% 50%; 138 | -ms-perspective-origin: 50% 50%; 139 | perspective-origin: 50% 50%; 140 | } 141 | .reveal .slides section { 142 | visibility: visible !important; 143 | position: static !important; 144 | width: auto !important; 145 | height: auto !important; 146 | display: block !important; 147 | overflow: visible !important; 148 | 149 | left: 0 !important; 150 | top: 0 !important; 151 | margin-left: 0 !important; 152 | margin-top: 0 !important; 153 | padding: 60px 20px !important; 154 | z-index: auto !important; 155 | 156 | opacity: 1 !important; 157 | 158 | page-break-after: always !important; 159 | 160 | -webkit-transform-style: flat !important; 161 | -moz-transform-style: flat !important; 162 | -ms-transform-style: flat !important; 163 | transform-style: flat !important; 164 | 165 | -webkit-transform: none !important; 166 | -moz-transform: none !important; 167 | -ms-transform: none !important; 168 | transform: none !important; 169 | 170 | -webkit-transition: none !important; 171 | -moz-transition: none !important; 172 | -ms-transition: none !important; 173 | transition: none !important; 174 | } 175 | .reveal .slides section.stack { 176 | padding: 0 !important; 177 | } 178 | .reveal section:last-of-type { 179 | page-break-after: avoid !important; 180 | } 181 | .reveal section .fragment { 182 | opacity: 1 !important; 183 | visibility: visible !important; 184 | 185 | -webkit-transform: none !important; 186 | -moz-transform: none !important; 187 | -ms-transform: none !important; 188 | transform: none !important; 189 | } 190 | .reveal section img { 191 | display: block; 192 | margin: 15px 0px; 193 | background: rgba(255,255,255,1); 194 | border: 1px solid #666; 195 | box-shadow: none; 196 | } 197 | 198 | .reveal section small { 199 | font-size: 0.8em; 200 | } 201 | 202 | } -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/night.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Black theme for reveal.js. 3 | * 4 | * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se 5 | */ 6 | @import url(https://fonts.googleapis.com/css?family=Montserrat:700); 7 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); 8 | /********************************************* 9 | * GLOBAL STYLES 10 | *********************************************/ 11 | body { 12 | background: #111; 13 | background-color: #111; } 14 | 15 | .reveal { 16 | font-family: "Open Sans", sans-serif; 17 | font-size: 30px; 18 | font-weight: normal; 19 | color: #eee; } 20 | 21 | ::selection { 22 | color: #fff; 23 | background: #e7ad52; 24 | text-shadow: none; } 25 | 26 | .reveal .slides > section, 27 | .reveal .slides > section > section { 28 | line-height: 1.3; 29 | font-weight: inherit; } 30 | 31 | /********************************************* 32 | * HEADERS 33 | *********************************************/ 34 | .reveal h1, 35 | .reveal h2, 36 | .reveal h3, 37 | .reveal h4, 38 | .reveal h5, 39 | .reveal h6 { 40 | margin: 0 0 20px 0; 41 | color: #eee; 42 | font-family: "Montserrat", Impact, sans-serif; 43 | font-weight: normal; 44 | line-height: 1.2; 45 | letter-spacing: -0.03em; 46 | text-transform: none; 47 | text-shadow: none; 48 | word-wrap: break-word; } 49 | 50 | .reveal h1 { 51 | font-size: 3.77em; } 52 | 53 | .reveal h2 { 54 | font-size: 2.11em; } 55 | 56 | .reveal h3 { 57 | font-size: 1.55em; } 58 | 59 | .reveal h4 { 60 | font-size: 1em; } 61 | 62 | .reveal h1 { 63 | text-shadow: none; } 64 | 65 | /********************************************* 66 | * OTHER 67 | *********************************************/ 68 | .reveal p { 69 | margin: 20px 0; 70 | line-height: 1.3; } 71 | 72 | /* Ensure certain elements are never larger than the slide itself */ 73 | .reveal img, 74 | .reveal video, 75 | .reveal iframe { 76 | max-width: 95%; 77 | max-height: 95%; } 78 | 79 | .reveal strong, 80 | .reveal b { 81 | font-weight: bold; } 82 | 83 | .reveal em { 84 | font-style: italic; } 85 | 86 | .reveal ol, 87 | .reveal dl, 88 | .reveal ul { 89 | display: inline-block; 90 | text-align: left; 91 | margin: 0 0 0 1em; } 92 | 93 | .reveal ol { 94 | list-style-type: decimal; } 95 | 96 | .reveal ul { 97 | list-style-type: disc; } 98 | 99 | .reveal ul ul { 100 | list-style-type: square; } 101 | 102 | .reveal ul ul ul { 103 | list-style-type: circle; } 104 | 105 | .reveal ul ul, 106 | .reveal ul ol, 107 | .reveal ol ol, 108 | .reveal ol ul { 109 | display: block; 110 | margin-left: 40px; } 111 | 112 | .reveal dt { 113 | font-weight: bold; } 114 | 115 | .reveal dd { 116 | margin-left: 40px; } 117 | 118 | .reveal q, 119 | .reveal blockquote { 120 | quotes: none; } 121 | 122 | .reveal blockquote { 123 | display: block; 124 | position: relative; 125 | width: 70%; 126 | margin: 20px auto; 127 | padding: 5px; 128 | font-style: italic; 129 | background: rgba(255, 255, 255, 0.05); 130 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } 131 | 132 | .reveal blockquote p:first-child, 133 | .reveal blockquote p:last-child { 134 | display: inline-block; } 135 | 136 | .reveal q { 137 | font-style: italic; } 138 | 139 | .reveal pre { 140 | display: block; 141 | position: relative; 142 | width: 90%; 143 | margin: 20px auto; 144 | text-align: left; 145 | font-size: 0.55em; 146 | font-family: monospace; 147 | line-height: 1.2em; 148 | word-wrap: break-word; 149 | box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } 150 | 151 | .reveal code { 152 | font-family: monospace; } 153 | 154 | .reveal pre code { 155 | display: block; 156 | padding: 5px; 157 | overflow: auto; 158 | max-height: 400px; 159 | word-wrap: normal; } 160 | 161 | .reveal table { 162 | margin: auto; 163 | border-collapse: collapse; 164 | border-spacing: 0; } 165 | 166 | .reveal table th { 167 | font-weight: bold; } 168 | 169 | .reveal table th, 170 | .reveal table td { 171 | text-align: left; 172 | padding: 0.2em 0.5em 0.2em 0.5em; 173 | border-bottom: 1px solid; } 174 | 175 | .reveal table th[align="center"], 176 | .reveal table td[align="center"] { 177 | text-align: center; } 178 | 179 | .reveal table th[align="right"], 180 | .reveal table td[align="right"] { 181 | text-align: right; } 182 | 183 | .reveal table tbody tr:last-child th, 184 | .reveal table tbody tr:last-child td { 185 | border-bottom: none; } 186 | 187 | .reveal sup { 188 | vertical-align: super; } 189 | 190 | .reveal sub { 191 | vertical-align: sub; } 192 | 193 | .reveal small { 194 | display: inline-block; 195 | font-size: 0.6em; 196 | line-height: 1.2em; 197 | vertical-align: top; } 198 | 199 | .reveal small * { 200 | vertical-align: top; } 201 | 202 | /********************************************* 203 | * LINKS 204 | *********************************************/ 205 | .reveal a { 206 | color: #e7ad52; 207 | text-decoration: none; 208 | -webkit-transition: color .15s ease; 209 | -moz-transition: color .15s ease; 210 | transition: color .15s ease; } 211 | 212 | .reveal a:hover { 213 | color: #f3d7ac; 214 | text-shadow: none; 215 | border: none; } 216 | 217 | .reveal .roll span:after { 218 | color: #fff; 219 | background: #d08a1d; } 220 | 221 | /********************************************* 222 | * IMAGES 223 | *********************************************/ 224 | .reveal section img { 225 | margin: 15px 0px; 226 | background: rgba(255, 255, 255, 0.12); 227 | border: 4px solid #eee; 228 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } 229 | 230 | .reveal section img.plain { 231 | border: 0; 232 | box-shadow: none; } 233 | 234 | .reveal a img { 235 | -webkit-transition: all .15s linear; 236 | -moz-transition: all .15s linear; 237 | transition: all .15s linear; } 238 | 239 | .reveal a:hover img { 240 | background: rgba(255, 255, 255, 0.2); 241 | border-color: #e7ad52; 242 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } 243 | 244 | /********************************************* 245 | * NAVIGATION CONTROLS 246 | *********************************************/ 247 | .reveal .controls .navigate-left, 248 | .reveal .controls .navigate-left.enabled { 249 | border-right-color: #e7ad52; } 250 | 251 | .reveal .controls .navigate-right, 252 | .reveal .controls .navigate-right.enabled { 253 | border-left-color: #e7ad52; } 254 | 255 | .reveal .controls .navigate-up, 256 | .reveal .controls .navigate-up.enabled { 257 | border-bottom-color: #e7ad52; } 258 | 259 | .reveal .controls .navigate-down, 260 | .reveal .controls .navigate-down.enabled { 261 | border-top-color: #e7ad52; } 262 | 263 | .reveal .controls .navigate-left.enabled:hover { 264 | border-right-color: #f3d7ac; } 265 | 266 | .reveal .controls .navigate-right.enabled:hover { 267 | border-left-color: #f3d7ac; } 268 | 269 | .reveal .controls .navigate-up.enabled:hover { 270 | border-bottom-color: #f3d7ac; } 271 | 272 | .reveal .controls .navigate-down.enabled:hover { 273 | border-top-color: #f3d7ac; } 274 | 275 | /********************************************* 276 | * PROGRESS BAR 277 | *********************************************/ 278 | .reveal .progress { 279 | background: rgba(0, 0, 0, 0.2); } 280 | 281 | .reveal .progress span { 282 | background: #e7ad52; 283 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 284 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 285 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } 286 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/serif.css: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple theme for reveal.js presentations, similar 3 | * to the default theme. The accent color is brown. 4 | * 5 | * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed. 6 | */ 7 | .reveal a { 8 | line-height: 1.3em; } 9 | 10 | /********************************************* 11 | * GLOBAL STYLES 12 | *********************************************/ 13 | body { 14 | background: #F0F1EB; 15 | background-color: #F0F1EB; } 16 | 17 | .reveal { 18 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; 19 | font-size: 36px; 20 | font-weight: normal; 21 | color: #000; } 22 | 23 | ::selection { 24 | color: #fff; 25 | background: #26351C; 26 | text-shadow: none; } 27 | 28 | .reveal .slides > section, 29 | .reveal .slides > section > section { 30 | line-height: 1.3; 31 | font-weight: inherit; } 32 | 33 | /********************************************* 34 | * HEADERS 35 | *********************************************/ 36 | .reveal h1, 37 | .reveal h2, 38 | .reveal h3, 39 | .reveal h4, 40 | .reveal h5, 41 | .reveal h6 { 42 | margin: 0 0 20px 0; 43 | color: #383D3D; 44 | font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; 45 | font-weight: normal; 46 | line-height: 1.2; 47 | letter-spacing: normal; 48 | text-transform: none; 49 | text-shadow: none; 50 | word-wrap: break-word; } 51 | 52 | .reveal h1 { 53 | font-size: 3.77em; } 54 | 55 | .reveal h2 { 56 | font-size: 2.11em; } 57 | 58 | .reveal h3 { 59 | font-size: 1.55em; } 60 | 61 | .reveal h4 { 62 | font-size: 1em; } 63 | 64 | .reveal h1 { 65 | text-shadow: none; } 66 | 67 | /********************************************* 68 | * OTHER 69 | *********************************************/ 70 | .reveal p { 71 | margin: 20px 0; 72 | line-height: 1.3; } 73 | 74 | /* Ensure certain elements are never larger than the slide itself */ 75 | .reveal img, 76 | .reveal video, 77 | .reveal iframe { 78 | max-width: 95%; 79 | max-height: 95%; } 80 | 81 | .reveal strong, 82 | .reveal b { 83 | font-weight: bold; } 84 | 85 | .reveal em { 86 | font-style: italic; } 87 | 88 | .reveal ol, 89 | .reveal dl, 90 | .reveal ul { 91 | display: inline-block; 92 | text-align: left; 93 | margin: 0 0 0 1em; } 94 | 95 | .reveal ol { 96 | list-style-type: decimal; } 97 | 98 | .reveal ul { 99 | list-style-type: disc; } 100 | 101 | .reveal ul ul { 102 | list-style-type: square; } 103 | 104 | .reveal ul ul ul { 105 | list-style-type: circle; } 106 | 107 | .reveal ul ul, 108 | .reveal ul ol, 109 | .reveal ol ol, 110 | .reveal ol ul { 111 | display: block; 112 | margin-left: 40px; } 113 | 114 | .reveal dt { 115 | font-weight: bold; } 116 | 117 | .reveal dd { 118 | margin-left: 40px; } 119 | 120 | .reveal q, 121 | .reveal blockquote { 122 | quotes: none; } 123 | 124 | .reveal blockquote { 125 | display: block; 126 | position: relative; 127 | width: 70%; 128 | margin: 20px auto; 129 | padding: 5px; 130 | font-style: italic; 131 | background: rgba(255, 255, 255, 0.05); 132 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } 133 | 134 | .reveal blockquote p:first-child, 135 | .reveal blockquote p:last-child { 136 | display: inline-block; } 137 | 138 | .reveal q { 139 | font-style: italic; } 140 | 141 | .reveal pre { 142 | display: block; 143 | position: relative; 144 | width: 90%; 145 | margin: 20px auto; 146 | text-align: left; 147 | font-size: 0.55em; 148 | font-family: monospace; 149 | line-height: 1.2em; 150 | word-wrap: break-word; 151 | box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } 152 | 153 | .reveal code { 154 | font-family: monospace; } 155 | 156 | .reveal pre code { 157 | display: block; 158 | padding: 5px; 159 | overflow: auto; 160 | max-height: 400px; 161 | word-wrap: normal; } 162 | 163 | .reveal table { 164 | margin: auto; 165 | border-collapse: collapse; 166 | border-spacing: 0; } 167 | 168 | .reveal table th { 169 | font-weight: bold; } 170 | 171 | .reveal table th, 172 | .reveal table td { 173 | text-align: left; 174 | padding: 0.2em 0.5em 0.2em 0.5em; 175 | border-bottom: 1px solid; } 176 | 177 | .reveal table th[align="center"], 178 | .reveal table td[align="center"] { 179 | text-align: center; } 180 | 181 | .reveal table th[align="right"], 182 | .reveal table td[align="right"] { 183 | text-align: right; } 184 | 185 | .reveal table tbody tr:last-child th, 186 | .reveal table tbody tr:last-child td { 187 | border-bottom: none; } 188 | 189 | .reveal sup { 190 | vertical-align: super; } 191 | 192 | .reveal sub { 193 | vertical-align: sub; } 194 | 195 | .reveal small { 196 | display: inline-block; 197 | font-size: 0.6em; 198 | line-height: 1.2em; 199 | vertical-align: top; } 200 | 201 | .reveal small * { 202 | vertical-align: top; } 203 | 204 | /********************************************* 205 | * LINKS 206 | *********************************************/ 207 | .reveal a { 208 | color: #51483D; 209 | text-decoration: none; 210 | -webkit-transition: color .15s ease; 211 | -moz-transition: color .15s ease; 212 | transition: color .15s ease; } 213 | 214 | .reveal a:hover { 215 | color: #8b7c69; 216 | text-shadow: none; 217 | border: none; } 218 | 219 | .reveal .roll span:after { 220 | color: #fff; 221 | background: #25211c; } 222 | 223 | /********************************************* 224 | * IMAGES 225 | *********************************************/ 226 | .reveal section img { 227 | margin: 15px 0px; 228 | background: rgba(255, 255, 255, 0.12); 229 | border: 4px solid #000; 230 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } 231 | 232 | .reveal section img.plain { 233 | border: 0; 234 | box-shadow: none; } 235 | 236 | .reveal a img { 237 | -webkit-transition: all .15s linear; 238 | -moz-transition: all .15s linear; 239 | transition: all .15s linear; } 240 | 241 | .reveal a:hover img { 242 | background: rgba(255, 255, 255, 0.2); 243 | border-color: #51483D; 244 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } 245 | 246 | /********************************************* 247 | * NAVIGATION CONTROLS 248 | *********************************************/ 249 | .reveal .controls .navigate-left, 250 | .reveal .controls .navigate-left.enabled { 251 | border-right-color: #51483D; } 252 | 253 | .reveal .controls .navigate-right, 254 | .reveal .controls .navigate-right.enabled { 255 | border-left-color: #51483D; } 256 | 257 | .reveal .controls .navigate-up, 258 | .reveal .controls .navigate-up.enabled { 259 | border-bottom-color: #51483D; } 260 | 261 | .reveal .controls .navigate-down, 262 | .reveal .controls .navigate-down.enabled { 263 | border-top-color: #51483D; } 264 | 265 | .reveal .controls .navigate-left.enabled:hover { 266 | border-right-color: #8b7c69; } 267 | 268 | .reveal .controls .navigate-right.enabled:hover { 269 | border-left-color: #8b7c69; } 270 | 271 | .reveal .controls .navigate-up.enabled:hover { 272 | border-bottom-color: #8b7c69; } 273 | 274 | .reveal .controls .navigate-down.enabled:hover { 275 | border-top-color: #8b7c69; } 276 | 277 | /********************************************* 278 | * PROGRESS BAR 279 | *********************************************/ 280 | .reveal .progress { 281 | background: rgba(0, 0, 0, 0.2); } 282 | 283 | .reveal .progress span { 284 | background: #51483D; 285 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 286 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 287 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } 288 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/moon.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Solarized Dark theme for reveal.js. 3 | * Author: Achim Staebler 4 | */ 5 | @import url(../../lib/font/league-gothic/league-gothic.css); 6 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 7 | /** 8 | * Solarized colors by Ethan Schoonover 9 | */ 10 | html * { 11 | color-profile: sRGB; 12 | rendering-intent: auto; } 13 | 14 | /********************************************* 15 | * GLOBAL STYLES 16 | *********************************************/ 17 | body { 18 | background: #002b36; 19 | background-color: #002b36; } 20 | 21 | .reveal { 22 | font-family: "Lato", sans-serif; 23 | font-size: 36px; 24 | font-weight: normal; 25 | color: #93a1a1; } 26 | 27 | ::selection { 28 | color: #fff; 29 | background: #d33682; 30 | text-shadow: none; } 31 | 32 | .reveal .slides > section, 33 | .reveal .slides > section > section { 34 | line-height: 1.3; 35 | font-weight: inherit; } 36 | 37 | /********************************************* 38 | * HEADERS 39 | *********************************************/ 40 | .reveal h1, 41 | .reveal h2, 42 | .reveal h3, 43 | .reveal h4, 44 | .reveal h5, 45 | .reveal h6 { 46 | margin: 0 0 20px 0; 47 | color: #eee8d5; 48 | font-family: "League Gothic", Impact, sans-serif; 49 | font-weight: normal; 50 | line-height: 1.2; 51 | letter-spacing: normal; 52 | text-transform: uppercase; 53 | text-shadow: none; 54 | word-wrap: break-word; } 55 | 56 | .reveal h1 { 57 | font-size: 3.77em; } 58 | 59 | .reveal h2 { 60 | font-size: 2.11em; } 61 | 62 | .reveal h3 { 63 | font-size: 1.55em; } 64 | 65 | .reveal h4 { 66 | font-size: 1em; } 67 | 68 | .reveal h1 { 69 | text-shadow: none; } 70 | 71 | /********************************************* 72 | * OTHER 73 | *********************************************/ 74 | .reveal p { 75 | margin: 20px 0; 76 | line-height: 1.3; } 77 | 78 | /* Ensure certain elements are never larger than the slide itself */ 79 | .reveal img, 80 | .reveal video, 81 | .reveal iframe { 82 | max-width: 95%; 83 | max-height: 95%; } 84 | 85 | .reveal strong, 86 | .reveal b { 87 | font-weight: bold; } 88 | 89 | .reveal em { 90 | font-style: italic; } 91 | 92 | .reveal ol, 93 | .reveal dl, 94 | .reveal ul { 95 | display: inline-block; 96 | text-align: left; 97 | margin: 0 0 0 1em; } 98 | 99 | .reveal ol { 100 | list-style-type: decimal; } 101 | 102 | .reveal ul { 103 | list-style-type: disc; } 104 | 105 | .reveal ul ul { 106 | list-style-type: square; } 107 | 108 | .reveal ul ul ul { 109 | list-style-type: circle; } 110 | 111 | .reveal ul ul, 112 | .reveal ul ol, 113 | .reveal ol ol, 114 | .reveal ol ul { 115 | display: block; 116 | margin-left: 40px; } 117 | 118 | .reveal dt { 119 | font-weight: bold; } 120 | 121 | .reveal dd { 122 | margin-left: 40px; } 123 | 124 | .reveal q, 125 | .reveal blockquote { 126 | quotes: none; } 127 | 128 | .reveal blockquote { 129 | display: block; 130 | position: relative; 131 | width: 70%; 132 | margin: 20px auto; 133 | padding: 5px; 134 | font-style: italic; 135 | background: rgba(255, 255, 255, 0.05); 136 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } 137 | 138 | .reveal blockquote p:first-child, 139 | .reveal blockquote p:last-child { 140 | display: inline-block; } 141 | 142 | .reveal q { 143 | font-style: italic; } 144 | 145 | .reveal pre { 146 | display: block; 147 | position: relative; 148 | width: 90%; 149 | margin: 20px auto; 150 | text-align: left; 151 | font-size: 0.55em; 152 | font-family: monospace; 153 | line-height: 1.2em; 154 | word-wrap: break-word; 155 | box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } 156 | 157 | .reveal code { 158 | font-family: monospace; } 159 | 160 | .reveal pre code { 161 | display: block; 162 | padding: 5px; 163 | overflow: auto; 164 | max-height: 400px; 165 | word-wrap: normal; } 166 | 167 | .reveal table { 168 | margin: auto; 169 | border-collapse: collapse; 170 | border-spacing: 0; } 171 | 172 | .reveal table th { 173 | font-weight: bold; } 174 | 175 | .reveal table th, 176 | .reveal table td { 177 | text-align: left; 178 | padding: 0.2em 0.5em 0.2em 0.5em; 179 | border-bottom: 1px solid; } 180 | 181 | .reveal table th[align="center"], 182 | .reveal table td[align="center"] { 183 | text-align: center; } 184 | 185 | .reveal table th[align="right"], 186 | .reveal table td[align="right"] { 187 | text-align: right; } 188 | 189 | .reveal table tbody tr:last-child th, 190 | .reveal table tbody tr:last-child td { 191 | border-bottom: none; } 192 | 193 | .reveal sup { 194 | vertical-align: super; } 195 | 196 | .reveal sub { 197 | vertical-align: sub; } 198 | 199 | .reveal small { 200 | display: inline-block; 201 | font-size: 0.6em; 202 | line-height: 1.2em; 203 | vertical-align: top; } 204 | 205 | .reveal small * { 206 | vertical-align: top; } 207 | 208 | /********************************************* 209 | * LINKS 210 | *********************************************/ 211 | .reveal a { 212 | color: #268bd2; 213 | text-decoration: none; 214 | -webkit-transition: color .15s ease; 215 | -moz-transition: color .15s ease; 216 | transition: color .15s ease; } 217 | 218 | .reveal a:hover { 219 | color: #78b9e6; 220 | text-shadow: none; 221 | border: none; } 222 | 223 | .reveal .roll span:after { 224 | color: #fff; 225 | background: #1a6091; } 226 | 227 | /********************************************* 228 | * IMAGES 229 | *********************************************/ 230 | .reveal section img { 231 | margin: 15px 0px; 232 | background: rgba(255, 255, 255, 0.12); 233 | border: 4px solid #93a1a1; 234 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } 235 | 236 | .reveal section img.plain { 237 | border: 0; 238 | box-shadow: none; } 239 | 240 | .reveal a img { 241 | -webkit-transition: all .15s linear; 242 | -moz-transition: all .15s linear; 243 | transition: all .15s linear; } 244 | 245 | .reveal a:hover img { 246 | background: rgba(255, 255, 255, 0.2); 247 | border-color: #268bd2; 248 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } 249 | 250 | /********************************************* 251 | * NAVIGATION CONTROLS 252 | *********************************************/ 253 | .reveal .controls .navigate-left, 254 | .reveal .controls .navigate-left.enabled { 255 | border-right-color: #268bd2; } 256 | 257 | .reveal .controls .navigate-right, 258 | .reveal .controls .navigate-right.enabled { 259 | border-left-color: #268bd2; } 260 | 261 | .reveal .controls .navigate-up, 262 | .reveal .controls .navigate-up.enabled { 263 | border-bottom-color: #268bd2; } 264 | 265 | .reveal .controls .navigate-down, 266 | .reveal .controls .navigate-down.enabled { 267 | border-top-color: #268bd2; } 268 | 269 | .reveal .controls .navigate-left.enabled:hover { 270 | border-right-color: #78b9e6; } 271 | 272 | .reveal .controls .navigate-right.enabled:hover { 273 | border-left-color: #78b9e6; } 274 | 275 | .reveal .controls .navigate-up.enabled:hover { 276 | border-bottom-color: #78b9e6; } 277 | 278 | .reveal .controls .navigate-down.enabled:hover { 279 | border-top-color: #78b9e6; } 280 | 281 | /********************************************* 282 | * PROGRESS BAR 283 | *********************************************/ 284 | .reveal .progress { 285 | background: rgba(0, 0, 0, 0.2); } 286 | 287 | .reveal .progress span { 288 | background: #268bd2; 289 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 290 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 291 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } 292 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/solarized.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Solarized Light theme for reveal.js. 3 | * Author: Achim Staebler 4 | */ 5 | @import url(../../lib/font/league-gothic/league-gothic.css); 6 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); 7 | /** 8 | * Solarized colors by Ethan Schoonover 9 | */ 10 | html * { 11 | color-profile: sRGB; 12 | rendering-intent: auto; } 13 | 14 | /********************************************* 15 | * GLOBAL STYLES 16 | *********************************************/ 17 | body { 18 | background: #fdf6e3; 19 | background-color: #fdf6e3; } 20 | 21 | .reveal { 22 | font-family: "Lato", sans-serif; 23 | font-size: 36px; 24 | font-weight: normal; 25 | color: #657b83; } 26 | 27 | ::selection { 28 | color: #fff; 29 | background: #d33682; 30 | text-shadow: none; } 31 | 32 | .reveal .slides > section, 33 | .reveal .slides > section > section { 34 | line-height: 1.3; 35 | font-weight: inherit; } 36 | 37 | /********************************************* 38 | * HEADERS 39 | *********************************************/ 40 | .reveal h1, 41 | .reveal h2, 42 | .reveal h3, 43 | .reveal h4, 44 | .reveal h5, 45 | .reveal h6 { 46 | margin: 0 0 20px 0; 47 | color: #586e75; 48 | font-family: "League Gothic", Impact, sans-serif; 49 | font-weight: normal; 50 | line-height: 1.2; 51 | letter-spacing: normal; 52 | text-transform: uppercase; 53 | text-shadow: none; 54 | word-wrap: break-word; } 55 | 56 | .reveal h1 { 57 | font-size: 3.77em; } 58 | 59 | .reveal h2 { 60 | font-size: 2.11em; } 61 | 62 | .reveal h3 { 63 | font-size: 1.55em; } 64 | 65 | .reveal h4 { 66 | font-size: 1em; } 67 | 68 | .reveal h1 { 69 | text-shadow: none; } 70 | 71 | /********************************************* 72 | * OTHER 73 | *********************************************/ 74 | .reveal p { 75 | margin: 20px 0; 76 | line-height: 1.3; } 77 | 78 | /* Ensure certain elements are never larger than the slide itself */ 79 | .reveal img, 80 | .reveal video, 81 | .reveal iframe { 82 | max-width: 95%; 83 | max-height: 95%; } 84 | 85 | .reveal strong, 86 | .reveal b { 87 | font-weight: bold; } 88 | 89 | .reveal em { 90 | font-style: italic; } 91 | 92 | .reveal ol, 93 | .reveal dl, 94 | .reveal ul { 95 | display: inline-block; 96 | text-align: left; 97 | margin: 0 0 0 1em; } 98 | 99 | .reveal ol { 100 | list-style-type: decimal; } 101 | 102 | .reveal ul { 103 | list-style-type: disc; } 104 | 105 | .reveal ul ul { 106 | list-style-type: square; } 107 | 108 | .reveal ul ul ul { 109 | list-style-type: circle; } 110 | 111 | .reveal ul ul, 112 | .reveal ul ol, 113 | .reveal ol ol, 114 | .reveal ol ul { 115 | display: block; 116 | margin-left: 40px; } 117 | 118 | .reveal dt { 119 | font-weight: bold; } 120 | 121 | .reveal dd { 122 | margin-left: 40px; } 123 | 124 | .reveal q, 125 | .reveal blockquote { 126 | quotes: none; } 127 | 128 | .reveal blockquote { 129 | display: block; 130 | position: relative; 131 | width: 70%; 132 | margin: 20px auto; 133 | padding: 5px; 134 | font-style: italic; 135 | background: rgba(255, 255, 255, 0.05); 136 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } 137 | 138 | .reveal blockquote p:first-child, 139 | .reveal blockquote p:last-child { 140 | display: inline-block; } 141 | 142 | .reveal q { 143 | font-style: italic; } 144 | 145 | .reveal pre { 146 | display: block; 147 | position: relative; 148 | width: 90%; 149 | margin: 20px auto; 150 | text-align: left; 151 | font-size: 0.55em; 152 | font-family: monospace; 153 | line-height: 1.2em; 154 | word-wrap: break-word; 155 | box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } 156 | 157 | .reveal code { 158 | font-family: monospace; } 159 | 160 | .reveal pre code { 161 | display: block; 162 | padding: 5px; 163 | overflow: auto; 164 | max-height: 400px; 165 | word-wrap: normal; } 166 | 167 | .reveal table { 168 | margin: auto; 169 | border-collapse: collapse; 170 | border-spacing: 0; } 171 | 172 | .reveal table th { 173 | font-weight: bold; } 174 | 175 | .reveal table th, 176 | .reveal table td { 177 | text-align: left; 178 | padding: 0.2em 0.5em 0.2em 0.5em; 179 | border-bottom: 1px solid; } 180 | 181 | .reveal table th[align="center"], 182 | .reveal table td[align="center"] { 183 | text-align: center; } 184 | 185 | .reveal table th[align="right"], 186 | .reveal table td[align="right"] { 187 | text-align: right; } 188 | 189 | .reveal table tbody tr:last-child th, 190 | .reveal table tbody tr:last-child td { 191 | border-bottom: none; } 192 | 193 | .reveal sup { 194 | vertical-align: super; } 195 | 196 | .reveal sub { 197 | vertical-align: sub; } 198 | 199 | .reveal small { 200 | display: inline-block; 201 | font-size: 0.6em; 202 | line-height: 1.2em; 203 | vertical-align: top; } 204 | 205 | .reveal small * { 206 | vertical-align: top; } 207 | 208 | /********************************************* 209 | * LINKS 210 | *********************************************/ 211 | .reveal a { 212 | color: #268bd2; 213 | text-decoration: none; 214 | -webkit-transition: color .15s ease; 215 | -moz-transition: color .15s ease; 216 | transition: color .15s ease; } 217 | 218 | .reveal a:hover { 219 | color: #78b9e6; 220 | text-shadow: none; 221 | border: none; } 222 | 223 | .reveal .roll span:after { 224 | color: #fff; 225 | background: #1a6091; } 226 | 227 | /********************************************* 228 | * IMAGES 229 | *********************************************/ 230 | .reveal section img { 231 | margin: 15px 0px; 232 | background: rgba(255, 255, 255, 0.12); 233 | border: 4px solid #657b83; 234 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } 235 | 236 | .reveal section img.plain { 237 | border: 0; 238 | box-shadow: none; } 239 | 240 | .reveal a img { 241 | -webkit-transition: all .15s linear; 242 | -moz-transition: all .15s linear; 243 | transition: all .15s linear; } 244 | 245 | .reveal a:hover img { 246 | background: rgba(255, 255, 255, 0.2); 247 | border-color: #268bd2; 248 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } 249 | 250 | /********************************************* 251 | * NAVIGATION CONTROLS 252 | *********************************************/ 253 | .reveal .controls .navigate-left, 254 | .reveal .controls .navigate-left.enabled { 255 | border-right-color: #268bd2; } 256 | 257 | .reveal .controls .navigate-right, 258 | .reveal .controls .navigate-right.enabled { 259 | border-left-color: #268bd2; } 260 | 261 | .reveal .controls .navigate-up, 262 | .reveal .controls .navigate-up.enabled { 263 | border-bottom-color: #268bd2; } 264 | 265 | .reveal .controls .navigate-down, 266 | .reveal .controls .navigate-down.enabled { 267 | border-top-color: #268bd2; } 268 | 269 | .reveal .controls .navigate-left.enabled:hover { 270 | border-right-color: #78b9e6; } 271 | 272 | .reveal .controls .navigate-right.enabled:hover { 273 | border-left-color: #78b9e6; } 274 | 275 | .reveal .controls .navigate-up.enabled:hover { 276 | border-bottom-color: #78b9e6; } 277 | 278 | .reveal .controls .navigate-down.enabled:hover { 279 | border-top-color: #78b9e6; } 280 | 281 | /********************************************* 282 | * PROGRESS BAR 283 | *********************************************/ 284 | .reveal .progress { 285 | background: rgba(0, 0, 0, 0.2); } 286 | 287 | .reveal .progress span { 288 | background: #268bd2; 289 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 290 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 291 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } 292 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/white.css: -------------------------------------------------------------------------------- 1 | /** 2 | * White theme for reveal.js. This is the opposite of the 'black' theme. 3 | * 4 | * By Hakim El Hattab, http://hakim.se 5 | */ 6 | @import url(../../lib/font/source-sans-pro/source-sans-pro.css); 7 | section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { 8 | color: #fff; } 9 | 10 | /********************************************* 11 | * GLOBAL STYLES 12 | *********************************************/ 13 | body { 14 | background: #fff; 15 | background-color: #fff; } 16 | 17 | .reveal { 18 | font-family: "Source Sans Pro", Helvetica, sans-serif; 19 | font-size: 38px; 20 | font-weight: normal; 21 | color: #222; } 22 | 23 | ::selection { 24 | color: #fff; 25 | background: #98bdef; 26 | text-shadow: none; } 27 | 28 | .reveal .slides > section, 29 | .reveal .slides > section > section { 30 | line-height: 1.3; 31 | font-weight: inherit; } 32 | 33 | /********************************************* 34 | * HEADERS 35 | *********************************************/ 36 | .reveal h1, 37 | .reveal h2, 38 | .reveal h3, 39 | .reveal h4, 40 | .reveal h5, 41 | .reveal h6 { 42 | margin: 0 0 20px 0; 43 | color: #222; 44 | font-family: "Source Sans Pro", Helvetica, sans-serif; 45 | font-weight: 600; 46 | line-height: 1.2; 47 | letter-spacing: normal; 48 | text-transform: uppercase; 49 | text-shadow: none; 50 | word-wrap: break-word; } 51 | 52 | .reveal h1 { 53 | font-size: 2.5em; } 54 | 55 | .reveal h2 { 56 | font-size: 1.6em; } 57 | 58 | .reveal h3 { 59 | font-size: 1.3em; } 60 | 61 | .reveal h4 { 62 | font-size: 1em; } 63 | 64 | .reveal h1 { 65 | text-shadow: none; } 66 | 67 | /********************************************* 68 | * OTHER 69 | *********************************************/ 70 | .reveal p { 71 | margin: 20px 0; 72 | line-height: 1.3; } 73 | 74 | /* Ensure certain elements are never larger than the slide itself */ 75 | .reveal img, 76 | .reveal video, 77 | .reveal iframe { 78 | max-width: 95%; 79 | max-height: 95%; } 80 | 81 | .reveal strong, 82 | .reveal b { 83 | font-weight: bold; } 84 | 85 | .reveal em { 86 | font-style: italic; } 87 | 88 | .reveal ol, 89 | .reveal dl, 90 | .reveal ul { 91 | display: inline-block; 92 | text-align: left; 93 | margin: 0 0 0 1em; } 94 | 95 | .reveal ol { 96 | list-style-type: decimal; } 97 | 98 | .reveal ul { 99 | list-style-type: disc; } 100 | 101 | .reveal ul ul { 102 | list-style-type: square; } 103 | 104 | .reveal ul ul ul { 105 | list-style-type: circle; } 106 | 107 | .reveal ul ul, 108 | .reveal ul ol, 109 | .reveal ol ol, 110 | .reveal ol ul { 111 | display: block; 112 | margin-left: 40px; } 113 | 114 | .reveal dt { 115 | font-weight: bold; } 116 | 117 | .reveal dd { 118 | margin-left: 40px; } 119 | 120 | .reveal q, 121 | .reveal blockquote { 122 | quotes: none; } 123 | 124 | .reveal blockquote { 125 | display: block; 126 | position: relative; 127 | width: 70%; 128 | margin: 20px auto; 129 | padding: 5px; 130 | font-style: italic; 131 | background: rgba(255, 255, 255, 0.05); 132 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } 133 | 134 | .reveal blockquote p:first-child, 135 | .reveal blockquote p:last-child { 136 | display: inline-block; } 137 | 138 | .reveal q { 139 | font-style: italic; } 140 | 141 | .reveal pre { 142 | display: block; 143 | position: relative; 144 | width: 90%; 145 | margin: 20px auto; 146 | text-align: left; 147 | font-size: 0.55em; 148 | font-family: monospace; 149 | line-height: 1.2em; 150 | word-wrap: break-word; 151 | box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } 152 | 153 | .reveal code { 154 | font-family: monospace; } 155 | 156 | .reveal pre code { 157 | display: block; 158 | padding: 5px; 159 | overflow: auto; 160 | max-height: 400px; 161 | word-wrap: normal; } 162 | 163 | .reveal table { 164 | margin: auto; 165 | border-collapse: collapse; 166 | border-spacing: 0; } 167 | 168 | .reveal table th { 169 | font-weight: bold; } 170 | 171 | .reveal table th, 172 | .reveal table td { 173 | text-align: left; 174 | padding: 0.2em 0.5em 0.2em 0.5em; 175 | border-bottom: 1px solid; } 176 | 177 | .reveal table th[align="center"], 178 | .reveal table td[align="center"] { 179 | text-align: center; } 180 | 181 | .reveal table th[align="right"], 182 | .reveal table td[align="right"] { 183 | text-align: right; } 184 | 185 | .reveal table tbody tr:last-child th, 186 | .reveal table tbody tr:last-child td { 187 | border-bottom: none; } 188 | 189 | .reveal sup { 190 | vertical-align: super; } 191 | 192 | .reveal sub { 193 | vertical-align: sub; } 194 | 195 | .reveal small { 196 | display: inline-block; 197 | font-size: 0.6em; 198 | line-height: 1.2em; 199 | vertical-align: top; } 200 | 201 | .reveal small * { 202 | vertical-align: top; } 203 | 204 | /********************************************* 205 | * LINKS 206 | *********************************************/ 207 | .reveal a { 208 | color: #2a76dd; 209 | text-decoration: none; 210 | -webkit-transition: color .15s ease; 211 | -moz-transition: color .15s ease; 212 | transition: color .15s ease; } 213 | 214 | .reveal a:hover { 215 | color: #6ca0e8; 216 | text-shadow: none; 217 | border: none; } 218 | 219 | .reveal .roll span:after { 220 | color: #fff; 221 | background: #1a53a1; } 222 | 223 | /********************************************* 224 | * IMAGES 225 | *********************************************/ 226 | .reveal section img { 227 | margin: 15px 0px; 228 | background: rgba(255, 255, 255, 0.12); 229 | border: 4px solid #222; 230 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } 231 | 232 | .reveal section img.plain { 233 | border: 0; 234 | box-shadow: none; } 235 | 236 | .reveal a img { 237 | -webkit-transition: all .15s linear; 238 | -moz-transition: all .15s linear; 239 | transition: all .15s linear; } 240 | 241 | .reveal a:hover img { 242 | background: rgba(255, 255, 255, 0.2); 243 | border-color: #2a76dd; 244 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } 245 | 246 | /********************************************* 247 | * NAVIGATION CONTROLS 248 | *********************************************/ 249 | .reveal .controls .navigate-left, 250 | .reveal .controls .navigate-left.enabled { 251 | border-right-color: #2a76dd; } 252 | 253 | .reveal .controls .navigate-right, 254 | .reveal .controls .navigate-right.enabled { 255 | border-left-color: #2a76dd; } 256 | 257 | .reveal .controls .navigate-up, 258 | .reveal .controls .navigate-up.enabled { 259 | border-bottom-color: #2a76dd; } 260 | 261 | .reveal .controls .navigate-down, 262 | .reveal .controls .navigate-down.enabled { 263 | border-top-color: #2a76dd; } 264 | 265 | .reveal .controls .navigate-left.enabled:hover { 266 | border-right-color: #6ca0e8; } 267 | 268 | .reveal .controls .navigate-right.enabled:hover { 269 | border-left-color: #6ca0e8; } 270 | 271 | .reveal .controls .navigate-up.enabled:hover { 272 | border-bottom-color: #6ca0e8; } 273 | 274 | .reveal .controls .navigate-down.enabled:hover { 275 | border-top-color: #6ca0e8; } 276 | 277 | /********************************************* 278 | * PROGRESS BAR 279 | *********************************************/ 280 | .reveal .progress { 281 | background: rgba(0, 0, 0, 0.2); } 282 | 283 | .reveal .progress span { 284 | background: #2a76dd; 285 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 286 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 287 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } 288 | -------------------------------------------------------------------------------- /Presentations/KPI-2017-SCHOOL-02/css/theme/b.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Black theme for reveal.js. This is the opposite of the 'white' theme. 3 | * 4 | * By Hakim El Hattab, http://hakim.se 5 | */ 6 | @import url(../../lib/font/source-sans-pro/source-sans-pro.css); 7 | section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { 8 | color: #222; } 9 | 10 | /********************************************* 11 | * GLOBAL STYLES 12 | *********************************************/ 13 | body { 14 | background: #222; 15 | background-color: #222; } 16 | 17 | .reveal { 18 | font-family: "Source Sans Pro", Helvetica, sans-serif; 19 | font-size: 38px; 20 | font-weight: normal; 21 | color: #fff; } 22 | 23 | ::selection { 24 | color: #fff; 25 | background: #bee4fd; 26 | text-shadow: none; } 27 | 28 | .reveal .slides > section, 29 | .reveal .slides > section > section { 30 | line-height: 1.3; 31 | font-weight: inherit; } 32 | 33 | /********************************************* 34 | * HEADERS 35 | *********************************************/ 36 | .reveal h1, 37 | .reveal h2, 38 | .reveal h3, 39 | .reveal h4, 40 | .reveal h5, 41 | .reveal h6 { 42 | margin: 0 0 20px 0; 43 | color: #fff; 44 | font-family: "Source Sans Pro", Helvetica, sans-serif; 45 | font-weight: 600; 46 | line-height: 1.2; 47 | letter-spacing: normal; 48 | text-transform: uppercase; 49 | text-shadow: none; 50 | word-wrap: break-word; } 51 | 52 | .reveal h1 { 53 | font-size: 2.5em; } 54 | 55 | .reveal h2 { 56 | font-size: 1.6em; } 57 | 58 | .reveal h3 { 59 | font-size: 1.3em; } 60 | 61 | .reveal h4 { 62 | font-size: 1em; } 63 | 64 | .reveal h1 { 65 | text-shadow: none; } 66 | 67 | /********************************************* 68 | * OTHER 69 | *********************************************/ 70 | .reveal p { 71 | margin: 20px 0; 72 | line-height: 1.3; } 73 | 74 | /* Ensure certain elements are never larger than the slide itself */ 75 | .reveal img, 76 | .reveal video, 77 | .reveal iframe { 78 | max-width: 95%; 79 | max-height: 95%; } 80 | 81 | .reveal strong, 82 | .reveal b { 83 | font-weight: bold; } 84 | 85 | .reveal em { 86 | font-style: italic; } 87 | 88 | .reveal ol, 89 | .reveal dl, 90 | .reveal ul { 91 | display: inline-block; 92 | text-align: left; 93 | margin: 0 0 0 1em; } 94 | 95 | .reveal ol { 96 | list-style-type: decimal; } 97 | 98 | .reveal ul { 99 | list-style-type: disc; } 100 | 101 | .reveal ul ul { 102 | list-style-type: square; } 103 | 104 | .reveal ul ul ul { 105 | list-style-type: circle; } 106 | 107 | .reveal ul ul, 108 | .reveal ul ol, 109 | .reveal ol ol, 110 | .reveal ol ul { 111 | display: block; 112 | margin-left: 40px; } 113 | 114 | .reveal dt { 115 | font-weight: bold; } 116 | 117 | .reveal dd { 118 | margin-left: 40px; } 119 | 120 | .reveal q, 121 | .reveal blockquote { 122 | quotes: none; } 123 | 124 | .reveal blockquote { 125 | display: block; 126 | position: relative; 127 | width: 70%; 128 | margin: 20px auto; 129 | padding: 5px; 130 | font-style: italic; 131 | background: rgba(255, 255, 255, 0.05); 132 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } 133 | 134 | .reveal blockquote p:first-child, 135 | .reveal blockquote p:last-child { 136 | display: inline-block; } 137 | 138 | .reveal q { 139 | font-style: italic; } 140 | 141 | .reveal pre { 142 | display: block; 143 | position: relative; 144 | width: 90%; 145 | margin: 20px auto; 146 | text-align: left; 147 | font-size: 0.55em; 148 | font-family: monospace; 149 | line-height: 1.2em; 150 | word-wrap: break-word; 151 | box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } 152 | 153 | .reveal code { 154 | font-family: monospace; } 155 | 156 | .reveal pre code { 157 | display: block; 158 | padding: 5px; 159 | overflow: auto; 160 | max-height: 400px; 161 | word-wrap: normal; } 162 | 163 | .reveal table { 164 | margin: auto; 165 | border-collapse: collapse; 166 | border-spacing: 0; } 167 | 168 | .reveal table th { 169 | font-weight: bold; } 170 | 171 | .reveal table th, 172 | .reveal table td { 173 | text-align: left; 174 | padding: 0.2em 0.5em 0.2em 0.5em; 175 | border-bottom: 1px solid; } 176 | 177 | .reveal table th[align="center"], 178 | .reveal table td[align="center"] { 179 | text-align: center; } 180 | 181 | .reveal table th[align="right"], 182 | .reveal table td[align="right"] { 183 | text-align: right; } 184 | 185 | .reveal table tbody tr:last-child th, 186 | .reveal table tbody tr:last-child td { 187 | border-bottom: none; } 188 | 189 | .reveal sup { 190 | vertical-align: super; } 191 | 192 | .reveal sub { 193 | vertical-align: sub; } 194 | 195 | .reveal small { 196 | display: inline-block; 197 | font-size: 0.6em; 198 | line-height: 1.2em; 199 | vertical-align: top; } 200 | 201 | .reveal small * { 202 | vertical-align: top; } 203 | 204 | /********************************************* 205 | * LINKS 206 | *********************************************/ 207 | .reveal a { 208 | color: #42affa; 209 | text-decoration: none; 210 | -webkit-transition: color .15s ease; 211 | -moz-transition: color .15s ease; 212 | transition: color .15s ease; } 213 | 214 | .reveal a:hover { 215 | color: #8dcffc; 216 | text-shadow: none; 217 | border: none; } 218 | 219 | .reveal .roll span:after { 220 | color: #fff; 221 | background: #068de9; } 222 | 223 | /********************************************* 224 | * IMAGES 225 | *********************************************/ 226 | .reveal section img { 227 | margin: 15px 0px; 228 | background: rgba(255, 255, 255, 0.12); 229 | border: 4px solid #fff; 230 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } 231 | 232 | .reveal section img.plain { 233 | border: 0; 234 | box-shadow: none; } 235 | 236 | .reveal a img { 237 | -webkit-transition: all .15s linear; 238 | -moz-transition: all .15s linear; 239 | transition: all .15s linear; } 240 | 241 | .reveal a:hover img { 242 | background: rgba(255, 255, 255, 0.2); 243 | border-color: #42affa; 244 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } 245 | 246 | /********************************************* 247 | * NAVIGATION CONTROLS 248 | *********************************************/ 249 | .reveal .controls .navigate-left, 250 | .reveal .controls .navigate-left.enabled { 251 | border-right-color: #42affa; } 252 | 253 | .reveal .controls .navigate-right, 254 | .reveal .controls .navigate-right.enabled { 255 | border-left-color: #42affa; } 256 | 257 | .reveal .controls .navigate-up, 258 | .reveal .controls .navigate-up.enabled { 259 | border-bottom-color: #42affa; } 260 | 261 | .reveal .controls .navigate-down, 262 | .reveal .controls .navigate-down.enabled { 263 | border-top-color: #42affa; } 264 | 265 | .reveal .controls .navigate-left.enabled:hover { 266 | border-right-color: #8dcffc; } 267 | 268 | .reveal .controls .navigate-right.enabled:hover { 269 | border-left-color: #8dcffc; } 270 | 271 | .reveal .controls .navigate-up.enabled:hover { 272 | border-bottom-color: #8dcffc; } 273 | 274 | .reveal .controls .navigate-down.enabled:hover { 275 | border-top-color: #8dcffc; } 276 | 277 | /********************************************* 278 | * PROGRESS BAR 279 | *********************************************/ 280 | .reveal .progress { 281 | background: rgba(0, 0, 0, 0.2); } 282 | 283 | .reveal .progress span { 284 | background: #42affa; 285 | -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 286 | -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); 287 | transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } 288 | --------------------------------------------------------------------------------