├── README.md
├── scripts
└── main.js
├── styles
└── main.css
└── index.html
/README.md:
--------------------------------------------------------------------------------
1 | # pwl-kyiv
2 | Papers We Love @ Kyiv
3 |
--------------------------------------------------------------------------------
/scripts/main.js:
--------------------------------------------------------------------------------
1 | (function(global, root) {
2 | 'use strict';
3 |
4 | const PIXEL_RATIO = global.devicePixelRatio;
5 |
6 | const W_WIDTH = global.innerWidth;
7 | const W_HEIGHT = global.innerHeight;
8 |
9 | const WIDTH = W_WIDTH * PIXEL_RATIO;
10 | const HEIGHT = W_HEIGHT * PIXEL_RATIO;
11 |
12 | const BLACK = 0x000000;
13 |
14 | const NUM_OF_DOTS = Math.floor(W_WIDTH / (1280 / 4));
15 |
16 | const MIN_R = 0.5;
17 | const MAX_R = 2.5;
18 |
19 | var canvas = root.querySelector('.background');
20 |
21 | canvas.width = WIDTH;
22 | canvas.height = HEIGHT;
23 | canvas.style.transform = `scale(${1 / PIXEL_RATIO})`;
24 |
25 | var ctx = canvas.getContext('2d');
26 |
27 | Array.apply(null, Array(NUM_OF_DOTS))
28 | .forEach((r) => {
29 | drawDot(
30 | getRandomInt(0, WIDTH),
31 | getRandomInt(0, HEIGHT),
32 | getRandomInt(MIN_R, MAX_R),
33 | BLACK,
34 | ctx);
35 | });
36 |
37 | if (W_WIDTH >= 800) {
38 | drawDirtStroke(0, 0, 0.5, 2, 300, HEIGHT);
39 | }
40 |
41 | function drawDirtStroke(x, y, min, max, w, h) {
42 | for (let i = 0; i < w; i += max * 26) {
43 | for (let j = 0; j < h; j += max * 8) {
44 | drawDot(x + i * Math.sin(i), y + j * Math.sin(i), getRandomInt(min, max), BLACK, ctx);
45 | }
46 | }
47 | }
48 |
49 | function drawDot(x, y, r, color, ctx) {
50 | ctx.fillColor = color;
51 | ctx.beginPath();
52 | ctx.arc(x, y, r, Math.PI * 2, false);
53 | ctx.closePath();
54 | ctx.fill();
55 | }
56 |
57 | function getRandomInt(min, max) {
58 | return Math.floor(Math.random() * (max - min + 1)) + min;
59 | }
60 | })(window, document);
61 |
--------------------------------------------------------------------------------
/styles/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font: normal 16px 'Crimson Text', 'Times New Roman', serif;
4 | color: #161616;
5 | }
6 |
7 | a {
8 | color: #161616;
9 | }
10 |
11 | p {
12 | margin: 10px 0;
13 | font-size: 16px;
14 | }
15 |
16 | h1 {
17 | font-weight: 400;
18 | font-size: 3em;
19 | margin: 10px 0;
20 | }
21 |
22 | h2 {
23 | font-size: 2.4em;
24 | }
25 |
26 | .register {
27 | font-size: 18px;
28 | text-transform: uppercase;
29 | }
30 |
31 | .page-header,
32 | .content,
33 | .page-footer {
34 | position: relative;
35 | z-index: 1;
36 | }
37 |
38 | .page-header {
39 | text-align: center;
40 | margin: 0 0 40px;
41 | }
42 |
43 | .content {
44 | padding: 0 10px 0 20px;
45 | }
46 |
47 | .intro,
48 | .speakers {
49 | max-width: 900px;
50 | margin: 120px auto;
51 | }
52 |
53 | .contents {
54 | text-align: left;
55 | max-width: 420px;
56 | margin: 0 auto;
57 | }
58 |
59 | .contents h2 {
60 | margin: 60px 0 20px;
61 | }
62 |
63 | .contents > .list {
64 | margin: 0;
65 | }
66 |
67 | .list {
68 | margin: 0 0 0 22px;
69 | padding: 0;
70 | counter-reset: item;
71 | }
72 |
73 | .list h3 {
74 | display: inline-block;
75 | margin: 2px 0;
76 | }
77 |
78 | .list li {
79 | font-size: 1.1em;
80 | margin: 6px 0;
81 | display: block;
82 | overflow-x: hidden;
83 | }
84 |
85 | .list li:before {
86 | content: counters(item, ".") " ";
87 | counter-increment: item;
88 | margin: 0 8px 0 0;
89 | }
90 |
91 | .list .chapter:before {
92 | font-weight: bold;
93 | font-size: 21px;
94 | margin: 0 8px 0 0;
95 | }
96 |
97 | .list .speaker:after {
98 | float: left;
99 | width: 0;
100 | position: relative;
101 | left: 40px;
102 | white-space: nowrap;
103 | content:
104 | ". . . . . . . . . . . . . . . . . . . . "
105 | ". . . . . . . . . . . . . . . . .";
106 | }
107 |
108 | .list .speaker .name {
109 | padding: 0 8px 0 0;
110 | background: white;
111 | position: relative;
112 | z-index: 1;
113 | }
114 |
115 | .list time {
116 | float: right;
117 | padding: 0 0 0 8px;
118 | background: white;
119 | position: relative;
120 | z-index: 1;
121 | }
122 |
123 | .info {
124 | text-align: center;
125 | margin: 30px 0 0;
126 | }
127 |
128 | .page-footer {
129 | text-align: center;
130 | margin: 50px 0 0;
131 | }
132 |
133 | .background {
134 | position: absolute;
135 | top: 0;
136 | left: 0;
137 | z-index: 0;
138 | transform-origin: 0 0;
139 | }
140 |
141 | @media (max-width: 440px) {
142 | h1 {
143 | font-size: 2em;
144 | }
145 |
146 | h2 {
147 | font-size: 1.6em;
148 | }
149 | }
150 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Papers We Love @ Kyiv
6 |
7 |
8 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
21 | Contents
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | Alexey Raspopov
31 | 11:00 – 11:45
32 |
33 |
34 | Break
35 | 11:45 – 12:15
36 |
37 |
38 | Andrew Lelechenko
39 | 12:15 – 13:00
40 |
41 |
42 | Break
43 | 13:00 – 13:30
44 |
45 |
46 | Vladimir Kirilov
47 | 13:30 – 14:15
48 |
49 |
50 | Break
51 | 14:15 – 14:30
52 |
53 |
54 | Lightning Talks
55 | 14:30 – 15:00
56 |
57 |
58 | Afterparty
59 | 15:00 – ...
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | Introduction
68 | Papers We Love (PWL) is a community built around reading, discussing and learning more about academic computer science papers. This part of CS-related topics are not covered well in Ukraine. PWL Kyiv is an attempt to solve this.
69 |
70 |
71 |
88 |
89 |
90 |
91 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------