Merge branch 'presentations-submodule' into CLICKHOUSE-2720
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "doc/presentations"]
|
||||||
|
path = doc/presentations
|
||||||
|
url = git@github.com:yandex/clickhouse-presentations.git
|
1
doc/presentations
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit b0b67a13a5ab20eac11496393acbe1e6c4f9c925
|
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,344 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Evolution of data structures in Yandex.Metrica</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="shower/themes/ribbon/styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Evolution of data structures in Yandex.Metrica</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<section class="slide" id="cover">
|
|
||||||
<h1 style="margin-top: 200px">Evolution of data structures<br/>in Yandex.Metrica</h1>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Introduction</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>About me</h2>
|
|
||||||
<p>Alexey, developer of ClickHouse.</p>
|
|
||||||
<p>I work on data processing engine of Yandex.Metrica since 2008.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide" style="background: url('pictures/yandex_office.jpg') no-repeat center center; background-size: 100% 100%;">
|
|
||||||
<h2><span style="padding: 10px; background: rgba(255, 255, 255, 0.75);">About Yandex</span></h2>
|
|
||||||
<p style="margin-top: 200px;"><span style="padding: 10px; line-height: 1.8; background: rgba(255, 255, 255, 0.75);">Yandex is one of the largest internet companies in Europe</span><br /><span style="padding: 10px; line-height: 1.8; background: rgba(255, 255, 255, 0.75);">operating Russia’s most popular search engine.</span></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>About Yandex.Metrica</h2>
|
|
||||||
<p>Yandex.Metrica (https://metrica.yandex.com/) is a service for web analytics.</p>
|
|
||||||
<p>Largest in Russia, second largest in the world (just after Google Analytics).</p>
|
|
||||||
<p><img src="pictures/metrika_market_share.png"/></p>
|
|
||||||
<p>We are processing about ~25 billions of events (page views, conversions, etc).</p>
|
|
||||||
<p>We must generate and show reports in realtime.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<img src="pictures/metrika2.png" style="height:100%"/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>History</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>How to store data?</h2>
|
|
||||||
<p>Big data processing is not a problem.</p>
|
|
||||||
<p>The challenge is how to store data in that way to allow both:</p>
|
|
||||||
<p>- efficient ingestion of click stream in realtime;</p>
|
|
||||||
<p>- efficient generation of reports;</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Let review our historical solutions first...</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>MySQL (MyISAM) 2008-2011</h2>
|
|
||||||
<p>We have had about 50 predefined report types.</p>
|
|
||||||
<p>We create a table for each of them.</p>
|
|
||||||
<p>Each table has primary key in form of:</p>
|
|
||||||
<p> site_id, date, <i>key</i> -> aggregated statistics.</p>
|
|
||||||
<p>The data was inserted in mini-batches of aggregated deltas,<br/>using ON DUPLICATE KEY UPDATE.</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>... but this just don't work.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Data locality on disk (artistic view)</h2>
|
|
||||||
<p>The main concern is <b>data locality</b>.</p>
|
|
||||||
<img src="pictures/data_locality.png" style="width:100%"/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>MySQL (MyISAM) 2008-2011</h2>
|
|
||||||
<p>We use HDD (rotational drives).<br/>We cannot afford petabytes of SSDs.</p>
|
|
||||||
<p>Each seek is ~12 ms of latency,<br/> usually no more than 1000 random reads/second in RAID array.</p>
|
|
||||||
|
|
||||||
<p>Time to read data from disk array is dependent on:<br />- number of seeks;<br />- total amount of data;</p>
|
|
||||||
|
|
||||||
<p>Example: read 100 000 rows, randomly scattered on disk:<br />- at least 100 seconds in worst case.<br />User won't wait hundred seconds for the report.</p>
|
|
||||||
|
|
||||||
<p>The only way to read data from disk array in appropriate amount of time is to minimize number of seek by maintaining data locality.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>MySQL (MyISAM) 2008-2011</h2>
|
|
||||||
<p>Fundamental problem:</p>
|
|
||||||
|
|
||||||
<p>Data is <b>inserted</b> almost in time order:
|
|
||||||
<br />- each second we have new portion data for this second;
|
|
||||||
<br />- but data for different web sites are comes in random order in a stream;</p>
|
|
||||||
|
|
||||||
<p>Data is <b>selected</b> by ranges for specified web site and date period:
|
|
||||||
<br />- in ranges of completely different order;</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>MySQL (MyISAM) 2008-2011</h2>
|
|
||||||
<p>MyISAM stores data in MYD and MYI files.<br/>MYD contains data almost in order of insertion.<br/>MYI contains B-tree index that maps a key to offset in MYD file.</p>
|
|
||||||
<p>Insertion of data is almost fine.<br />But selecting of data by range of primary key was non-practical.</p>
|
|
||||||
<p>Nevertheless, we made it work by:</p>
|
|
||||||
<p>
|
|
||||||
- tricky partitioning;<br/>
|
|
||||||
- organizing data in few generations with different partitioning scheme;<br/>
|
|
||||||
- moving data between tables by scheduled scripts;<br/>
|
|
||||||
- report generation becomes ugly UNION ALL queries.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>MySQL (MyISAM) 2008-2011</h2>
|
|
||||||
<p>As of 2011 we was storing about 580 billion rows in MyISAM tables.</p>
|
|
||||||
<p>We were not satisfied by performance and maintenance cost:<br/>
|
|
||||||
Example: page title report loading time, 90% quantile was more than 10 seconds.</p>
|
|
||||||
<p>... After all, everything was converted and deleted.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Metrage, 2010-2015</h2>
|
|
||||||
<p>(Specialized data structure, developed specially for aggregation of data and report generation).</p>
|
|
||||||
<p>To maintain data locality, we need<br/>to constantly reordering data by primary key.</p>
|
|
||||||
<p>We cannot maintain desired order at INSERT time, nor on SELECT time;<br/>we must do it in background.</p>
|
|
||||||
<p><i>Obviously</i>: we need an LSM-tree!</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Metrage, 2010-2015</h2>
|
|
||||||
<p>Metrage: <b>Metr</b>ica + <b>Ag</b>gregated statistics.</p>
|
|
||||||
<p>We have created custom data structure for that purpose.</p>
|
|
||||||
<p>In 2010, there was no LevelDB.<br />We just got some insights from article about TokuDB.</p>
|
|
||||||
<p>Metrage is designed for the purpose of realtime data aggregation:<br/>
|
|
||||||
- row in Metrage table is custom C++ struct with <i>update</i> and <i>merge</i> methods.</p>
|
|
||||||
<p>Example: a row in Metrage table could contain a HyperLogLog.</p>
|
|
||||||
<p>Data in Metrage is aggregated:<br/>- on insertion, in batches;<br/>- during background compaction;<br/>- on the fly, during report generation.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Metrage, 2010-2015</h2>
|
|
||||||
<p>Everything was working fine.<br/>The problem of data locality was solved.<br/>Reports was loading quickly.</p>
|
|
||||||
<p>As of 2015 we stored 3.37 trillion rows in Metrage<br/>and used 39 * 2 servers for this.</p>
|
|
||||||
<p>But we have had just ~50 pre-defined reports.</p>
|
|
||||||
<p>No customization and drill down was possible.</p>
|
|
||||||
<p>The user wants to slice and dice every report by every dimension!</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>... and we have developed just another custom data structure.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>The report builder, 2010</h2>
|
|
||||||
<p>We had quickly made a prototype of so-called "report builder".</p>
|
|
||||||
<p>This was 2010 year. It was just simple specialized column-oriented data structure.</p>
|
|
||||||
<p>It worked fine and we got understanding, what the right direction to go.</p>
|
|
||||||
<p>We need good column-oriented DBMS.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why column-oriented?</h2>
|
|
||||||
<p>This is how "traditional" row-oriented databases work:</p>
|
|
||||||
<p><img src="pictures/row_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why column-oriented?</h2>
|
|
||||||
<p>And this is how column-oriented databases work:</p>
|
|
||||||
<p><img src="pictures/column_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why column-oriented?</h2>
|
|
||||||
<p>Hypothesis:</p>
|
|
||||||
<p>If we have good enough column-oriented DBMS,<br/>we could store all our data in non-aggregated form<br/>(raw pageviews and sessions) and generate all the reports on the fly,<br />to allow infinite customization.</p>
|
|
||||||
<p>To check this hypothesis, we started to evaluate existing solutions.</p>
|
|
||||||
<p>MonetDB, InfiniDB, Infobright and so on...</p>
|
|
||||||
<p>No appropriate solutions were exist in 2010.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse</h2>
|
|
||||||
<p>As an experimental project, we started to develop<br />our own column-oriented DBMS: ClickHouse.</p>
|
|
||||||
<p>In 2012 it was in production state.</p>
|
|
||||||
<p>In 2014 we re-lauched Yandex.Metrica as Metrica 2.</p>
|
|
||||||
<p>All data is stored in ClickHouse and in non-aggregated form<br />and every report is generated on the fly.</p>
|
|
||||||
<p>In Metrika 2 the user could create it's own report with<br />
|
|
||||||
- custom dimensions, metrics, filters, user-centric segmentation...<br/>
|
|
||||||
- and to dig through data to the detail of individual visitors.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse</h2>
|
|
||||||
<p>The main target for ClickHouse is query execution speed.</p>
|
|
||||||
<p>In Yandex.Metrika, users could analyze data for their web sites of any volume.</p>
|
|
||||||
<p>Biggest classifieds and e-commerce sites with hundreds millions PV/day are using Yandex.Metrika (e.g. ru.aliexpress.com).</p>
|
|
||||||
<p>In contrast to GA*, in Yandex.Metrika, you could get data reports for large web sites without sampling.</p>
|
|
||||||
<p>As data is processed on the fly, ClickHouse must be able to crunch all that pageviews in sub second time.</p>
|
|
||||||
<p style="font-size:60%; margin-top:2em">* in Google Analytics you could get reports without sampling only in "premium" version.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>The main cluster of Yandex.Metrica</h2>
|
|
||||||
<ul style="font-size:30px;">
|
|
||||||
<li>20.6 trillions of rows (as of Feb 2017)</li>
|
|
||||||
<li>450 servers</li>
|
|
||||||
<li>total throughput of query processing is up to two terabytes per second</li>
|
|
||||||
</ul>
|
|
||||||
<p style="font-size:60%; margin-top:2em">* If you want to try ClickHouse, one server or VM is enough.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse</h2>
|
|
||||||
<ul>
|
|
||||||
<li>column-oriented</li>
|
|
||||||
<li>distributed</li>
|
|
||||||
<li>linearly scalable</li>
|
|
||||||
<li>fault-tolerant</li>
|
|
||||||
<li>data ingestion in realtime</li>
|
|
||||||
<li>realtime (sub-second) queries</li>
|
|
||||||
<li>support of SQL dialect + extensions<br/>(arrays, nested data types, domain-specific functions, approximate query execution)</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source (since June 2016)</h2>
|
|
||||||
<p>We think ClickHouse is too good to be used solely by Yandex.</p>
|
|
||||||
<p>We made it open-source. License: Apache 2.0.</p>
|
|
||||||
<p>https://github.com/yandex/ClickHouse/</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source</h2>
|
|
||||||
<p>More than 100 companies is already using ClickHouse.</p>
|
|
||||||
<p>Examples: Mail.ru, Cloudflare, Kaspersky...</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>When to use ClickHouse</h2>
|
|
||||||
<p>For well structured, clean, immutable events.</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Click stream. Web analytics. Adv. networks. RTB. E-commerce.</p>
|
|
||||||
<p>Analytics for online games. Sensor and monitoring data. Telecom data.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">When <span style="color:red;">not</span> to use ClickHouse</h2>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">OLTP</span><br/>ClickHouse doesn't have UPDATE statement and full-featured transactions.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Key-Value</span><br/>If you want high load of small single-row queries, please use another system.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Blob-store, document oriented</span><br/>ClickHouse is intended for vast amount of fine-grained data.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Over-normalized data</span><br/>Better to make up single wide fact table with pre-joined dimensions.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Spark</h2>
|
|
||||||
<p>https://www.percona.com/blog/2017/02/13/clickhouse-new-opensource-columnar-database/</p>
|
|
||||||
<img src="pictures/spark.png" style="height:60%"/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. PrestoDB</h2>
|
|
||||||
<p>Ömer Osman Koçak:<br /><br />
|
|
||||||
«When we evaluated ClickHouse the results were great compared to Prestodb. Even though the columnar storage optimizations for ORC and Clickhouse is quite similar, Clickhouse uses CPU and Memory resources more efficiently (Presto also uses vectorized execution but cannot take advantage of hardware level optimizations such as SIMD instruction sets because it's written in Java so that's fair) so we also wanted to add support for Clickhouse for our open-source analytics platform Rakam (https://github.com/rakam-io/rakam)»</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. InfiniDB</h2>
|
|
||||||
<p>«结论:clickhouse速度更快!»</p>
|
|
||||||
<p>«In conclusion, ClickHouse is faster!»</p>
|
|
||||||
<p><a href="http://verynull.com/2016/08/22/infinidb与clickhouse对比/">http://verynull.com/2016/08/22/infinidb与clickhouse对比/</a></p>
|
|
||||||
<p><img src="pictures/infinidb_cn.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why ClickHouse is so fast?</h2>
|
|
||||||
<p> </p>
|
|
||||||
<p style="font-size: 40px;">— we just cannot make it slower.</p>
|
|
||||||
<p style="font-size: 40px;">Yandex.Metrica must work.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why ClickHouse is so fast?</h2>
|
|
||||||
<p><b>Algorithmic optimizations.</b></p>
|
|
||||||
<p>MergeTree, locality of data on disk<br/>— fast range queries.</p>
|
|
||||||
<p>Example: uniqCombined function is a combination of three different data structures, used for different ranges of cardinalities.</p>
|
|
||||||
<p><b>Low-level optimizations.</b></p>
|
|
||||||
<p>Example: vectorized query execution.</p>
|
|
||||||
<p><b>Specialization and attention to detail.</b></p>
|
|
||||||
<p>Example: we have 17 different algorithms for GROUP BY. Best one is selected for your query.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>How to connect to ClickHouse</h2>
|
|
||||||
<p style="font-size: 30px;">HTTP REST</p>
|
|
||||||
<p style="font-size: 30px;">clickhouse-client</p>
|
|
||||||
<p style="font-size: 30px;">JDBC</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Python, PHP, Go, Perl, Ruby, Node.JS, R, .NET</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Web UI: <a href="https://github.com/smi2/clickhouse-frontend">https://github.com/smi2/clickhouse-frontend</a></p>
|
|
||||||
<p>Redash, Zeppelin, Superset, Grafana, PowerBI - somewhat works</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Community</h2>
|
|
||||||
<p>Web site: <a href="https://clickhouse.yandex/">https://clickhouse.yandex/</a></p>
|
|
||||||
<p>Google groups: <a href="https://groups.google.com/forum/#!forum/clickhouse">https://groups.google.com/forum/#!forum/clickhouse</a></p>
|
|
||||||
<p>Maillist: clickhouse-feedback@yandex-team.com</p>
|
|
||||||
<p>Telegram chat: <a href="https://telegram.me/clickhouse_en">https://telegram.me/clickhouse_en</a> and <a href="https://telegram.me/clickhouse_ru">https://telegram.me/clickhouse_ru</a> (now with 403 members)</p>
|
|
||||||
<p>GitHub: <a href="https://github.com/yandex/ClickHouse/">https://github.com/yandex/ClickHouse/</a></p>
|
|
||||||
<p> </p>
|
|
||||||
<p>+ meetups. Moscow, Saint-Petersburg... International meetups will be announced this year.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p style="font-size: 40px;">Thank you. Questions.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Bonus</h2>
|
|
||||||
<img src="pictures/example_french.png" style="height:70%"/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">ClickHouse vs. typical row-oriented DBMS</h2>
|
|
||||||
<p>Itai Shirav:<br /><br />«I haven't made a rigorous comparison, but I did convert a time-series table with 9 million rows from Postgres to ClickHouse.</p>
|
|
||||||
<p>Under ClickHouse queries run about 100 times faster, and the table takes 20 times less disk space. Which is pretty amazing if you ask me».</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse for sensor data</h2>
|
|
||||||
<p><img src="pictures/kaspersky.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Greenplum</h2>
|
|
||||||
<p><img src="pictures/greenplum.png" style="width:50%"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="progress"></div>
|
|
||||||
<script src="shower/shower.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 229 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 297 KiB |
Before Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 226 KiB |
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,41 +0,0 @@
|
|||||||
# Ribbon theme for Shower [![Build Status](https://travis-ci.org/shower/ribbon.svg?branch=master)](https://travis-ci.org/shower/ribbon)
|
|
||||||
|
|
||||||
![Ribbon screen shot](pictures/canvas.png)
|
|
||||||
|
|
||||||
Default theme for the [Shower](https://github.com/shower/shower/) presentation engine. Doesn’t include engine itself. [See it in action](http://shwr.me/shower/themes/ribbon/). Follow [@shower_me](https://twitter.com/shower_me) for support and updates, [file an issue](https://github.com/shower/shower/issues/new) if you have any.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Get the Shower template where Ribbon is already included. Download the [template archive](http://shwr.me/shower.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower
|
|
||||||
|
|
||||||
If you want to install Ribbon separately you can download the [theme archive](http://shwr.me/ribbon.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower-ribbon
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
All theme’s features are demonstrated in the [index.html](index.html) file. Use it as a reference while building your presentation. See more detailed [features overview](https://github.com/shower/shower/blob/master/docs/features-en.md).
|
|
||||||
|
|
||||||
## Ratios
|
|
||||||
|
|
||||||
Ribbon theme supports two slide ratios: wide 16×10 (default) and taller 4×3. To change the slide’s ratio include one of the pre-built `screen-16x10.css` or `screen-4x3.css` files in the `<head>` of your presentation.
|
|
||||||
|
|
||||||
## PDF
|
|
||||||
|
|
||||||
Ribbon could be exported to PDF by printing it from the list mode in Chrome or Opera browsers. See [printing documentation](https://github.com/shower/shower/blob/master/docs/printing-en.md) for more options.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
If you want to adjust theme for your needs:
|
|
||||||
|
|
||||||
1. Fork this repository and clone it to your local machine.
|
|
||||||
2. Install dependencies: `npm install`.
|
|
||||||
3. Start a local server with watcher: `npm run dev` or just `gulp` if you have it installed globally.
|
|
||||||
4. Edit your files and see changes in the opened browser.
|
|
||||||
|
|
||||||
To take part in Ribbon development please read [contributing guidelines](CONTRIBUTING.md) first and [file an issue](https://github.com/shower/shower/issues/new) before sending any pull request.
|
|
||||||
|
|
||||||
---
|
|
||||||
Licensed under [MIT License](LICENSE.md).
|
|
@ -1,304 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Ribbon theme for Shower</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<link rel="stylesheet" href="styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Presentation Title</h1>
|
|
||||||
<p><a href="">Yours Truly</a>, Famous Inc.</p>
|
|
||||||
</header>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Slide Header</h2>
|
|
||||||
<p>Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch letterpress.</p>
|
|
||||||
<p>Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid four loko quinoa.</p>
|
|
||||||
<p class="note">Echo Park 8-bit sustainable umami deep v Kickstarter.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Inline Elements</h2>
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
<footer class="footer">
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
</footer>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Quotes</h2>
|
|
||||||
<blockquote>
|
|
||||||
<p>Flannel bicycle rights locavore selfies skateboard. Authentic fanny pack paleo four loko bespoke. Artisan tattooed chia XOXO ennui, lomo disrupt 8-bit art party Tumblr scenester.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figure>
|
|
||||||
<blockquote>
|
|
||||||
<p>Post-ironic fashion axe flexitarian, Tonx narwhal messenger bag Tumblr. Portland gentrify deep v kale chips literally.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figcaption>Yours Truly</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Nested Lists</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Literally viral vegan, ugh drinking vinegar photo booth</li>
|
|
||||||
<li>Wes Anderson chillwave Marfa pour-over Etsy banh mi</li>
|
|
||||||
<li>Ethnic polaroid lo-fi iPhone ennui
|
|
||||||
<ul>
|
|
||||||
<li>Yr wayfarers before they sold out Kickstarter asymmetrical</li>
|
|
||||||
<li>Irony flexitarian readymade quinoa, kogi bespoke meggings narwhal</li>
|
|
||||||
<li>Skateboard Etsy twee artisan Echo Park</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>Tonx kitsch fingerstache readymade, retro single-origin coffee</li>
|
|
||||||
</ol>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Block Lists</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Retro meh brunch aesthetic Cosby sweater Shoreditch. Banksy Tumblr sriracha, flexitarian pug chia master cleanse vinyl wayfarers fanny pack.</li>
|
|
||||||
<li>Messenger bag retro cred Portland next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag.</li>
|
|
||||||
<li>Leggings skateboard literally1 bicycle rights H20 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical paleo you probably haven’t heard of.</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Latin and Cyrillic List Bullets</h2>
|
|
||||||
<ul lang="en">
|
|
||||||
<li>Occupy locavore blog, mustache you probably haven't heard of them</li>
|
|
||||||
<li>Skateboard pork belly aesthetic hoodie selfies brunch</li>
|
|
||||||
<li>Food truck gluten-free disrupt Portland</li>
|
|
||||||
</ul>
|
|
||||||
<ul lang="ru">
|
|
||||||
<li>Helvetica narwhal drinking vinegar chillwave, post-ironic ennui</li>
|
|
||||||
<li>Cray pug paleo retro, Echo Park narwhal Wes Anderson</li>
|
|
||||||
<li>Disrupt Williamsburg fixie, shabby chic bicycle rights hashtag kogi</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Two Columns</h2>
|
|
||||||
<p class="double">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Three Columns</h2>
|
|
||||||
<p class="triple">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Simple Table</h2>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Striped Table</h2>
|
|
||||||
<table class="striped">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Plain Code Listing</h2>
|
|
||||||
<pre><code><html lang="en">
|
|
||||||
<mark><head></mark> <span class="comment"><!--Comment--></span>
|
|
||||||
<title>Shower</title>
|
|
||||||
<meta charset="<mark class="important">UTF-8</mark>">
|
|
||||||
<link rel="stylesheet" href="screen.css">
|
|
||||||
<script src="script.js"></script>
|
|
||||||
<mark></head></mark></code></pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Numbered Code Listing</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Lines</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code class="mark"><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Hidden Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="next"><html lang="en"></code>
|
|
||||||
<code class="next"><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="next"> <title>Shower</title></code>
|
|
||||||
<code class="next"> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code class="next"> <script src="script.js"></script></code>
|
|
||||||
<code class="next"><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="mark next"><html lang="en"></code>
|
|
||||||
<code><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="mark next"> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="mark next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark next"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Grid Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<h2>White Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide black">
|
|
||||||
<h2>Black Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Multiline<br>Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout"><a href="">Linked Shout</a></h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout grow">Growing Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout shrink">Shrinking Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<figure>
|
|
||||||
<img class="cover" src="pictures/exact.png" alt="">
|
|
||||||
<figcaption class="white">Copyright © 2016 <a href="">Yours Truly</a>, Famous Inc.</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/tall.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/wide.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<img class="place top left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place" src="pictures/square.png" alt="">
|
|
||||||
<img class="place right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom right" src="pictures/square.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide" data-timing="00:03">
|
|
||||||
<h2 class="shout">Timer</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>List Navigation</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Ennui keffiyeh thundercats</li>
|
|
||||||
<li class="next">Jean shorts biodiesel</li>
|
|
||||||
<li class="next">Terry richardson, swag blog</li>
|
|
||||||
<li class="next">Locavore umami vegan helvetica</li>
|
|
||||||
<li class="next">Fingerstache kale chips</li>
|
|
||||||
</ol>
|
|
||||||
<p class="next">Before they sold out master</p>
|
|
||||||
</section>
|
|
||||||
<div class="progress"></div>
|
|
||||||
<footer class="badge">
|
|
||||||
<a href="https://github.com/shower/shower">Fork me on GitHub</a>
|
|
||||||
</footer>
|
|
||||||
<script src="../../shower.min.js"></script>
|
|
||||||
<!-- Copyright © 2016 Yours Truly, Famous Inc. -->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 154 B |
Before Width: | Height: | Size: 153 B |
@ -1,2 +0,0 @@
|
|||||||
http://www.slideshare.net/AlexeyMilovidov1/clickhouse-69616890/AlexeyMilovidov1/clickhouse-69616890
|
|
||||||
file:///home/milovidov/work/Presentation/shower/index.html#cover
|
|
@ -1,204 +0,0 @@
|
|||||||
/**
|
|
||||||
* Ribbon theme for Shower HTML presentation engine
|
|
||||||
* shower-ribbon v2.0.8, https://github.com/shower/ribbon
|
|
||||||
* @copyright 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
* @license MIT
|
|
||||||
*/
|
|
||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
*,::after,::before{box-sizing:border-box}
|
|
||||||
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}
|
|
||||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}
|
|
||||||
.caption p,body{line-height:1}
|
|
||||||
p {line-height: 1}
|
|
||||||
ol,ul{list-style:none}
|
|
||||||
blockquote,q{quotes:none}
|
|
||||||
blockquote::after,blockquote::before,q::after,q::before{content:none}
|
|
||||||
table{border-collapse:collapse;border-spacing:0}
|
|
||||||
a{text-decoration:none}
|
|
||||||
@page{margin:0;size:1024px 640px}
|
|
||||||
.shower{color:#000;counter-reset:slide;font:25px/2 Yandex Sans Display Web,sans-serif;-webkit-print-color-adjust:exact;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none}
|
|
||||||
@media print{.shower{text-rendering:geometricPrecision}
|
|
||||||
}
|
|
||||||
.caption{font-size:25px;display:none;margin-top:-.2em;padding:0 1em .93em;width:100%;color:#3c3d40;text-shadow:0 1px 0 #8d8e90}
|
|
||||||
@media (min-width:1174px){.caption{font-size:50px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.caption{font-size:100px}
|
|
||||||
}
|
|
||||||
.caption h1{padding-bottom:.15em;font:1em/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.caption p{font-size:.6em}
|
|
||||||
.caption a{color:#4b86c2;text-shadow:0 -1px 0 #1f3f60}
|
|
||||||
.slide{position:relative;z-index:1;overflow:hidden;padding:20px 100px 0;width:1024px;height:640px;background:#fff;font-size:25px}
|
|
||||||
|
|
||||||
/*.slide::after{position:absolute;top:0;right:100px;padding-top:15px;width:50px;height:100px;background:url(../images/ribbon.svg) no-repeat;color:#fff;counter-increment:slide;content:counter(slide);text-align:center}*/
|
|
||||||
|
|
||||||
.slide h1{vertical-align:middle; color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide h2{margin-bottom:34px;color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide p{margin-bottom:1em}
|
|
||||||
.slide p.note{color:#979a9e}
|
|
||||||
.slide a{background:-webkit-linear-gradient(bottom,currentColor .09em,transparent .09em) repeat-x;background:linear-gradient(to top,currentColor .09em,transparent .09em) repeat-x;color:#4b86c2}
|
|
||||||
.slide b,.slide strong{font-weight:700}
|
|
||||||
.slide blockquote,.slide dfn,.slide em,.slide i{font-style:italic}
|
|
||||||
.slide code,.slide kbd,.slide mark,.slide samp{padding:.1em .3em;border-radius:.2em}
|
|
||||||
.slide code,.slide kbd,.slide samp{background:rgba(88,90,94,.1);line-height:1;font-family:PT Mono,monospace,monospace}
|
|
||||||
.slide mark{background:#fafaa2}
|
|
||||||
.slide sub,.slide sup{position:relative;line-height:0;font-size:75%}
|
|
||||||
.slide sub{bottom:-.25em}
|
|
||||||
.slide sup{top:-.5em}
|
|
||||||
.slide blockquote::before{position:absolute;margin:-.15em 0 0 -.43em;color:#ccc;line-height:1;font-size:8em;content:'\201C'}
|
|
||||||
.slide blockquote+figcaption{margin:-1em 0 1em;font-style:italic;font-weight:700}
|
|
||||||
.slide ol,.slide ul{margin-bottom:0em;counter-reset:list}
|
|
||||||
.slide ol li,.slide ul li{page-break-inside:avoid;text-indent:-2em}
|
|
||||||
.slide ol li::before,.slide ul li::before{display:inline-block;width:2em;color:#979a9e;text-align:right}
|
|
||||||
.slide ol ol,.slide ol ul,.slide ul ol,.slide ul ul{margin-bottom:0;margin-left:2em}
|
|
||||||
.slide ul>li::before{padding-right:.5em;content:'•'}
|
|
||||||
.slide ul>li:lang(ru)::before{content:'—'}
|
|
||||||
.slide ol>li::before{padding-right:.4em;counter-increment:list;content:counter(list) "."}
|
|
||||||
.slide table{margin-left:-100px;margin-bottom:1em;width:calc(100% + 100px + 100px)}
|
|
||||||
.slide table td:first-child,.slide table th:first-child{padding-left:96px}
|
|
||||||
.slide table td:last-child,.slide table th:last-child{padding-right:96px}
|
|
||||||
.slide table th{text-align:left;font-weight:700}
|
|
||||||
.slide table tr:not(:last-of-type)>*{background:-webkit-linear-gradient(bottom,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x;background:linear-gradient(to top,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x}
|
|
||||||
.slide table.striped tr:nth-child(even){background:rgba(88,90,94,.1)}
|
|
||||||
.slide table.striped tr>*{background-image:none}
|
|
||||||
.slide pre{margin-bottom:1em;counter-reset:code;white-space:normal}
|
|
||||||
.slide pre code{display:block;margin-left:-100px;padding:0 0 0 100px;width:calc(100% + 100px + 100px);border-radius:0;background:0 0;line-height:2;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}
|
|
||||||
.slide pre code:not(:only-child).mark{background:rgba(88,90,94,.1)}
|
|
||||||
.slide pre code:not(:only-child)::before{position:absolute;margin-left:-2em;color:#979a9e;counter-increment:code;content:counter(code,decimal-leading-zero) "."}
|
|
||||||
.slide pre mark{position:relative;z-index:-1;margin:0 -.3em}
|
|
||||||
.slide pre mark.important{background:#c00;color:#fff}
|
|
||||||
.slide pre .comment{color:#999}
|
|
||||||
.slide footer{position:absolute;right:0;bottom:-640px;left:0;display:none;padding:41px 100px 8px;background:#fbfbba;box-shadow:0 1px 0 #fafaa2 inset;-webkit-transition:bottom .3s;transition:bottom .3s}
|
|
||||||
.slide footer mark{background:rgba(255,255,255,.8)}
|
|
||||||
.slide:hover>footer{bottom:0}
|
|
||||||
.slide.grid{background-image:url(../images/grid.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-moz-crisp-edges;image-rendering:pixelated}
|
|
||||||
@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.slide.grid{background-image:url(../images/grid@2x.png);background-size:1024px auto}
|
|
||||||
}
|
|
||||||
.slide.black{background-color:#000}
|
|
||||||
.slide.black::after,.slide.white::after{visibility:hidden}
|
|
||||||
.slide.white{background-color:#fff}
|
|
||||||
.slide .double,.slide .triple{-webkit-column-gap:75px;-moz-column-gap:75px;column-gap:75px;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}
|
|
||||||
.slide .double{-webkit-column-count:2;-moz-column-count:2;column-count:2}
|
|
||||||
.slide .triple{-webkit-column-count:3;-moz-column-count:3;column-count:3}
|
|
||||||
.slide .shout{position:absolute;top:50%;left:0;width:100%;text-align:center;line-height:1;font-size:150px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
|
|
||||||
.slide .shout a{background:-webkit-linear-gradient(bottom,currentColor .11em,transparent .11em) repeat-x;background:linear-gradient(to top,currentColor .11em,transparent .11em) repeat-x}
|
|
||||||
.slide .cover{z-index:-1;max-width:100%;max-height:100%}
|
|
||||||
.slide .cover.w,.slide .cover.width{width:100%;max-height:none}
|
|
||||||
.slide .cover.h,.slide .cover.height{height:100%;max-width:none}
|
|
||||||
.slide .cover+figcaption{position:absolute;bottom:20px;right:10px;font-size:12px;opacity:.7;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translateX(100%) rotate(-90deg);transform:translateX(100%) rotate(-90deg)}
|
|
||||||
.slide .cover+figcaption.white{color:#fff}
|
|
||||||
.slide .cover+figcaption a{color:currentcolor}
|
|
||||||
.slide .cover,.slide .place{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
|
|
||||||
.slide .place.b.l,.slide .place.b.r,.slide .place.bottom.left,.slide .place.bottom.right,.slide .place.t.l,.slide .place.t.r,.slide .place.top.left,.slide .place.top.right{-webkit-transform:none;transform:none}
|
|
||||||
.slide .place.b,.slide .place.bottom,.slide .place.t,.slide .place.top{-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}
|
|
||||||
.slide .place.l,.slide .place.left,.slide .place.r,.slide .place.right{-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}
|
|
||||||
.slide .place.t,.slide .place.t.r,.slide .place.top,.slide .place.top.left,.slide .place.top.right{top:0}
|
|
||||||
.slide .place.r,.slide .place.right{right:0;left:auto}
|
|
||||||
.slide .place.b,.slide .place.b.l,.slide .place.b.r,.slide .place.bottom,.slide .place.bottom.left,.slide .place.bottom.right{top:auto;bottom:0}
|
|
||||||
.slide .place.l,.slide .place.left{left:0}
|
|
||||||
.progress{left:-20px;bottom:0;z-index:1;display:none;width:0;height:0;box-sizing:content-box;border:10px solid #4b86c2;border-right-color:transparent;-webkit-transition:width .2s linear;transition:width .2s linear;clip:rect(10px,1044px,20px,20px)}
|
|
||||||
.progress[style*='100%']{padding-left:10px}
|
|
||||||
.badge,.badge a,.progress{position:absolute}
|
|
||||||
.badge{font-size:10px;top:0;z-index:1;overflow:hidden;display:none;width:9em;height:9em;right:0;visibility:hidden}
|
|
||||||
@media (min-width:1174px){.badge{font-size:20px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.badge{font-size:40px}
|
|
||||||
}
|
|
||||||
.badge a{right:-50%;bottom:50%;left:-50%;visibility:visible;background:#4b86c2;color:#fff;text-align:center;line-height:2;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}
|
|
||||||
.region{display:none}
|
|
||||||
@media screen{.shower.list{padding-top:25px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#585a5e;position:absolute;clip:rect(0,auto,auto,0)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list{padding-top:50px}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list{padding-top:100px}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .caption{display:block}
|
|
||||||
.shower.list .slide{-webkit-transform-origin:0 0;transform-origin:0 0;margin:0 -768px -455px 25px;-webkit-transform:scale(.25);transform:scale(.25);border-radius:2px;box-shadow:0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list .slide{margin:0 -512px -270px 50px;-webkit-transform:scale(.5);transform:scale(.5)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list .slide{margin:0 0 100px 100px;-webkit-transform:scale(1);transform:scale(1)}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .slide:hover{box-shadow:0 0 0 20px rgba(0,0,0,.1),0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide:target{box-shadow:0 0 0 1px #376da3,0 0 0 20px #4b86c2,0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide *{pointer-events:none}
|
|
||||||
.shower.list .badge,.shower.list .slide footer{display:block}
|
|
||||||
.shower.full{position:absolute;top:50%;left:50%;overflow:hidden;margin:-320px 0 0 -512px;width:1024px;height:640px;background:#000}
|
|
||||||
.shower.full .slide{position:absolute;top:0;left:0;margin-left:-150%;visibility:hidden}
|
|
||||||
.shower.full .slide:target{margin:0;visibility:visible}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next{visibility:visible;background:0 0}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next.active{background:rgba(88,90,94,.1)}
|
|
||||||
.shower.full .slide .next{visibility:hidden}
|
|
||||||
.shower.full .slide .next.active{visibility:visible}
|
|
||||||
.shower.full .slide .shout.grow,.shower.full .slide .shout.shrink{opacity:0;-webkit-transition:.4s ease-out;transition:.4s ease-out;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}
|
|
||||||
.shower.full .slide .shout.grow{-webkit-transform:scale(.1) translateY(-50%);transform:scale(.1) translateY(-50%)}
|
|
||||||
.shower.full .slide .shout.shrink{-webkit-transform:scale(10) translateY(-50%);transform:scale(10) translateY(-50%)}
|
|
||||||
.shower.full .slide:target .shout.grow,.shower.full .slide:target .shout.shrink{opacity:1;-webkit-transform:scale(1) translateY(-50%);transform:scale(1) translateY(-50%)}
|
|
||||||
.shower.full .progress{display:block;-webkit-transform:translateZ(0);transform:translateZ(0)}
|
|
||||||
.shower.full .region{position:absolute;clip:rect(0 0 0 0);overflow:hidden;margin:-1px;padding:0;width:1px;height:1px;border:none;display:block}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,62 +0,0 @@
|
|||||||
# Shower Presentation Template [![Build Status](https://travis-ci.org/shower/shower.svg?branch=master)](https://travis-ci.org/shower/shower)
|
|
||||||
|
|
||||||
<img src="pictures/logo.png" width="250" alt="Shower logo">
|
|
||||||
|
|
||||||
> Shower ['ʃəuə] noun. A person or thing that shows.
|
|
||||||
|
|
||||||
1. Built on HTML, CSS and vanilla JavaScript
|
|
||||||
2. Works in all modern browsers
|
|
||||||
3. Themes are separated from engine
|
|
||||||
4. Modular and extensible
|
|
||||||
5. Fully keyboard accessible
|
|
||||||
6. Printable to PDF
|
|
||||||
|
|
||||||
[See it in action](http://shwr.me/). Includes [Ribbon](https://github.com/shower/ribbon/) and [Material](https://github.com/shower/material/) themes, and [core](https://github.com/shower/core/) with plugins.
|
|
||||||
|
|
||||||
Follow [@shower_me](https://twitter.com/shower_me) for support and updates, [file an issue](https://github.com/shower/shower/issues/new) if you have any.
|
|
||||||
|
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
1. Download and unzip [template archive](http://shwr.me/shower.zip)
|
|
||||||
2. Open `index.html` and start creating your presentation
|
|
||||||
|
|
||||||
## Advanced
|
|
||||||
|
|
||||||
1. [Fork](https://github.com/shower/shower/fork) this repository
|
|
||||||
2. Go to fork setting and rename it: `shower` → `my-slides`
|
|
||||||
2. Clone it to your computer: `git clone git@github.com:username/my-slides.git`
|
|
||||||
3. Go to `my-slides` folder and install dependencies: `npm install`
|
|
||||||
4. Start creating your presentation
|
|
||||||
|
|
||||||
Once you’re done you can build a clean copy of your slides:
|
|
||||||
|
|
||||||
npm run prepare
|
|
||||||
|
|
||||||
And you’ll find your presentation in `prepared` folder with only needed files in it. You can also run `npm run archive` to get the same files in `archive.zip`. But there’s more! You can easily publish your presentation online by running:
|
|
||||||
|
|
||||||
npm run publish
|
|
||||||
|
|
||||||
And you’ll have your slides published on `http://username.github.io/my-slides/`.
|
|
||||||
|
|
||||||
## Usage Examples
|
|
||||||
|
|
||||||
- [Installable Web Apps](http://pepelsbey.net/pres/web-apps/)
|
|
||||||
- [Clear and Sharp](http://pepelsbey.net/pres/clear-and-sharp/)
|
|
||||||
- [CSS Management](http://pepelsbey.net/pres/knife-train/)
|
|
||||||
- [Push it!](http://pepelsbey.net/pres/push-it/)
|
|
||||||
- [Pre-fixes](http://pepelsbey.net/pres/pre-fixes/)
|
|
||||||
- [Web In Curves](http://pepelsbey.net/pres/web-in-curves/)
|
|
||||||
- [Sense Coding](http://pepelsbey.net/pres/sense-coding/)
|
|
||||||
|
|
||||||
## Browser Support
|
|
||||||
|
|
||||||
Latest stable versions of Chrome, Internet Explorer, Firefox, Opera and Safari are supported.
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
You’re always welcome to contribute. Fork project, make changes and send it as pull request. But it’s better to file an [issue](https://github.com/shower/shower/issues) with your idea first. Read [contributing rules](CONTRIBUTING.md) for more details.
|
|
||||||
|
|
||||||
Main contributors in historical order: [pepelsbey](https://github.com/pepelsbey), [jahson](https://github.com/jahson), [miripiruni](https://github.com/miripiruni), [kizu](https://github.com/kizu), [artpolikarpov](https://github.com/artpolikarpov), [tonyganch](https://github.com/tonyganch), [zloylos](https://github.com/zloylos).
|
|
||||||
|
|
||||||
---
|
|
||||||
Licensed under [MIT License](LICENSE.md).
|
|
@ -1,559 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Параллельный и распределённый GROUP BY</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="shower/themes/ribbon/styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Параллельный и распределённый GROUP BY</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<section class="slide" id="cover">
|
|
||||||
<h1 style="margin-top: 200px">Параллельный и распределённый GROUP BY</h1>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Обо мне</h2>
|
|
||||||
<p>Алексей, разработчик ClickHouse.</p>
|
|
||||||
<p>С 2008 занимался движком обработки данных в Яндекс.Метрике.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p><b>ClickHouse</b> — это аналитическая СУБД.</p>
|
|
||||||
<p>Один запрос — много данных на входе, мало на выходе.</p>
|
|
||||||
<p>Данные нужно агрегировать налету.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Метрика 2.0</h2>
|
|
||||||
<img src="pictures/metrika2.png" style="height:70%"/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Пример запроса</h2>
|
|
||||||
<p style="font-family: Monospace">SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u<br />
|
|
||||||
FROM hits<br />
|
|
||||||
WHERE MobilePhoneModel != ''<br />
|
|
||||||
<b>GROUP BY</b> MobilePhoneModel<br />
|
|
||||||
ORDER BY u DESC</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p>Чтобы быстро обрабатывать запросы, данные необходимо:</p>
|
|
||||||
<ul>
|
|
||||||
<li>быстро читать;</li>
|
|
||||||
<li><b>быстро считать.</b></li>
|
|
||||||
</ul>
|
|
||||||
<p> </p>
|
|
||||||
<p>Конвейер выполнения запроса:</p>
|
|
||||||
<p>— фильтрация, JOIN, <b>агрегация</b>, сортировка...</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 45px;">Как тестировать производительность?</h2>
|
|
||||||
<p>Бенчмарки должны быть:</p>
|
|
||||||
<ul>
|
|
||||||
<li>на реальных данных;</li>
|
|
||||||
<li>на разных наборах данных, покрывающих разные кейсы;</li>
|
|
||||||
<li>воспроизводимые;</li>
|
|
||||||
<li>автоматизированные.</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Пример бенчмарка (не лучшего)</h2>
|
|
||||||
<pre style="white-space: pre; font-family: Monospace; font-size: 14px; line-height: 1.25em;">/** Выполнять так:
|
|
||||||
for file in <b>MobilePhoneModel PageCharset Params URLDomain UTMSource Referer URL Title</b>; do
|
|
||||||
for size in <b>30000 100000 300000 1000000 5000000</b>; do
|
|
||||||
echo
|
|
||||||
BEST_METHOD=0
|
|
||||||
BEST_RESULT=0
|
|
||||||
for method in {1..10}; do
|
|
||||||
echo -ne $file $size $method '';
|
|
||||||
TOTAL_ELEMS=0
|
|
||||||
for i in {0..1000}; do
|
|
||||||
TOTAL_ELEMS=$(( $TOTAL_ELEMS + $size ))
|
|
||||||
if [[ $TOTAL_ELEMS -gt 25000000 ]]; then break; fi
|
|
||||||
./hash_map_string_3 $size $method < ${file}.bin 2>&1 |
|
|
||||||
grep HashMap | grep -oE '[0-9\.]+ elem';
|
|
||||||
done | awk -W interactive '{ if ($1 > x) { x = $1 }; printf(".") } END { print x }' |
|
|
||||||
tee /tmp/hash_map_string_3_res;
|
|
||||||
CUR_RESULT=$(cat /tmp/hash_map_string_3_res | tr -d '.')
|
|
||||||
if [[ $CUR_RESULT -gt $BEST_RESULT ]]; then
|
|
||||||
BEST_METHOD=$method
|
|
||||||
BEST_RESULT=$CUR_RESULT
|
|
||||||
fi;
|
|
||||||
done;
|
|
||||||
echo Best: $BEST_METHOD - $BEST_RESULT
|
|
||||||
done;
|
|
||||||
done
|
|
||||||
*/</pre>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Агрегация</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Одна машина, одно ядро</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Плохой способ</h2>
|
|
||||||
<p>Читаем данные в массив; сортируем по ключу;
|
|
||||||
идём по группам ключей и считаем агрегатные функции.</p>
|
|
||||||
<p>Достоинства:</p>
|
|
||||||
<p>+ простота интерфейса агрегатных функций;
|
|
||||||
+ возможность более эффективной реализации агрегатных функций;
|
|
||||||
+ можно запускать произвольные скрипты для reduce в режиме streaming.</p>
|
|
||||||
<p>Недостатки:</p>
|
|
||||||
<p>− пусть N — общее число данных, а M — количество ключей;
|
|
||||||
Отвратительно работает при N > M — в типичном случае.
|
|
||||||
Тратится O(N) оперативки на промежуточные данные вместо O(M).</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Хороший способ</h2>
|
|
||||||
<p>Читаем данные, кладём в ассоциативный массив</p>
|
|
||||||
<p><b>key tuple</b> -> <b>states of aggregate functions</b></p>
|
|
||||||
<p>обновляем состояния агрегатных функций.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Какой ассоциативный массив?</h2>
|
|
||||||
<p>Lookup-таблица. Хэш-таблица.</p>
|
|
||||||
<p>Бинарное дерево. Skip-лист. B-дерево. </p>
|
|
||||||
<p>Трай. Трай+хэш-таблица...</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Бинарное дерево</h2>
|
|
||||||
<p>− слишком большой оверхед на элемент;</p>
|
|
||||||
<p>− отвратительная кэш-локальность;</p>
|
|
||||||
<p>− вообще тормозит.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Skip-лист. Трай. B-дерево...</h2>
|
|
||||||
<p>− вообще для другой задачи;</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Lookup-таблица</h2>
|
|
||||||
<p>+ прекрасно для агрегации по числовым ключам не более ~16 бит;</p>
|
|
||||||
<p>− не подходит для чуть более сложных случаев.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Хэш-таблица</h2>
|
|
||||||
<p>+ моя любимая структура данных;</p>
|
|
||||||
<p>− много деталей.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Трай+хэш-таблица</h2>
|
|
||||||
<p>+ иногда кое что в этом есть, см. далее;</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Одна машина, много ядер</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>1. Тривиальный способ</h2>
|
|
||||||
|
|
||||||
<p>Разные потоки читают разные данные по мере возможности.
|
|
||||||
Агрегируют независимо в свои локальные хэш-таблицы.
|
|
||||||
Когда все данные прочитаны, мержим все хэш-таблицы в одну.
|
|
||||||
Например, идём по всем локальным хэш-таблицам кроме первой
|
|
||||||
и перекладываем всё в первую.
|
|
||||||
|
|
||||||
Фаза чтения данных и предварительной агрегации распараллеливается.
|
|
||||||
Фаза мержа выполняется последовательно.
|
|
||||||
|
|
||||||
Пусть N — общее число данных, а M — количество ключей.
|
|
||||||
O(M) работы выполняется последовательно
|
|
||||||
и при большом M (кардинальность GROUP BY)
|
|
||||||
работа плохо распараллеливается.
|
|
||||||
|
|
||||||
Достоинства: тривиально.
|
|
||||||
|
|
||||||
Недостатки: не масштабируется при большой кардинальности.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>2. Partitioning способ</h2>
|
|
||||||
|
|
||||||
<p>Для каждого блока данных, выполняем агрегацию в две стадии:
|
|
||||||
|
|
||||||
Стадия 1.
|
|
||||||
Разные потоки будут обрабатывать разные куски блока, какие успеют.
|
|
||||||
В каждом потоке, с помощью отдельной хэш-функции,
|
|
||||||
хэшируем ключ в номер потока и запоминаем его.
|
|
||||||
|
|
||||||
hash: key -> bucket_num
|
|
||||||
|
|
||||||
Стадия 2.
|
|
||||||
Каждый поток идёт по всему блоку данных
|
|
||||||
и берёт для агрегации только строки с нуждым номером корзины.
|
|
||||||
|
|
||||||
Модификация: можно всё в одну стадию — тогда каждый поток
|
|
||||||
будет вычислять хэш-функцию от всех строк заново:
|
|
||||||
подходит, если это дёшево.
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<p>
|
|
||||||
Достоинства:
|
|
||||||
+ хорошо масштабируется при большой кардинальности
|
|
||||||
и равномерном распределении ключей;
|
|
||||||
+ идейная простота.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
− если объём данных распределён неравномерно по ключам,
|
|
||||||
то стадия 2 плохо масштабируется.
|
|
||||||
Это типичный случай.
|
|
||||||
Почти всегда объём данных по ключам распределён по power law.
|
|
||||||
|
|
||||||
Ещё недостатки:
|
|
||||||
− если размер блока маленький, то получается слишком
|
|
||||||
мелко-гранулированная многопоточность:
|
|
||||||
большой оверхед на синхронизацию;
|
|
||||||
− если размер блока большой, то плохая кэш-локальность;
|
|
||||||
− на второй стадии, часть memory bandwidth умножается на число потоков;
|
|
||||||
− нужно вычислять ещё одну хэш-функцию,
|
|
||||||
она должна быть независима от той, что в хэш-таблице;</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>3. Параллельный мерж хэш-таблиц</h2>
|
|
||||||
|
|
||||||
<p>Отресайзим полученные в разных потоках хэш-таблицы к одному размеру.
|
|
||||||
Разобъём их неявно на разные подмножества ключей.
|
|
||||||
В разных потоках будем мержить соответствующие
|
|
||||||
подмножества ключей хэш-таблиц.
|
|
||||||
|
|
||||||
Рисунок на доске.
|
|
||||||
|
|
||||||
Недостаток:
|
|
||||||
− очень сложный код.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>4. Ordered мерж хэш-таблиц</h2>
|
|
||||||
|
|
||||||
<p>Для open addressing linear probing хэш-таблиц, или для chaining хэш-таблиц,
|
|
||||||
данные в хэш-таблице расположены почти упорядоченно
|
|
||||||
по остатку от деления хэш-функции на размер хэш-таблицы
|
|
||||||
— с точностью до цепочек разрешения коллизий.
|
|
||||||
|
|
||||||
Отресайзим полученные в разных потоках хэш-таблицы к одному размеру.
|
|
||||||
Сделаем ordered iterator, который будет
|
|
||||||
перебирать данные в хэш-таблице в фиксированном порядке.
|
|
||||||
|
|
||||||
Объём работы на итерирование:
|
|
||||||
количество цепочек разрешения коллизий * средний квадрат длин цепочек.
|
|
||||||
|
|
||||||
Сделаем merging iterator, который с помощью heap (priority queue)
|
|
||||||
будет перебирать все хэш-таблицы разом.
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<p>Достоинства:
|
|
||||||
|
|
||||||
+ не нужно никуда перекладывать элементы: мерж делается inplace.
|
|
||||||
|
|
||||||
+ бонус: подходит для внешней памяти.
|
|
||||||
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
|
|
||||||
− отвратительно сложный код;
|
|
||||||
|
|
||||||
− для open addressing linear probing хэш-таблиц,
|
|
||||||
средний квадрат длин цепочек разрешения коллизий слишком большой;
|
|
||||||
|
|
||||||
− priority queue тормозит;
|
|
||||||
|
|
||||||
− стадия мержа не распараллеливается*
|
|
||||||
|
|
||||||
|
|
||||||
* — можно совместить с предыдущим способом.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">5. Robin Hood ordered мерж хэш-таблиц</h2>
|
|
||||||
|
|
||||||
<p>Если использовать Robin Hood хэш-таблицу, то данные
|
|
||||||
(за исключением O(1) граничных цепочек разрешения коллизий)
|
|
||||||
будут полностью упорядочены
|
|
||||||
по остатку от деления хэш-функции на размер хэш-таблицы.
|
|
||||||
|
|
||||||
Достоинства:
|
|
||||||
+ вроде бы красивый алгоритм.
|
|
||||||
+ бонус: подходит для внешней памяти.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
− вынуждает использовать robin-hood probing;
|
|
||||||
− priority queue тормозит;
|
|
||||||
− стадия мержа не распараллеливается*</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">6. Shared хэш-таблица под mutex-ом</h2>
|
|
||||||
|
|
||||||
<p>Достоинства: очень просто.
|
|
||||||
|
|
||||||
Недостатки: отрицательная масштабируемость.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 30px;">7. Много мелких хэш-таблиц под разными mutex-ами</h2>
|
|
||||||
|
|
||||||
<p>В какую класть — выбирается с помощью отдельной хэш-функции.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
|
|
||||||
− в типичном случае данные распределены сильно неравномерно,
|
|
||||||
и потоки будут конкурировать на одной горячей корзине.
|
|
||||||
|
|
||||||
− в случае маленькой хэш-таблицы, слишком тормозит.
|
|
||||||
|
|
||||||
Достоинства: если данные почему-то распределены равномерно,
|
|
||||||
то кое-как масштабируется.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 35px;">8. Shared хэш-таблица и в каждой ячейке spin-lock</h2>
|
|
||||||
|
|
||||||
<p>Недостатки:
|
|
||||||
|
|
||||||
− spin-lock — это очень опасно;
|
|
||||||
очень сложно тестировать производительность;
|
|
||||||
вы обязательно сделаете отстой.
|
|
||||||
|
|
||||||
− в типичном случае данные распределены сильно неравномерно,
|
|
||||||
и потоки будут конкурировать на одной горячей ячейке.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>9. Lock free shared хэш-таблица</h2>
|
|
||||||
|
|
||||||
<p>Недостатки:
|
|
||||||
|
|
||||||
− lock free хэш-таблицы либо нельзя ресайзить, либо они очень сложные;
|
|
||||||
|
|
||||||
− в типичном случае данные распределены сильно неравномерно,
|
|
||||||
и потоки будут конкурировать на одной горячей ячейке:
|
|
||||||
false sharing, тормоза.
|
|
||||||
|
|
||||||
− сложный код, много инструкций, всё тормозит;
|
|
||||||
|
|
||||||
− я вообще недолюбливаю lock-free алгоритмы.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 35px;">10. Shared хэш-таблица + thread local хэш-таблицы</h2>
|
|
||||||
|
|
||||||
<p>Пытаемся положить в shared хэш-таблицу путём блокирования ячейки;
|
|
||||||
если ячейка уже заблокирована — кладём к локальную хэш-таблицу.
|
|
||||||
|
|
||||||
Тогда горячие ключи попадут в локальные хэш-таблицы.
|
|
||||||
Локальные хэш-таблицы будут маленькими.
|
|
||||||
В конце мержим все локальные хэш-таблицы в глобальную.
|
|
||||||
|
|
||||||
Дополнения: можно сначала смотреть
|
|
||||||
на наличие ключа в локальной хэш-таблице.
|
|
||||||
|
|
||||||
Достоинства:
|
|
||||||
+ отлично масштабируется;
|
|
||||||
+ сравнительно простая реализация.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
− много лукапов, много инструкций — в целом довольно медленно.
|
|
||||||
|
|
||||||
Даже не смотря на то, что thread local хэш-таблица
|
|
||||||
зачастую ещё и cache local.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>11. Two-level хэш-таблица</h2>
|
|
||||||
|
|
||||||
<p>На первой стадии, в каждом потоке независимо
|
|
||||||
кладём данные в свои num_buckets = 256 хэш-таблиц,
|
|
||||||
хранящих разные ключи.
|
|
||||||
|
|
||||||
В какую из них класть (номер корзины)
|
|
||||||
определяется другой хэш-функцией,
|
|
||||||
либо отдельным байтом хэш-функции.
|
|
||||||
|
|
||||||
Имеем num_threads * num_buckets хэш-таблиц.
|
|
||||||
|
|
||||||
На второй стадии мержим состояния
|
|
||||||
num_threads * num_buckets хэш-таблиц
|
|
||||||
в одни num_buckets хэш-таблиц,
|
|
||||||
распараллеливая мерж по bucket-ам.
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<p>
|
|
||||||
Достоинства:
|
|
||||||
|
|
||||||
+ отлично масштабируется;
|
|
||||||
+ простота реализации;
|
|
||||||
|
|
||||||
+ бонус: ресайзы хэш-таблиц амортизируются;
|
|
||||||
|
|
||||||
+ бонус: нахаляву получаем в результате partitioning,
|
|
||||||
который полезен для других стадий конвейера.
|
|
||||||
|
|
||||||
+ бонус: подходит для внешней памяти.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
|
|
||||||
− при большой кардинальности, во время мержа
|
|
||||||
делается до такого же объёма работ как на первой стадии;
|
|
||||||
|
|
||||||
− при маленькой кардинальности,
|
|
||||||
слишком много отдельных хэш-таблиц;
|
|
||||||
|
|
||||||
− при маленькой кардинальности,
|
|
||||||
работает несколько медленнее тривиального способа;</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">12. Тривиальный + two-level хэш-таблица</h2>
|
|
||||||
|
|
||||||
<p>Используем тривиальный способ.
|
|
||||||
|
|
||||||
Когда разных ключей много, конвертируем в two-level.</p>
|
|
||||||
<p>
|
|
||||||
Именно такой способ используется в ClickHouse :)
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Много машин, много ядер</h2>
|
|
||||||
|
|
||||||
<p>На разных машинах расположены части данных,
|
|
||||||
которые надо обработать.
|
|
||||||
|
|
||||||
Отличия от shared memory:
|
|
||||||
|
|
||||||
— почти отсутствует возможность work stealing;
|
|
||||||
— нужно явно передавать данные по сети.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>1. Тривиальный способ</h2>
|
|
||||||
|
|
||||||
<p>Передаём промежуточные результаты на сервер-инициатор запроса.
|
|
||||||
Последовательно кладём всё в одну хэш-таблицу.
|
|
||||||
|
|
||||||
Достоинства:
|
|
||||||
|
|
||||||
+ тривиально;
|
|
||||||
+ хорошо масштабируется при маленькой кардинальности.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
|
|
||||||
− при большой кардинальности не масштабируется;
|
|
||||||
− требуется оперативка на весь результат.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>2. Ordered merge</h2>
|
|
||||||
|
|
||||||
<p>Передаём промежуточные результаты на сервер-инициатор запроса
|
|
||||||
в заданном порядке. Мержим.
|
|
||||||
|
|
||||||
Достоинства:
|
|
||||||
+ тратится O(1) оперативки;
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
− при большой кардинальности не масштабируется;
|
|
||||||
− мерж сортированных потоков (heap) — это медленная операция;
|
|
||||||
− требуется либо сортировать результаты на удалённых серверах,
|
|
||||||
либо использовать один из тех fancy алгоритмов выше.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>3. Partitioned merge</h2>
|
|
||||||
|
|
||||||
<p>Передаём промежуточные результаты на сервер-инициатор запроса,
|
|
||||||
разбитыми на отдельные согласованные корзины-партиции,
|
|
||||||
в заданном порядке корзин.
|
|
||||||
|
|
||||||
Мержим по одной или по несколько корзин одновременно.
|
|
||||||
|
|
||||||
Достоинства:
|
|
||||||
+ тратится до в num_buckets раз меньше оперативки, чем размер результата;
|
|
||||||
+ можно легко распараллелить, мержа сразу несколько корзин
|
|
||||||
— отлично масштабируется по ядрам.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
− мерж делается на одном сервере — инициаторе запроса
|
|
||||||
— эта стадия не масштабируется по серверам.</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Именно такой способ используется в ClickHouse :)
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>4. Reshuffle + partitioned merge</h2>
|
|
||||||
|
|
||||||
<p>На удалённых серверах получаем промежуточные результаты,
|
|
||||||
разбитые на согласованные партиции.
|
|
||||||
|
|
||||||
Затем передаём партиции между серверами так,
|
|
||||||
чтобы на разных серверах были разные партиции,
|
|
||||||
а данные одной партиции оказались на одном сервере.
|
|
||||||
|
|
||||||
Мержим на всех серверах параллельно, да ещё и используя многие ядра.
|
|
||||||
|
|
||||||
Достоинства:
|
|
||||||
+ прекрасно масштабируется;
|
|
||||||
+ при INSERT SELECT, результат можно
|
|
||||||
вовсе не передавать на сервер-инициатор,
|
|
||||||
а сразу сохранить в распределённую таблицу на кластере.
|
|
||||||
|
|
||||||
Недостатки:
|
|
||||||
− сложная координация серверов;</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 100px;">Всё</h2>
|
|
||||||
|
|
||||||
<p style="font-size: 50px;">Можно задавать вопросы.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="progress"></div>
|
|
||||||
<script src="shower/shower.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 116 KiB |
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,41 +0,0 @@
|
|||||||
# Ribbon theme for Shower [![Build Status](https://travis-ci.org/shower/ribbon.svg?branch=master)](https://travis-ci.org/shower/ribbon)
|
|
||||||
|
|
||||||
![Ribbon screen shot](pictures/canvas.png)
|
|
||||||
|
|
||||||
Default theme for the [Shower](https://github.com/shower/shower/) presentation engine. Doesn’t include engine itself. [See it in action](http://shwr.me/shower/themes/ribbon/). Follow [@shower_me](https://twitter.com/shower_me) for support and updates, [file an issue](https://github.com/shower/shower/issues/new) if you have any.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Get the Shower template where Ribbon is already included. Download the [template archive](http://shwr.me/shower.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower
|
|
||||||
|
|
||||||
If you want to install Ribbon separately you can download the [theme archive](http://shwr.me/ribbon.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower-ribbon
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
All theme’s features are demonstrated in the [index.html](index.html) file. Use it as a reference while building your presentation. See more detailed [features overview](https://github.com/shower/shower/blob/master/docs/features-en.md).
|
|
||||||
|
|
||||||
## Ratios
|
|
||||||
|
|
||||||
Ribbon theme supports two slide ratios: wide 16×10 (default) and taller 4×3. To change the slide’s ratio include one of the pre-built `screen-16x10.css` or `screen-4x3.css` files in the `<head>` of your presentation.
|
|
||||||
|
|
||||||
## PDF
|
|
||||||
|
|
||||||
Ribbon could be exported to PDF by printing it from the list mode in Chrome or Opera browsers. See [printing documentation](https://github.com/shower/shower/blob/master/docs/printing-en.md) for more options.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
If you want to adjust theme for your needs:
|
|
||||||
|
|
||||||
1. Fork this repository and clone it to your local machine.
|
|
||||||
2. Install dependencies: `npm install`.
|
|
||||||
3. Start a local server with watcher: `npm run dev` or just `gulp` if you have it installed globally.
|
|
||||||
4. Edit your files and see changes in the opened browser.
|
|
||||||
|
|
||||||
To take part in Ribbon development please read [contributing guidelines](CONTRIBUTING.md) first and [file an issue](https://github.com/shower/shower/issues/new) before sending any pull request.
|
|
||||||
|
|
||||||
---
|
|
||||||
Licensed under [MIT License](LICENSE.md).
|
|
@ -1,304 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Ribbon theme for Shower</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<link rel="stylesheet" href="styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Presentation Title</h1>
|
|
||||||
<p><a href="">Yours Truly</a>, Famous Inc.</p>
|
|
||||||
</header>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Slide Header</h2>
|
|
||||||
<p>Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch letterpress.</p>
|
|
||||||
<p>Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid four loko quinoa.</p>
|
|
||||||
<p class="note">Echo Park 8-bit sustainable umami deep v Kickstarter.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Inline Elements</h2>
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
<footer class="footer">
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
</footer>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Quotes</h2>
|
|
||||||
<blockquote>
|
|
||||||
<p>Flannel bicycle rights locavore selfies skateboard. Authentic fanny pack paleo four loko bespoke. Artisan tattooed chia XOXO ennui, lomo disrupt 8-bit art party Tumblr scenester.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figure>
|
|
||||||
<blockquote>
|
|
||||||
<p>Post-ironic fashion axe flexitarian, Tonx narwhal messenger bag Tumblr. Portland gentrify deep v kale chips literally.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figcaption>Yours Truly</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Nested Lists</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Literally viral vegan, ugh drinking vinegar photo booth</li>
|
|
||||||
<li>Wes Anderson chillwave Marfa pour-over Etsy banh mi</li>
|
|
||||||
<li>Ethnic polaroid lo-fi iPhone ennui
|
|
||||||
<ul>
|
|
||||||
<li>Yr wayfarers before they sold out Kickstarter asymmetrical</li>
|
|
||||||
<li>Irony flexitarian readymade quinoa, kogi bespoke meggings narwhal</li>
|
|
||||||
<li>Skateboard Etsy twee artisan Echo Park</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>Tonx kitsch fingerstache readymade, retro single-origin coffee</li>
|
|
||||||
</ol>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Block Lists</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Retro meh brunch aesthetic Cosby sweater Shoreditch. Banksy Tumblr sriracha, flexitarian pug chia master cleanse vinyl wayfarers fanny pack.</li>
|
|
||||||
<li>Messenger bag retro cred Portland next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag.</li>
|
|
||||||
<li>Leggings skateboard literally1 bicycle rights H20 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical paleo you probably haven’t heard of.</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Latin and Cyrillic List Bullets</h2>
|
|
||||||
<ul lang="en">
|
|
||||||
<li>Occupy locavore blog, mustache you probably haven't heard of them</li>
|
|
||||||
<li>Skateboard pork belly aesthetic hoodie selfies brunch</li>
|
|
||||||
<li>Food truck gluten-free disrupt Portland</li>
|
|
||||||
</ul>
|
|
||||||
<ul lang="ru">
|
|
||||||
<li>Helvetica narwhal drinking vinegar chillwave, post-ironic ennui</li>
|
|
||||||
<li>Cray pug paleo retro, Echo Park narwhal Wes Anderson</li>
|
|
||||||
<li>Disrupt Williamsburg fixie, shabby chic bicycle rights hashtag kogi</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Two Columns</h2>
|
|
||||||
<p class="double">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Three Columns</h2>
|
|
||||||
<p class="triple">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Simple Table</h2>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Striped Table</h2>
|
|
||||||
<table class="striped">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Plain Code Listing</h2>
|
|
||||||
<pre><code><html lang="en">
|
|
||||||
<mark><head></mark> <span class="comment"><!--Comment--></span>
|
|
||||||
<title>Shower</title>
|
|
||||||
<meta charset="<mark class="important">UTF-8</mark>">
|
|
||||||
<link rel="stylesheet" href="screen.css">
|
|
||||||
<script src="script.js"></script>
|
|
||||||
<mark></head></mark></code></pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Numbered Code Listing</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Lines</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code class="mark"><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Hidden Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="next"><html lang="en"></code>
|
|
||||||
<code class="next"><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="next"> <title>Shower</title></code>
|
|
||||||
<code class="next"> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code class="next"> <script src="script.js"></script></code>
|
|
||||||
<code class="next"><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="mark next"><html lang="en"></code>
|
|
||||||
<code><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="mark next"> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="mark next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark next"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Grid Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<h2>White Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide black">
|
|
||||||
<h2>Black Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Multiline<br>Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout"><a href="">Linked Shout</a></h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout grow">Growing Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout shrink">Shrinking Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<figure>
|
|
||||||
<img class="cover" src="pictures/exact.png" alt="">
|
|
||||||
<figcaption class="white">Copyright © 2016 <a href="">Yours Truly</a>, Famous Inc.</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/tall.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/wide.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<img class="place top left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place" src="pictures/square.png" alt="">
|
|
||||||
<img class="place right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom right" src="pictures/square.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide" data-timing="00:03">
|
|
||||||
<h2 class="shout">Timer</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>List Navigation</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Ennui keffiyeh thundercats</li>
|
|
||||||
<li class="next">Jean shorts biodiesel</li>
|
|
||||||
<li class="next">Terry richardson, swag blog</li>
|
|
||||||
<li class="next">Locavore umami vegan helvetica</li>
|
|
||||||
<li class="next">Fingerstache kale chips</li>
|
|
||||||
</ol>
|
|
||||||
<p class="next">Before they sold out master</p>
|
|
||||||
</section>
|
|
||||||
<div class="progress"></div>
|
|
||||||
<footer class="badge">
|
|
||||||
<a href="https://github.com/shower/shower">Fork me on GitHub</a>
|
|
||||||
</footer>
|
|
||||||
<script src="../../shower.min.js"></script>
|
|
||||||
<!-- Copyright © 2016 Yours Truly, Famous Inc. -->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 154 B |
Before Width: | Height: | Size: 153 B |
@ -1,2 +0,0 @@
|
|||||||
http://www.slideshare.net/AlexeyMilovidov1/clickhouse-69616890/AlexeyMilovidov1/clickhouse-69616890
|
|
||||||
file:///home/milovidov/work/Presentation/shower/index.html#cover
|
|
@ -1,204 +0,0 @@
|
|||||||
/**
|
|
||||||
* Ribbon theme for Shower HTML presentation engine
|
|
||||||
* shower-ribbon v2.0.8, https://github.com/shower/ribbon
|
|
||||||
* @copyright 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
* @license MIT
|
|
||||||
*/
|
|
||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
*,::after,::before{box-sizing:border-box}
|
|
||||||
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}
|
|
||||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}
|
|
||||||
.caption p,body{line-height:1}
|
|
||||||
p {line-height: 1; white-space: pre;}
|
|
||||||
ol,ul{list-style:none}
|
|
||||||
blockquote,q{quotes:none}
|
|
||||||
blockquote::after,blockquote::before,q::after,q::before{content:none}
|
|
||||||
table{border-collapse:collapse;border-spacing:0}
|
|
||||||
a{text-decoration:none}
|
|
||||||
@page{margin:0;size:1024px 640px}
|
|
||||||
.shower{color:#000;counter-reset:slide;font:25px/2 Yandex Sans Display Web,sans-serif;-webkit-print-color-adjust:exact;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none}
|
|
||||||
@media print{.shower{text-rendering:geometricPrecision}
|
|
||||||
}
|
|
||||||
.caption{font-size:25px;display:none;margin-top:-.2em;padding:0 1em .93em;width:100%;color:#3c3d40;text-shadow:0 1px 0 #8d8e90}
|
|
||||||
@media (min-width:1174px){.caption{font-size:50px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.caption{font-size:100px}
|
|
||||||
}
|
|
||||||
.caption h1{padding-bottom:.15em;font:1em/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.caption p{font-size:.6em}
|
|
||||||
.caption a{color:#4b86c2;text-shadow:0 -1px 0 #1f3f60}
|
|
||||||
.slide{position:relative;z-index:1;overflow:hidden;padding:20px 100px 0;width:1024px;height:640px;background:#fff;font-size:25px}
|
|
||||||
|
|
||||||
/*.slide::after{position:absolute;top:0;right:100px;padding-top:15px;width:50px;height:100px;background:url(../images/ribbon.svg) no-repeat;color:#fff;counter-increment:slide;content:counter(slide);text-align:center}*/
|
|
||||||
|
|
||||||
.slide h1{vertical-align:middle; color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide h2{margin-bottom:34px;color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide p{margin-bottom:1em}
|
|
||||||
.slide p.note{color:#979a9e}
|
|
||||||
.slide a{background:-webkit-linear-gradient(bottom,currentColor .09em,transparent .09em) repeat-x;background:linear-gradient(to top,currentColor .09em,transparent .09em) repeat-x;color:#4b86c2}
|
|
||||||
.slide b,.slide strong{font-weight:700}
|
|
||||||
.slide blockquote,.slide dfn,.slide em,.slide i{font-style:italic}
|
|
||||||
.slide code,.slide kbd,.slide mark,.slide samp{padding:.1em .3em;border-radius:.2em}
|
|
||||||
.slide code,.slide kbd,.slide samp{background:rgba(88,90,94,.1);line-height:1;font-family:PT Mono,monospace,monospace}
|
|
||||||
.slide mark{background:#fafaa2}
|
|
||||||
.slide sub,.slide sup{position:relative;line-height:0;font-size:75%}
|
|
||||||
.slide sub{bottom:-.25em}
|
|
||||||
.slide sup{top:-.5em}
|
|
||||||
.slide blockquote::before{position:absolute;margin:-.15em 0 0 -.43em;color:#ccc;line-height:1;font-size:8em;content:'\201C'}
|
|
||||||
.slide blockquote+figcaption{margin:-1em 0 1em;font-style:italic;font-weight:700}
|
|
||||||
.slide ol,.slide ul{margin-bottom:0em;counter-reset:list}
|
|
||||||
.slide ol li,.slide ul li{page-break-inside:avoid;text-indent:-2em}
|
|
||||||
.slide ol li::before,.slide ul li::before{display:inline-block;width:2em;color:#979a9e;text-align:right}
|
|
||||||
.slide ol ol,.slide ol ul,.slide ul ol,.slide ul ul{margin-bottom:0;margin-left:2em}
|
|
||||||
.slide ul>li::before{padding-right:.5em;content:'•'}
|
|
||||||
.slide ul>li:lang(ru)::before{content:'—'}
|
|
||||||
.slide ol>li::before{padding-right:.4em;counter-increment:list;content:counter(list) "."}
|
|
||||||
.slide table{margin-left:-100px;margin-bottom:1em;width:calc(100% + 100px + 100px)}
|
|
||||||
.slide table td:first-child,.slide table th:first-child{padding-left:96px}
|
|
||||||
.slide table td:last-child,.slide table th:last-child{padding-right:96px}
|
|
||||||
.slide table th{text-align:left;font-weight:700}
|
|
||||||
.slide table tr:not(:last-of-type)>*{background:-webkit-linear-gradient(bottom,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x;background:linear-gradient(to top,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x}
|
|
||||||
.slide table.striped tr:nth-child(even){background:rgba(88,90,94,.1)}
|
|
||||||
.slide table.striped tr>*{background-image:none}
|
|
||||||
.slide pre{margin-bottom:1em;counter-reset:code;white-space:normal}
|
|
||||||
.slide pre code{display:block;margin-left:-100px;padding:0 0 0 100px;width:calc(100% + 100px + 100px);border-radius:0;background:0 0;line-height:2;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}
|
|
||||||
.slide pre code:not(:only-child).mark{background:rgba(88,90,94,.1)}
|
|
||||||
.slide pre code:not(:only-child)::before{position:absolute;margin-left:-2em;color:#979a9e;counter-increment:code;content:counter(code,decimal-leading-zero) "."}
|
|
||||||
.slide pre mark{position:relative;z-index:-1;margin:0 -.3em}
|
|
||||||
.slide pre mark.important{background:#c00;color:#fff}
|
|
||||||
.slide pre .comment{color:#999}
|
|
||||||
.slide footer{position:absolute;right:0;bottom:-640px;left:0;display:none;padding:41px 100px 8px;background:#fbfbba;box-shadow:0 1px 0 #fafaa2 inset;-webkit-transition:bottom .3s;transition:bottom .3s}
|
|
||||||
.slide footer mark{background:rgba(255,255,255,.8)}
|
|
||||||
.slide:hover>footer{bottom:0}
|
|
||||||
.slide.grid{background-image:url(../images/grid.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-moz-crisp-edges;image-rendering:pixelated}
|
|
||||||
@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.slide.grid{background-image:url(../images/grid@2x.png);background-size:1024px auto}
|
|
||||||
}
|
|
||||||
.slide.black{background-color:#000}
|
|
||||||
.slide.black::after,.slide.white::after{visibility:hidden}
|
|
||||||
.slide.white{background-color:#fff}
|
|
||||||
.slide .double,.slide .triple{-webkit-column-gap:75px;-moz-column-gap:75px;column-gap:75px;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}
|
|
||||||
.slide .double{-webkit-column-count:2;-moz-column-count:2;column-count:2}
|
|
||||||
.slide .triple{-webkit-column-count:3;-moz-column-count:3;column-count:3}
|
|
||||||
.slide .shout{position:absolute;top:50%;left:0;width:100%;text-align:center;line-height:1;font-size:150px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
|
|
||||||
.slide .shout a{background:-webkit-linear-gradient(bottom,currentColor .11em,transparent .11em) repeat-x;background:linear-gradient(to top,currentColor .11em,transparent .11em) repeat-x}
|
|
||||||
.slide .cover{z-index:-1;max-width:100%;max-height:100%}
|
|
||||||
.slide .cover.w,.slide .cover.width{width:100%;max-height:none}
|
|
||||||
.slide .cover.h,.slide .cover.height{height:100%;max-width:none}
|
|
||||||
.slide .cover+figcaption{position:absolute;bottom:20px;right:10px;font-size:12px;opacity:.7;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translateX(100%) rotate(-90deg);transform:translateX(100%) rotate(-90deg)}
|
|
||||||
.slide .cover+figcaption.white{color:#fff}
|
|
||||||
.slide .cover+figcaption a{color:currentcolor}
|
|
||||||
.slide .cover,.slide .place{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
|
|
||||||
.slide .place.b.l,.slide .place.b.r,.slide .place.bottom.left,.slide .place.bottom.right,.slide .place.t.l,.slide .place.t.r,.slide .place.top.left,.slide .place.top.right{-webkit-transform:none;transform:none}
|
|
||||||
.slide .place.b,.slide .place.bottom,.slide .place.t,.slide .place.top{-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}
|
|
||||||
.slide .place.l,.slide .place.left,.slide .place.r,.slide .place.right{-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}
|
|
||||||
.slide .place.t,.slide .place.t.r,.slide .place.top,.slide .place.top.left,.slide .place.top.right{top:0}
|
|
||||||
.slide .place.r,.slide .place.right{right:0;left:auto}
|
|
||||||
.slide .place.b,.slide .place.b.l,.slide .place.b.r,.slide .place.bottom,.slide .place.bottom.left,.slide .place.bottom.right{top:auto;bottom:0}
|
|
||||||
.slide .place.l,.slide .place.left{left:0}
|
|
||||||
.progress{left:-20px;bottom:0;z-index:1;display:none;width:0;height:0;box-sizing:content-box;border:10px solid #4b86c2;border-right-color:transparent;-webkit-transition:width .2s linear;transition:width .2s linear;clip:rect(10px,1044px,20px,20px)}
|
|
||||||
.progress[style*='100%']{padding-left:10px}
|
|
||||||
.badge,.badge a,.progress{position:absolute}
|
|
||||||
.badge{font-size:10px;top:0;z-index:1;overflow:hidden;display:none;width:9em;height:9em;right:0;visibility:hidden}
|
|
||||||
@media (min-width:1174px){.badge{font-size:20px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.badge{font-size:40px}
|
|
||||||
}
|
|
||||||
.badge a{right:-50%;bottom:50%;left:-50%;visibility:visible;background:#4b86c2;color:#fff;text-align:center;line-height:2;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}
|
|
||||||
.region{display:none}
|
|
||||||
@media screen{.shower.list{padding-top:25px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#585a5e;position:absolute;clip:rect(0,auto,auto,0)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list{padding-top:50px}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list{padding-top:100px}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .caption{display:block}
|
|
||||||
.shower.list .slide{-webkit-transform-origin:0 0;transform-origin:0 0;margin:0 -768px -455px 25px;-webkit-transform:scale(.25);transform:scale(.25);border-radius:2px;box-shadow:0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list .slide{margin:0 -512px -270px 50px;-webkit-transform:scale(.5);transform:scale(.5)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list .slide{margin:0 0 100px 100px;-webkit-transform:scale(1);transform:scale(1)}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .slide:hover{box-shadow:0 0 0 20px rgba(0,0,0,.1),0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide:target{box-shadow:0 0 0 1px #376da3,0 0 0 20px #4b86c2,0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide *{pointer-events:none}
|
|
||||||
.shower.list .badge,.shower.list .slide footer{display:block}
|
|
||||||
.shower.full{position:absolute;top:50%;left:50%;overflow:hidden;margin:-320px 0 0 -512px;width:1024px;height:640px;background:#000}
|
|
||||||
.shower.full .slide{position:absolute;top:0;left:0;margin-left:-150%;visibility:hidden}
|
|
||||||
.shower.full .slide:target{margin:0;visibility:visible}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next{visibility:visible;background:0 0}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next.active{background:rgba(88,90,94,.1)}
|
|
||||||
.shower.full .slide .next{visibility:hidden}
|
|
||||||
.shower.full .slide .next.active{visibility:visible}
|
|
||||||
.shower.full .slide .shout.grow,.shower.full .slide .shout.shrink{opacity:0;-webkit-transition:.4s ease-out;transition:.4s ease-out;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}
|
|
||||||
.shower.full .slide .shout.grow{-webkit-transform:scale(.1) translateY(-50%);transform:scale(.1) translateY(-50%)}
|
|
||||||
.shower.full .slide .shout.shrink{-webkit-transform:scale(10) translateY(-50%);transform:scale(10) translateY(-50%)}
|
|
||||||
.shower.full .slide:target .shout.grow,.shower.full .slide:target .shout.shrink{opacity:1;-webkit-transform:scale(1) translateY(-50%);transform:scale(1) translateY(-50%)}
|
|
||||||
.shower.full .progress{display:block;-webkit-transform:translateZ(0);transform:translateZ(0)}
|
|
||||||
.shower.full .region{position:absolute;clip:rect(0 0 0 0);overflow:hidden;margin:-1px;padding:0;width:1px;height:1px;border:none;display:block}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,174 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en" style="background-color: #FFF;">
|
|
||||||
<head>
|
|
||||||
<title>ClickHouse meetup в Санкт-Петербурге</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="shower/themes/ribbon/styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>ClickHouse meetup в Санкт-Петербурге</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<section class="slide" id="cover">
|
|
||||||
<h1 style="margin-top: 200px">ClickHouse meetup<br/>в Санкт-Петербурге</h1>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse: настоящее и будущее</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Команда</h2>
|
|
||||||
<p>Теперь 5 разработчиков.</p>
|
|
||||||
<p>
|
|
||||||
<img src="pictures/milovidov.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/vludv.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/ztlpn.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/proller.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/stanly.jpg" style="height:150px;">
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>В предыдущих сериях</h2>
|
|
||||||
|
|
||||||
<p>— HTTP и executable источники;</p>
|
|
||||||
<p>— оптимизация мержей, вертикальный мерж;</p>
|
|
||||||
<p>— трассировка распределённых запросов;</p>
|
|
||||||
<p>— clickhouse-local;</p>
|
|
||||||
<p>— операторы BETWEEN, ||;</p>
|
|
||||||
<p>— функции UUID - text;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Новое в языке запросов</h2>
|
|
||||||
|
|
||||||
<p>— KILL QUERY;</p>
|
|
||||||
<p>— LIMIT BY;</p>
|
|
||||||
<p>— SELECT INTO OUTFILE;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Интерфейсы</h2>
|
|
||||||
|
|
||||||
<p>— возможность получить прогресс выполнения в HTTP заголовках;</p>
|
|
||||||
<p>— возможность пропуска ошибок в текстовых форматах;</p>
|
|
||||||
<p>— правильные коды ответа в HTTP интерфейсе;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Сборка</h2>
|
|
||||||
|
|
||||||
<p>— «правильная» сборка и пакеты;</p>
|
|
||||||
<p>— Таблица system.build_options;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Словари</h2>
|
|
||||||
|
|
||||||
<p>— производительность кэшируемых внешних словарей;</p>
|
|
||||||
<p>— инструментирование кэшируемых внешних словарей;</p>
|
|
||||||
<p>— HTTPS словари;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Инструментирование</h2>
|
|
||||||
|
|
||||||
<p>— информация об использовании памяти под индекс;</p>
|
|
||||||
<p>— информация о размере столбцов в несжатом виде;</p>
|
|
||||||
<p>— метрики по потреблению оперативки кэшами;</p>
|
|
||||||
<p>— метрики про мержи;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Оптимизации</h2>
|
|
||||||
|
|
||||||
<p>— оптимизация DISTINCT;</p>
|
|
||||||
<p>— производительность gzip в HTTP интерфейсе;</p>
|
|
||||||
<p>— оптимизация mark cache;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Функции</h2>
|
|
||||||
|
|
||||||
<p>— правильная логика сравнений, least, greatest;</p>
|
|
||||||
<p>— groupUniqArray для всех типов данных;</p>
|
|
||||||
<p>— decodeURLComponent;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Что-то ещё</h2>
|
|
||||||
|
|
||||||
<p>— защита от случайного DROP TABLE;</p>
|
|
||||||
<p>— use_client_time_zone; timezone в конфиге;</p>
|
|
||||||
<p>— fsync_metadata;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Сообщество</h2>
|
|
||||||
|
|
||||||
<p>— интеграция с Grafana, Redash, Apache Zeppelin, Superset;</p>
|
|
||||||
<p>— правильные пакеты для CentOS, RHEL, GosLinux;</p>
|
|
||||||
<p>— драйвер native протокола для Go и C++;</p>
|
|
||||||
<p>— возможность передавать заголовки X-ClickHouse-*;</p>
|
|
||||||
<p>— бенчмарки NYC Taxi, Percona (Spark);</p>
|
|
||||||
<p>— бенчмарк Greenplum;</p>
|
|
||||||
<p>— англоязычный Telegram чат;</p>
|
|
||||||
<p>— встречи и доклады (Брюссель, Париж);</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Spark</h2>
|
|
||||||
<p>https://www.percona.com/blog/2017/02/13/clickhouse-new-opensource-columnar-database/</p>
|
|
||||||
<img src="pictures/spark.png" style="height:60%"/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Greenplum</h2>
|
|
||||||
<p><img src="pictures/greenplum.png" style="width:50%"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>TODO (март-апрель 2017)</h2>
|
|
||||||
|
|
||||||
<p>— распределённые DDL запросы;</p>
|
|
||||||
<p>— конфиги в ZooKeeper;</p>
|
|
||||||
<p>— полная поддержка NULL;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>TODO (весна-лето 2017)</h2>
|
|
||||||
|
|
||||||
<p>— работоспособность ODBC драйвера под Windows;</p>
|
|
||||||
<p>— переделать анализ запроса: правильная поддержка JOIN;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Дополнительно</h2>
|
|
||||||
|
|
||||||
<p>job-clickhouse@yandex-team.ru</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="progress"></div>
|
|
||||||
<script src="shower/shower.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 25 KiB |
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,41 +0,0 @@
|
|||||||
# Ribbon theme for Shower [![Build Status](https://travis-ci.org/shower/ribbon.svg?branch=master)](https://travis-ci.org/shower/ribbon)
|
|
||||||
|
|
||||||
![Ribbon screen shot](pictures/canvas.png)
|
|
||||||
|
|
||||||
Default theme for the [Shower](https://github.com/shower/shower/) presentation engine. Doesn’t include engine itself. [See it in action](http://shwr.me/shower/themes/ribbon/). Follow [@shower_me](https://twitter.com/shower_me) for support and updates, [file an issue](https://github.com/shower/shower/issues/new) if you have any.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Get the Shower template where Ribbon is already included. Download the [template archive](http://shwr.me/shower.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower
|
|
||||||
|
|
||||||
If you want to install Ribbon separately you can download the [theme archive](http://shwr.me/ribbon.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower-ribbon
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
All theme’s features are demonstrated in the [index.html](index.html) file. Use it as a reference while building your presentation. See more detailed [features overview](https://github.com/shower/shower/blob/master/docs/features-en.md).
|
|
||||||
|
|
||||||
## Ratios
|
|
||||||
|
|
||||||
Ribbon theme supports two slide ratios: wide 16×10 (default) and taller 4×3. To change the slide’s ratio include one of the pre-built `screen-16x10.css` or `screen-4x3.css` files in the `<head>` of your presentation.
|
|
||||||
|
|
||||||
## PDF
|
|
||||||
|
|
||||||
Ribbon could be exported to PDF by printing it from the list mode in Chrome or Opera browsers. See [printing documentation](https://github.com/shower/shower/blob/master/docs/printing-en.md) for more options.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
If you want to adjust theme for your needs:
|
|
||||||
|
|
||||||
1. Fork this repository and clone it to your local machine.
|
|
||||||
2. Install dependencies: `npm install`.
|
|
||||||
3. Start a local server with watcher: `npm run dev` or just `gulp` if you have it installed globally.
|
|
||||||
4. Edit your files and see changes in the opened browser.
|
|
||||||
|
|
||||||
To take part in Ribbon development please read [contributing guidelines](CONTRIBUTING.md) first and [file an issue](https://github.com/shower/shower/issues/new) before sending any pull request.
|
|
||||||
|
|
||||||
---
|
|
||||||
Licensed under [MIT License](LICENSE.md).
|
|
@ -1,304 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Ribbon theme for Shower</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<link rel="stylesheet" href="styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Presentation Title</h1>
|
|
||||||
<p><a href="">Yours Truly</a>, Famous Inc.</p>
|
|
||||||
</header>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Slide Header</h2>
|
|
||||||
<p>Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch letterpress.</p>
|
|
||||||
<p>Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid four loko quinoa.</p>
|
|
||||||
<p class="note">Echo Park 8-bit sustainable umami deep v Kickstarter.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Inline Elements</h2>
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
<footer class="footer">
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
</footer>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Quotes</h2>
|
|
||||||
<blockquote>
|
|
||||||
<p>Flannel bicycle rights locavore selfies skateboard. Authentic fanny pack paleo four loko bespoke. Artisan tattooed chia XOXO ennui, lomo disrupt 8-bit art party Tumblr scenester.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figure>
|
|
||||||
<blockquote>
|
|
||||||
<p>Post-ironic fashion axe flexitarian, Tonx narwhal messenger bag Tumblr. Portland gentrify deep v kale chips literally.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figcaption>Yours Truly</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Nested Lists</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Literally viral vegan, ugh drinking vinegar photo booth</li>
|
|
||||||
<li>Wes Anderson chillwave Marfa pour-over Etsy banh mi</li>
|
|
||||||
<li>Ethnic polaroid lo-fi iPhone ennui
|
|
||||||
<ul>
|
|
||||||
<li>Yr wayfarers before they sold out Kickstarter asymmetrical</li>
|
|
||||||
<li>Irony flexitarian readymade quinoa, kogi bespoke meggings narwhal</li>
|
|
||||||
<li>Skateboard Etsy twee artisan Echo Park</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>Tonx kitsch fingerstache readymade, retro single-origin coffee</li>
|
|
||||||
</ol>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Block Lists</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Retro meh brunch aesthetic Cosby sweater Shoreditch. Banksy Tumblr sriracha, flexitarian pug chia master cleanse vinyl wayfarers fanny pack.</li>
|
|
||||||
<li>Messenger bag retro cred Portland next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag.</li>
|
|
||||||
<li>Leggings skateboard literally1 bicycle rights H20 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical paleo you probably haven’t heard of.</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Latin and Cyrillic List Bullets</h2>
|
|
||||||
<ul lang="en">
|
|
||||||
<li>Occupy locavore blog, mustache you probably haven't heard of them</li>
|
|
||||||
<li>Skateboard pork belly aesthetic hoodie selfies brunch</li>
|
|
||||||
<li>Food truck gluten-free disrupt Portland</li>
|
|
||||||
</ul>
|
|
||||||
<ul lang="ru">
|
|
||||||
<li>Helvetica narwhal drinking vinegar chillwave, post-ironic ennui</li>
|
|
||||||
<li>Cray pug paleo retro, Echo Park narwhal Wes Anderson</li>
|
|
||||||
<li>Disrupt Williamsburg fixie, shabby chic bicycle rights hashtag kogi</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Two Columns</h2>
|
|
||||||
<p class="double">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Three Columns</h2>
|
|
||||||
<p class="triple">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Simple Table</h2>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Striped Table</h2>
|
|
||||||
<table class="striped">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Plain Code Listing</h2>
|
|
||||||
<pre><code><html lang="en">
|
|
||||||
<mark><head></mark> <span class="comment"><!--Comment--></span>
|
|
||||||
<title>Shower</title>
|
|
||||||
<meta charset="<mark class="important">UTF-8</mark>">
|
|
||||||
<link rel="stylesheet" href="screen.css">
|
|
||||||
<script src="script.js"></script>
|
|
||||||
<mark></head></mark></code></pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Numbered Code Listing</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Lines</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code class="mark"><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Hidden Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="next"><html lang="en"></code>
|
|
||||||
<code class="next"><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="next"> <title>Shower</title></code>
|
|
||||||
<code class="next"> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code class="next"> <script src="script.js"></script></code>
|
|
||||||
<code class="next"><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="mark next"><html lang="en"></code>
|
|
||||||
<code><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="mark next"> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="mark next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark next"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Grid Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<h2>White Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide black">
|
|
||||||
<h2>Black Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Multiline<br>Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout"><a href="">Linked Shout</a></h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout grow">Growing Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout shrink">Shrinking Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<figure>
|
|
||||||
<img class="cover" src="pictures/exact.png" alt="">
|
|
||||||
<figcaption class="white">Copyright © 2016 <a href="">Yours Truly</a>, Famous Inc.</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/tall.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/wide.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<img class="place top left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place" src="pictures/square.png" alt="">
|
|
||||||
<img class="place right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom right" src="pictures/square.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide" data-timing="00:03">
|
|
||||||
<h2 class="shout">Timer</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>List Navigation</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Ennui keffiyeh thundercats</li>
|
|
||||||
<li class="next">Jean shorts biodiesel</li>
|
|
||||||
<li class="next">Terry richardson, swag blog</li>
|
|
||||||
<li class="next">Locavore umami vegan helvetica</li>
|
|
||||||
<li class="next">Fingerstache kale chips</li>
|
|
||||||
</ol>
|
|
||||||
<p class="next">Before they sold out master</p>
|
|
||||||
</section>
|
|
||||||
<div class="progress"></div>
|
|
||||||
<footer class="badge">
|
|
||||||
<a href="https://github.com/shower/shower">Fork me on GitHub</a>
|
|
||||||
</footer>
|
|
||||||
<script src="../../shower.min.js"></script>
|
|
||||||
<!-- Copyright © 2016 Yours Truly, Famous Inc. -->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 154 B |
Before Width: | Height: | Size: 153 B |
@ -1,2 +0,0 @@
|
|||||||
http://www.slideshare.net/AlexeyMilovidov1/clickhouse-69616890/AlexeyMilovidov1/clickhouse-69616890
|
|
||||||
file:///home/milovidov/work/Presentation/shower/index.html#cover
|
|
@ -1,204 +0,0 @@
|
|||||||
/**
|
|
||||||
* Ribbon theme for Shower HTML presentation engine
|
|
||||||
* shower-ribbon v2.0.8, https://github.com/shower/ribbon
|
|
||||||
* @copyright 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
* @license MIT
|
|
||||||
*/
|
|
||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
*,::after,::before{box-sizing:border-box}
|
|
||||||
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}
|
|
||||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}
|
|
||||||
.caption p,body{line-height:1}
|
|
||||||
p {line-height: 1}
|
|
||||||
ol,ul{list-style:none}
|
|
||||||
blockquote,q{quotes:none}
|
|
||||||
blockquote::after,blockquote::before,q::after,q::before{content:none}
|
|
||||||
table{border-collapse:collapse;border-spacing:0}
|
|
||||||
a{text-decoration:none}
|
|
||||||
@page{margin:0;size:1280px 720px}
|
|
||||||
.shower{color:#000;counter-reset:slide;font:25px/2 Yandex Sans Display Web,sans-serif;-webkit-print-color-adjust:exact;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none}
|
|
||||||
@media print{.shower{text-rendering:geometricPrecision}
|
|
||||||
}
|
|
||||||
.caption{font-size:25px;display:none;margin-top:-.2em;padding:0 1em .93em;width:100%;color:#3c3d40;text-shadow:0 1px 0 #8d8e90}
|
|
||||||
@media (min-width:1174px){.caption{font-size:50px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.caption{font-size:100px}
|
|
||||||
}
|
|
||||||
.caption h1{padding-bottom:.15em;font:1em/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.caption p{font-size:.6em}
|
|
||||||
.caption a{color:#4b86c2;text-shadow:0 -1px 0 #1f3f60}
|
|
||||||
.slide{position:relative;z-index:1;overflow:hidden;padding:20px 100px 0;width:1024px;height:640px;background:#fff;font-size:25px}
|
|
||||||
|
|
||||||
/*.slide::after{position:absolute;top:0;right:100px;padding-top:15px;width:50px;height:100px;background:url(../images/ribbon.svg) no-repeat;color:#fff;counter-increment:slide;content:counter(slide);text-align:center}*/
|
|
||||||
|
|
||||||
.slide h1{vertical-align:middle; color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide h2{margin-bottom:34px;color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide p{margin-bottom:1em}
|
|
||||||
.slide p.note{color:#979a9e}
|
|
||||||
.slide a{background:-webkit-linear-gradient(bottom,currentColor .09em,transparent .09em) repeat-x;background:linear-gradient(to top,currentColor .09em,transparent .09em) repeat-x;color:#4b86c2}
|
|
||||||
.slide b,.slide strong{font-weight:700}
|
|
||||||
.slide blockquote,.slide dfn,.slide em,.slide i{font-style:italic}
|
|
||||||
.slide code,.slide kbd,.slide mark,.slide samp{padding:.1em .3em;border-radius:.2em}
|
|
||||||
.slide code,.slide kbd,.slide samp{background:rgba(88,90,94,.1);line-height:1;font-family:PT Mono,monospace,monospace}
|
|
||||||
.slide mark{background:#fafaa2}
|
|
||||||
.slide sub,.slide sup{position:relative;line-height:0;font-size:75%}
|
|
||||||
.slide sub{bottom:-.25em}
|
|
||||||
.slide sup{top:-.5em}
|
|
||||||
.slide blockquote::before{position:absolute;margin:-.15em 0 0 -.43em;color:#ccc;line-height:1;font-size:8em;content:'\201C'}
|
|
||||||
.slide blockquote+figcaption{margin:-1em 0 1em;font-style:italic;font-weight:700}
|
|
||||||
.slide ol,.slide ul{margin-bottom:0em;counter-reset:list}
|
|
||||||
.slide ol li,.slide ul li{page-break-inside:avoid;text-indent:-2em}
|
|
||||||
.slide ol li::before,.slide ul li::before{display:inline-block;width:2em;color:#979a9e;text-align:right}
|
|
||||||
.slide ol ol,.slide ol ul,.slide ul ol,.slide ul ul{margin-bottom:0;margin-left:2em}
|
|
||||||
.slide ul>li::before{padding-right:.5em;content:'•'}
|
|
||||||
.slide ul>li:lang(ru)::before{content:'—'}
|
|
||||||
.slide ol>li::before{padding-right:.4em;counter-increment:list;content:counter(list) "."}
|
|
||||||
.slide table{margin-left:-100px;margin-bottom:1em;width:calc(100% + 100px + 100px)}
|
|
||||||
.slide table td:first-child,.slide table th:first-child{padding-left:96px}
|
|
||||||
.slide table td:last-child,.slide table th:last-child{padding-right:96px}
|
|
||||||
.slide table th{text-align:left;font-weight:700}
|
|
||||||
.slide table tr:not(:last-of-type)>*{background:-webkit-linear-gradient(bottom,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x;background:linear-gradient(to top,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x}
|
|
||||||
.slide table.striped tr:nth-child(even){background:rgba(88,90,94,.1)}
|
|
||||||
.slide table.striped tr>*{background-image:none}
|
|
||||||
.slide pre{margin-bottom:1em;counter-reset:code;white-space:normal}
|
|
||||||
.slide pre code{display:block;margin-left:-100px;padding:0 0 0 100px;width:calc(100% + 100px + 100px);border-radius:0;background:0 0;line-height:2;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}
|
|
||||||
.slide pre code:not(:only-child).mark{background:rgba(88,90,94,.1)}
|
|
||||||
.slide pre code:not(:only-child)::before{position:absolute;margin-left:-2em;color:#979a9e;counter-increment:code;content:counter(code,decimal-leading-zero) "."}
|
|
||||||
.slide pre mark{position:relative;z-index:-1;margin:0 -.3em}
|
|
||||||
.slide pre mark.important{background:#c00;color:#fff}
|
|
||||||
.slide pre .comment{color:#999}
|
|
||||||
.slide footer{position:absolute;right:0;bottom:-640px;left:0;display:none;padding:41px 100px 8px;background:#fbfbba;box-shadow:0 1px 0 #fafaa2 inset;-webkit-transition:bottom .3s;transition:bottom .3s}
|
|
||||||
.slide footer mark{background:rgba(255,255,255,.8)}
|
|
||||||
.slide:hover>footer{bottom:0}
|
|
||||||
.slide.grid{background-image:url(../images/grid.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-moz-crisp-edges;image-rendering:pixelated}
|
|
||||||
@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.slide.grid{background-image:url(../images/grid@2x.png);background-size:1024px auto}
|
|
||||||
}
|
|
||||||
.slide.black{background-color:#000}
|
|
||||||
.slide.black::after,.slide.white::after{visibility:hidden}
|
|
||||||
.slide.white{background-color:#fff}
|
|
||||||
.slide .double,.slide .triple{-webkit-column-gap:75px;-moz-column-gap:75px;column-gap:75px;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}
|
|
||||||
.slide .double{-webkit-column-count:2;-moz-column-count:2;column-count:2}
|
|
||||||
.slide .triple{-webkit-column-count:3;-moz-column-count:3;column-count:3}
|
|
||||||
.slide .shout{position:absolute;top:50%;left:0;width:100%;text-align:center;line-height:1;font-size:150px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
|
|
||||||
.slide .shout a{background:-webkit-linear-gradient(bottom,currentColor .11em,transparent .11em) repeat-x;background:linear-gradient(to top,currentColor .11em,transparent .11em) repeat-x}
|
|
||||||
.slide .cover{z-index:-1;max-width:100%;max-height:100%}
|
|
||||||
.slide .cover.w,.slide .cover.width{width:100%;max-height:none}
|
|
||||||
.slide .cover.h,.slide .cover.height{height:100%;max-width:none}
|
|
||||||
.slide .cover+figcaption{position:absolute;bottom:20px;right:10px;font-size:12px;opacity:.7;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translateX(100%) rotate(-90deg);transform:translateX(100%) rotate(-90deg)}
|
|
||||||
.slide .cover+figcaption.white{color:#fff}
|
|
||||||
.slide .cover+figcaption a{color:currentcolor}
|
|
||||||
.slide .cover,.slide .place{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
|
|
||||||
.slide .place.b.l,.slide .place.b.r,.slide .place.bottom.left,.slide .place.bottom.right,.slide .place.t.l,.slide .place.t.r,.slide .place.top.left,.slide .place.top.right{-webkit-transform:none;transform:none}
|
|
||||||
.slide .place.b,.slide .place.bottom,.slide .place.t,.slide .place.top{-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}
|
|
||||||
.slide .place.l,.slide .place.left,.slide .place.r,.slide .place.right{-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}
|
|
||||||
.slide .place.t,.slide .place.t.r,.slide .place.top,.slide .place.top.left,.slide .place.top.right{top:0}
|
|
||||||
.slide .place.r,.slide .place.right{right:0;left:auto}
|
|
||||||
.slide .place.b,.slide .place.b.l,.slide .place.b.r,.slide .place.bottom,.slide .place.bottom.left,.slide .place.bottom.right{top:auto;bottom:0}
|
|
||||||
.slide .place.l,.slide .place.left{left:0}
|
|
||||||
.progress{left:-20px;bottom:0;z-index:1;display:none;width:0;height:0;box-sizing:content-box;border:10px solid #4b86c2;border-right-color:transparent;-webkit-transition:width .2s linear;transition:width .2s linear;clip:rect(10px,1044px,20px,20px)}
|
|
||||||
.progress[style*='100%']{padding-left:10px}
|
|
||||||
.badge,.badge a,.progress{position:absolute}
|
|
||||||
.badge{font-size:10px;top:0;z-index:1;overflow:hidden;display:none;width:9em;height:9em;right:0;visibility:hidden}
|
|
||||||
@media (min-width:1174px){.badge{font-size:20px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.badge{font-size:40px}
|
|
||||||
}
|
|
||||||
.badge a{right:-50%;bottom:50%;left:-50%;visibility:visible;background:#4b86c2;color:#fff;text-align:center;line-height:2;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}
|
|
||||||
.region{display:none}
|
|
||||||
@media screen{.shower.list{padding-top:25px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#585a5e;position:absolute;clip:rect(0,auto,auto,0)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list{padding-top:50px}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list{padding-top:100px}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .caption{display:block}
|
|
||||||
.shower.list .slide{-webkit-transform-origin:0 0;transform-origin:0 0;margin:0 -768px -455px 25px;-webkit-transform:scale(.25);transform:scale(.25);border-radius:2px;box-shadow:0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list .slide{margin:0 -512px -270px 50px;-webkit-transform:scale(.5);transform:scale(.5)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list .slide{margin:0 0 100px 100px;-webkit-transform:scale(1);transform:scale(1)}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .slide:hover{box-shadow:0 0 0 20px rgba(0,0,0,.1),0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide:target{box-shadow:0 0 0 1px #376da3,0 0 0 20px #4b86c2,0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide *{pointer-events:none}
|
|
||||||
.shower.list .badge,.shower.list .slide footer{display:block}
|
|
||||||
.shower.full{position:absolute;top:50%;left:50%;overflow:hidden;margin:-320px 0 0 -512px;width:1024px;height:640px;background:#000}
|
|
||||||
.shower.full .slide{position:absolute;top:0;left:0;margin-left:-150%;visibility:hidden}
|
|
||||||
.shower.full .slide:target{margin:0;visibility:visible}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next{visibility:visible;background:0 0}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next.active{background:rgba(88,90,94,.1)}
|
|
||||||
.shower.full .slide .next{visibility:hidden}
|
|
||||||
.shower.full .slide .next.active{visibility:visible}
|
|
||||||
.shower.full .slide .shout.grow,.shower.full .slide .shout.shrink{opacity:0;-webkit-transition:.4s ease-out;transition:.4s ease-out;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}
|
|
||||||
.shower.full .slide .shout.grow{-webkit-transform:scale(.1) translateY(-50%);transform:scale(.1) translateY(-50%)}
|
|
||||||
.shower.full .slide .shout.shrink{-webkit-transform:scale(10) translateY(-50%);transform:scale(10) translateY(-50%)}
|
|
||||||
.shower.full .slide:target .shout.grow,.shower.full .slide:target .shout.shrink{opacity:1;-webkit-transform:scale(1) translateY(-50%);transform:scale(1) translateY(-50%)}
|
|
||||||
.shower.full .progress{display:block;-webkit-transform:translateZ(0);transform:translateZ(0)}
|
|
||||||
.shower.full .region{position:absolute;clip:rect(0 0 0 0);overflow:hidden;margin:-1px;padding:0;width:1px;height:1px;border:none;display:block}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,341 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en" style="background-color: #FFF;">
|
|
||||||
<head>
|
|
||||||
<title>ClickHouse meetup в Новосибирске</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="shower/themes/ribbon/styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>ClickHouse meetup в Новосибирске</h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<section class="slide" id="cover">
|
|
||||||
<h1 style="margin-top: 200px">ClickHouse meetup<br/>в Новосибирске</h1>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse: настоящее и будущее</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Что такое ClickHouse?</h2>
|
|
||||||
<p>ClickHouse - distributed analytical column-oriented DBMS</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему column-oriented?</h2>
|
|
||||||
<p>Так работают row-oriented системы:</p>
|
|
||||||
<p><img src="pictures/row_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему column-oriented?</h2>
|
|
||||||
<p>Так работают column-oriented системы:</p>
|
|
||||||
<p><img src="pictures/column_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему ClickHouse?</h2>
|
|
||||||
<p>Ничего готового не подошло.</p>
|
|
||||||
<p>Тогда мы сделали ClickHouse.</p>
|
|
||||||
<p>«Эволюция структур данных в Яндекс.Метрике»</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/yandex/blog/273305/">https://habrahabr.ru/company/yandex/blog/273305/</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Метрика 2.0</h2>
|
|
||||||
<img src="pictures/metrika2.png" style="height:70%"/>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Коротко</h2>
|
|
||||||
<ul>
|
|
||||||
<li>column-oriented</li>
|
|
||||||
<li>линейная масштабируемость</li>
|
|
||||||
<li>отказоустойчивость</li>
|
|
||||||
<li>загрузка данных в реальном времени</li>
|
|
||||||
<li>онлайн (sub-second) запросы</li>
|
|
||||||
<li>поддержка диалекта SQL + расширения<br/>(массивы, вложенные структуры данных, domain-specific функции, сэмплирование)</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Основной кластер Метрики</h2>
|
|
||||||
<ul style="font-size:30px;">
|
|
||||||
<li>>20 триллионов строк</li>
|
|
||||||
<li>460 серверов</li>
|
|
||||||
<li>скорость обработки данных до двух терабайт в секунду</li>
|
|
||||||
</ul>
|
|
||||||
<p style="font-size:60%; margin-top:2em">* Если вы хотите попробовать ClickHouse, достаточно и одного сервера.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse в Яндексе</h2>
|
|
||||||
<p>Нам удалось сделать систему сравнительно удобной.</p>
|
|
||||||
<p>С самого начала мы имели подробную документацию.</p>
|
|
||||||
<p>В течение пары лет ClickHouse распространился по другим отделам Яндекса.</p>
|
|
||||||
<p>Почта, Маркет, Директ, Вебмастер, AdFox, Инфраструктура, Бизнес аналитика...</p>
|
|
||||||
<p>Есть случаи, когда аналитики самостоятельно устанавливали ClickHouse на виртуальные машины и успешно использовали без каких-либо вопросов.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source</h2>
|
|
||||||
<p>Потом мы решили — ClickHouse слишком хорошая система, чтобы нам одним на нём сидеть.</p>
|
|
||||||
<p>Чтобы было веселее, надо подсадить на ClickHouse людей снаружи, пусть радуются. Решили сделать open-source.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source</h2>
|
|
||||||
<p>Лицензия Apache 2.0 — минимум ограничений.</p>
|
|
||||||
<p>Цель — максимальное распространение продукта.</p>
|
|
||||||
<p>Мы хотим, чтобы продуктом Яндекса пользовались по всему миру.</p>
|
|
||||||
<p>См. “Яндекс открывает ClickHouse”</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/yandex/blog/303282/">https://habrahabr.ru/company/yandex/blog/303282/</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Когда надо использовать ClickHouse</h2>
|
|
||||||
<p>Хорошо структурированные, очищенные, неизменяемые события.</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Click stream. Веб-аналитика. Рекламные сети. RTB. E-commerce.</p>
|
|
||||||
<p>Аналитика онлайн игр. Данные сенсоров и мониторингов. Телеком данные.</p>
|
|
||||||
<p>Финансовые транзакции. Биржевая аналитика.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">Когда <span style="color:red;">не надо</span> использовать ClickHouse</h2>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">OLTP</span><br/>В ClickHouse нет UPDATE и полноценных транзакций.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Key-Value</span><br/>Если нужны частые запросы на обновление по ключу, используйте другое решение.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Blob-store, document oriented</span><br/>ClickHouse предназначен для большого количества мелко-гранулированных данных.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Излишне нормализованные данные</span><br/>Лучше сделать широкую таблицу фактов.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему ClickHouse такой быстрый?</h2>
|
|
||||||
<p> </p>
|
|
||||||
<p style="font-size: 40px;">— от безысходности.</p>
|
|
||||||
<p style="font-size: 40px;">Яндекс.Метрика должна работать.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему ClickHouse такой быстрый?</h2>
|
|
||||||
<p><b>Алгоритмическая оптимизация.</b></p>
|
|
||||||
<p>MergeTree, локальность расположения данных на диске<br/>— быстрые диапазонные запросы.</p>
|
|
||||||
<p>Пример: функция uniqCombined состоит из комбинации трёх различных структур данных, подходящих под разные диапазоны кардинальностей.</p>
|
|
||||||
<p><b>Низкоуровневая оптимизация.</b></p>
|
|
||||||
<p>Пример: vectorized query execution.</p>
|
|
||||||
<p><b>Специализация и внимание к деталям.</b></p>
|
|
||||||
<p>Пример: у нас есть 17 разных алгоритмов выполнения GROUP BY. Для вашего запроса выбирается лучший.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Что нового в ClickHouse</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Команда</h2>
|
|
||||||
<p>Теперь 5 разработчиков.</p>
|
|
||||||
<p>
|
|
||||||
<img src="pictures/milovidov.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/vludv.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/ztlpn.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/proller.jpg" style="height:150px;">
|
|
||||||
<img src="pictures/stanly.jpg" style="height:150px;">
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>В предыдущих сериях</h2>
|
|
||||||
|
|
||||||
<p>— HTTP и executable источники;</p>
|
|
||||||
<p>— оптимизация мержей, вертикальный мерж;</p>
|
|
||||||
<p>— трассировка распределённых запросов;</p>
|
|
||||||
<p>— clickhouse-local;</p>
|
|
||||||
<p>— операторы BETWEEN, ||;</p>
|
|
||||||
<p>— функции UUID - text;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Новое в языке запросов</h2>
|
|
||||||
|
|
||||||
<p>— KILL QUERY;</p>
|
|
||||||
<p>— LIMIT BY;</p>
|
|
||||||
<p>— SELECT INTO OUTFILE;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Сборка</h2>
|
|
||||||
|
|
||||||
<p>— «правильная» сборка и пакеты;</p>
|
|
||||||
<p>— Таблица system.build_options;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Интерфейсы</h2>
|
|
||||||
|
|
||||||
<p>— возможность получить прогресс выполнения в HTTP заголовках;</p>
|
|
||||||
<p>— возможность пропуска ошибок в текстовых форматах;</p>
|
|
||||||
<p>— правильные коды ответа в HTTP интерфейсе;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Словари</h2>
|
|
||||||
|
|
||||||
<p>— производительность кэшируемых внешних словарей;</p>
|
|
||||||
<p>— инструментирование кэшируемых внешних словарей;</p>
|
|
||||||
<p>— HTTPS словари;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Инструментирование</h2>
|
|
||||||
|
|
||||||
<p>— информация об использовании памяти под индекс;</p>
|
|
||||||
<p>— информация о размере столбцов в несжатом виде;</p>
|
|
||||||
<p>— метрики по потреблению оперативки кэшами;</p>
|
|
||||||
<p>— метрики про мержи;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Оптимизации</h2>
|
|
||||||
|
|
||||||
<p>— оптимизация DISTINCT;</p>
|
|
||||||
<p>— производительность gzip в HTTP интерфейсе;</p>
|
|
||||||
<p>— оптимизация mark cache;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Функции</h2>
|
|
||||||
|
|
||||||
<p>— правильная логика сравнений, least, greatest;</p>
|
|
||||||
<p>— groupUniqArray для всех типов данных;</p>
|
|
||||||
<p>— decodeURLComponent;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Что-то ещё</h2>
|
|
||||||
|
|
||||||
<p>— защита от случайного DROP TABLE;</p>
|
|
||||||
<p>— use_client_time_zone; timezone в конфиге;</p>
|
|
||||||
<p>— fsync_metadata;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>Сообщество</h2>
|
|
||||||
|
|
||||||
<p>— интеграция с Grafana, Redash, Apache Zeppelin, Superset;</p>
|
|
||||||
<p>— правильные пакеты для CentOS, RHEL, GosLinux;</p>
|
|
||||||
<p>— драйвер native протокола для Go и C++;</p>
|
|
||||||
<p>— возможность передавать заголовки X-ClickHouse-*;</p>
|
|
||||||
<p>— бенчмарки NYC Taxi, Percona (Spark);</p>
|
|
||||||
<p>— бенчмарк Greenplum;</p>
|
|
||||||
<p>— англоязычный Telegram чат;</p>
|
|
||||||
<p>— встречи и доклады (Париж - февраль, Сан-Франциско - апрель);</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Spark</h2>
|
|
||||||
<p>https://www.percona.com/blog/2017/02/13/clickhouse-new-opensource-columnar-database/</p>
|
|
||||||
<img src="pictures/spark.png" style="height:60%"/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Greenplum</h2>
|
|
||||||
<p><img src="pictures/greenplum.png" style="width:50%"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>TODO (март-апрель 2017)</h2>
|
|
||||||
|
|
||||||
<p>— распределённые DDL запросы;</p>
|
|
||||||
<p>— <span style="color: green">конфиги в ZooKeeper</span>;</p>
|
|
||||||
<p>— полная поддержка NULL;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
|
|
||||||
<h2>TODO (весна-лето 2017)</h2>
|
|
||||||
|
|
||||||
<p>— работоспособность ODBC драйвера под Windows;</p>
|
|
||||||
<p>— переделать анализ запроса: правильная поддержка JOIN;</p>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Сообщество</h2>
|
|
||||||
<p>Сайт: <a href="https://clickhouse.yandex/">https://clickhouse.yandex/</a></p>
|
|
||||||
<p>Google groups: <a href="https://groups.google.com/forum/#!forum/clickhouse">https://groups.google.com/forum/#!forum/clickhouse</a></p>
|
|
||||||
<p>Рассылка: clickhouse-feedback@yandex-team.com</p>
|
|
||||||
<p>Telegram чат: <a href="https://telegram.me/clickhouse_en">https://telegram.me/clickhouse_en</a> and <a href="https://telegram.me/clickhouse_ru">https://telegram.me/clickhouse_ru</a> (уже 500 участников)</p>
|
|
||||||
<p>GitHub: <a href="https://github.com/yandex/ClickHouse/">https://github.com/yandex/ClickHouse/</a></p>
|
|
||||||
<p> </p>
|
|
||||||
<p>+ встречи. Москва, Санкт-Петербург, Новосибирск... Далее: Екатеринбург, Киев, Минск, Сан-Франциско...</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Бонус</h2>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Подключение к ClickHouse</h2>
|
|
||||||
<p style="font-size: 30px;">HTTP REST</p>
|
|
||||||
<p style="font-size: 30px;">clickhouse-client</p>
|
|
||||||
<p style="font-size: 30px;">JDBC</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Python, PHP, Go, Perl, Ruby, Node.JS, R, .NET</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Web UI: <a href="https://github.com/smi2/clickhouse-frontend">https://github.com/smi2/clickhouse-frontend</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">ClickHouse vs. typical row-oriented DBMS</h2>
|
|
||||||
<p>Itai Shirav:<br /><br />«I haven't made a rigorous comparison, but I did convert a time-series table with 9 million rows from Postgres to ClickHouse.</p>
|
|
||||||
<p>Under ClickHouse queries run about 100 times faster, and the table takes 20 times less disk space. Which is pretty amazing if you ask me».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p>Bao Dang:<br /><br />«Obviously, ClickHouse outperformed PostgreSQL at any metric».</p>
|
|
||||||
<p><a href="https://github.com/AnalyticsGo/AnalyticsGo/issues/1">https://github.com/AnalyticsGo/AnalyticsGo/issues/1</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Vertica</h2>
|
|
||||||
<p>Timur Shenkao:<br /><br />«ClickHouse is extremely fast at simple SELECTs without joins, much faster than Vertica».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. PrestoDB</h2>
|
|
||||||
<p>Ömer Osman Koçak:<br /><br />
|
|
||||||
«When we evaluated ClickHouse the results were great compared to Prestodb. Even though the columnar storage optimizations for ORC and Clickhouse is quite similar, Clickhouse uses CPU and Memory resources more efficiently (Presto also uses vectorized execution but cannot take advantage of hardware level optimizations such as SIMD instruction sets because it's written in Java so that's fair) so we also wanted to add support for Clickhouse for our open-source analytics platform Rakam (https://github.com/rakam-io/rakam)»</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Spark</h2>
|
|
||||||
<p>«Я потестировал Clickhouse, по скорости просто отлично = намного быстрее spark на одной машине (у меня получилось порядка 3x, но еще буду сравнивать). Кроме того compression получается лучше».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Google BigQuery</h2>
|
|
||||||
<p>«ClickHouse показывает сравнимую скорость на <u>таком запросе</u> за 30 дней и в 8 раз быстрее (!) на <u>таком запросе</u>. В планах есть протестировать и другие запросы, еще не добрались.<br/><br/>Скорость выполнения запросов стабильна. В Google BigQuery в период пиковых нагрузок, например в 4:00 p.m. PDT или в начале месяца, время выполнения запросов может заметно увеличиваться».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Druid</h2>
|
|
||||||
<p>«В этом году мы развернули сборку на основе Druid — Imply Analytics Platform, а также Tranquility, и уже приготовились запускать в продакшн… Но после выхода ClickHouse сразу отказались от Druid, хотя потратили два месяца на его изучение и внедрение».</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/smi2/blog/314558/">https://habrahabr.ru/company/smi2/blog/314558/</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. InfiniDB</h2>
|
|
||||||
<p>«结论:clickhouse速度更快!»</p>
|
|
||||||
<p>«In conclusion, ClickHouse is faster!»</p>
|
|
||||||
<p><a href="http://verynull.com/2016/08/22/infinidb与clickhouse对比/">http://verynull.com/2016/08/22/infinidb与clickhouse对比/</a></p>
|
|
||||||
<p><img src="pictures/infinidb_cn.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse for sensor data</h2>
|
|
||||||
<p><img src="pictures/kaspersky.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="progress"></div>
|
|
||||||
<script src="shower/shower.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 297 KiB |
Before Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 25 KiB |
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2016 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,41 +0,0 @@
|
|||||||
# Ribbon theme for Shower [![Build Status](https://travis-ci.org/shower/ribbon.svg?branch=master)](https://travis-ci.org/shower/ribbon)
|
|
||||||
|
|
||||||
![Ribbon screen shot](pictures/canvas.png)
|
|
||||||
|
|
||||||
Default theme for the [Shower](https://github.com/shower/shower/) presentation engine. Doesn’t include engine itself. [See it in action](http://shwr.me/shower/themes/ribbon/). Follow [@shower_me](https://twitter.com/shower_me) for support and updates, [file an issue](https://github.com/shower/shower/issues/new) if you have any.
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Get the Shower template where Ribbon is already included. Download the [template archive](http://shwr.me/shower.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower
|
|
||||||
|
|
||||||
If you want to install Ribbon separately you can download the [theme archive](http://shwr.me/ribbon.zip) or install the package:
|
|
||||||
|
|
||||||
npm install shower-ribbon
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
All theme’s features are demonstrated in the [index.html](index.html) file. Use it as a reference while building your presentation. See more detailed [features overview](https://github.com/shower/shower/blob/master/docs/features-en.md).
|
|
||||||
|
|
||||||
## Ratios
|
|
||||||
|
|
||||||
Ribbon theme supports two slide ratios: wide 16×10 (default) and taller 4×3. To change the slide’s ratio include one of the pre-built `screen-16x10.css` or `screen-4x3.css` files in the `<head>` of your presentation.
|
|
||||||
|
|
||||||
## PDF
|
|
||||||
|
|
||||||
Ribbon could be exported to PDF by printing it from the list mode in Chrome or Opera browsers. See [printing documentation](https://github.com/shower/shower/blob/master/docs/printing-en.md) for more options.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
If you want to adjust theme for your needs:
|
|
||||||
|
|
||||||
1. Fork this repository and clone it to your local machine.
|
|
||||||
2. Install dependencies: `npm install`.
|
|
||||||
3. Start a local server with watcher: `npm run dev` or just `gulp` if you have it installed globally.
|
|
||||||
4. Edit your files and see changes in the opened browser.
|
|
||||||
|
|
||||||
To take part in Ribbon development please read [contributing guidelines](CONTRIBUTING.md) first and [file an issue](https://github.com/shower/shower/issues/new) before sending any pull request.
|
|
||||||
|
|
||||||
---
|
|
||||||
Licensed under [MIT License](LICENSE.md).
|
|
@ -1,304 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Ribbon theme for Shower</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<link rel="stylesheet" href="styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Presentation Title</h1>
|
|
||||||
<p><a href="">Yours Truly</a>, Famous Inc.</p>
|
|
||||||
</header>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Slide Header</h2>
|
|
||||||
<p>Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch letterpress.</p>
|
|
||||||
<p>Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid four loko quinoa.</p>
|
|
||||||
<p class="note">Echo Park 8-bit sustainable umami deep v Kickstarter.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Inline Elements</h2>
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
<footer class="footer">
|
|
||||||
<p>Retro meh brunch <a href="">aesthetic</a> Cosby sweater Shoreditch. Banksy Tumblr <strong>sriracha</strong>, flexitarian pug chia master cleanse vinyl <em>wayfarers</em> fanny pack bespoke Helvetica <b>roof</b> party. Messenger bag retro cred <i>Portland</i> next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag, <mark>leggings</mark> skateboard literally<sup>1</sup> bicycle rights H<sub>2</sub>0 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical <code><paleo></code> you probably haven’t heard of.</p>
|
|
||||||
</footer>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Quotes</h2>
|
|
||||||
<blockquote>
|
|
||||||
<p>Flannel bicycle rights locavore selfies skateboard. Authentic fanny pack paleo four loko bespoke. Artisan tattooed chia XOXO ennui, lomo disrupt 8-bit art party Tumblr scenester.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figure>
|
|
||||||
<blockquote>
|
|
||||||
<p>Post-ironic fashion axe flexitarian, Tonx narwhal messenger bag Tumblr. Portland gentrify deep v kale chips literally.</p>
|
|
||||||
</blockquote>
|
|
||||||
<figcaption>Yours Truly</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Nested Lists</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Literally viral vegan, ugh drinking vinegar photo booth</li>
|
|
||||||
<li>Wes Anderson chillwave Marfa pour-over Etsy banh mi</li>
|
|
||||||
<li>Ethnic polaroid lo-fi iPhone ennui
|
|
||||||
<ul>
|
|
||||||
<li>Yr wayfarers before they sold out Kickstarter asymmetrical</li>
|
|
||||||
<li>Irony flexitarian readymade quinoa, kogi bespoke meggings narwhal</li>
|
|
||||||
<li>Skateboard Etsy twee artisan Echo Park</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li>Tonx kitsch fingerstache readymade, retro single-origin coffee</li>
|
|
||||||
</ol>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Block Lists</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Retro meh brunch aesthetic Cosby sweater Shoreditch. Banksy Tumblr sriracha, flexitarian pug chia master cleanse vinyl wayfarers fanny pack.</li>
|
|
||||||
<li>Messenger bag retro cred Portland next level. Yr stumptown Schlitz Carles deep v small batch. Hella sustainable messenger bag.</li>
|
|
||||||
<li>Leggings skateboard literally1 bicycle rights H20 mumblecore banh mi DIY VHS. Semiotics four loko street art asymmetrical. Asymmetrical paleo you probably haven’t heard of.</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Latin and Cyrillic List Bullets</h2>
|
|
||||||
<ul lang="en">
|
|
||||||
<li>Occupy locavore blog, mustache you probably haven't heard of them</li>
|
|
||||||
<li>Skateboard pork belly aesthetic hoodie selfies brunch</li>
|
|
||||||
<li>Food truck gluten-free disrupt Portland</li>
|
|
||||||
</ul>
|
|
||||||
<ul lang="ru">
|
|
||||||
<li>Helvetica narwhal drinking vinegar chillwave, post-ironic ennui</li>
|
|
||||||
<li>Cray pug paleo retro, Echo Park narwhal Wes Anderson</li>
|
|
||||||
<li>Disrupt Williamsburg fixie, shabby chic bicycle rights hashtag kogi</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Two Columns</h2>
|
|
||||||
<p class="double">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Three Columns</h2>
|
|
||||||
<p class="triple">Echo Park 8-bit sustainable umami deep v Kickstarter. DIY cliche typewriter brunch, Odd Future sriracha pickled aesthetic. Farm-to-table bespoke fingerstache, kale chips umami brunch American Apparel letterpress. Whatever authentic disrupt, you probably haven't heard of them direct trade mlkshk Etsy. Gluten-free roof party plaid American Apparel four loko quinoa. Echo Park 8-bit sustainable.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Simple Table</h2>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Striped Table</h2>
|
|
||||||
<table class="striped">
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Gentrify</th>
|
|
||||||
<th>Twee</th>
|
|
||||||
<th>Artisan</th>
|
|
||||||
<th>Banksy</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Messenger</th>
|
|
||||||
<td>Mixtape</td>
|
|
||||||
<td>Small batch</td>
|
|
||||||
<td>Bicycle rights</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Meggings</th>
|
|
||||||
<td>Freegan</td>
|
|
||||||
<td>Retro biodiesel</td>
|
|
||||||
<td>Slow-carb</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Vegan</th>
|
|
||||||
<td>Occupy</td>
|
|
||||||
<td>Normcore</td>
|
|
||||||
<td>Put a bird on it</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Next level</th>
|
|
||||||
<td>Selfies</td>
|
|
||||||
<td>Sustainable</td>
|
|
||||||
<td>Organic</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Umami</th>
|
|
||||||
<td>Asymmetrical</td>
|
|
||||||
<td>Keytar</td>
|
|
||||||
<td>Craft beer</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">Biodiesel</th>
|
|
||||||
<td>Haven’t heard</td>
|
|
||||||
<td>Skateboard</td>
|
|
||||||
<td>Farm-to-table</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Plain Code Listing</h2>
|
|
||||||
<pre><code><html lang="en">
|
|
||||||
<mark><head></mark> <span class="comment"><!--Comment--></span>
|
|
||||||
<title>Shower</title>
|
|
||||||
<meta charset="<mark class="important">UTF-8</mark>">
|
|
||||||
<link rel="stylesheet" href="screen.css">
|
|
||||||
<script src="script.js"></script>
|
|
||||||
<mark></head></mark></code></pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Numbered Code Listing</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Lines</h2>
|
|
||||||
<pre>
|
|
||||||
<code><html lang="en"></code>
|
|
||||||
<code class="mark"><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Hidden Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="next"><html lang="en"></code>
|
|
||||||
<code class="next"><mark><head></mark> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="next"> <title>Shower</title></code>
|
|
||||||
<code class="next"> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code class="next"> <script src="script.js"></script></code>
|
|
||||||
<code class="next"><mark></head></mark></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Highlighted Code Steps</h2>
|
|
||||||
<pre>
|
|
||||||
<code class="mark next"><html lang="en"></code>
|
|
||||||
<code><head> <span class="comment"><!--Comment--></span></code>
|
|
||||||
<code class="mark next"> <title>Shower</title></code>
|
|
||||||
<code> <meta charset="<mark class="important">UTF-8</mark>"></code>
|
|
||||||
<code class="mark next"> <link rel="stylesheet" href="screen.css"></code>
|
|
||||||
<code> <script src="script.js"></script></code>
|
|
||||||
<code class="mark next"></head></code>
|
|
||||||
</pre>
|
|
||||||
</section>
|
|
||||||
<section class="slide grid">
|
|
||||||
<h2>Grid Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<h2>White Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide black">
|
|
||||||
<h2>Black Slide</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout">Multiline<br>Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout"><a href="">Linked Shout</a></h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout grow">Growing Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 class="shout shrink">Shrinking Shout</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<figure>
|
|
||||||
<img class="cover" src="pictures/exact.png" alt="">
|
|
||||||
<figcaption class="white">Copyright © 2016 <a href="">Yours Truly</a>, Famous Inc.</figcaption>
|
|
||||||
</figure>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/tall.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<img class="cover" src="pictures/wide.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide white">
|
|
||||||
<img class="place top left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top" src="pictures/square.png" alt="">
|
|
||||||
<img class="place top right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place" src="pictures/square.png" alt="">
|
|
||||||
<img class="place right" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom left" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom" src="pictures/square.png" alt="">
|
|
||||||
<img class="place bottom right" src="pictures/square.png" alt="">
|
|
||||||
</section>
|
|
||||||
<section class="slide" data-timing="00:03">
|
|
||||||
<h2 class="shout">Timer</h2>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>List Navigation</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Ennui keffiyeh thundercats</li>
|
|
||||||
<li class="next">Jean shorts biodiesel</li>
|
|
||||||
<li class="next">Terry richardson, swag blog</li>
|
|
||||||
<li class="next">Locavore umami vegan helvetica</li>
|
|
||||||
<li class="next">Fingerstache kale chips</li>
|
|
||||||
</ol>
|
|
||||||
<p class="next">Before they sold out master</p>
|
|
||||||
</section>
|
|
||||||
<div class="progress"></div>
|
|
||||||
<footer class="badge">
|
|
||||||
<a href="https://github.com/shower/shower">Fork me on GitHub</a>
|
|
||||||
</footer>
|
|
||||||
<script src="../../shower.min.js"></script>
|
|
||||||
<!-- Copyright © 2016 Yours Truly, Famous Inc. -->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 96 B |
Before Width: | Height: | Size: 154 B |
Before Width: | Height: | Size: 153 B |
@ -1,2 +0,0 @@
|
|||||||
http://www.slideshare.net/AlexeyMilovidov1/clickhouse-69616890/AlexeyMilovidov1/clickhouse-69616890
|
|
||||||
file:///home/milovidov/work/Presentation/shower/index.html#cover
|
|
@ -1,204 +0,0 @@
|
|||||||
/**
|
|
||||||
* Ribbon theme for Shower HTML presentation engine
|
|
||||||
* shower-ribbon v2.0.8, https://github.com/shower/ribbon
|
|
||||||
* @copyright 2010–2016 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
* @license MIT
|
|
||||||
*/
|
|
||||||
@charset "UTF-8";
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
|
|
||||||
font-weight: 700;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Text Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Yandex Sans Display Web';
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
|
|
||||||
src: url(https://yastatic.net/adv-www/_/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
|
|
||||||
url(https://yastatic.net/adv-www/_/40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
|
|
||||||
url(https://yastatic.net/adv-www/_/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
|
|
||||||
url(https://yastatic.net/adv-www/_/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
|
|
||||||
font-weight: 300;
|
|
||||||
font-style: normal;
|
|
||||||
font-stretch: normal
|
|
||||||
}
|
|
||||||
|
|
||||||
*,::after,::before{box-sizing:border-box}
|
|
||||||
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}
|
|
||||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}
|
|
||||||
.caption p,body{line-height:1}
|
|
||||||
p {line-height: 1}
|
|
||||||
ol,ul{list-style:none}
|
|
||||||
blockquote,q{quotes:none}
|
|
||||||
blockquote::after,blockquote::before,q::after,q::before{content:none}
|
|
||||||
table{border-collapse:collapse;border-spacing:0}
|
|
||||||
a{text-decoration:none}
|
|
||||||
@page{margin:0;size:1280px 720px}
|
|
||||||
.shower{color:#000;counter-reset:slide;font:25px/2 Yandex Sans Display Web,sans-serif;-webkit-print-color-adjust:exact;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none}
|
|
||||||
@media print{.shower{text-rendering:geometricPrecision}
|
|
||||||
}
|
|
||||||
.caption{font-size:25px;display:none;margin-top:-.2em;padding:0 1em .93em;width:100%;color:#3c3d40;text-shadow:0 1px 0 #8d8e90}
|
|
||||||
@media (min-width:1174px){.caption{font-size:50px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.caption{font-size:100px}
|
|
||||||
}
|
|
||||||
.caption h1{padding-bottom:.15em;font:1em/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.caption p{font-size:.6em}
|
|
||||||
.caption a{color:#4b86c2;text-shadow:0 -1px 0 #1f3f60}
|
|
||||||
.slide{position:relative;z-index:1;overflow:hidden;padding:20px 100px 0;width:1024px;height:640px;background:#fff;font-size:25px}
|
|
||||||
|
|
||||||
/*.slide::after{position:absolute;top:0;right:100px;padding-top:15px;width:50px;height:100px;background:url(../images/ribbon.svg) no-repeat;color:#fff;counter-increment:slide;content:counter(slide);text-align:center}*/
|
|
||||||
|
|
||||||
.slide h1{vertical-align:middle; color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide h2{margin-bottom:34px;color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
|
|
||||||
.slide p{margin-bottom:1em}
|
|
||||||
.slide p.note{color:#979a9e}
|
|
||||||
.slide a{background:-webkit-linear-gradient(bottom,currentColor .09em,transparent .09em) repeat-x;background:linear-gradient(to top,currentColor .09em,transparent .09em) repeat-x;color:#4b86c2}
|
|
||||||
.slide b,.slide strong{font-weight:700}
|
|
||||||
.slide blockquote,.slide dfn,.slide em,.slide i{font-style:italic}
|
|
||||||
.slide code,.slide kbd,.slide mark,.slide samp{padding:.1em .3em;border-radius:.2em}
|
|
||||||
.slide code,.slide kbd,.slide samp{background:rgba(88,90,94,.1);line-height:1;font-family:PT Mono,monospace,monospace}
|
|
||||||
.slide mark{background:#fafaa2}
|
|
||||||
.slide sub,.slide sup{position:relative;line-height:0;font-size:75%}
|
|
||||||
.slide sub{bottom:-.25em}
|
|
||||||
.slide sup{top:-.5em}
|
|
||||||
.slide blockquote::before{position:absolute;margin:-.15em 0 0 -.43em;color:#ccc;line-height:1;font-size:8em;content:'\201C'}
|
|
||||||
.slide blockquote+figcaption{margin:-1em 0 1em;font-style:italic;font-weight:700}
|
|
||||||
.slide ol,.slide ul{margin-bottom:0em;counter-reset:list}
|
|
||||||
.slide ol li,.slide ul li{page-break-inside:avoid;text-indent:-2em}
|
|
||||||
.slide ol li::before,.slide ul li::before{display:inline-block;width:2em;color:#979a9e;text-align:right}
|
|
||||||
.slide ol ol,.slide ol ul,.slide ul ol,.slide ul ul{margin-bottom:0;margin-left:2em}
|
|
||||||
.slide ul>li::before{padding-right:.5em;content:'•'}
|
|
||||||
.slide ul>li:lang(ru)::before{content:'—'}
|
|
||||||
.slide ol>li::before{padding-right:.4em;counter-increment:list;content:counter(list) "."}
|
|
||||||
.slide table{margin-left:-100px;margin-bottom:1em;width:calc(100% + 100px + 100px)}
|
|
||||||
.slide table td:first-child,.slide table th:first-child{padding-left:96px}
|
|
||||||
.slide table td:last-child,.slide table th:last-child{padding-right:96px}
|
|
||||||
.slide table th{text-align:left;font-weight:700}
|
|
||||||
.slide table tr:not(:last-of-type)>*{background:-webkit-linear-gradient(bottom,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x;background:linear-gradient(to top,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x}
|
|
||||||
.slide table.striped tr:nth-child(even){background:rgba(88,90,94,.1)}
|
|
||||||
.slide table.striped tr>*{background-image:none}
|
|
||||||
.slide pre{margin-bottom:1em;counter-reset:code;white-space:normal}
|
|
||||||
.slide pre code{display:block;margin-left:-100px;padding:0 0 0 100px;width:calc(100% + 100px + 100px);border-radius:0;background:0 0;line-height:2;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}
|
|
||||||
.slide pre code:not(:only-child).mark{background:rgba(88,90,94,.1)}
|
|
||||||
.slide pre code:not(:only-child)::before{position:absolute;margin-left:-2em;color:#979a9e;counter-increment:code;content:counter(code,decimal-leading-zero) "."}
|
|
||||||
.slide pre mark{position:relative;z-index:-1;margin:0 -.3em}
|
|
||||||
.slide pre mark.important{background:#c00;color:#fff}
|
|
||||||
.slide pre .comment{color:#999}
|
|
||||||
.slide footer{position:absolute;right:0;bottom:-640px;left:0;display:none;padding:41px 100px 8px;background:#fbfbba;box-shadow:0 1px 0 #fafaa2 inset;-webkit-transition:bottom .3s;transition:bottom .3s}
|
|
||||||
.slide footer mark{background:rgba(255,255,255,.8)}
|
|
||||||
.slide:hover>footer{bottom:0}
|
|
||||||
.slide.grid{background-image:url(../images/grid.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-moz-crisp-edges;image-rendering:pixelated}
|
|
||||||
@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.slide.grid{background-image:url(../images/grid@2x.png);background-size:1024px auto}
|
|
||||||
}
|
|
||||||
.slide.black{background-color:#000}
|
|
||||||
.slide.black::after,.slide.white::after{visibility:hidden}
|
|
||||||
.slide.white{background-color:#fff}
|
|
||||||
.slide .double,.slide .triple{-webkit-column-gap:75px;-moz-column-gap:75px;column-gap:75px;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}
|
|
||||||
.slide .double{-webkit-column-count:2;-moz-column-count:2;column-count:2}
|
|
||||||
.slide .triple{-webkit-column-count:3;-moz-column-count:3;column-count:3}
|
|
||||||
.slide .shout{position:absolute;top:50%;left:0;width:100%;text-align:center;line-height:1;font-size:150px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
|
|
||||||
.slide .shout a{background:-webkit-linear-gradient(bottom,currentColor .11em,transparent .11em) repeat-x;background:linear-gradient(to top,currentColor .11em,transparent .11em) repeat-x}
|
|
||||||
.slide .cover{z-index:-1;max-width:100%;max-height:100%}
|
|
||||||
.slide .cover.w,.slide .cover.width{width:100%;max-height:none}
|
|
||||||
.slide .cover.h,.slide .cover.height{height:100%;max-width:none}
|
|
||||||
.slide .cover+figcaption{position:absolute;bottom:20px;right:10px;font-size:12px;opacity:.7;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translateX(100%) rotate(-90deg);transform:translateX(100%) rotate(-90deg)}
|
|
||||||
.slide .cover+figcaption.white{color:#fff}
|
|
||||||
.slide .cover+figcaption a{color:currentcolor}
|
|
||||||
.slide .cover,.slide .place{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
|
|
||||||
.slide .place.b.l,.slide .place.b.r,.slide .place.bottom.left,.slide .place.bottom.right,.slide .place.t.l,.slide .place.t.r,.slide .place.top.left,.slide .place.top.right{-webkit-transform:none;transform:none}
|
|
||||||
.slide .place.b,.slide .place.bottom,.slide .place.t,.slide .place.top{-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}
|
|
||||||
.slide .place.l,.slide .place.left,.slide .place.r,.slide .place.right{-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}
|
|
||||||
.slide .place.t,.slide .place.t.r,.slide .place.top,.slide .place.top.left,.slide .place.top.right{top:0}
|
|
||||||
.slide .place.r,.slide .place.right{right:0;left:auto}
|
|
||||||
.slide .place.b,.slide .place.b.l,.slide .place.b.r,.slide .place.bottom,.slide .place.bottom.left,.slide .place.bottom.right{top:auto;bottom:0}
|
|
||||||
.slide .place.l,.slide .place.left{left:0}
|
|
||||||
.progress{left:-20px;bottom:0;z-index:1;display:none;width:0;height:0;box-sizing:content-box;border:10px solid #4b86c2;border-right-color:transparent;-webkit-transition:width .2s linear;transition:width .2s linear;clip:rect(10px,1044px,20px,20px)}
|
|
||||||
.progress[style*='100%']{padding-left:10px}
|
|
||||||
.badge,.badge a,.progress{position:absolute}
|
|
||||||
.badge{font-size:10px;top:0;z-index:1;overflow:hidden;display:none;width:9em;height:9em;right:0;visibility:hidden}
|
|
||||||
@media (min-width:1174px){.badge{font-size:20px}
|
|
||||||
}
|
|
||||||
@media (min-width:2348px){.badge{font-size:40px}
|
|
||||||
}
|
|
||||||
.badge a{right:-50%;bottom:50%;left:-50%;visibility:visible;background:#4b86c2;color:#fff;text-align:center;line-height:2;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}
|
|
||||||
.region{display:none}
|
|
||||||
@media screen{.shower.list{padding-top:25px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#585a5e;position:absolute;clip:rect(0,auto,auto,0)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list{padding-top:50px}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list{padding-top:100px}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .caption{display:block}
|
|
||||||
.shower.list .slide{-webkit-transform-origin:0 0;transform-origin:0 0;margin:0 -768px -455px 25px;-webkit-transform:scale(.25);transform:scale(.25);border-radius:2px;box-shadow:0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:1174px){.shower.list .slide{margin:0 -512px -270px 50px;-webkit-transform:scale(.5);transform:scale(.5)}
|
|
||||||
}
|
|
||||||
@media screen and (min-width:2348px){.shower.list .slide{margin:0 0 100px 100px;-webkit-transform:scale(1);transform:scale(1)}
|
|
||||||
}
|
|
||||||
@media screen{.shower.list .slide:hover{box-shadow:0 0 0 20px rgba(0,0,0,.1),0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide:target{box-shadow:0 0 0 1px #376da3,0 0 0 20px #4b86c2,0 20px 50px rgba(0,0,0,.3)}
|
|
||||||
.shower.list .slide *{pointer-events:none}
|
|
||||||
.shower.list .badge,.shower.list .slide footer{display:block}
|
|
||||||
.shower.full{position:absolute;top:50%;left:50%;overflow:hidden;margin:-320px 0 0 -512px;width:1024px;height:640px;background:#000}
|
|
||||||
.shower.full .slide{position:absolute;top:0;left:0;margin-left:-150%;visibility:hidden}
|
|
||||||
.shower.full .slide:target{margin:0;visibility:visible}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next{visibility:visible;background:0 0}
|
|
||||||
.shower.full .slide pre code:not(:only-child).mark.next.active{background:rgba(88,90,94,.1)}
|
|
||||||
.shower.full .slide .next{visibility:hidden}
|
|
||||||
.shower.full .slide .next.active{visibility:visible}
|
|
||||||
.shower.full .slide .shout.grow,.shower.full .slide .shout.shrink{opacity:0;-webkit-transition:.4s ease-out;transition:.4s ease-out;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}
|
|
||||||
.shower.full .slide .shout.grow{-webkit-transform:scale(.1) translateY(-50%);transform:scale(.1) translateY(-50%)}
|
|
||||||
.shower.full .slide .shout.shrink{-webkit-transform:scale(10) translateY(-50%);transform:scale(10) translateY(-50%)}
|
|
||||||
.shower.full .slide:target .shout.grow,.shower.full .slide:target .shout.shrink{opacity:1;-webkit-transform:scale(1) translateY(-50%);transform:scale(1) translateY(-50%)}
|
|
||||||
.shower.full .progress{display:block;-webkit-transform:translateZ(0);transform:translateZ(0)}
|
|
||||||
.shower.full .region{position:absolute;clip:rect(0 0 0 0);overflow:hidden;margin:-1px;padding:0;width:1px;height:1px;border:none;display:block}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
# The MIT License
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Vadim Makeev, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Лицензия MIT
|
|
||||||
|
|
||||||
Copyright © 2010–2015 Вадим Макеев, http://pepelsbey.net/
|
|
||||||
|
|
||||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
|
|
||||||
|
|
||||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
|
|
||||||
|
|
||||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
|
@ -1,220 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Немного про ClickHouse</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="shower/themes/ribbon/styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Немного про ClickHouse</h1>
|
|
||||||
</header>
|
|
||||||
<section class="slide" id="cover">
|
|
||||||
<h1 style="margin-top: 200px">Немного про ClickHouse</h1>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Обо мне</h2>
|
|
||||||
<p>Алексей, разработчик ClickHouse.</p>
|
|
||||||
<p>С 2008 занимался движком обработки данных в Яндекс.Метрике.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>История</h2>
|
|
||||||
<p>Яндекс.Метрика — сервис веб-аналитики.</p>
|
|
||||||
<p>В России первый, в мире — второй.</p>
|
|
||||||
<p><img src="pictures/metrika_market_share.png"/></p>
|
|
||||||
<p>Ежедневно приходит ~25 млрд. событий.</p>
|
|
||||||
<p>Надо показывать отчёты в реальном времени.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Старая Метрика (2008–2014)</h2>
|
|
||||||
<p>Всё отлично работало. Пользователь мог получить примерно 50 разных отчётов.</p>
|
|
||||||
<p>Но есть проблема. Нам хочется большего. Чтобы каждый отчёт был сколь угодно кастомизируемым.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Конструктор отчётов</h2>
|
|
||||||
<p>Быстро сделали прототип и на его основе реализовали "Конструктор отчётов".</p>
|
|
||||||
<p>Это 2010 год.</p>
|
|
||||||
<p>Стало понятно, куда двигаться дальше. </p>
|
|
||||||
<p>Нам нужна хорошая column-oriented DBMS.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему column-oriented?</h2>
|
|
||||||
<p>Так работают row-oriented системы:</p>
|
|
||||||
<p><img src="pictures/row_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему column-oriented?</h2>
|
|
||||||
<p>Так работают column-oriented системы:</p>
|
|
||||||
<p><img src="pictures/column_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему ClickHouse?</h2>
|
|
||||||
<p>Ничего готового не подошло.</p>
|
|
||||||
<p>Тогда мы сделали ClickHouse.</p>
|
|
||||||
<p>«Эволюция структур данных в Яндекс.Метрике»</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/yandex/blog/273305/">https://habrahabr.ru/company/yandex/blog/273305/</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Метрика 2.0</h2>
|
|
||||||
<img src="pictures/metrika2.png" style="height:70%"/>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Коротко</h2>
|
|
||||||
<ul>
|
|
||||||
<li>column-oriented</li>
|
|
||||||
<li>линейная масштабируемость</li>
|
|
||||||
<li>отказоустойчивость</li>
|
|
||||||
<li>загрузка данных в реальном времени</li>
|
|
||||||
<li>онлайн (sub-second) запросы</li>
|
|
||||||
<li>поддержка диалекта SQL + расширения<br/>(массивы, вложенные структуры данных, domain-specific функции, сэмплирование)</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Основной кластер Метрики</h2>
|
|
||||||
<ul style="font-size:30px;">
|
|
||||||
<li>18.3 триллионов строк</li>
|
|
||||||
<li>426 серверов</li>
|
|
||||||
<li>скорость обработки данных до двух терабайт в секунду</li>
|
|
||||||
</ul>
|
|
||||||
<p style="font-size:60%; margin-top:2em">* Если вы хотите попробовать ClickHouse, достаточно и одного сервера.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse в Яндексе</h2>
|
|
||||||
<p>Нам удалось сделать систему сравнительно удобной.</p>
|
|
||||||
<p>С самого начала мы имели подробную документацию.</p>
|
|
||||||
<p>В течение пары лет ClickHouse распространился по другим отделам Яндекса.</p>
|
|
||||||
<p>Почта, Маркет, Директ, Вебмастер, AdFox, Инфраструктура, Бизнес аналитика...</p>
|
|
||||||
<p>Есть случаи, когда аналитики самостоятельно устанавливали ClickHouse на виртуальные машины и успешно использовали без каких-либо вопросов.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source</h2>
|
|
||||||
<p>Потом мы решили — ClickHouse слишком хорошая система, чтобы нам одним на нём сидеть.</p>
|
|
||||||
<p>Чтобы было веселее, надо подсадить на ClickHouse людей снаружи, пусть радуются. Решили сделать open-source.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source</h2>
|
|
||||||
<p>Лицензия Apache 2.0 — минимум ограничений.</p>
|
|
||||||
<p>Цель — максимальное распространение продукта.</p>
|
|
||||||
<p>Мы хотим, чтобы продуктом Яндекса пользовались по всему миру.</p>
|
|
||||||
<p>См. “Яндекс открывает ClickHouse”</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/yandex/blog/303282/">https://habrahabr.ru/company/yandex/blog/303282/</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Когда надо использовать ClickHouse</h2>
|
|
||||||
<p>Хорошо структурированные, очищенные, неизменяемые события.</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Click stream. Веб-аналитика. Рекламные сети. RTB. E-commerce.</p>
|
|
||||||
<p>Аналитика онлайн игр. Данные сенсоров и мониторингов. Телеком данные.</p>
|
|
||||||
<p>Финансовые транзакции. Биржевая аналитика.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">Когда <span style="color:red;">не надо</span> использовать ClickHouse</h2>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">OLTP</span><br/>В ClickHouse нет UPDATE и полноценных транзакций.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Key-Value</span><br/>Если нужны частые запросы на обновление по ключу, используйте другое решение.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Blob-store, document oriented</span><br/>ClickHouse предназначен для большого количества мелко-гранулированных данных.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Излишне нормализованные данные</span><br/>Лучше сделать широкую таблицу фактов.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему ClickHouse такой быстрый?</h2>
|
|
||||||
<p> </p>
|
|
||||||
<p style="font-size: 40px;">— от безысходности.</p>
|
|
||||||
<p style="font-size: 40px;">Яндекс.Метрика должна работать.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Почему ClickHouse такой быстрый?</h2>
|
|
||||||
<p><b>Алгоритмическая оптимизация.</b></p>
|
|
||||||
<p>MergeTree, локальность расположения данных на диске<br/>— быстрые диапазонные запросы.</p>
|
|
||||||
<p>Пример: функция uniqCombined состоит из комбинации трёх различных структур данных, подходящих под разные диапазоны кардинальностей.</p>
|
|
||||||
<p><b>Низкоуровневая оптимизация.</b></p>
|
|
||||||
<p>Пример: vectorized query execution.</p>
|
|
||||||
<p><b>Специализация и внимание к деталям.</b></p>
|
|
||||||
<p>Пример: у нас есть 17 разных алгоритмов выполнения GROUP BY. Для вашего запроса выбирается лучший.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">ClickHouse vs. typical row-oriented DBMS</h2>
|
|
||||||
<p>Itai Shirav:<br /><br />«I haven't made a rigorous comparison, but I did convert a time-series table with 9 million rows from Postgres to ClickHouse.</p>
|
|
||||||
<p>Under ClickHouse queries run about 100 times faster, and the table takes 20 times less disk space. Which is pretty amazing if you ask me».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p>Bao Dang:<br /><br />«Obviously, ClickHouse outperformed PostgreSQL at any metric».</p>
|
|
||||||
<p><a href="https://github.com/AnalyticsGo/AnalyticsGo/issues/1">https://github.com/AnalyticsGo/AnalyticsGo/issues/1</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Vertica</h2>
|
|
||||||
<p>Timur Shenkao:<br /><br />«ClickHouse is extremely fast at simple SELECTs without joins, much faster than Vertica».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. PrestoDB</h2>
|
|
||||||
<p>Ömer Osman Koçak:<br /><br />
|
|
||||||
«When we evaluated ClickHouse the results were great compared to Prestodb. Even though the columnar storage optimizations for ORC and Clickhouse is quite similar, Clickhouse uses CPU and Memory resources more efficiently (Presto also uses vectorized execution but cannot take advantage of hardware level optimizations such as SIMD instruction sets because it's written in Java so that's fair) so we also wanted to add support for Clickhouse for our open-source analytics platform Rakam (https://github.com/rakam-io/rakam)»</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Spark</h2>
|
|
||||||
<p>«Я потестировал Clickhouse, по скорости просто отлично = намного быстрее spark на одной машине (у меня получилось порядка 3x, но еще буду сравнивать). Кроме того compression получается лучше».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Google BigQuery</h2>
|
|
||||||
<p>«ClickHouse показывает сравнимую скорость на <u>таком запросе</u> за 30 дней и в 8 раз быстрее (!) на <u>таком запросе</u>. В планах есть протестировать и другие запросы, еще не добрались.<br/><br/>Скорость выполнения запросов стабильна. В Google BigQuery в период пиковых нагрузок, например в 4:00 p.m. PDT или в начале месяца, время выполнения запросов может заметно увеличиваться».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Druid</h2>
|
|
||||||
<p>«В этом году мы развернули сборку на основе Druid — Imply Analytics Platform, а также Tranquility, и уже приготовились запускать в продакшн… Но после выхода ClickHouse сразу отказались от Druid, хотя потратили два месяца на его изучение и внедрение».</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/smi2/blog/314558/">https://habrahabr.ru/company/smi2/blog/314558/</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. InfiniDB</h2>
|
|
||||||
<p>«结论:clickhouse速度更快!»</p>
|
|
||||||
<p>«In conclusion, ClickHouse is faster!»</p>
|
|
||||||
<p><a href="http://verynull.com/2016/08/22/infinidb与clickhouse对比/">http://verynull.com/2016/08/22/infinidb与clickhouse对比/</a></p>
|
|
||||||
<p><img src="pictures/infinidb_cn.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse for sensor data</h2>
|
|
||||||
<p><img src="pictures/kaspersky.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Greenplum</h2>
|
|
||||||
<p><img src="pictures/greenplum.png" style="width:50%"/></p>
|
|
||||||
<p>На самом деле всё сложнее.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Подключение к ClickHouse</h2>
|
|
||||||
<p style="font-size: 30px;">HTTP REST</p>
|
|
||||||
<p style="font-size: 30px;">clickhouse-client</p>
|
|
||||||
<p style="font-size: 30px;">JDBC</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Python, PHP, Go, Perl, Ruby, Node.JS, R, .NET</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Web UI: <a href="https://github.com/smi2/clickhouse-frontend">https://github.com/smi2/clickhouse-frontend</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Сообщество</h2>
|
|
||||||
<p>Официальный сайт: <a href="https://clickhouse.yandex/">https://clickhouse.yandex/</a></p>
|
|
||||||
<p>Google группа: <a href="https://groups.google.com/forum/#!forum/clickhouse">https://groups.google.com/forum/#!forum/clickhouse</a></p>
|
|
||||||
<p>Рассылка: clickhouse-feedback@yandex-team.com</p>
|
|
||||||
<p>Чат в Telegram: <a href="https://telegram.me/clickhouse_ru">https://telegram.me/clickhouse_ru</a></p>
|
|
||||||
<p>GitHub: <a href="https://github.com/yandex/ClickHouse/">https://github.com/yandex/ClickHouse/</a></p>
|
|
||||||
<p> </p>
|
|
||||||
<p>+ митапы. Следите за анонсами.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p style="font-size: 40px;">Как запустить ClickHouse своими силами<br/> и выиграть джекпот:</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/smi2/blog/314558/">https://habrahabr.ru/company/smi2/blog/314558/</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p style="font-size: 40px;">Начните использовать ClickHouse сегодня!</p>
|
|
||||||
<p style="font-size: 40px;">Спасибо. Задавайте вопросы.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="progress"></div>
|
|
||||||
<script src="shower/shower.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,223 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Briefly about ClickHouse</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="shower/themes/ribbon/styles/screen-16x10.css">
|
|
||||||
</head>
|
|
||||||
<body class="shower list">
|
|
||||||
<header class="caption">
|
|
||||||
<h1>Briefly about ClickHouse</h1>
|
|
||||||
</header>
|
|
||||||
<section class="slide" id="cover">
|
|
||||||
<h1 style="margin-top: 200px">Briefly about ClickHouse</h1>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>About me</h2>
|
|
||||||
<p>Alexey, developer of ClickHouse.</p>
|
|
||||||
<p>I work on data processing engine of Yandex.Metrica since 2008.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>The history</h2>
|
|
||||||
<p>Yandex.Metrica (https://metrica.yandex.com/) is a service for web analytics.</p>
|
|
||||||
<p>Largest in Russia, second largest in the world (just after Google Analytics).</p>
|
|
||||||
<p><img src="pictures/metrika_market_share.png"/></p>
|
|
||||||
<p>We are processing about ~25 billions of events (page views, conversions, etc).</p>
|
|
||||||
<p>We must generate and show reports in realtime.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>The old Metrica (RIP 2008–2014)</h2>
|
|
||||||
<p>Everything was working fine. User could show about 50 different reports.</p>
|
|
||||||
<p>But there was a problem. We want more than just 50 pre-defined reports. We need to make every report infinitely customizable. The user must be able to slice and dice, and drill down every report from summary up to show single visitors.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>The report builder</h2>
|
|
||||||
<p>We had quickly made a prototype of so-called "report builder".</p>
|
|
||||||
<p>This was 2010 year. It was just simple specialized column-oriented data structure.</p>
|
|
||||||
<p>It worked fine and we got understanding, what the right direction to go.</p>
|
|
||||||
<p>We need good column-oriented DBMS.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why column-oriented?</h2>
|
|
||||||
<p>This is how "traditional" row-oriented databases work:</p>
|
|
||||||
<p><img src="pictures/row_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why column-oriented?</h2>
|
|
||||||
<p>And this is how column-oriented databases work:</p>
|
|
||||||
<p><img src="pictures/column_oriented.gif"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why ClickHouse?</h2>
|
|
||||||
<p>In 2011 there was nothing suitable in the marked. In fact there is nothing comparable even now.</p>
|
|
||||||
<p>Then we developed ClickHouse.</p>
|
|
||||||
<p>See nice article «Evolution of data structures in Yandex.Metrica»</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/yandex/blog/273305/">https://habrahabr.ru/company/yandex/blog/273305/</a></p>
|
|
||||||
<p>The article is in russian. Use machine translation. Also there is third-party translation to chinese, baidu for it.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>The Metrica 2.0</h2>
|
|
||||||
<img src="pictures/metrika2.png" style="height:70%"/>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Briefly</h2>
|
|
||||||
<ul>
|
|
||||||
<li>column-oriented</li>
|
|
||||||
<li>linearly scalable</li>
|
|
||||||
<li>fault-tolerant</li>
|
|
||||||
<li>data ingestion in realtime</li>
|
|
||||||
<li>realtime (sub-second) queries</li>
|
|
||||||
<li>support of SQL dialect + extensions<br/>(arrays, nested data types, domain-specific functions, approximate query execution)</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>The main cluster of Yandex.Metrica</h2>
|
|
||||||
<ul style="font-size:30px;">
|
|
||||||
<li>18.3 trillions of rows (as of Nov 2016)</li>
|
|
||||||
<li>426 servers</li>
|
|
||||||
<li>total throughput of query processing is up to two terabytes per second</li>
|
|
||||||
</ul>
|
|
||||||
<p style="font-size:60%; margin-top:2em">* If you want to try ClickHouse, one server or VM is enough.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse in Yandex</h2>
|
|
||||||
<p>Surprisingly, ClickHouse appears to be rather convenient and handy for usage.</p>
|
|
||||||
<p>We have descriptive documentation from the beginning.</p>
|
|
||||||
<p>In about two years, many other departments in Yandex had started to use ClickHouse in production.</p>
|
|
||||||
<p>Yandex.Mail, Comparison shopping, Ads, Webmaster tools, Infrastructure monitoring, Business analytics, etc...</p>
|
|
||||||
<p>There was even cases, when single analysts install ClickHouse on their VMs and started to use it without any questions.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source</h2>
|
|
||||||
<p>Then we decided — ClickHouse is just too good to be used solely by Yandex.</p>
|
|
||||||
<p>To just have more fun, we need to make more companies and people around the world using ClickHouse, to let them be happy. We decided to be open-source.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Open-source</h2>
|
|
||||||
<p>Apache 2.0 licence — very unrestrictive.</p>
|
|
||||||
<p>The goal — maximum widespread of ClickHouse.</p>
|
|
||||||
<p>We want for product by Yandex to be used everywhere.</p>
|
|
||||||
<p>See “Yandex open-sourced ClickHouse”</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/yandex/blog/303282/">https://habrahabr.ru/company/yandex/blog/303282/</a></p>
|
|
||||||
<p>Article is also in russian, but you may just check corresponding Hacker's news thread</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>When to use ClickHouse</h2>
|
|
||||||
<p>For well structured, clean, immutable events.</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Click stream. Web analytics. Adv. networks. RTB. E-commerce.</p>
|
|
||||||
<p>Analytics for online games. Sensor and monitoring data. Telecom data.</p>
|
|
||||||
<p>Stock exchanges. Financial transactions.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">When <span style="color:red;">not</span> to use ClickHouse</h2>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">OLTP</span><br/>ClickHouse doesn't have UPDATE statement and full-featured transactions.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Key-Value</span><br/>If you want high load of small single-row queries, please use another system.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Blob-store, document oriented</span><br/>ClickHouse is intended for vast amount of fine-grained data.</p>
|
|
||||||
<p><span style="font-size: 30px;color: #888;">Over-normalized data</span><br/>Better to make up single wide fact table with pre-joined dimensions.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why ClickHouse is so fast?</h2>
|
|
||||||
<p> </p>
|
|
||||||
<p style="font-size: 40px;">— we just cannot make it slower.</p>
|
|
||||||
<p style="font-size: 40px;">Yandex.Metrica must work.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Why ClickHouse is so fast?</h2>
|
|
||||||
<p><b>Algorithmic optimizations.</b></p>
|
|
||||||
<p>MergeTree, locality of data on disk<br/>— fast range queries.</p>
|
|
||||||
<p>Example: uniqCombined function is a combination of three different data structures, used for different ranges of cardinalities.</p>
|
|
||||||
<p><b>Low-level optimizations.</b></p>
|
|
||||||
<p>Example: vectorized query execution.</p>
|
|
||||||
<p><b>Specialization and attention to detail.</b></p>
|
|
||||||
<p>Example: we have 17 different algorithms for GROUP BY. Best one is selected for your query.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2 style="font-size: 40px;">ClickHouse vs. typical row-oriented DBMS</h2>
|
|
||||||
<p>Itai Shirav:<br /><br />«I haven't made a rigorous comparison, but I did convert a time-series table with 9 million rows from Postgres to ClickHouse.</p>
|
|
||||||
<p>Under ClickHouse queries run about 100 times faster, and the table takes 20 times less disk space. Which is pretty amazing if you ask me».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p>Bao Dang:<br /><br />«Obviously, ClickHouse outperformed PostgreSQL at any metric».</p>
|
|
||||||
<p><a href="https://github.com/AnalyticsGo/AnalyticsGo/issues/1">https://github.com/AnalyticsGo/AnalyticsGo/issues/1</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Vertica</h2>
|
|
||||||
<p>Timur Shenkao:<br /><br />«ClickHouse is extremely fast at simple SELECTs without joins, much faster than Vertica».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. PrestoDB</h2>
|
|
||||||
<p>Ömer Osman Koçak:<br /><br />
|
|
||||||
«When we evaluated ClickHouse the results were great compared to Prestodb. Even though the columnar storage optimizations for ORC and Clickhouse is quite similar, Clickhouse uses CPU and Memory resources more efficiently (Presto also uses vectorized execution but cannot take advantage of hardware level optimizations such as SIMD instruction sets because it's written in Java so that's fair) so we also wanted to add support for Clickhouse for our open-source analytics platform Rakam (https://github.com/rakam-io/rakam)»</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Spark</h2>
|
|
||||||
<p>«Я потестировал Clickhouse, по скорости просто отлично = намного быстрее spark на одной машине (у меня получилось порядка 3x, но еще буду сравнивать). Кроме того compression получается лучше».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Google BigQuery</h2>
|
|
||||||
<p>«ClickHouse показывает сравнимую скорость на <u>таком запросе</u> за 30 дней и в 8 раз быстрее (!) на <u>таком запросе</u>. В планах есть протестировать и другие запросы, еще не добрались.<br/><br/>Скорость выполнения запросов стабильна. В Google BigQuery в период пиковых нагрузок, например в 4:00 p.m. PDT или в начале месяца, время выполнения запросов может заметно увеличиваться».</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Druid</h2>
|
|
||||||
<p>«В этом году мы развернули сборку на основе Druid — Imply Analytics Platform, а также Tranquility, и уже приготовились запускать в продакшн… Но после выхода ClickHouse сразу отказались от Druid, хотя потратили два месяца на его изучение и внедрение».</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/smi2/blog/314558/">https://habrahabr.ru/company/smi2/blog/314558/</a></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. InfiniDB</h2>
|
|
||||||
<p>«结论:clickhouse速度更快!»</p>
|
|
||||||
<p>«In conclusion, ClickHouse is faster!»</p>
|
|
||||||
<p><a href="http://verynull.com/2016/08/22/infinidb与clickhouse对比/">http://verynull.com/2016/08/22/infinidb与clickhouse对比/</a></p>
|
|
||||||
<p><img src="pictures/infinidb_cn.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse for sensor data</h2>
|
|
||||||
<p><img src="pictures/kaspersky.png" style="width:100%"/></p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>ClickHouse vs. Greenplum</h2>
|
|
||||||
<p><img src="pictures/greenplum.png" style="width:50%"/></p>
|
|
||||||
<p>In fact, things are not so simple, there are many details.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2>How to connect to ClickHouse</h2>
|
|
||||||
<p style="font-size: 30px;">HTTP REST</p>
|
|
||||||
<p style="font-size: 30px;">clickhouse-client</p>
|
|
||||||
<p style="font-size: 30px;">JDBC</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Python, PHP, Go, Perl, Ruby, Node.JS, R, .NET</p>
|
|
||||||
<p> </p>
|
|
||||||
<p>Web UI: <a href="https://github.com/smi2/clickhouse-frontend">https://github.com/smi2/clickhouse-frontend</a></p>
|
|
||||||
<p>Redash, Zeppelin, Grafana, PowerBI - somewhat works</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2>Community</h2>
|
|
||||||
<p>Web site: <a href="https://clickhouse.yandex/">https://clickhouse.yandex/</a></p>
|
|
||||||
<p>Google groups: <a href="https://groups.google.com/forum/#!forum/clickhouse">https://groups.google.com/forum/#!forum/clickhouse</a></p>
|
|
||||||
<p>Maillist: clickhouse-feedback@yandex-team.com</p>
|
|
||||||
<p>Telegram chat: <a href="https://telegram.me/clickhouse_en">https://telegram.me/clickhouse_en</a> and <a href="https://telegram.me/clickhouse_ru">https://telegram.me/clickhouse_ru</a> (now 308 members)</p>
|
|
||||||
<p>GitHub: <a href="https://github.com/yandex/ClickHouse/">https://github.com/yandex/ClickHouse/</a></p>
|
|
||||||
<p> </p>
|
|
||||||
<p>+ meetups. Moscow, Saint-Petersburg... International meetups (Berlin, Paris) will be announced this year.</p>
|
|
||||||
</section>
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p style="font-size: 40px;">How to start using ClickHouse and win jackpot:</p>
|
|
||||||
<p><a href="https://habrahabr.ru/company/smi2/blog/314558/">https://habrahabr.ru/company/smi2/blog/314558/</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="slide">
|
|
||||||
<h2> </h2>
|
|
||||||
<p style="font-size: 40px;">More than 100 companies are already using ClickHouse in production. What about you? Start to use ClickHouse today!</p>
|
|
||||||
<p style="font-size: 40px;">Thank you. Questions.</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<div class="progress"></div>
|
|
||||||
<script src="shower/shower.min.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 297 KiB |
Before Width: | Height: | Size: 116 KiB |