SlideShare a Scribd company logo
Как 
сделать 
Instagram 
в браузере 
Дмитрий Дудин @nedudi
2
Приукрасить
Придать настроение
Нелинейные искажения
Устоявшиеся практики 
• Десктопный софт: 
• Photoshop 
• Photobooth Mac OS X, XnRetro ... 
• Мобильные приложения: 
• Instagram 
• Snapseed, Camera+ и еще 100500 разных... 
6
Фильтрация изображений в веб 
несколько лет назад: 
1. Flash 
2. Отправляем на сервер, 
там фильтруем, 
возвращаем обратно на клиент 
и все это время ждем, ждем, ждем... 
7
Все меняется к лучшему
Способы фильтрации на клиенте 
сегодня и в ближайшем будущем: 
1. Canvas 
2. WebGL 
3. CSS-фильтры 
4. CSS-шейдеры 
5. SVG-фильтры 
6. SVG-фильтры для HTML 
9
Canvas
var canvas = document.createElement('canvas'); 
var context = canvas.getContext('2d'); 
context.drawImage(img); 
var imgd = context.getImageData(0, 0, w, h) 
var pixels = imgd.data; 
11
Не нужно изобретать свой велосипед 
12
13
vintageJS 
$(img).vintage({ 
contrast:32, 
lighten:0.4, 
noise: 20, 
desaturate: 0.05 
}); 
14
15
camanJS 
Caman("image.jpg", "#canvas", function () { 
this 
.saturation(20) 
.gamma(1.4) 
.vignette(300, 60) 
.render(); 
}); 
16
Достоинства фильтрации с Canvas 
1. IE 9 + и мобильные браузеры. 
2. Много готовых решений, библиотек, плагинов. 
3. Фильтры могут быть настолько сложными и 
нестандартными, насколько у вас хватит 
фантазии 
. . . и насколько вы разбираетесь в цифровой 
обработке изображений :) 
17
Недостатки фильтрации с Canvas 
1. Нельзя отфильтровать картинки с других 
доменов (включая поддомены) из-за 
ограничений безопасности. Решается 
проксированием или переводом в base64. 
2. Сложные фильтры это медленная, 
блокирующая операция. 
Десктопный браузер подтормаживает… 
Мобильный браузер серьезно тупит. 
18
WebGL
Что это о_O ? 
precision mediump float; 
varying vec2 position; 
uniform sampler2D webcam; 
void main() { 
vec2 p = position; 
vec4 color = texture2D(webcam, p); 
color.rgb = 1.0 ‐ color.rgb; 
gl_FragColor = color; 
} 
20
Шейдеры 
• Шейдер - кусок кода, который описывает 
алгоритм обработки каждого пикселя в GPU. 
• Достоинство - возможность пользоваться 
параллельной архитектурой GPU. 
• Бывают векторными и пиксельными (Fragment 
Shaders) 
• Описываются в синтаксисе GLSL (OpenGL 
Shading Language) 
21
Вернемся к cтрашному шейдеру 
precision mediump float; 
varying vec2 position; 
uniform sampler2D webcam; 
void main() { 
vec2 p = position; 
vec4 color = texture2D(webcam, p); 
color.rgb = 1.0 ‐ color.rgb; 
gl_FragColor = color; 
} 
22
Велосипеды в WebGl - это больно 
23
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Достоинства glfx 
1. Множество предустановленных фильтров. 
2. Красивый и понятный API. 
3. Возможность расширять библиотеку своими 
шейдерами. 
25
WebGLImageFilter 
26
WebGLImageFilter прост в 
использовании 
var filter = new WebGLImageFilter(); 
filter.addFilter('hue', 180); 
filter.addFilter('negative'); 
filter.addFilter('blur', 7); 
var filteredImage = filter.apply(inputImage); 
27
Достоинства фильтрации с WebGL 
1. Очень, очень, очень быстро. 
2. Есть несколько хороших плагинов. 
3. Можно использовать готовые шейдеры 
написаные на языке GLSL 
для OpenGL за последние 14 лет 
(начиная c 2001 года) 
28
Недостатки фильтрации с WebGL 
1. Слабая поддержка браузерами. 
Chrome, Opera - отлично, 
FF, Safari, IE11 - частично, 
все остальные - никак. 
2. Для нестандартных операций порог входа 
достаточно высок. 
29
CSS- 
фильтры
Синтаксис CSS-фильтров 
‐webkit‐filter: 
brightness(1.4) 
contrast(2) 
hue‐rotate(300deg) 
sepia(0.3); 
31
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Достоинства CSS-фильтров 
1. Быстрые. 
2. Очень удобно описываются. 
34
Недостатки CSS-фильтров 
1. Пока только webkit(blink) браузеры. 
2. Ничего кроме типовых операций. 
т.е. … Инстаграма с ними не сделаешь :( 
35
CSS- 
шейдеры
Синтаксис 
img { 
‐webkit‐filter: custom( 
none 
mix( 
url(someFragmentShader.fs) 
normal 
source‐atop 
) 
); 
} 
37
someFragmentShader.fs 
precision mediump float; 
void main() 
{ 
css_ColorMatrix = mat4(1.0, 0.0, 0.0, 0.0, 
0.0, 0.0, 0.0, 0.0, 
0.0, 0.0, 0.0, 0.0, 
0.0, 0.0, 0.0, 1.0); 
} 
38
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Достоинства CSS-шейдеров 
1. Быстрые. 
2. Можно делать сложные нестандартные 
эффекты. 
40
Недостатки CSS-шейдеров 
1. Сложность описания, высокий порог входа. 
2. Вообще нигде толком не поддерживаются :) 
41
SVG- 
фильтры
Нарисуем круг 
<svg width="400" height="400"> 
<circle 
cx="200" 
cy="200" 
fill="#3498db" 
r="100"/> 
</svg> 
43
Это круг :) 
44
Простейший svg-фильтр (blur) 
<svg width="400" height="400"> 
<defs> 
<filter id="f0"> 
<feGaussianBlur stdDeviation="50" /> 
</filter> 
</defs> 
<circle filter="url(#f0)" cx="200" cy="200" 
fill="#3498db" r="100"/> 
</svg> 
45
Простейший svg-фильтр (blur) 
<svg width="400" height="400"> 
<defs> 
<filter id="f0"> 
<feGaussianBlur stdDeviation="50" /> 
</filter> 
</defs> 
<circle filter="url(#f0)" cx="200" cy="200" 
fill="#3498db" r="100"/> 
</svg> 
46
Простейший svg-фильтр (blur) 
<svg width="400" height="400"> 
<defs> 
<filter id="f0"> 
<feGaussianBlur stdDeviation="50" /> 
</filter> 
</defs> 
<circle filter="url(#f0)" cx="200" cy="200" 
fill="#3498db" r="100"/> 
</svg> 
47
Простейший svg-фильтр (blur) 
<svg width="400" height="400"> 
<defs> 
<filter id="f0" > 
<feGaussianBlur stdDeviation="40" /> 
</filter> 
</defs> 
<circle filter="url(#f0)" cx="200" cy="200" 
fill="#3498db" r="100"/> 
</svg> 
48
Результат 
49
Картинка внутри SVG 
<svg width="1024" height="768"> 
<image 
width="100%" 
height="100%" 
xlink:href="img/girl.jpg" /> 
</svg> 
50
Картинка внутри SVG + blur 
<svg width="1024" height="768"> 
<defs> 
<filter id="f1" > 
<feGaussianBlur stdDeviation="10" /> 
</filter> 
</defs> 
<image filter="url(#f1)" xlink:href="img/girl.jpg" 
width="100%" height="100%" /> 
</svg> 
51
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Комбинация фильтров 
<filter id="f2"> 
<feGaussianBlur stdDeviation="3" /> 
<feColorMatrix type="saturate" values="0"> 
</feColorMatrix> 
</filter> 
54
Комбинация фильтров 
<filter id="f2"> 
<feGaussianBlur result="a1" stdDeviation="3" /> 
<feColorMatrix type="saturate" values="0"> 
</feColorMatrix> 
</filter> 
55
Комбинация фильтров 
<filter id="f2"> 
<feGaussianBlur result="a1" stdDeviation="3" /> 
<feColorMatrix in="a1" type="saturate" values="0"> 
</feColorMatrix> 
</filter> 
56
Комбинация фильтров 
<filter id="f2"> 
<feGaussianBlur result="a1" stdDeviation="3" /> 
<feColorMatrix in="a1" type="saturate" values="0"> 
</feColorMatrix> 
</filter> 
57
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Типы SVG- 
фильтров 
<fe…Фильтр>
feComponentTransfer
feComponentTransfer 
<feComponentTransfer> 
<feFuncR type="linear" slope="5" intercept="‐0.5"/> 
<feFuncG type="linear" slope="0.2"/> 
<feFuncB type="linear" slope="0.2"/> 
<feFuncA type="identity"/> 
</feComponentTransfer> 
61
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feComponentTransfer 
<feComponentTransfer> 
<feFuncA type="linear" slope="0.5"/> 
</feComponentTransfer> 
63
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feComponentTransfer 
<feComponentTransfer> 
<feFuncR type="linear" slope="0"/> 
<feFuncG type="linear" slope="0"/> 
<feFuncB type="linear" slope="1"/> 
</feComponentTransfer> 
65
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feComponentTransfer 
<feComponentTransfer> 
<feFuncR type="linear" slope="10" intercept="‐4"/> 
<feFuncG type="linear" slope="1.5" intercept="1"/> 
<feFuncB type="linear" slope="2" intercept="‐1"/> 
</feComponentTransfer> 
67
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feComponentTransfer 
<feComponentTransfer> 
<feFuncR type="discrete" tableValues="0 0.5 1"/> 
<feFuncG type="discrete" tableValues="0 0.5 1"/> 
<feFuncB type="discrete" tableValues="0 0.5 1"/> 
</feComponentTransfer> 
69
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feComponentTransfer 
<feComponentTransfer> 
<feFuncR type="table" tableValues="1 0"/> 
<feFuncG type="table" tableValues="1 0"/> 
<feFuncB type="table" tableValues="1 0"/> 
</feComponentTransfer> 
71
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feComponentTransfer 
<feComponentTransfer> 
<feFuncR 
type="gamma" 
amplitude="2" 
exponent="0.5" 
offset="0.2" 
/> 
</feComponentTransfer> 
73
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feColorMatrix
feColorMatrix 
| R' | | a00 a01 a02 a03 a04 | | R | 
| G' | | a10 a11 a12 a13 a14 | | G | 
| B' | = | a20 a21 a22 a23 a24 | * | B | 
| A' | | a30 a31 a32 a33 a34 | | A | 
| 1 | | 0 0 0 0 1 | | 1 | 
76
feColorMatrix 
<feColorMatrix 
type="matrix" 
values=" 
0.343 0.669 0.119 0 0 
0.249 0.626 0.130 0 0 
0.172 0.334 0.111 0 0 
0 0 0 1 0 
"/> 
77
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Умножать на матрицу, что-бы 
сделать картинку чёрно-белой? о_О
<feColorMatrix type="saturate" values="0" />
<feColorMatrix type="saturate" values="4" />
<feColorMatrix type="saturate" values="50" />
<feColorMatrix type="hueRotate" values="0" />
<feColorMatrix type="hueRotate" values="120" />
<feColorMatrix type="hueRotate" values="240" />
<feColorMatrix type="hueRotate" values="320" />
<feColorMatrix type="luminanceToAlpha" />
feConvolveMatrix
feConvolveMatrix 
<feConvolveMatrix order="3" 
kernelMatrix="1 ‐1 1 ‐1 ‐1 ‐1 1 ‐1 1"/> 
1 ‐1 1 
‐1 ‐1 ‐1 
1 ‐1 1 
91
Classic #selfish #duckface
Fixed #selfish #duckface
<feConvolveMatrix order="3" 
kernelMatrix="1 ‐1 1 ‐1 ‐0.1 ‐1 1 ‐1 1"/>
<feConvolveMatrix order="3" 
kernelMatrix="9 0 0 0 1 0 0 0 ‐9"/>
<feConvolveMatrix order="3" 
kernelMatrix="‐1 ‐1 ‐1 ‐1 7 ‐1 ‐1 ‐1 ‐1"/>
<feConvolveMatrix order="5" 
kernelMatrix="1 1 1 1 1 1 ‐2 ‐2 ‐2 1 1 ‐2 0 ‐2 1 1 ‐2 ‐2 ‐2 1 1 1 1 1 1"/>
feComposite
feComposite 
<feComposite 
in="source1" 
in2="source2" 
operator="xor"/> 
99
over 
in 
out 
atop 
xor 
arithmetic 
k1="0" k2="1" k3="-1" k4="1" 
arithmetic 
k1=".5" k2=".5" k3=".5" k4=".5" 
arithmetic 
k1="0" k2="1" k3="1" k4="0" 
100
feBlend
feBlend 
<feBlend 
in="source1" 
in2="source2" 
mode="lighten"/> 
102
Blend modes 
normal 
screen 
multiply 
lighten 
darken 
103
feTile
feTile 
<feTile in="source" /> 
105
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
feDisplacementMap
feDisplacementMap 
109
feDisplacementMap 
110
Красный канал. 20 градусов 
111
Cиний канал. -20 градусов 
112
+ Неподвижный зеленый 
113
Happy face 
114
Happy face 
115
Happy face lvl 40 
116
Happy face lvl80 
117
Возможности 
анимации
Синтаксис для SVG анимаций 
<feColorMatrix type="saturate" values="0.2"> 
</feColorMatrix> 
119
Синтаксис для SVG анимаций 
<feColorMatrix type="saturate" values="0.2"> 
<animate attributeName="values" /> 
</feColorMatrix> 
120
Синтаксис для SVG анимаций 
<feColorMatrix type="saturate" values="0.2"> 
<animate attributeName="values" /> 
</feColorMatrix> 
121
Синтаксис для SVG анимаций 
<feColorMatrix type="saturate" values="0.2"> 
<animate 
attributeName="values" 
values="0;5;0" 
dur="2s" 
repeatCount="indefinite"/> 
</feColorMatrix> 
122
Анимация feColorMatrix 
123
Анимация feMorphology radius 
124
Анимация feDisplacementMap scale 
125
Немного хипстерства 
для примера
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Достоинства SVG-фильтров и 
почему мы выбрали их 
1. Быстрые. 
2. Не нужно никаких дополнительных библиотек. 
3. Поддержка разветвленных структур. 
4. Cупер-возможности, огромная спецификация. 
5. Встроенная поддержка анимаций. 
6. Возможность фильтрации картинок с любых 
доменов. 
138
Недостатки SVG-фильтров 
1. IE10+, встроенный браузер на Android 4.4+ 
2. Необходимость вкладывать изображение 
внуть SVG 
139
SVG- 
фильтры 
для html
<svg> 
<defs> 
<filter id="f1"> 
<feGaussianBlur stdDeviation="10"/> 
</filter> 
</defs> 
</svg> 
img { 
‐webkit‐filter: url(#f1); 
filter: url(#f1); 
} 
141
<svg> 
<defs> 
<filter id="f1"> 
<feGaussianBlur stdDeviation="10 0"/> 
</filter> 
</defs> 
</svg> 
div { 
‐webkit‐filter: url(#f1); 
filter: url(#f1); 
} 
142
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Вопросы?
facebook.com/html5by 
twitter.com/html5by 
vk.com/html5by 
146

More Related Content

PDF
Unit-тестирование скриншотами: преодолеваем звуковой барьер
PDF
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
PPTX
KazHackStan - "><script>alert()</script>
PPTX
XSS. Обходы фильтров и защит.
PDF
Быстро о быстром
PDF
Инструментируй это
PPT
МАПО Лаба №1
PDF
SPA инструменты
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
KazHackStan - "><script>alert()</script>
XSS. Обходы фильтров и защит.
Быстро о быстром
Инструментируй это
МАПО Лаба №1
SPA инструменты

What's hot (19)

PDF
Kranonit s16 (python). dmitry furzenko
PDF
Опыт разработки эффективного SPA
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
PDF
Maksim Shirshin
PDF
Владимир Варанкин — «БЭМ»
PDF
Максим Ширшин "SVARX, или Борьба с большими формами"
PDF
Владимир Гриненко "Инструменты фронтенд-разработчика"
PDF
Баба Яга против!
PDF
Js templating stepan_reznikov
PPTX
Web осень 2013 лекция 4
PPT
Javascript
PDF
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
PDF
Пластилиновый код: как перестать кодить и начать жить
PPTX
Web осень 2013 лекция 8
PPTX
Yii2
PPTX
Как мы уменьшили сложность наших проектов
PDF
Почему Mojolicious?
PDF
Authentication security
PPTX
Разработка на стероидах или как я перестал бояться и полюбил свою IDE
Kranonit s16 (python). dmitry furzenko
Опыт разработки эффективного SPA
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Maksim Shirshin
Владимир Варанкин — «БЭМ»
Максим Ширшин "SVARX, или Борьба с большими формами"
Владимир Гриненко "Инструменты фронтенд-разработчика"
Баба Яга против!
Js templating stepan_reznikov
Web осень 2013 лекция 4
Javascript
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Пластилиновый код: как перестать кодить и начать жить
Web осень 2013 лекция 8
Yii2
Как мы уменьшили сложность наших проектов
Почему Mojolicious?
Authentication security
Разработка на стероидах или как я перестал бояться и полюбил свою IDE
Ad

Viewers also liked (20)

PDF
s&p500mini stocks
PDF
Instagram как топовая платформа для продвижения в 2014
PDF
Instagram как основная площадка конкурсной активности
PDF
Great news! (instagram)
PDF
LYF-Comp_Plan.pdf
PDF
Instagram за миллиард
PPTX
заработок в Instagram
DOCX
5 простых работающих конкурсов в instagram
PPTX
PDF
instagram для бизнеса
PDF
ГЕЙМИФИКАЦИЯ В УЗКОМ МЕСТЕ
PDF
Знаки,жесты
PPTX
Что такое инстаграм и с чем его едят
PPTX
Cобственная рекламная сеть в Instagram
PDF
Таня Иванова "Продвижение своего бизнеса в Instagram" @ HB Conf 2014
PDF
Продвижение своего бизнеса в Instagram: от 0 до бесконечности
PPTX
Продажи в Instagram - Продвижение в Инстаграм
DOCX
10 способов увеличить количество подписчиков в instagram
PPTX
методы монетизации интернет проектов
s&p500mini stocks
Instagram как топовая платформа для продвижения в 2014
Instagram как основная площадка конкурсной активности
Great news! (instagram)
LYF-Comp_Plan.pdf
Instagram за миллиард
заработок в Instagram
5 простых работающих конкурсов в instagram
instagram для бизнеса
ГЕЙМИФИКАЦИЯ В УЗКОМ МЕСТЕ
Знаки,жесты
Что такое инстаграм и с чем его едят
Cобственная рекламная сеть в Instagram
Таня Иванова "Продвижение своего бизнеса в Instagram" @ HB Conf 2014
Продвижение своего бизнеса в Instagram: от 0 до бесконечности
Продажи в Instagram - Продвижение в Инстаграм
10 способов увеличить количество подписчиков в instagram
методы монетизации интернет проектов
Ad

Similar to Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware (20)

PDF
Ренессанс графики на клиенте
PDF
Пора учить WebGL
PDF
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
PDF
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
PDF
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
PDF
Антон Корзунов "Графика на карте в API 2.0"
PDF
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
PDF
Оптимизация графики на практике
PDF
Наложение видеоэффектов с OpenGL ES 2.0 и Shaders
PDF
Наложение видеоэффектов с OpenGL ES 2.0 with Shaders, Максим Решетей
PPT
Web весна 2012 лекция 10
PDF
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
PDF
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
PDF
Как анимировать тысячи объектов на карте и не подвесить браузер
PPTX
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
PPT
коллаж в фотошоп
PPT
коллаж в фотошоп
PPT
Создание коллажа в PhotoShop
PPT
Web весна 2013 лекция 10
Ренессанс графики на клиенте
Пора учить WebGL
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
Антон Корзунов "Графика на карте в API 2.0"
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Оптимизация графики на практике
Наложение видеоэффектов с OpenGL ES 2.0 и Shaders
Наложение видеоэффектов с OpenGL ES 2.0 with Shaders, Максим Решетей
Web весна 2012 лекция 10
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Как анимировать тысячи объектов на карте и не подвесить браузер
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
коллаж в фотошоп
коллаж в фотошоп
Создание коллажа в PhotoShop
Web весна 2013 лекция 10

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware