Skip to content

Instantly share code, notes, and snippets.

@h4
Last active February 29, 2016 10:47
Show Gist options
  • Select an option

  • Save h4/6938194 to your computer and use it in GitHub Desktop.

Select an option

Save h4/6938194 to your computer and use it in GitHub Desktop.

Revisions

  1. h4 revised this gist Oct 11, 2013. 1 changed file with 31 additions and 16 deletions.
    47 changes: 31 additions & 16 deletions 1.fronteers.dump.md
    Original file line number Diff line number Diff line change
    @@ -97,9 +97,7 @@ Flexbox и фолбеки для старых обычно не конфликт
    Стоит ли вообще использовать Flexbox? Да, говорит Зоуи:

    1. Спецификация не поменяется и Flexbox станет мощным инструментом для построения раскладки и никуда не денется.

    2. Можно начать с небольших демо-сайтов, чтобы понять как Flexbox работает. И начать использовать его для небольших косметических вещей.

    3. Flexbox это весело! Он сильно меняет представление о возможностях раскладки.

    Ссылки и ресуры для презентации по Flexbox: http://t.co/nToGPs98fS
    @@ -182,15 +180,27 @@ Flexbox и фолбеки для старых обычно не конфликт

    Каскад ресурсов позволяет понять, что скорость зависит от сети и отрисовки http://t.co/Jskfd74Yop

    Что можно сделать для ускорения сетевой части: 1. Быстрый ответ сервера; 2. Используйте KeepAlive; 3. Не используйте редиректы; 4. CDN

    5. Уменьшайте кол-во ресурсов; 6. Минифицируйте JS/CSS; 7. Собирайте ресурсы вместе; 8. GZip; 9. Кэш, отдельная статика;
    Что можно сделать для ускорения сетевой части:

    10. Кэширование Ajax-запросов; 11. Удаление дублирующего кода; 12. Минификация и сжатие картинок;
    1. Быстрый ответ сервера;
    2. Используйте KeepAlive;
    3. Не используйте редиректы;
    4. CDN
    5. Уменьшайте кол-во ресурсов;
    6. Минифицируйте JS/CSS;
    7. Собирайте ресурсы вместе;
    8. GZip;
    9. Кэш, отдельная статика;
    10. Кэширование Ajax-запросов;
    11. Удаление дублирующего кода;
    12. Минификация и сжатие картинок;

    Ускорение на стороне клиента: 1. Режим стандартов IE, переключение X-UA-Comp заголовком сервера; 2. Подключение стилей как можно выше;
    Ускорение на стороне клиента:

    3. Избегать блокирующего JS, async/defer; 4. Отложенная загрузка некритичного JS.
    1. Режим стандартов IE, переключение X-UA-Comp заголовком сервера;
    2. Подключение стилей как можно выше;
    3. Избегать блокирующего JS, async/defer;
    4. Отложенная загрузка некритичного JS.

    Модуль ngx_pagspeed для Nginx — http://t.co/x1421Tn7EH

    @@ -240,17 +250,22 @@ Flexbox и фолбеки для старых обычно не конфликт

    jQuery.animate до сих пор работает через таймауты (неэффективно), а не requestAnimationFrame (лучше), но есть патч, который это включает.

    Тач-обработчики: 1. Уменьшайте количество обработчиков событий; 2. Подключайте событие как можно ближе (по дереву) к целевому элементу.
    Тач-обработчики:

    1. Уменьшайте количество обработчиков событий;
    2. Подключайте событие как можно ближе (по дереву) к целевому элементу.
    3. Подключайте обработчики как можно позднее.

    Прокрутка естественно вызыват перерисовку. Избегайте изменений во время прокрутки. Да, параллакс — это убийство браузера.

    Если вы вставили анимир. GIF-спиннер, то не забудьте не просто прикрыть его загруженным, а выключить, иначе он продолжит отрисовываться.

    Выводы: 1. Быстродействие — это фича, а не юнит-тест. 2. Вы контролируете то, что получает браузе (отключите box-shadow, у нас флэт-дизайн)
    Выводы:

    3. Сначала профилируйте, потом исправляйте (это нельзя предсказать). 4. Профилируйте раньше и чаще.
    1. Быстродействие — это фича, а не юнит-тест.
    2. Вы контролируете то, что получает браузе (отключите box-shadow, у нас флэт-дизайн)
    3. Сначала профилируйте, потом исправляйте (это нельзя предсказать).
    4. Профилируйте раньше и чаще.

    Следующий на сцене Лукас де Грут «On designing typefaces» http://t.co/I9p3d7hmwB

    @@ -418,27 +433,27 @@ jQuery.animate до сих пор работает через таймауты (

    Плохие идеи по переписыванию чего-то:

    1. Давайте используем новый фреймворк! Куча постов о нём, кто-то его пробовал на хакатоне, это 100% MVC — чем не причина.
    "1." Давайте используем новый фреймворк! Куча постов о нём, кто-то его пробовал на хакатоне, это 100% MVC — чем не причина.

    И вы такой пишете пару строк и фреймворк делает инициализацию за вас. И модели, и данные… И тут вас всё-таки приходится писать что-то самому

    Так и работают фреймворки: решают простые проблемы, предлагают абстракции, но не помогают организовать именно ваше приложение.

    Выбирайте фреймворк последним. Это не должно быть причиной для написания приложения. Он должен оставаться инструментом.

    Другой вариант: 2. Давайте напишем наш собственный фреймворк! Весь код будет знаком, специально для вашего приложения, только нужное внутри.
    Другой вариант: "2." Давайте напишем наш собственный фреймворк! Весь код будет знаком, специально для вашего приложения, только нужное внутри.

    В итоге вы переписываете уже знакомые вам фреймворки, только с блекджеком и прочим. С минимальной разницей и на это уходит слишком много сил

    Правило: пишите одновременно только одно приложение. Как бы ни круто было писать пять штук сразу.

    Пишите API сразу и сразу сквозь всё приложение, для всех вещей.

    Или так: 3. Так может сделаем всё не на JS, а на сервере… на PHP?
    Или так: "3." Так может сделаем всё не на JS, а на сервере… на PHP?

    Когда позже что-то нужно отладить, исправить, дописать — выходит, что было проще использовать один и тот же язык для клиента и сервера.

    Или вот: 4. Давайте перепишем всё сами, даже браузерый DOM.
    Или вот: "4." Давайте перепишем всё сами, даже браузерый DOM.

    Или загрузчик файлов: сделаем его умным, красивым, с прогресс-баром… и Flash-роликом, который всё загружает.

    @@ -842,4 +857,4 @@ Opera работала над спецификацией W3C Widgets, но сп

    «Мир переходит на смартфоны» местами большой миф, поскольку на плохой сети люди всё равно пользуются Opera Mini.

    Fronteers всё. Спасибо, что читали трансляцию, следите за анонсами следующих включений http://t.co/2G1SzYJ2H5
    Fronteers всё. Спасибо, что читали трансляцию, следите за анонсами следующих включений http://t.co/2G1SzYJ2H5
  2. h4 revised this gist Oct 11, 2013. 1 changed file with 0 additions and 4 deletions.
    4 changes: 0 additions & 4 deletions 1.fronteers.dump.md
    Original file line number Diff line number Diff line change
    @@ -843,7 +843,3 @@ Opera работала над спецификацией W3C Widgets, но сп
    «Мир переходит на смартфоны» местами большой миф, поскольку на плохой сети люди всё равно пользуются Opera Mini.

    Fronteers всё. Спасибо, что читали трансляцию, следите за анонсами следующих включений http://t.co/2G1SzYJ2H5

    }

    ]
  3. h4 revised this gist Oct 11, 2013. 1 changed file with 21 additions and 21 deletions.
    42 changes: 21 additions & 21 deletions 1.fronteers.dump.md
    Original file line number Diff line number Diff line change
    @@ -10,15 +10,15 @@

    Кэш не всегда спасает: он может пока не существовать (первый заход), устареть или не соответствовать нужной версии.

    Дело разработчика: <link rel="dns-prefetch… prefetch… prerender. Дело браузера: DNS pre-resolution, TCP pre-connect, prefresh, preload
    Дело разработчика: &lt;link rel="dns-prefetch… prefetch… prerender. Дело браузера: DNS pre-resolution, TCP pre-connect, prefresh, preload

    Предсказывание действий пользователя: искал Adventure Time, вероятно кликнешь по ссылке. Зашёл на Facebook, значит откроешь новостную ленту.

    Как это работает: <link rel="dns-prefetch" href="//catroonnetwork.com”>, дёшево, открывает TCP-соединения.
    Как это работает: &lt;link rel="dns-prefetch" href="//catroonnetwork.com”&gt;, дёшево, открывает TCP-соединения.

    Это работает в Chrome 22+, Chrome Mobile, Firefox, Firefox Mobile.

    Спецификация <link rel="prefetch" href="//example.com/script.js"> для подгрузки ресурсов не слишком подробно описана.
    Спецификация &lt;link rel="prefetch" href="//example.com/script.js"&gt; для подгрузки ресурсов не слишком подробно описана.

    Работает в: Android 4, Chrome 31, Firefox 23, Firefox Mobile 24, Opera 15+

    @@ -28,9 +28,9 @@ Firefox префетчит только один ресурс одновреме

    Это исправляется с помощью Accept-Ranges: bytes, тогда браузер подхватит разорванную предзагрузку. Если конечно это поддерживается сервером.

    Сделать <link rel="prerender" href="//catroonnetwork.com"> это как загрузить страницу в фоновом табе. Рисково, тратит ресурсы и трафик.
    Сделать &lt;link rel="prerender" href="//catroonnetwork.com"&gt; это как загрузить страницу в фоновом табе. Рисково, тратит ресурсы и трафик.

    С prerender легко ошибиться, но можно вставлять <link> динамически, что добавляет гибкости.
    С prerender легко ошибиться, но можно вставлять &lt;link&gt; динамически, что добавляет гибкости.

    С момента нажатия на ссылку до первых байтов ответа, браузер не делает ничего, кроме вытягивания ресурсов, а разработчик не может ничего.

    @@ -44,7 +44,7 @@ Chrome в этот момент начинает DNS-prefetch для всех в

    Prefresh включается параметром для запуска Chrome --specual-resource-prefetching

    Если использовать техники адаптивных картинок с помощью JS, то предгазгрузчик браузера не найдёт <img src="">, т.к. работает до работы с JS
    Если использовать техники адаптивных картинок с помощью JS, то предгазгрузчик браузера не найдёт &lt;img src="…"&gt;, т.к. работает до работы с JS

    Лучше положить картинки для вытягивания вручную через JS на другой домен, чтобы они не конфликтовали с автоматикой браузера.

    @@ -194,7 +194,7 @@ Flexbox и фолбеки для старых обычно не конфликт

    Модуль ngx_pagspeed для Nginx — http://t.co/x1421Tn7EH

    Снова звучит совет динамически вставлять <link rel="prefetch" href=""> в <head> с помощью JS.
    Снова звучит совет динамически вставлять &lt;link rel="prefetch" href="…"&gt; в &lt;head&gt; с помощью JS.

    Меняйте классы у элементов как можно глубже по DOM, чтобы это оказывало как можно меньшее воздействие на перерисовку.

    @@ -506,7 +506,7 @@ Backbone, Knockout, Angular, etc. — нет никаких ограничени

    Аргумент про быстродействие веб-приложений — ерунда. Ответ Sencha на заявление про «медленный HTML5» от Facebook http://t.co/Nwqae41IOg

    Конечно это потребовало трюков: <iframe> для каждой из частей приложения, что рендерило их в отдельных процессах.
    Конечно это потребовало трюков: &lt;iframe&gt; для каждой из частей приложения, что рендерило их в отдельных процессах.

    Unreal Engine 3 in Firefox with asm.js — http://t.co/TFDQafy1jr

    @@ -636,9 +636,9 @@ CSS это язык, основанный на правилах (rules). Но е

    Пока нет решения, которое покрывало бы все юзкейсы и нравилось бы всем.

    Решение №1 <picture> (на манер <source> для <video>), предложенное Брюсом Лоусоном http://t.co/wmeQ1iI5WH
    Решение №1 &lt;picture&gt; (на манер &lt;source&gt; для &lt;video&gt;), предложенное Брюсом Лоусоном http://t.co/wmeQ1iI5WH

    Минусы: несколько элементов; расширяет использование <source> в спец. контекстах (не только для <video>); смешивает MQ и разметку.
    Минусы: несколько элементов; расширяет использование &lt;source&gt; в спец. контекстах (не только для &lt;video&gt;); смешивает MQ и разметку.

    Решение номер 2, стрёмное http://t.co/glWn5cvvV2

    @@ -648,7 +648,7 @@ CSS это язык, основанный на правилах (rules). Но е

    Комьюнити и W3C http://t.co/e8Newav6fz

    Что же нам на самом деле нужно: <img src=“”path-to-image>. И всё.
    Что же нам на самом деле нужно: &lt;img src=“”path-to-image&gt;. И всё.

    Четвёртое решение: использует HTTP для т.н. «client hints», то есть подсказок для клиентской части.

    @@ -662,7 +662,7 @@ CSS это язык, основанный на правилах (rules). Но е

    Следующий шаг http://t.co/hexapNIPLO

    В итоге, получается вариант с <img> элементом и атрибутами src-1, src-2, src-n.
    В итоге, получается вариант с &lt;img&gt; элементом и атрибутами src-1, src-2, src-n.

    Становится страшнее http://t.co/9HmmzDPrLa

    @@ -700,25 +700,25 @@ Shadow DOM — это способ спрятать элементы внутр

    Поддержка Shadow DOM: Firefox скоро, Chrome да, IE пока никаких новостей, про Safari тоже не очень понятно.

    Содержимое нового элемента <template> будет обработано, но не отрисовано. Он может содержать элементы, стили и т.п.
    Содержимое нового элемента &lt;template&gt; будет обработано, но не отрисовано. Он может содержать элементы, стили и т.п.

    <template> это замена <script type="text/template">, которая не хак.
    &lt;template&gt; это замена &lt;script type="text/template"&gt;, которая не хак.

    Есть уже даже такое <link rel="import" href="some-page.html"> Firefox: скоро; Chrome за флагами; про IE никто не знает.
    Есть уже даже такое &lt;link rel="import" href="some-page.html"&gt; Firefox: скоро; Chrome за флагами; про IE никто не знает.

    Специальные элементы: var foo = document.register('my-widget‘); document.body.append(foo);

    Создание нового элемента: <my-widget></my-widget> или <div is="my-widget"> — первый способ лучше.
    Создание нового элемента: &lt;my-widget&gt;&lt;/my-widget&gt; или &lt;div is="my-widget"&gt; — первый способ лучше.

    my-widget { color:red } my-widget:unresolved { opacity:0 } — если элемент не зарегистрирован в документе, то он не будет виден.

    Поддержка: Firefox и Chrome за флагами; про IE ничего не известно.

    Элемент <element> пока убрали из спецификации. Но способ создавать специальные элементы пока остался.
    Элемент &lt;element&gt; пока убрали из спецификации. Но способ создавать специальные элементы пока остался.

    Новая штука Dectorators, о ней мало информации и нет собств. спецификации.

    <decorator> — это способ применения презентационной разметки через задание логики в CSS. Что-то вроде шаблонизации, управляемой через CSS.
    &lt;decorator&gt; — это способ применения презентационной разметки через задание логики в CSS. Что-то вроде шаблонизации, управляемой через CSS.

    Считанные люди понимают как это работает. Звучит сомнительно, но есть некоторые удачные юзкейсы. Хотя нет ни одной реализации и спеки.

    @@ -790,7 +790,7 @@ CoffeScript — это конечно круто, но круче компили

    ES6 в JS? См. traceur https://t.co/jkQFPGLFcw и es6ify https://t.co/GH0M9eVIvw

    Новое в ES6, синтакс: class, extends, super — синтаксический сахар, вместо JS-библиотек; Arrow functions arr.map(x => x*x);
    Новое в ES6, синтакс: class, extends, super — синтаксический сахар, вместо JS-библиотек; Arrow functions arr.map(x =&gt; x*x);

    Destructuring: var {x,y} = getPoint(); Rest/spread: var [first, …rest] = els; Math.max(…myArray);

    @@ -800,7 +800,7 @@ Destructuring: var {x,y} = getPoint(); Rest/spread: var [first, …rest] = els;

    Доминик, помимо прочего, автор спецификации промисов (promises), которая вошла в ES6.

    И такое можно будет делать в JS '<a href="${url}">${text}</a>'
    И такое можно будет делать в JS '&lt;a href="${url}"&gt;${text}&lt;/a&gt;'

    ES7 будет ещё круче.

    @@ -832,7 +832,7 @@ DRM для веба продвигают Google и Microsoft — и вряд л

    Blink и соотв. браузеры внедряет автоматичекую фичу Lazy Layout, которая анализирует раскладку сайта и рисует её быстрее, чем остальное.

    Или <img lazyload src=“…”>, новый способ отложенной загрузки изображений.
    Или &lt;img lazyload src=“…”&gt;, новый способ отложенной загрузки изображений.

    Opera работала над спецификацией W3C Widgets, но спека не выжила. По многим причинам, кроме глупого названия.

  4. h4 revised this gist Oct 11, 2013. 1 changed file with 425 additions and 1 deletion.
    426 changes: 425 additions & 1 deletion 1.fronteers.dump.md
    Original file line number Diff line number Diff line change
    @@ -1,425 +1,849 @@
    Мы начинаем текстовую трансляцию Fronteers 2013, двухдневной конференции в Амстердаме — http://t.co/QB5SYQ3cMx

    Пол Айриш из Google открывает шестую конференцию Fronteers. Россия на шестом месте по количеству участников, например.

    На сцене Стив Саудерс с докладом «Pre-browsing» http://t.co/AuqI08mSjX

    Сетевые проблемы замедляют веб. Медленные сотовые сети и даже перегруженный WiFi. Мы часто видим белый экран без индикации загрузки.

    Заголовок: отдавайте браузеру нужное ещё до того, как он за этим обратится.

    Кэш не всегда спасает: он может пока не существовать (первый заход), устареть или не соответствовать нужной версии.

    Дело разработчика: <link rel="dns-prefetch… prefetch… prerender. Дело браузера: DNS pre-resolution, TCP pre-connect, prefresh, preload

    Предсказывание действий пользователя: искал Adventure Time, вероятно кликнешь по ссылке. Зашёл на Facebook, значит откроешь новостную ленту.

    Как это работает: <link rel="dns-prefetch" href="//catroonnetwork.com”>, дёшево, открывает TCP-соединения.

    Это работает в Chrome 22+, Chrome Mobile, Firefox, Firefox Mobile.

    Спецификация <link rel="prefetch" href="//example.com/script.js"> для подгрузки ресурсов не слишком подробно описана.

    Работает в: Android 4, Chrome 31, Firefox 23, Firefox Mobile 24, Opera 15+

    Firefox префетчит только один ресурс одновременно, Android 6, Chrome и Opera 10 (6 с одного домена).

    Если во время префетча перейти на другую страницу, то браузер — внезапно! — отменит процедуру. Справедливо для всех браузеров. И странно.

    Это исправляется с помощью Accept-Ranges: bytes, тогда браузер подхватит разорванную предзагрузку. Если конечно это поддерживается сервером.

    Сделать <link rel="prerender" href="//catroonnetwork.com"> это как загрузить страницу в фоновом табе. Рисково, тратит ресурсы и трафик.

    С prerender легко ошибиться, но можно вставлять <link> динамически, что добавляет гибкости.

    С момента нажатия на ссылку до первых байтов ответа, браузер не делает ничего, кроме вытягивания ресурсов, а разработчик не может ничего.

    Chrome в этот момент начинает DNS-prefetch для всех возможных ресурсов, упомянутых на новой странице. Ещё до её отрисовки.

    Аналогичная вещь происходит в тот же момент: TCP-preconnect для избавления от сетевых задержек.

    Кое-что новое: Prefresh™. Когда Chrome начинает предзагружать нужные ресурсы (нужную версию jQuery) сайта, который он уже видел и запомнил.

    Это избавляет от медленных ответов 200, 304 и времени чтения/записи на диск.

    Prefresh включается параметром для запуска Chrome --specual-resource-prefetching

    Если использовать техники адаптивных картинок с помощью JS, то предгазгрузчик браузера не найдёт <img src="">, т.к. работает до работы с JS

    Лучше положить картинки для вытягивания вручную через JS на другой домен, чтобы они не конфликтовали с автоматикой браузера.

    Этим летом Chrome изменил логику подгрузки JS. Раньше он повышал приоритет JS-файлов внизу страницы, не в пользу ресурсов в начале страницы.

    Рекомендованная книга: «High Performance Browser Networking» Ilya Grigorik http://t.co/Rd3yaR8uof

    После каждого доклада Пол Айриш будет задавать вопросы докладчику. Задать свой вопрос можно @FronteersConf и есть шанс, что его озвучат.

    Пол Айриш озвучил идею положить все популярные JS-библиотеки прямо в браузер, не просто в кэш. Стив сомневается в эффективности решения.

    В: Так класть ли все скрипты в конец страницы? О: Это что-то из 2007 года, сегодня важно правильно применять атрибуты async и defer.

    Следующий доклад «Putting Flexbox into practice» Zoe Mickley Gillenwater (мы пока думаем как написать это по-русски) http://t.co/ALXOgs5q4k

    Зоуи признаётся, что верстала таблицами http://t.co/yJTssEDs24

    Демо-сайт для презентации: http://t.co/qfTmsZmwRa

    Батарея префиксов для работы Flexbox http://t.co/GKYDJ992ti

    Чтобы справляться с префиксами, можно генерировать их на http://t.co/L58z0BYu69 или прямо в SASS https://t.co/wz0i6q6Nd7

    Firefox всё ещё не поддерживает flex-wrap для многострочного Flexbox. Так что это значение пока использовать не стоит.

    Также для работы flex-wrap важно иметь поддержку break-before, break-after, которые поддеживаются только в IE10 и Opera 12.x

    Как свёрстана галерея на http://t.co/qfTmsZmwRa http://t.co/sxosKEhKWN

    Flexbox, в отличие от привычной модели, позволяет удобно и предсказуемо смешивать различные единицы изменения: px, em и проценты.

    Если flex-basis не равен нулю, то могут возникать неочевидные ситуации, когда ширина элемента умножается на flex:N, об этом мало говорят.

    Свойства align-items и align-self исполнили мечту верстальщиков о вертикальном выравнивании.

    Выравнивание с помощью Flexbox с фолбеком для старых браузеров http://t.co/dWCM1shSzx

    Flexbox и фолбеки для старых обычно не конфликтуют, но иногда их лучше разделять с помощью Modernizr, например.

    При использовании выравнивания с помощью justify-content, можно легко делать фолбек на инлайн-блоки, даже не разделяя код.

    Повторимся: всё, о чём идёт речь в докладе Зоуи про Flexbox, проиллюстрировано кодом на сайте http://t.co/qfTmsZmwRa

    @_h4_ принимаются идеи

    Изменение порядка следования блоков с помощью order из Flexbox может дезориентировать при навигации по элементам с помощью фокуса.

    Одна из важных возможностей Flexbox позволяет растягивать один (или несколько) блоков по высоте родителя без указанной высоты.

    Стоит ли вообще использовать Flexbox? Да, говорит Зоуи:

    1. Спецификация не поменяется и Flexbox станет мощным инструментом для построения раскладки и никуда не денется.

    2. Можно начать с небольших демо-сайтов, чтобы понять как Flexbox работает. И начать использовать его для небольших косметических вещей.

    3. Flexbox это весело! Он сильно меняет представление о возможностях раскладки.

    Ссылки и ресуры для презентации по Flexbox: http://t.co/nToGPs98fS

    В: Как с поддержкой Flexbox на мобильных? О: Поддержка отличная, кроме мобильного IE.

    В: Насколько быстро работает Flexbox? О: Новая спецификация (2012) значительно быстрее старой (2009).

    Следующий на сцене: Питер ван дер Зи с докладом «Real-time recompilation of running JavaScript» http://t.co/aoWCaxLXa6

    Питер начал сразу с демо http://t.co/P95swx2pBI

    В этой демке Питер меняет параметры скрипта для Canvas и изменения становятся видны сразу без перезагрузки кода. Даже не мелькает картинка.

    Питер в Твитере @kuvos

    Дальше идёт опасный лайв-кодинг, кстати в WebStorm на Linux.

    Компиляция в случае JS — это подготовка кода для исполнения. И дальше исполнение динамически созданного кода.

    Код для демо http://t.co/r0hs9CQOrt

    Функция возвращает функцию, которая… http://t.co/dYwYm01e96

    Таким образом, мы изменяем код без перезапуска приложения.

    Проблемы подхода http://t.co/aDXwe4bCSP

    Становится всё страшнее http://t.co/aHvwsfsjxB

    Прямой и непрямой eval различаются потерей или сохранением контекста в исполняемой функции http://t.co/eHCRxfnX0s

    Оказалось сложно транслировать текстом лайв-кодинг Питера, поэтому вот вам ссылка на все показанные демо и слайды: https://t.co/geVnxk3kYq

    Следующий Robert Jan Verkade и «On power &amp; responsibility» http://t.co/3JKuARTqns — ни строчки кода в презентации, обещает докладчик.

    @Anton_Diaz, старый был внедрён (и распространён) в основном в WebKit, отсюда и сравнение.

    «Никакого нытья по профессиональным вопросам», — предлагает Роберт http://t.co/JNkCabHhBa

    @SelenIT2, Opera 12.x и IE10

    Дизайнеры или «веб-декораторы» категорически не понимают веб, его принципы работы и жизни.

    Так ли открыт мир фронтенда, как это кажется? Мы, вроде бы, находим решение и тут же делимся им.

    Делится знаниями лишь небольшая группа, так называемая, «элита» любой группы.

    Фронтенд в большинстве — это белые мужчины 25-35 лет с техническим образованием. Нам стоит расширить рамки и пригласить людей других групп.

    Всегда ли мы говорим с коллегами вне нашей группы на одном языке? http://t.co/arMYsstNFq

    Иногда стоит расчехлить PowerPoint, набросать пару диаграмм и графиков и поговорить с менеджером на его языке.

    Внешний вид не только то, как нас принимают с первого взгляда, но и отражение нашей индивидуальности http://t.co/jIPEcdeEj8

    Роберт причисляет себя к творческому поколению Зельдмана и Мейера и противопоставляет его современной тенденции к роботизации разработки.

    Фронтендеры, тоже дизайнеры. Вы анализируете проблему, придумываете решение и создаёте воплощение в реальности. Это сложно роботизировать.

    Традиция визуального дизайна включает способность выслушать потребности клиента, не просто делать красиво что попало.

    Если дизайнер не понимает веб, то может быть эта ваша вина в том, что вы не показали ему простой CSS-файл, не объяснили технологии?

    Никто не знает, что будет через 5 лет. Но нужно не просто быть готовым к переменам, а быть готовым к неожиданным переменам.

    Бывали ли вы на UX-конференции, слушали ли вы внимательно вашего менеджера? Нельзя быть достаточно всезнающим, всегда есть пути дальше.

    Не просто создавайте адаптивные и отзывчивые сайты. Будьте адаптивны и отзывчивы сами!

    «Фронтендеры, хватит ныть. У вас отличная работа, вас никто не лупит по затылку. Это важный шаг», — советует Роберт.

    Дальше: перерыв на обед, 1 час. Поешьте.

    Следующий на сцене Алекс МакКау «Faster JavaScript web apps» http://t.co/DhEw6UcAGF

    Кажущаяся скорость работы приложения или сайта столь же важна, как и реальная.

    Где-то после 1 секунды загрузки сайта пользователь переключается в режим «оно зависло» и уходит или переключается на что-то другое.

    Каскад ресурсов позволяет понять, что скорость зависит от сети и отрисовки http://t.co/Jskfd74Yop

    Что можно сделать для ускорения сетевой части: 1. Быстрый ответ сервера; 2. Используйте KeepAlive; 3. Не используйте редиректы; 4. CDN

    5. Уменьшайте кол-во ресурсов; 6. Минифицируйте JS/CSS; 7. Собирайте ресурсы вместе; 8. GZip; 9. Кэш, отдельная статика;

    10. Кэширование Ajax-запросов; 11. Удаление дублирующего кода; 12. Минификация и сжатие картинок;

    Ускорение на стороне клиента: 1. Режим стандартов IE, переключение X-UA-Comp заголовком сервера; 2. Подключение стилей как можно выше;

    3. Избегать блокирующего JS, async/defer; 4. Отложенная загрузка некритичного JS.

    Модуль ngx_pagspeed для Nginx — http://t.co/x1421Tn7EH

    Снова звучит совет динамически вставлять <link rel="prefetch" href=""> в <head> с помощью JS.

    Меняйте классы у элементов как можно глубже по DOM, чтобы это оказывало как можно меньшее воздействие на перерисовку.

    Использование createDocumentFragment для хранения DOM-эл. во время динамического создания быстрее для отрисовки, чем постоянная вставка.

    События, связ. с прокруткой можно оборачивать в буферные функции-замедлители, которые будут запускаться каждые 300мс, а не постоянно.

    Используйте перекл. классов, а не инлайн-стили. Не делайте ресайз картинок в CSS. Группируйте изменения в DOM.

    @sapegin, ты отдаёшь себе отчёт, что разговариваешь с трансляцией?

    Сервис PageSpeed Insights, включая API на 25 000 запросов в день — https://t.co/00u7CCtvo7

    Как выглядит утечка памяти в инспекторе http://t.co/OqbbNubpDe

    Сайт Алекса http://t.co/oN5tmjyFhj и он в Твитере @maccaw. Дальше вопросы и ответы.

    Следующий: Пол Льюис из Chrome DevRel «A developer's guide to rendering performance» http://t.co/NtUndpMJFx

    Хотите поговорить про быстродействие? Упоминайте тег #perfmatters, тогда вас услышат и другие.

    Все говорят про загрузку страницы, а я хочу поговорить про то, что происходит потом — как пиксели попадают на экран. То есть про отрисовку.

    После получения ресурсов и построения дерева DOM, происходит комбинация DOM + CSS = дерево отрисовки. Потом создаётся раскладка, aka layout.

    Все фигуры, которые рисует браузер — векторные. Их нужно растеризировать, обрезать и прочее, то есть операция «paint» в инспекторе.

    Все картинки (JPG, GIF, etc) нужно декодировать из форматов и тоже попиксельно нарисовать.

    Подход «инструменты вместо советов» лучше, поскольку советы устаревают, а инструменты просто считают и показывают что оптимизировать.

    «Рифмуется — значит правда», как говорит Джейк Арчибальд (про «tools not rools»)

    Стили, влияющие на перерисовку (и голова Пола). Почти что все http://t.co/25iHYCNlbO

    Библиотека fastdom для ускорения работы с DOM — https://t.co/n6McJ9qtaX В примере она повысила скорость с 9 до 58 fps.

    Если нажать клавишу «h» в инспекторе Chrome, то выбранный элемент спрячется. И можно будет увидеть, как он влиял на быстродействие.

    Если нужно что-то двигать, то убедитесь, что это «что-то» лежит в собственном слое отрисовки. Да-да, тот самый translate3d и другие.

    Обработка и отрисовка картинок — самое тяжёлое и проблемное для быстродействия. Вот бы нам модификатор для «отложенных» картинок, но нет.

    jQuery.animate до сих пор работает через таймауты (неэффективно), а не requestAnimationFrame (лучше), но есть патч, который это включает.

    Тач-обработчики: 1. Уменьшайте количество обработчиков событий; 2. Подключайте событие как можно ближе (по дереву) к целевому элементу.

    3. Подключайте обработчики как можно позднее.

    Прокрутка естественно вызыват перерисовку. Избегайте изменений во время прокрутки. Да, параллакс — это убийство браузера.

    Если вы вставили анимир. GIF-спиннер, то не забудьте не просто прикрыть его загруженным, а выключить, иначе он продолжит отрисовываться.

    Выводы: 1. Быстродействие — это фича, а не юнит-тест. 2. Вы контролируете то, что получает браузе (отключите box-shadow, у нас флэт-дизайн)

    3. Сначала профилируйте, потом исправляйте (это нельзя предсказать). 4. Профилируйте раньше и чаще.

    Следующий на сцене Лукас де Грут «On designing typefaces» http://t.co/I9p3d7hmwB

    Первая мировая война шрифтов: (Adobe) PS vs. TT (Microsoft). Adobe проиграла и была вынуждена раскрыть секреты PostScript.

    Непростой процесс хинтинга шрифтов http://t.co/fCGU1tskWJ

    Хинтинг — это кропотливый ручной процесс искажения оригинальных кривых шрифта для каждого размера, чтобы они ложились на пиксельную сетку.

    Хинтинг в VTT, софте от Microsoft http://t.co/8uCDVT53KA

    Типы хинтинга: ч/б, серый, clear type и самый лучший — комбинация серого и clear type.

    Иногда шрифты хинтуются не под целые пиксели, вроде 1 или 2, а например под 1,3 — такой шрифт Лукас сделал для дисплеев навигаторов Audi.

    Старинная кернинговая пара http://t.co/J4sljhcrvs

    Лукас сделал шрифты Calibri и Consolas для Microsoft.

    Для эффективного кернинга нужны таблицы самых частых буквенных пар для каждого языка.

    Кернинговые просветы между буквами создают своё впечатление для каждого языка. Те же буквы, но разный кернинг: сравните «dog» и «god».

    На ретиновых экранах хинтинг не нужен.

    В LucasFonts только над хинтингом работает целая команда, в частности, один программист и один русский.

    Информация о поддержке и работе веб-шрифтах на сайте компании Лукаса — http://t.co/RQksYmWsJe

    Сложнее всего локализовывать шрифты. Лукас потратил по 6 лет на греческий и кириллицу и арабский. Так что хинтинг — это ерунда, в сравнении.

    Можно определять какое устройство запрашивает шрифт и отдавать его без хинтинга, например, для iOS и OS X.

    Первые буквы Лукас сделал в 6 лет. В туалете. (цитата, со слов его матери)

    Секция примеров из реальной практики: Эд Соуден рассказывает про разработку GOV.UK http://t.co/2qpSCTNq12

    Сайт https://t.co/MukTVJpGK2 построен по принципу «сначала мобильные». Они поддерживают не браузеры, а пользователей. То есть IE6.

    Набор инструментов (SASS и JS), созданный для разработки https://t.co/MukTVJpGK2https://t.co/BXaUydHG4m

    Для IE6 сайт отдаётся как для мобильных в одну колонку, чтобы избежать возни с багами, но всё же донести информацию.

    На сайте 7 базовых размеров шрифта, содержащихся в SASS-переменных. Эти переменные реагируют на размер вьюпорта и соотв. изменяются.

    Всё, о чём шла речь, повторимся, на Гитхабе: https://t.co/BXaUydHG4m

    Следующий: Антон Ванхаук рассказывает про сайт планирования транспорта http://t.co/gI2Ksw3DRa http://t.co/2qpSCTNq12

    Его компанию попросили только «немного освежить дизайн», они переделали весь сайт до неузнаваемости.

    Они попытались сделать из сайта не робота «доброе время суток», а попутчика «привет, куда едешь?»

    Новые иконки, эмоциональные фотографии, идея «9292 путешествует с тобой».

    Вместо кучи полей — умное выпадающее поле с подсказками, которое угадывает запрос http://t.co/njG8YAMG90

    Следующая: Элани Оливьер про музей Rijksmuseum http://t.co/2qpSCTNq12

    Сайт музея https://t.co/36UC0Qb0JV

    Все картины музея доступны бесплатно на сайте для загрузки в высоком разрешении.

    Терабайт картин, разбитых на тайлы http://t.co/m63L54QNcU

    Целевая аудитория сайта музея — двое вечером на диване с Айпадом. Идея: не тащить людей в музей, а принести музей в их дом.

    Задача была: сайт для десктопа (IE8+) и мобильных (от телефона до планшета). Всё это под большим контролем за качеством со стороны клиента.

    С проектом торопились, поэтому не тестировали на Андроиде. О чём жалеют, но уповают на сроки.

    Работали по Аджайлу, было проще с приоритетами http://t.co/WVLD6sGBM0

    Разработали в процессе свой CSS-фреймворк, что значительно ускорило разработку после начального этапа.

    Разработали даже API для работы с материалами сайта, должны выпустить скоро.

    В: Как вам удалось выложить все картины бесплатно? О: Цель — привлечь внимание к картинам, чтобы пришли посмотреть на оригинал. Это работает

    На сцене Oliver Reichenstein и «Responsive typography» http://t.co/pAcSBRp0sD

    Доброе утро! Мы начинаем http://t.co/EFE0ElXvM6

    Первая версия сайта iA http://t.co/1QtIA4X9LO

    В вебе всегда было шумно, поэтому Оливер начал первый сайт агентства почти без CSS.

    Всё началось со статьи «Web Design is 95% Typography» в 2006 году http://t.co/3A9gq8cYDU

    Оливер изучал философию и совсем не дизайнер, тем более не специалист по типографике.

    Неужели так сложно выбрать шрифт для брендинга компании? Это кажется таким простым делом.

    Веб был полон Верданой и Ариалом. Потом появилась Джорджия! В 2005 году она выглядела чем-то новым.

    Типографика не о том, как выбирать шрифты, а о том, как именно их использовать.

    Как же начать разбираться? Можно прочитать несколько книг, но они довольно сложные.

    Оливер начал с выбора размера шрифта. Шрифт в вебе слишком мелкий. Всё потому, что веб-дизайнеры скрючены над экраном и напряжены.

    Обычные люди читают текст в вебе расслабленно, на некотором расстоянии от экрана. Им не нужно выискивать пискели.

    Оливер взял книгу, поместил её на комфортное расстояние от глаз и сравнил с экраном. Экран обычно гораздо дальше.

    Оптимальным размером оказались 16 пикселей Джорджией. В 2005 году это звучало полным безумием, особенно на небольших экранах тех лет.

    «Этот человек безумен, как он может заставлять нас читать такой огромный текст?» — говорили многие.

    Для экранов с подсветкой для того, чтобы избежать «эффекта зебры» пришлось также увеличить высоту строки.

    Также было принято, что шрифты с засечками не работают на экране, основанное на каком-то исследовании 1992 года.

    В исследовании сравнивали что-то вроде 10-пиксельного Таймса с Верданой на плохом экране и конечно Вердана выигрывала.

    Ситуация усложнилась: появились телефоны, планшеты, ретина, макбуки с крошечными пикселями.

    Вьюпорт, то есть ширина экрана, это не главное. Крайне важно расстояние до экрана. Поэтому даже формула «16 пикселей» не работает.

    Шрифтовики не сразу поняли, зачем изменять шрифты для экрана. «Ты меняешь высоту строки, которую я установил для шрифта?».

    Первое впечатление от ретины: мы можем просто использовать обычные шрифты, как на бумаге и не париться. Но всё не так, это по-прежнему экран

    Приходится напрягать воображение, чтобы представлять, что справа всё ещё Джорджия http://t.co/d3LKvPtCgz

    Оливер ссылается на статью «Font Hinting and the Future of Responsive Typography» http://t.co/Xnm1TdJM6u

    Даже сглаживание на экране делает шрифт чуть жирнее, чем он есть на самом деле, несмотря на огромные усилия по хинтингу.

    На ретине тонкие шрифты слишком тонкие, на обычном экране чуть толще, чем нужно.

    Так было и раньше: для разной бумаги, разных размеров шрифта нужно было применять разные литеры.

    Чем меньше шрифт, тем жирнее должна быть форма буквы http://t.co/qKgmyoM71X

    Уж не говоря про ловушки для краски на острых стыках кривых.

    Усилия по выбору правильной насыщенности стоят того, хоть и не всегда заметны с первого взгляда http://t.co/uvjX1xqw5I

    Причём от экрана к экрану нужна разная насыщенность. Что сложно объяснить традиционным шрифтовикам.

    Оливер решил воссоздать шрифт из старой книги и так и провалился в кроличью нору http://t.co/2fDwk4nT67

    Одним из первых экспериментов был шрифт iABC http://t.co/YUdoZMz9uZ

    «Ты сделал шрифт за год? Молодец, только не показывай никому», — сказали маститые шрифтовики.

    Сайт iA с отзывчивой типографикой, хотя маститые шрифтовики всё равно видят множество проблем — http://t.co/HwPTLkOo8y

    Оливер опасается открывать шрифтовые программы, чтобы не его снова не засосала эта пучина.

    Следующая на сцене Garann Means «How to rewrite your JS app (at least) 10 times» http://t.co/IxcpS3vWy1

    Гэран написала книгу про Node.js для фронтендеров http://t.co/Gs0JsRegtA

    Писать код просто — планировать его сложно.

    Но мы привыкли слишком приотизировать часть работы, связанную с кодом и забывать про планирование.

    Но если ты переписываешь что-то, то возникают другие проблемы http://t.co/4cwgzWiHVe

    Но есть много причин, чтобы переписать код: новые технологии, апгрейд инфраструктуры, рост бизнеса, рефакторинг или просто ВСЁ СЛОМАЛОСЬ.

    Плохой вариант, когда у вас есть 20% приложения и тут вы понимаете, что всё неправильно и выбрасываете код. Лучше так не делать.

    Плохие идеи по переписыванию чего-то:

    1. Давайте используем новый фреймворк! Куча постов о нём, кто-то его пробовал на хакатоне, это 100% MVC — чем не причина.

    И вы такой пишете пару строк и фреймворк делает инициализацию за вас. И модели, и данные… И тут вас всё-таки приходится писать что-то самому

    Так и работают фреймворки: решают простые проблемы, предлагают абстракции, но не помогают организовать именно ваше приложение.

    Выбирайте фреймворк последним. Это не должно быть причиной для написания приложения. Он должен оставаться инструментом.

    Другой вариант: 2. Давайте напишем наш собственный фреймворк! Весь код будет знаком, специально для вашего приложения, только нужное внутри.

    В итоге вы переписываете уже знакомые вам фреймворки, только с блекджеком и прочим. С минимальной разницей и на это уходит слишком много сил

    Правило: пишите одновременно только одно приложение. Как бы ни круто было писать пять штук сразу.

    Пишите API сразу и сразу сквозь всё приложение, для всех вещей.

    Или так: 3. Так может сделаем всё не на JS, а на сервере… на PHP?

    Когда позже что-то нужно отладить, исправить, дописать — выходит, что было проще использовать один и тот же язык для клиента и сервера.

    Или вот: 4. Давайте перепишем всё сами, даже браузерый DOM.

    Или загрузчик файлов: сделаем его умным, красивым, с прогресс-баром… и Flash-роликом, который всё загружает.

    И тут в JS появляются всякие Flash-привязки. А потом фолбек на обычный загрузчик, а потом ещё и на XHR, а потом…

    Так может сразу стоило начать с базовых вещей, которые есть в браузере и сделать их лучше поверх существующего?

    DOM — плохое место для хранения данных. Это дорого и сложно. Данные заслуживают отдельного, настоящего хранилища.

    Или так: есть плагин или модуль для решения нашей задачи! Кто-то его написал, кому-то он помог. Давайте его возьмём.

    В итоге вам приходится подстраиваться под то, что плагин возвращает, чистить его от лишних классов и кода.

    И в итоге вы его переписываете. Точнее, дописываете на основе существующего. Но это уже не плагин, это кусок чужого кода.

    Так может стоило сразу написать самому, не делая кривые решения на основе чужих ошибок?

    Бывает и так: раз это MVC, то не нужно никакой системы зависимостей.

    Отсутств. модульности приводит к бардаку в коде. Полагаться на глобальные переменные опасно. Приходится следить за порядком подкл. завис-тей

    Или даже: у вас есть ужасный движок и вы находите инструмент или фреймворк, совместимый с этим ужасным. И вы радостно его используете.

    Переписывание внешних мелочей приведёт вас к такому же плохому коду, который у вас есть в основном коде.

    Или так: мы нашли крутую штуку, которая всё решает. Давайте её использовать. Так, что у нас за проблема?

    Но решает ли эта штука проблему? Нужно сначала сформулировать проблему, а потом искать решение.

    Сложно избежать полного переписывания. И лучше конечно сделать так, чтобы переписать всё только один раз, а не делать это постоянно.

    Не начинайте писать код до тех пор, пока у вас нет плана разработки.

    Хорошее план спасёт вас от десятка переписываний приложения.

    Сайт http://t.co/yQ8b19cz4b и Твитер @garannm Гэран.

    Следующий после перерыва: «The importance of Firefox OS» Sergi Mansilla http://t.co/jjbP4YZ8vm

    Мозилла на сцене http://t.co/bo4ER4XBEO

    Сайт Сергия http://t.co/SFYNtl6wmr

    Сергий работает в норвежском телекоме Telenor над Firefox OS

    Проблема: написал один раз… запустил один раз. (На одной платформе). http://t.co/ty9DA9YYkN

    Несовместимые API платформ, плата за разработку, различные инструменты для каждой, ограничения апсторов.

    Пользователи страдают http://t.co/48fNBNp8fK

    Решение — HTML5. Речь о наборе технологий, а не о модном бессмысленном словечке

    WebRTC, IndexedDB, ASM.js, etc.

    Среди современных устройств разве что тостеры не поддерживают HTML5.

    Но мы снова и снова не используем общую платформу в виде HTML5 и пишем разных код для разных устройств.

    HTML5 API одинаковы на всех устройствах, где есть браузеры, совместимые с веб-стандартами.

    Конечно на каждой платформе есть отличия в HTML5, но веб-разработчики привыкли к такому и знают, что с этим делать.

    Backbone, Knockout, Angular, etc. — нет никаких ограничений по использованию подходов к разработке, в отличие от нативных платформ.

    Аргумент про быстродействие веб-приложений — ерунда. Ответ Sencha на заявление про «медленный HTML5» от Facebook http://t.co/Nwqae41IOg

    Конечно это потребовало трюков: <iframe> для каждой из частей приложения, что рендерило их в отдельных процессах.

    Unreal Engine 3 in Firefox with asm.js — http://t.co/TFDQafy1jr

    Ещё аргумент про ужасный JS, как язык. Но JS меняется к лучшему: классы, модульность.

    Кроме того, есть десяток языков, компилирующихся в JS: от CoffeScript до Dart, LiveScript, Objective-J.

    Список вариантов «Web coding beyond JavaScript» http://t.co/RAxf75Geo4

    Другой аргумент: сайты выглядят плохо, незаконченно по сравнению с приложениями. Но дело исключительно в количестве вложенных усилий.

    Первый нормальный аргумент: API к железу устройств. То есть отсутствие доступа к ним из JS.

    Но ситуация улучшается благодаря: Appcelerator, PhoneGap (особенно версия 2).

    Поначалу вещи вроде PhoneGap были даже запрещены в App Store http://t.co/yQSLYjEIxo

    Мозилла помогла разрушить монополию IE в начале нулевых. То же делает и Firefox OS, чтобы освободить разработчиков от рамок платформ.

    Мозилла работает над стандартизацией API для железа устройств. Вы не обязаны пользоваться апстором Мозиллы, хотя он есть.

    Начать делать приложение для Firefox OS просто http://t.co/b0Df8xfI34

    Плюс манифест http://t.co/gizaq7rb0S

    Главная фича Firefox OS — отладка прямо в браузере. Это удобнее, чем всё, что есть на других платформах.

    Есть расширение App Manager для Firefox, которое упрощает разработку и тестирование https://t.co/kzU60lxzPR

    Расширение может подключаться к телефону и получать доступ к приложениям, установленным на телефоне и отлаживать их

    Связь отладчик — телефон двусторонняя.

    Другое расширение: симулятор Firefox OS https://t.co/ZRu6Uf8RBw

    Brick http://t.co/OueTaRov2I — UI-компоненты для современных веб-приложений.

    Набор шаблонов для веб-приложений: https://t.co/Y4NODE22sN Материалы для обучения: https://t.co/xzc1w8IOcX

    В магазине приложений для Firefox OS простой процесс одобрения, без лишних ограничений — https://t.co/Mm3oO1UiOr

    Следующий на сцене Гарри Робертс «Rationalising designs for better quality code» http://t.co/YSQiGrQ1o5

    Второе название доклада; Рационализация дизайна для лучшего качества CSS http://t.co/zy83bFu5Kz

    Третье, честное, название: Почему дизайнеры ненавидят меня.

    Если вы не согласны с идеями Гарри, пишите ваши мнения с тегом #DesignersHateHim

    Разработчики жалуются про плохой PSD не дизайнерам, а коллегам. Много нытья и расстроенных верстальщиков.

    Гарри работает в большой британский медиакомпании Sky http://t.co/q5nVa13Xcd

    Как фронтенд-разрабочик, Гарри связывает программистов с дизайнерами и часто принимает решения по оптимизации дизайна для лучшего соотв.

    Я не анти-дизайнер, как может показаться. Этот подход может не сработать в некоторых ситуациях (для крошечных и огромных сайтов).

    Компромисс — это хорошо: для поддержания хороших отношений с дизайнерами, для совместной эффективной работы, но «нет» значит «нет».

    В Sky до сих пор существует процесс PSD — разработка — и т.д. Но большая организация не меняется в один день.

    PSD — это идея, а не контракт. И он обязательно изменится: сам или уже в коде.

    Типичная фраза «Это возможно, но…» Почти всё можно сделать, но это не значит, что это нужно делать и это хорошая идея в целом.

    Быстродействие — прежде всего. Особенно когда об этом думают даже дизайнеры. И у нас в Sky так и происходит.

    Если можно достичь 80% дизайна используя 20% кода — это именно то, что нужно сделать.

    Это правило называется «80:20», запомните его.

    Интересный вопрос: «Хм, я думал ты хороший разработчик? Почему ты не можешь это реализовать?»

    Работа фронтендера гораздо важнее, чем просто воссоздать PSD в HTML и CSS. Ответственность гораздо выше.

    Чем лучше, ты пишешь код, тем меньше тебе хочется делать это.

    Лучше не писать код, который можно не писать. Перерабатывайте, переиспользуйте, нормализуйте, добавляется абстракций.

    Когда дизайнер делает отступ снизу то 20px, то 22px, то 18px — пользователь не заметит разницы. Это стоит нормализовать до 20px

    Вместо написания селекторов через запятую и 20px для них, лучше использовать переменную $padding: 20px и препроцессор.

    Использовали что-то 3 раза и больше? Вынесите это в абстракцию, переиспользуйте.

    CSS это язык, основанный на правилах (rules). Но если дизан не основан на правилах, то его крайне сложно передать в правилах.

    Стоит помочь дизайнеру начать думать правилами, что не отменяет творчества.

    Правила — это то, что не стоит нарушать, иначе одно потянет за собой другое и от системы ничего не останется.

    Начало обычного проекта: html { font-size:16px; line-height:24px } В итоге 24px становится ключевым размером для отступов всего проекта.

    Случайные числа в отступах и размерах ведут к непониманию. Лучше выбирать базовую величину и считать многое от неё. Например, те же l-h:24px

    Стоит нормализовать и рационализировать решения в дизайне: если уменьшать или увеличивать что-то, то ровно в 2 раза, например.

    Не стоит реализовывать дизайн в лоб — картинка так картинка, можно использовать что угодно и сделать так, чтобы оно просто выглядело похоже.

    Если вместо вставки картинки можно сделать пару рамочек, то лучше упростить её немного и реализовать проще.

    Ищите альтернативы, меняйте дизайн, рационализируйте и нормализуйте его.

    Наша задача не выпустить хороший дизайн, а сделать работающий продукт, который хорошо выглядит.

    Чем сложнее код или конкретное решение, тем сложнее его понимать другим, тем оно более хрупкое.

    Делайте удобные сайты, не статические картинки. Компромиссы для лучшего качества. Придерживайтесь правил. Будьте умнее, трюкуйте!

    Клиент не должен знать ничего о коде. Но должен понимать, что он приобретёт от качественного кода — поддержка, стабильность, и т.д.

    У нас часовой перерыв на обед. И вы не забудьте поесть.

    Следующий Маркус Касэрас «Responsive images: ain't we there yet?» http://t.co/iG5K9OUUzM

    Мы уже близко к отзывчивым картинкам? Да, мы почти уже там. По крайней мере ближе, чем когда либо.

    Картинки занимают 60% от размера средней страницы. И процент растёт.

    Так что такое отзывчивые картинки? Картинки, которые соответствуют ситуации и окружению.

    Рекомендуемая статья: Responsive Images: What We Thought We Needed http://t.co/RESDaaSCWD

    Важный документ для группы стандартизации отзывчивых картинок: Use Cases and Requirements for Standardizing http://t.co/xvc8ETKMiW

    Картинка, которая хорошо сжата для порт. ориентации, может выглядеть плохо в ландш., т.к. становится больше http://t.co/4KbpROtJPz

    Пока нет решения, которое покрывало бы все юзкейсы и нравилось бы всем.

    Решение №1 <picture> (на манер <source> для <video>), предложенное Брюсом Лоусоном http://t.co/wmeQ1iI5WH

    Минусы: несколько элементов; расширяет использование <source> в спец. контекстах (не только для <video>); смешивает MQ и разметку.

    Решение номер 2, стрёмное http://t.co/glWn5cvvV2

    Третье решение: атрибут и похожее свойство srcset, предложено в Apple.

    Плюсы: нравится браузерам, уже внедрено в Safari. Минусы: не решает проблему с кропом, сложный синтаксис, что значит «w»?

    Комьюнити и W3C http://t.co/e8Newav6fz

    Что же нам на самом деле нужно: <img src=“”path-to-image>. И всё.

    Четвёртое решение: использует HTTP для т.н. «client hints», то есть подсказок для клиентской части.

    Плюсы: не нужна доп. разметка; браузер может заявить, что он поддерживает и только тогда получит что-то от сервера.

    Минус: вы не всегда можете управлять заголовками «своего» сервера: Github pages, CDN, дешёвые хостинги.

    Ещё минусы: прокси могут резать непонятное; может потребовать SSL для стабильной работы.

    Набрасываем идеальное решение на лету http://t.co/KoOjYYfCaj

    Следующий шаг http://t.co/hexapNIPLO

    В итоге, получается вариант с <img> элементом и атрибутами src-1, src-2, src-n.

    Становится страшнее http://t.co/9HmmzDPrLa

    Ещё вариант: новый умный формат для изображений.

    Картинка делится по частям внутри: 1-100 кб — одна, 100-300 кб другая и т.д.

    Благодаря этом очень удобно делать кропы, выбирая только часть картинки, делая его на лету.

    Минусы: новый формат изображений; потребует изменений в браузерах и соотв. софте; должен быть стандартизирован.

    Так что же будет?

    Идеально будет внедрить несколько решений прямо сейчас и в итоге прийти к новому формату изображений.

    Один из полифилов для отзывчивых картинок — Picturefill https://t.co/CXi7O6T4QD

    Есть идеи? Присоединяйтесь к Responsive Images Community Group http://t.co/gso88IVX9O

    Возможные расширения для будущего волшебного формата изображений: .ric (resp img community) или .mif (magic image format).

    Следующая на сцене Анжелина Фабро «Return of Inspector Web: Web Components a year later» http://t.co/HMbwBNPY5F

    «Web Components» — это не просто одна технология, но группа, вроде как HTML5.

    Shadow DOM — это способ спрятать элементы внутри другого элемента так, что родительский документ ничего не будет знать о них.

    Отрисовка вложенного Shadow DOM заменяет заменяет родительский элемент в основном DOM. Именно отрисовку, а не элемент в дереве.

    Демка, работает в Chrome Canary: http://t.co/gKimBDlkoF

    Новая @-конструкция в CSS: @host, которая позволяет подняться на уровень выше из вложенного документа. @host { border:red }

    Псевдоэлемент ::part для Shadow DOM http://t.co/f8LxrcK00J

    Поддержка Shadow DOM: Firefox скоро, Chrome да, IE пока никаких новостей, про Safari тоже не очень понятно.

    Содержимое нового элемента <template> будет обработано, но не отрисовано. Он может содержать элементы, стили и т.п.

    <template> это замена <script type="text/template">, которая не хак.

    Есть уже даже такое <link rel="import" href="some-page.html"> Firefox: скоро; Chrome за флагами; про IE никто не знает.

    Специальные элементы: var foo = document.register('my-widget‘); document.body.append(foo);

    Создание нового элемента: <my-widget></my-widget> или <div is="my-widget"> — первый способ лучше.

    my-widget { color:red } my-widget:unresolved { opacity:0 } — если элемент не зарегистрирован в документе, то он не будет виден.

    Поддержка: Firefox и Chrome за флагами; про IE ничего не известно.

    Элемент <element> пока убрали из спецификации. Но способ создавать специальные элементы пока остался.

    Новая штука Dectorators, о ней мало информации и нет собств. спецификации.

    <decorator> — это способ применения презентационной разметки через задание логики в CSS. Что-то вроде шаблонизации, управляемой через CSS.

    Считанные люди понимают как это работает. Звучит сомнительно, но есть некоторые удачные юзкейсы. Хотя нет ни одной реализации и спеки.

    В проектах Мозиллы X-Tags и Brick используются полифилы для реализации части расказанного в докладе.

    Polymer Project — проект, построенный на основе веб-компонентов http://t.co/M2yhTg3aFS

    Polymer 168 кб, Angular 81 кб, X-Tag 63 кб.

    Пример на Polymer, он поддерживает большую часть веб-компонентов, в отл. от других http://t.co/f33kIxVWwY

    То, что делает AngularJS крайне похоже на спецификации веб-компонентов.

    Чем больше создаётся библиотек, чем больше пишется кода, тем ближе спецификации веб-компонентов становятся к стабилизации и внедрению.

    Один человек с любимой фичей ничего не значит. Сообщество, которое использует фичу через трюки или полифилы — повод внедрить это в браузер.

    Визуальный редактор для приложений, использующий веб-компоненты — http://t.co/OnEH5HN3ZX

    Получасовой перерыв: подышим, разомнёмся.

    Следующий Доменик Деникола «The state of JavaScript» http://t.co/FQqCIcOZIx

    95-й ролловеры, валидация форм; 97-й ECMA-262 1, IE4, DHTML; 99-й ES3: function expressions, try/catch/finally/regexp.

    2004: сформировалась WHATWG и сфокусировала внимание на веб-приложениях; 2005 Ajax aka XMLHttpRequest; 2006 jQuery 1.0 и JS в массы.

    2008 V8, началась гонка за скоростью, вышла книга «JS Good Parts» Крокфорда; 2009 ES5, ServerJS, CommonJS, Node.js, PhoneGap, JSConf EU.

    2009-й начало JS-бума; 2010 Backbone.js, RequireJS; 2012 Windows 8, Nodecopter; 2013 Nodebots, Ember, Angular, Ext. Web Manifesto; asm.js

    2014 ES6 финал, ES7 начало, ???

    JS на фронтенде сегодня

    Началось всё с jQuery, потом Backbone.js, потом Angular (гл. фишка компонентная система) и Ember (гл. фишка мультистраничные приложения).

    Почему всё веселье доступно только с библиотеками?

    Потому, что спека Web Components (Веб-компоненты) пока не готова, но будет. Сейчас можно использовать Polymer вместо неё.

    Идею веб-компонентов сначала подхватил Angular.

    Дальше: http://t.co/05Bjg6Ad1s

    Неофиц. лого лучше передаёт мощь Node.js http://t.co/Wr1e0lw4nN

    JS с помощью Node.js можно завести на любом устройстве.

    Windows 8 была этапом, когда крупнейшая компания предложила писать приложения для ОС на JS.

    js-git — http://t.co/n5lwr2FrBI

    PDF через JS (осн. движок PDF в Firefox) — https://t.co/4B4JwhYBKw

    Но мы пошли дальше: Shumway SWF (Flash) через JS — http://t.co/y1UWe5WcrE

    Browserify — способ заставить работать большинство пакетов из npm в браузере http://t.co/L6S16snYVr

    http://t.co/vwQQBeuAck — что-то вроде Minecraft в браузере

    asm.js — это крайне оптимизированное подмножество JS, работающее с нативной скоростью http://t.co/slhZstS3U8

    Идея JS как виртуальной машины для веба. Писать можно на чём угодно, но компилировать в JS.

    .NET, JVM, Ruby, Python, Haskel — всё это можно скомпилировать в JS и запустить в браузере.

    CoffeScript — это конечно круто, но круче компилировать ES6 в обычный JS.

    ES6 в JS? См. traceur https://t.co/jkQFPGLFcw и es6ify https://t.co/GH0M9eVIvw

    Новое в ES6, синтакс: class, extends, super — синтаксический сахар, вместо JS-библиотек; Arrow functions arr.map(x => x*x);

    Destructuring: var {x,y} = getPoint(); Rest/spread: var [first, …rest] = els; Math.max(…myArray);

    Извините, трансляция перегрелась от ES6.

    Изменения в ES6 проходят под лозунгом: мы не можем ничего удалить или исправить из-за совместимости, но можем добавить новое и лучшее.

    Доминик, помимо прочего, автор спецификации промисов (promises), которая вошла в ES6.

    И такое можно будет делать в JS '<a href="${url}">${text}</a>'

    ES7 будет ещё круче.

    Что будет в ES7: Weak references; Async/await function^() {var res = await promise }; Object.observe; Типы значений: встроенные (int) и спец

    И ещё оператор байндинга: var method = ::obj.foo

    Firefox (OS) обычно не прячет новые фичи из ES6 за флагами (многое уже доступно в нём), в отличие от Chrome.

    И закрывает конференцию Брюс Лоусон «HTML.future — what the web needs next» http://t.co/NMyvryz579

    @thebits, Firefox (OS) — это Firefox и Firefox OS

    @fetis26, будут, обычно к ноябрю

    IndexedDB = Index Douchebag

    Веб по всем цифрам проигрывает приложениям (20/80%) и приложения совсем не переходная технология, какой были плагины.

    Брюс поражает аудиторию дизайнерскими способностями http://t.co/m8jjdVqf7m

    DRM для веба продвигают Google и Microsoft — и вряд ли для того, чтобы погубить веб.

    Помимо главных DRM-жупелов, технологию продвигает медиа-гигант BBC, по понятным причинам.

    Если не будет DRM, то медиаконтент будет похоронен из апсторах и исчезнет из веба.

    Большая цель PhoneGap — стать ненужным. Чтобы фронтенд мог появиться на платформах без его помощи.

    Blink и соотв. браузеры внедряет автоматичекую фичу Lazy Layout, которая анализирует раскладку сайта и рисует её быстрее, чем остальное.

    Или <img lazyload src=“…”>, новый способ отложенной загрузки изображений.

    Opera работала над спецификацией W3C Widgets, но спека не выжила. По многим причинам, кроме глупого названия.

    Очень похожие творится в Chrome App Store и даже на Windows 8. Было бы хорошо объединить все хорошие идеи под одним API.

    Та же идея для браузерных расширений: Opera предложила независимый формат для расширений NEX (на основе CRX для Chrome).

    «Мир переходит на смартфоны» местами большой миф, поскольку на плохой сети люди всё равно пользуются Opera Mini.

    Fronteers всё. Спасибо, что читали трансляцию, следите за анонсами следующих включений http://t.co/2G1SzYJ2H5

    }
    ]

    ]
  5. h4 renamed this gist Oct 11, 2013. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  6. h4 revised this gist Oct 11, 2013. 2 changed files with 425 additions and 0 deletions.
    425 changes: 425 additions & 0 deletions 1.fronteers.dump.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,425 @@
    Мы начинаем текстовую трансляцию Fronteers 2013, двухдневной конференции в Амстердаме — http://t.co/QB5SYQ3cMx
    Пол Айриш из Google открывает шестую конференцию Fronteers. Россия на шестом месте по количеству участников, например.
    На сцене Стив Саудерс с докладом «Pre-browsing» http://t.co/AuqI08mSjX
    Сетевые проблемы замедляют веб. Медленные сотовые сети и даже перегруженный WiFi. Мы часто видим белый экран без индикации загрузки.
    Заголовок: отдавайте браузеру нужное ещё до того, как он за этим обратится.
    Кэш не всегда спасает: он может пока не существовать (первый заход), устареть или не соответствовать нужной версии.
    Дело разработчика: <link rel="dns-prefetch… prefetch… prerender. Дело браузера: DNS pre-resolution, TCP pre-connect, prefresh, preload
    Предсказывание действий пользователя: искал Adventure Time, вероятно кликнешь по ссылке. Зашёл на Facebook, значит откроешь новостную ленту.
    Как это работает: <link rel="dns-prefetch" href="//catroonnetwork.com”>, дёшево, открывает TCP-соединения.
    Это работает в Chrome 22+, Chrome Mobile, Firefox, Firefox Mobile.
    Спецификация <link rel="prefetch" href="//example.com/script.js"> для подгрузки ресурсов не слишком подробно описана.
    Работает в: Android 4, Chrome 31, Firefox 23, Firefox Mobile 24, Opera 15+
    Firefox префетчит только один ресурс одновременно, Android 6, Chrome и Opera 10 (6 с одного домена).
    Если во время префетча перейти на другую страницу, то браузер — внезапно! — отменит процедуру. Справедливо для всех браузеров. И странно.
    Это исправляется с помощью Accept-Ranges: bytes, тогда браузер подхватит разорванную предзагрузку. Если конечно это поддерживается сервером.
    Сделать <link rel="prerender" href="//catroonnetwork.com"> это как загрузить страницу в фоновом табе. Рисково, тратит ресурсы и трафик.
    С prerender легко ошибиться, но можно вставлять <link> динамически, что добавляет гибкости.
    С момента нажатия на ссылку до первых байтов ответа, браузер не делает ничего, кроме вытягивания ресурсов, а разработчик не может ничего.
    Chrome в этот момент начинает DNS-prefetch для всех возможных ресурсов, упомянутых на новой странице. Ещё до её отрисовки.
    Аналогичная вещь происходит в тот же момент: TCP-preconnect для избавления от сетевых задержек.
    Кое-что новое: Prefresh™. Когда Chrome начинает предзагружать нужные ресурсы (нужную версию jQuery) сайта, который он уже видел и запомнил.
    Это избавляет от медленных ответов 200, 304 и времени чтения/записи на диск.
    Prefresh включается параметром для запуска Chrome --specual-resource-prefetching
    Если использовать техники адаптивных картинок с помощью JS, то предгазгрузчик браузера не найдёт <img src="…">, т.к. работает до работы с JS
    Лучше положить картинки для вытягивания вручную через JS на другой домен, чтобы они не конфликтовали с автоматикой браузера.
    Этим летом Chrome изменил логику подгрузки JS. Раньше он повышал приоритет JS-файлов внизу страницы, не в пользу ресурсов в начале страницы.
    Рекомендованная книга: «High Performance Browser Networking» Ilya Grigorik http://t.co/Rd3yaR8uof
    После каждого доклада Пол Айриш будет задавать вопросы докладчику. Задать свой вопрос можно @FronteersConf и есть шанс, что его озвучат.
    Пол Айриш озвучил идею положить все популярные JS-библиотеки прямо в браузер, не просто в кэш. Стив сомневается в эффективности решения.
    В: Так класть ли все скрипты в конец страницы? О: Это что-то из 2007 года, сегодня важно правильно применять атрибуты async и defer.
    Следующий доклад «Putting Flexbox into practice» Zoe Mickley Gillenwater (мы пока думаем как написать это по-русски) http://t.co/ALXOgs5q4k
    Зоуи признаётся, что верстала таблицами http://t.co/yJTssEDs24
    Демо-сайт для презентации: http://t.co/qfTmsZmwRa
    Батарея префиксов для работы Flexbox http://t.co/GKYDJ992ti
    Чтобы справляться с префиксами, можно генерировать их на http://t.co/L58z0BYu69 или прямо в SASS https://t.co/wz0i6q6Nd7
    Firefox всё ещё не поддерживает flex-wrap для многострочного Flexbox. Так что это значение пока использовать не стоит.
    Также для работы flex-wrap важно иметь поддержку break-before, break-after, которые поддеживаются только в IE10 и Opera 12.x
    Как свёрстана галерея на http://t.co/qfTmsZmwRa http://t.co/sxosKEhKWN
    Flexbox, в отличие от привычной модели, позволяет удобно и предсказуемо смешивать различные единицы изменения: px, em и проценты.
    Если flex-basis не равен нулю, то могут возникать неочевидные ситуации, когда ширина элемента умножается на flex:N, об этом мало говорят.
    Свойства align-items и align-self исполнили мечту верстальщиков о вертикальном выравнивании.
    Выравнивание с помощью Flexbox с фолбеком для старых браузеров http://t.co/dWCM1shSzx
    Flexbox и фолбеки для старых обычно не конфликтуют, но иногда их лучше разделять с помощью Modernizr, например.
    При использовании выравнивания с помощью justify-content, можно легко делать фолбек на инлайн-блоки, даже не разделяя код.
    Повторимся: всё, о чём идёт речь в докладе Зоуи про Flexbox, проиллюстрировано кодом на сайте http://t.co/qfTmsZmwRa
    @_h4_ принимаются идеи
    Изменение порядка следования блоков с помощью order из Flexbox может дезориентировать при навигации по элементам с помощью фокуса.
    Одна из важных возможностей Flexbox позволяет растягивать один (или несколько) блоков по высоте родителя без указанной высоты.
    Стоит ли вообще использовать Flexbox? Да, говорит Зоуи:
    1. Спецификация не поменяется и Flexbox станет мощным инструментом для построения раскладки и никуда не денется.
    2. Можно начать с небольших демо-сайтов, чтобы понять как Flexbox работает. И начать использовать его для небольших косметических вещей.
    3. Flexbox это весело! Он сильно меняет представление о возможностях раскладки.
    Ссылки и ресуры для презентации по Flexbox: http://t.co/nToGPs98fS
    В: Как с поддержкой Flexbox на мобильных? О: Поддержка отличная, кроме мобильного IE.
    В: Насколько быстро работает Flexbox? О: Новая спецификация (2012) значительно быстрее старой (2009).
    Следующий на сцене: Питер ван дер Зи с докладом «Real-time recompilation of running JavaScript» http://t.co/aoWCaxLXa6
    Питер начал сразу с демо http://t.co/P95swx2pBI
    В этой демке Питер меняет параметры скрипта для Canvas и изменения становятся видны сразу без перезагрузки кода. Даже не мелькает картинка.
    Питер в Твитере @kuvos
    Дальше идёт опасный лайв-кодинг, кстати в WebStorm на Linux.
    Компиляция в случае JS — это подготовка кода для исполнения. И дальше исполнение динамически созданного кода.
    Код для демо http://t.co/r0hs9CQOrt
    Функция возвращает функцию, которая… http://t.co/dYwYm01e96
    Таким образом, мы изменяем код без перезапуска приложения.
    Проблемы подхода http://t.co/aDXwe4bCSP
    Становится всё страшнее http://t.co/aHvwsfsjxB
    Прямой и непрямой eval различаются потерей или сохранением контекста в исполняемой функции http://t.co/eHCRxfnX0s
    Оказалось сложно транслировать текстом лайв-кодинг Питера, поэтому вот вам ссылка на все показанные демо и слайды: https://t.co/geVnxk3kYq
    Следующий Robert Jan Verkade и «On power &amp; responsibility» http://t.co/3JKuARTqns — ни строчки кода в презентации, обещает докладчик.
    @Anton_Diaz, старый был внедрён (и распространён) в основном в WebKit, отсюда и сравнение.
    «Никакого нытья по профессиональным вопросам», — предлагает Роберт http://t.co/JNkCabHhBa
    @SelenIT2, Opera 12.x и IE10
    Дизайнеры или «веб-декораторы» категорически не понимают веб, его принципы работы и жизни.
    Так ли открыт мир фронтенда, как это кажется? Мы, вроде бы, находим решение и тут же делимся им.
    Делится знаниями лишь небольшая группа, так называемая, «элита» любой группы.
    Фронтенд в большинстве — это белые мужчины 25-35 лет с техническим образованием. Нам стоит расширить рамки и пригласить людей других групп.
    Всегда ли мы говорим с коллегами вне нашей группы на одном языке? http://t.co/arMYsstNFq
    Иногда стоит расчехлить PowerPoint, набросать пару диаграмм и графиков и поговорить с менеджером на его языке.
    Внешний вид не только то, как нас принимают с первого взгляда, но и отражение нашей индивидуальности http://t.co/jIPEcdeEj8
    Роберт причисляет себя к творческому поколению Зельдмана и Мейера и противопоставляет его современной тенденции к роботизации разработки.
    Фронтендеры, тоже дизайнеры. Вы анализируете проблему, придумываете решение и создаёте воплощение в реальности. Это сложно роботизировать.
    Традиция визуального дизайна включает способность выслушать потребности клиента, не просто делать красиво что попало.
    Если дизайнер не понимает веб, то может быть эта ваша вина в том, что вы не показали ему простой CSS-файл, не объяснили технологии?
    Никто не знает, что будет через 5 лет. Но нужно не просто быть готовым к переменам, а быть готовым к неожиданным переменам.
    Бывали ли вы на UX-конференции, слушали ли вы внимательно вашего менеджера? Нельзя быть достаточно всезнающим, всегда есть пути дальше.
    Не просто создавайте адаптивные и отзывчивые сайты. Будьте адаптивны и отзывчивы сами!
    «Фронтендеры, хватит ныть. У вас отличная работа, вас никто не лупит по затылку. Это важный шаг», — советует Роберт.
    Дальше: перерыв на обед, 1 час. Поешьте.
    Следующий на сцене Алекс МакКау «Faster JavaScript web apps» http://t.co/DhEw6UcAGF
    Кажущаяся скорость работы приложения или сайта столь же важна, как и реальная.
    Где-то после 1 секунды загрузки сайта пользователь переключается в режим «оно зависло» и уходит или переключается на что-то другое.
    Каскад ресурсов позволяет понять, что скорость зависит от сети и отрисовки http://t.co/Jskfd74Yop
    Что можно сделать для ускорения сетевой части: 1. Быстрый ответ сервера; 2. Используйте KeepAlive; 3. Не используйте редиректы; 4. CDN
    5. Уменьшайте кол-во ресурсов; 6. Минифицируйте JS/CSS; 7. Собирайте ресурсы вместе; 8. GZip; 9. Кэш, отдельная статика;
    10. Кэширование Ajax-запросов; 11. Удаление дублирующего кода; 12. Минификация и сжатие картинок;
    Ускорение на стороне клиента: 1. Режим стандартов IE, переключение X-UA-Comp заголовком сервера; 2. Подключение стилей как можно выше;
    3. Избегать блокирующего JS, async/defer; 4. Отложенная загрузка некритичного JS.
    Модуль ngx_pagspeed для Nginx — http://t.co/x1421Tn7EH
    Снова звучит совет динамически вставлять <link rel="prefetch" href="…"> в <head> с помощью JS.
    Меняйте классы у элементов как можно глубже по DOM, чтобы это оказывало как можно меньшее воздействие на перерисовку.
    Использование createDocumentFragment для хранения DOM-эл. во время динамического создания быстрее для отрисовки, чем постоянная вставка.
    События, связ. с прокруткой можно оборачивать в буферные функции-замедлители, которые будут запускаться каждые 300мс, а не постоянно.
    Используйте перекл. классов, а не инлайн-стили. Не делайте ресайз картинок в CSS. Группируйте изменения в DOM.
    @sapegin, ты отдаёшь себе отчёт, что разговариваешь с трансляцией?
    Сервис PageSpeed Insights, включая API на 25 000 запросов в день — https://t.co/00u7CCtvo7
    Как выглядит утечка памяти в инспекторе http://t.co/OqbbNubpDe
    Сайт Алекса http://t.co/oN5tmjyFhj и он в Твитере @maccaw. Дальше вопросы и ответы.
    Следующий: Пол Льюис из Chrome DevRel «A developer's guide to rendering performance» http://t.co/NtUndpMJFx
    Хотите поговорить про быстродействие? Упоминайте тег #perfmatters, тогда вас услышат и другие.
    Все говорят про загрузку страницы, а я хочу поговорить про то, что происходит потом — как пиксели попадают на экран. То есть про отрисовку.
    После получения ресурсов и построения дерева DOM, происходит комбинация DOM + CSS = дерево отрисовки. Потом создаётся раскладка, aka layout.
    Все фигуры, которые рисует браузер — векторные. Их нужно растеризировать, обрезать и прочее, то есть операция «paint» в инспекторе.
    Все картинки (JPG, GIF, etc) нужно декодировать из форматов и тоже попиксельно нарисовать.
    Подход «инструменты вместо советов» лучше, поскольку советы устаревают, а инструменты просто считают и показывают что оптимизировать.
    «Рифмуется — значит правда», как говорит Джейк Арчибальд (про «tools not rools»)
    Стили, влияющие на перерисовку (и голова Пола). Почти что все http://t.co/25iHYCNlbO
    Библиотека fastdom для ускорения работы с DOM — https://t.co/n6McJ9qtaX В примере она повысила скорость с 9 до 58 fps.
    Если нажать клавишу «h» в инспекторе Chrome, то выбранный элемент спрячется. И можно будет увидеть, как он влиял на быстродействие.
    Если нужно что-то двигать, то убедитесь, что это «что-то» лежит в собственном слое отрисовки. Да-да, тот самый translate3d и другие.
    Обработка и отрисовка картинок — самое тяжёлое и проблемное для быстродействия. Вот бы нам модификатор для «отложенных» картинок, но нет.
    jQuery.animate до сих пор работает через таймауты (неэффективно), а не requestAnimationFrame (лучше), но есть патч, который это включает.
    Тач-обработчики: 1. Уменьшайте количество обработчиков событий; 2. Подключайте событие как можно ближе (по дереву) к целевому элементу.
    3. Подключайте обработчики как можно позднее.
    Прокрутка естественно вызыват перерисовку. Избегайте изменений во время прокрутки. Да, параллакс — это убийство браузера.
    Если вы вставили анимир. GIF-спиннер, то не забудьте не просто прикрыть его загруженным, а выключить, иначе он продолжит отрисовываться.
    Выводы: 1. Быстродействие — это фича, а не юнит-тест. 2. Вы контролируете то, что получает браузе (отключите box-shadow, у нас флэт-дизайн)
    3. Сначала профилируйте, потом исправляйте (это нельзя предсказать). 4. Профилируйте раньше и чаще.
    Следующий на сцене Лукас де Грут «On designing typefaces» http://t.co/I9p3d7hmwB
    Первая мировая война шрифтов: (Adobe) PS vs. TT (Microsoft). Adobe проиграла и была вынуждена раскрыть секреты PostScript.
    Непростой процесс хинтинга шрифтов http://t.co/fCGU1tskWJ
    Хинтинг — это кропотливый ручной процесс искажения оригинальных кривых шрифта для каждого размера, чтобы они ложились на пиксельную сетку.
    Хинтинг в VTT, софте от Microsoft http://t.co/8uCDVT53KA
    Типы хинтинга: ч/б, серый, clear type и самый лучший — комбинация серого и clear type.
    Иногда шрифты хинтуются не под целые пиксели, вроде 1 или 2, а например под 1,3 — такой шрифт Лукас сделал для дисплеев навигаторов Audi.
    Старинная кернинговая пара http://t.co/J4sljhcrvs
    Лукас сделал шрифты Calibri и Consolas для Microsoft.
    Для эффективного кернинга нужны таблицы самых частых буквенных пар для каждого языка.
    Кернинговые просветы между буквами создают своё впечатление для каждого языка. Те же буквы, но разный кернинг: сравните «dog» и «god».
    На ретиновых экранах хинтинг не нужен.
    В LucasFonts только над хинтингом работает целая команда, в частности, один программист и один русский.
    Информация о поддержке и работе веб-шрифтах на сайте компании Лукаса — http://t.co/RQksYmWsJe
    Сложнее всего локализовывать шрифты. Лукас потратил по 6 лет на греческий и кириллицу и арабский. Так что хинтинг — это ерунда, в сравнении.
    Можно определять какое устройство запрашивает шрифт и отдавать его без хинтинга, например, для iOS и OS X.
    Первые буквы Лукас сделал в 6 лет. В туалете. (цитата, со слов его матери)
    Секция примеров из реальной практики: Эд Соуден рассказывает про разработку GOV.UK http://t.co/2qpSCTNq12
    Сайт https://t.co/MukTVJpGK2 построен по принципу «сначала мобильные». Они поддерживают не браузеры, а пользователей. То есть IE6.
    Набор инструментов (SASS и JS), созданный для разработки https://t.co/MukTVJpGK2 — https://t.co/BXaUydHG4m
    Для IE6 сайт отдаётся как для мобильных в одну колонку, чтобы избежать возни с багами, но всё же донести информацию.
    На сайте 7 базовых размеров шрифта, содержащихся в SASS-переменных. Эти переменные реагируют на размер вьюпорта и соотв. изменяются.
    Всё, о чём шла речь, повторимся, на Гитхабе: https://t.co/BXaUydHG4m
    Следующий: Антон Ванхаук рассказывает про сайт планирования транспорта http://t.co/gI2Ksw3DRa http://t.co/2qpSCTNq12
    Его компанию попросили только «немного освежить дизайн», они переделали весь сайт до неузнаваемости.
    Они попытались сделать из сайта не робота «доброе время суток», а попутчика «привет, куда едешь?»
    Новые иконки, эмоциональные фотографии, идея «9292 путешествует с тобой».
    Вместо кучи полей — умное выпадающее поле с подсказками, которое угадывает запрос http://t.co/njG8YAMG90
    Следующая: Элани Оливьер про музей Rijksmuseum http://t.co/2qpSCTNq12
    Сайт музея https://t.co/36UC0Qb0JV
    Все картины музея доступны бесплатно на сайте для загрузки в высоком разрешении.
    Терабайт картин, разбитых на тайлы http://t.co/m63L54QNcU
    Целевая аудитория сайта музея — двое вечером на диване с Айпадом. Идея: не тащить людей в музей, а принести музей в их дом.
    Задача была: сайт для десктопа (IE8+) и мобильных (от телефона до планшета). Всё это под большим контролем за качеством со стороны клиента.
    С проектом торопились, поэтому не тестировали на Андроиде. О чём жалеют, но уповают на сроки.
    Работали по Аджайлу, было проще с приоритетами http://t.co/WVLD6sGBM0
    Разработали в процессе свой CSS-фреймворк, что значительно ускорило разработку после начального этапа.
    Разработали даже API для работы с материалами сайта, должны выпустить скоро.
    В: Как вам удалось выложить все картины бесплатно? О: Цель — привлечь внимание к картинам, чтобы пришли посмотреть на оригинал. Это работает
    На сцене Oliver Reichenstein и «Responsive typography» http://t.co/pAcSBRp0sD
    Доброе утро! Мы начинаем http://t.co/EFE0ElXvM6
    Первая версия сайта iA http://t.co/1QtIA4X9LO
    В вебе всегда было шумно, поэтому Оливер начал первый сайт агентства почти без CSS.
    Всё началось со статьи «Web Design is 95% Typography» в 2006 году http://t.co/3A9gq8cYDU
    Оливер изучал философию и совсем не дизайнер, тем более не специалист по типографике.
    Неужели так сложно выбрать шрифт для брендинга компании? Это кажется таким простым делом.
    Веб был полон Верданой и Ариалом. Потом появилась Джорджия! В 2005 году она выглядела чем-то новым.
    Типографика не о том, как выбирать шрифты, а о том, как именно их использовать.
    Как же начать разбираться? Можно прочитать несколько книг, но они довольно сложные.
    Оливер начал с выбора размера шрифта. Шрифт в вебе слишком мелкий. Всё потому, что веб-дизайнеры скрючены над экраном и напряжены.
    Обычные люди читают текст в вебе расслабленно, на некотором расстоянии от экрана. Им не нужно выискивать пискели.
    Оливер взял книгу, поместил её на комфортное расстояние от глаз и сравнил с экраном. Экран обычно гораздо дальше.
    Оптимальным размером оказались 16 пикселей Джорджией. В 2005 году это звучало полным безумием, особенно на небольших экранах тех лет.
    «Этот человек безумен, как он может заставлять нас читать такой огромный текст?» — говорили многие.
    Для экранов с подсветкой для того, чтобы избежать «эффекта зебры» пришлось также увеличить высоту строки.
    Также было принято, что шрифты с засечками не работают на экране, основанное на каком-то исследовании 1992 года.
    В исследовании сравнивали что-то вроде 10-пиксельного Таймса с Верданой на плохом экране и конечно Вердана выигрывала.
    Ситуация усложнилась: появились телефоны, планшеты, ретина, макбуки с крошечными пикселями.
    Вьюпорт, то есть ширина экрана, это не главное. Крайне важно расстояние до экрана. Поэтому даже формула «16 пикселей» не работает.
    Шрифтовики не сразу поняли, зачем изменять шрифты для экрана. «Ты меняешь высоту строки, которую я установил для шрифта?».
    Первое впечатление от ретины: мы можем просто использовать обычные шрифты, как на бумаге и не париться. Но всё не так, это по-прежнему экран
    Приходится напрягать воображение, чтобы представлять, что справа всё ещё Джорджия http://t.co/d3LKvPtCgz
    Оливер ссылается на статью «Font Hinting and the Future of Responsive Typography» http://t.co/Xnm1TdJM6u
    Даже сглаживание на экране делает шрифт чуть жирнее, чем он есть на самом деле, несмотря на огромные усилия по хинтингу.
    На ретине тонкие шрифты слишком тонкие, на обычном экране чуть толще, чем нужно.
    Так было и раньше: для разной бумаги, разных размеров шрифта нужно было применять разные литеры.
    Чем меньше шрифт, тем жирнее должна быть форма буквы http://t.co/qKgmyoM71X
    Уж не говоря про ловушки для краски на острых стыках кривых.
    Усилия по выбору правильной насыщенности стоят того, хоть и не всегда заметны с первого взгляда http://t.co/uvjX1xqw5I
    Причём от экрана к экрану нужна разная насыщенность. Что сложно объяснить традиционным шрифтовикам.
    Оливер решил воссоздать шрифт из старой книги и так и провалился в кроличью нору http://t.co/2fDwk4nT67
    Одним из первых экспериментов был шрифт iABC http://t.co/YUdoZMz9uZ
    «Ты сделал шрифт за год? Молодец, только не показывай никому», — сказали маститые шрифтовики.
    Сайт iA с отзывчивой типографикой, хотя маститые шрифтовики всё равно видят множество проблем — http://t.co/HwPTLkOo8y
    Оливер опасается открывать шрифтовые программы, чтобы не его снова не засосала эта пучина.
    Следующая на сцене Garann Means «How to rewrite your JS app (at least) 10 times» http://t.co/IxcpS3vWy1
    Гэран написала книгу про Node.js для фронтендеров http://t.co/Gs0JsRegtA
    Писать код просто — планировать его сложно.
    Но мы привыкли слишком приотизировать часть работы, связанную с кодом и забывать про планирование.
    Но если ты переписываешь что-то, то возникают другие проблемы http://t.co/4cwgzWiHVe
    Но есть много причин, чтобы переписать код: новые технологии, апгрейд инфраструктуры, рост бизнеса, рефакторинг или просто ВСЁ СЛОМАЛОСЬ.
    Плохой вариант, когда у вас есть 20% приложения и тут вы понимаете, что всё неправильно и выбрасываете код. Лучше так не делать.
    Плохие идеи по переписыванию чего-то:
    1. Давайте используем новый фреймворк! Куча постов о нём, кто-то его пробовал на хакатоне, это 100% MVC — чем не причина.
    И вы такой пишете пару строк и фреймворк делает инициализацию за вас. И модели, и данные… И тут вас всё-таки приходится писать что-то самому
    Так и работают фреймворки: решают простые проблемы, предлагают абстракции, но не помогают организовать именно ваше приложение.
    Выбирайте фреймворк последним. Это не должно быть причиной для написания приложения. Он должен оставаться инструментом.
    Другой вариант: 2. Давайте напишем наш собственный фреймворк! Весь код будет знаком, специально для вашего приложения, только нужное внутри.
    В итоге вы переписываете уже знакомые вам фреймворки, только с блекджеком и прочим. С минимальной разницей и на это уходит слишком много сил
    Правило: пишите одновременно только одно приложение. Как бы ни круто было писать пять штук сразу.
    Пишите API сразу и сразу сквозь всё приложение, для всех вещей.
    Или так: 3. Так может сделаем всё не на JS, а на сервере… на PHP?
    Когда позже что-то нужно отладить, исправить, дописать — выходит, что было проще использовать один и тот же язык для клиента и сервера.
    Или вот: 4. Давайте перепишем всё сами, даже браузерый DOM.
    Или загрузчик файлов: сделаем его умным, красивым, с прогресс-баром… и Flash-роликом, который всё загружает.
    И тут в JS появляются всякие Flash-привязки. А потом фолбек на обычный загрузчик, а потом ещё и на XHR, а потом…
    Так может сразу стоило начать с базовых вещей, которые есть в браузере и сделать их лучше поверх существующего?
    DOM — плохое место для хранения данных. Это дорого и сложно. Данные заслуживают отдельного, настоящего хранилища.
    Или так: есть плагин или модуль для решения нашей задачи! Кто-то его написал, кому-то он помог. Давайте его возьмём.
    В итоге вам приходится подстраиваться под то, что плагин возвращает, чистить его от лишних классов и кода.
    И в итоге вы его переписываете. Точнее, дописываете на основе существующего. Но это уже не плагин, это кусок чужого кода.
    Так может стоило сразу написать самому, не делая кривые решения на основе чужих ошибок?
    Бывает и так: раз это MVC, то не нужно никакой системы зависимостей.
    Отсутств. модульности приводит к бардаку в коде. Полагаться на глобальные переменные опасно. Приходится следить за порядком подкл. завис-тей
    Или даже: у вас есть ужасный движок и вы находите инструмент или фреймворк, совместимый с этим ужасным. И вы радостно его используете.
    Переписывание внешних мелочей приведёт вас к такому же плохому коду, который у вас есть в основном коде.
    Или так: мы нашли крутую штуку, которая всё решает. Давайте её использовать. Так, что у нас за проблема?
    Но решает ли эта штука проблему? Нужно сначала сформулировать проблему, а потом искать решение.
    Сложно избежать полного переписывания. И лучше конечно сделать так, чтобы переписать всё только один раз, а не делать это постоянно.
    Не начинайте писать код до тех пор, пока у вас нет плана разработки.
    Хорошее план спасёт вас от десятка переписываний приложения.
    Сайт http://t.co/yQ8b19cz4b и Твитер @garannm Гэран.
    Следующий после перерыва: «The importance of Firefox OS» Sergi Mansilla http://t.co/jjbP4YZ8vm
    Мозилла на сцене http://t.co/bo4ER4XBEO
    Сайт Сергия http://t.co/SFYNtl6wmr
    Сергий работает в норвежском телекоме Telenor над Firefox OS
    Проблема: написал один раз… запустил один раз. (На одной платформе). http://t.co/ty9DA9YYkN
    Несовместимые API платформ, плата за разработку, различные инструменты для каждой, ограничения апсторов.
    Пользователи страдают http://t.co/48fNBNp8fK
    Решение — HTML5. Речь о наборе технологий, а не о модном бессмысленном словечке
    WebRTC, IndexedDB, ASM.js, etc.
    Среди современных устройств разве что тостеры не поддерживают HTML5.
    Но мы снова и снова не используем общую платформу в виде HTML5 и пишем разных код для разных устройств.
    HTML5 API одинаковы на всех устройствах, где есть браузеры, совместимые с веб-стандартами.
    Конечно на каждой платформе есть отличия в HTML5, но веб-разработчики привыкли к такому и знают, что с этим делать.
    Backbone, Knockout, Angular, etc. — нет никаких ограничений по использованию подходов к разработке, в отличие от нативных платформ.
    Аргумент про быстродействие веб-приложений — ерунда. Ответ Sencha на заявление про «медленный HTML5» от Facebook http://t.co/Nwqae41IOg
    Конечно это потребовало трюков: <iframe> для каждой из частей приложения, что рендерило их в отдельных процессах.
    Unreal Engine 3 in Firefox with asm.js — http://t.co/TFDQafy1jr
    Ещё аргумент про ужасный JS, как язык. Но JS меняется к лучшему: классы, модульность.
    Кроме того, есть десяток языков, компилирующихся в JS: от CoffeScript до Dart, LiveScript, Objective-J.
    Список вариантов «Web coding beyond JavaScript» http://t.co/RAxf75Geo4
    Другой аргумент: сайты выглядят плохо, незаконченно по сравнению с приложениями. Но дело исключительно в количестве вложенных усилий.
    Первый нормальный аргумент: API к железу устройств. То есть отсутствие доступа к ним из JS.
    Но ситуация улучшается благодаря: Appcelerator, PhoneGap (особенно версия 2).
    Поначалу вещи вроде PhoneGap были даже запрещены в App Store http://t.co/yQSLYjEIxo
    Мозилла помогла разрушить монополию IE в начале нулевых. То же делает и Firefox OS, чтобы освободить разработчиков от рамок платформ.
    Мозилла работает над стандартизацией API для железа устройств. Вы не обязаны пользоваться апстором Мозиллы, хотя он есть.
    Начать делать приложение для Firefox OS просто http://t.co/b0Df8xfI34
    Плюс манифест http://t.co/gizaq7rb0S
    Главная фича Firefox OS — отладка прямо в браузере. Это удобнее, чем всё, что есть на других платформах.
    Есть расширение App Manager для Firefox, которое упрощает разработку и тестирование https://t.co/kzU60lxzPR
    Расширение может подключаться к телефону и получать доступ к приложениям, установленным на телефоне и отлаживать их
    Связь отладчик — телефон двусторонняя.
    Другое расширение: симулятор Firefox OS https://t.co/ZRu6Uf8RBw
    Brick http://t.co/OueTaRov2I — UI-компоненты для современных веб-приложений.
    Набор шаблонов для веб-приложений: https://t.co/Y4NODE22sN Материалы для обучения: https://t.co/xzc1w8IOcX
    В магазине приложений для Firefox OS простой процесс одобрения, без лишних ограничений — https://t.co/Mm3oO1UiOr
    Следующий на сцене Гарри Робертс «Rationalising designs for better quality code» http://t.co/YSQiGrQ1o5
    Второе название доклада; Рационализация дизайна для лучшего качества CSS http://t.co/zy83bFu5Kz
    Третье, честное, название: Почему дизайнеры ненавидят меня.
    Если вы не согласны с идеями Гарри, пишите ваши мнения с тегом #DesignersHateHim
    Разработчики жалуются про плохой PSD не дизайнерам, а коллегам. Много нытья и расстроенных верстальщиков.
    Гарри работает в большой британский медиакомпании Sky http://t.co/q5nVa13Xcd
    Как фронтенд-разрабочик, Гарри связывает программистов с дизайнерами и часто принимает решения по оптимизации дизайна для лучшего соотв.
    Я не анти-дизайнер, как может показаться. Этот подход может не сработать в некоторых ситуациях (для крошечных и огромных сайтов).
    Компромисс — это хорошо: для поддержания хороших отношений с дизайнерами, для совместной эффективной работы, но «нет» значит «нет».
    В Sky до сих пор существует процесс PSD — разработка — и т.д. Но большая организация не меняется в один день.
    PSD — это идея, а не контракт. И он обязательно изменится: сам или уже в коде.
    Типичная фраза «Это возможно, но…» Почти всё можно сделать, но это не значит, что это нужно делать и это хорошая идея в целом.
    Быстродействие — прежде всего. Особенно когда об этом думают даже дизайнеры. И у нас в Sky так и происходит.
    Если можно достичь 80% дизайна используя 20% кода — это именно то, что нужно сделать.
    Это правило называется «80:20», запомните его.
    Интересный вопрос: «Хм, я думал ты хороший разработчик? Почему ты не можешь это реализовать?»
    Работа фронтендера гораздо важнее, чем просто воссоздать PSD в HTML и CSS. Ответственность гораздо выше.
    Чем лучше, ты пишешь код, тем меньше тебе хочется делать это.
    Лучше не писать код, который можно не писать. Перерабатывайте, переиспользуйте, нормализуйте, добавляется абстракций.
    Когда дизайнер делает отступ снизу то 20px, то 22px, то 18px — пользователь не заметит разницы. Это стоит нормализовать до 20px
    Вместо написания селекторов через запятую и 20px для них, лучше использовать переменную $padding: 20px и препроцессор.
    Использовали что-то 3 раза и больше? Вынесите это в абстракцию, переиспользуйте.
    CSS это язык, основанный на правилах (rules). Но если дизан не основан на правилах, то его крайне сложно передать в правилах.
    Стоит помочь дизайнеру начать думать правилами, что не отменяет творчества.
    Правила — это то, что не стоит нарушать, иначе одно потянет за собой другое и от системы ничего не останется.
    Начало обычного проекта: html { font-size:16px; line-height:24px } В итоге 24px становится ключевым размером для отступов всего проекта.
    Случайные числа в отступах и размерах ведут к непониманию. Лучше выбирать базовую величину и считать многое от неё. Например, те же l-h:24px
    Стоит нормализовать и рационализировать решения в дизайне: если уменьшать или увеличивать что-то, то ровно в 2 раза, например.
    Не стоит реализовывать дизайн в лоб — картинка так картинка, можно использовать что угодно и сделать так, чтобы оно просто выглядело похоже.
    Если вместо вставки картинки можно сделать пару рамочек, то лучше упростить её немного и реализовать проще.
    Ищите альтернативы, меняйте дизайн, рационализируйте и нормализуйте его.
    Наша задача не выпустить хороший дизайн, а сделать работающий продукт, который хорошо выглядит.
    Чем сложнее код или конкретное решение, тем сложнее его понимать другим, тем оно более хрупкое.
    Делайте удобные сайты, не статические картинки. Компромиссы для лучшего качества. Придерживайтесь правил. Будьте умнее, трюкуйте!
    Клиент не должен знать ничего о коде. Но должен понимать, что он приобретёт от качественного кода — поддержка, стабильность, и т.д.
    У нас часовой перерыв на обед. И вы не забудьте поесть.
    Следующий Маркус Касэрас «Responsive images: ain't we there yet?» http://t.co/iG5K9OUUzM
    Мы уже близко к отзывчивым картинкам? Да, мы почти уже там. По крайней мере ближе, чем когда либо.
    Картинки занимают 60% от размера средней страницы. И процент растёт.
    Так что такое отзывчивые картинки? Картинки, которые соответствуют ситуации и окружению.
    Рекомендуемая статья: Responsive Images: What We Thought We Needed http://t.co/RESDaaSCWD
    Важный документ для группы стандартизации отзывчивых картинок: Use Cases and Requirements for Standardizing http://t.co/xvc8ETKMiW
    Картинка, которая хорошо сжата для порт. ориентации, может выглядеть плохо в ландш., т.к. становится больше http://t.co/4KbpROtJPz
    Пока нет решения, которое покрывало бы все юзкейсы и нравилось бы всем.
    Решение №1 <picture> (на манер <source> для <video>), предложенное Брюсом Лоусоном http://t.co/wmeQ1iI5WH
    Минусы: несколько элементов; расширяет использование <source> в спец. контекстах (не только для <video>); смешивает MQ и разметку.
    Решение номер 2, стрёмное http://t.co/glWn5cvvV2
    Третье решение: атрибут и похожее свойство srcset, предложено в Apple.
    Плюсы: нравится браузерам, уже внедрено в Safari. Минусы: не решает проблему с кропом, сложный синтаксис, что значит «w»?
    Комьюнити и W3C http://t.co/e8Newav6fz
    Что же нам на самом деле нужно: <img src=“”path-to-image>. И всё.
    Четвёртое решение: использует HTTP для т.н. «client hints», то есть подсказок для клиентской части.
    Плюсы: не нужна доп. разметка; браузер может заявить, что он поддерживает и только тогда получит что-то от сервера.
    Минус: вы не всегда можете управлять заголовками «своего» сервера: Github pages, CDN, дешёвые хостинги.
    Ещё минусы: прокси могут резать непонятное; может потребовать SSL для стабильной работы.
    Набрасываем идеальное решение на лету http://t.co/KoOjYYfCaj
    Следующий шаг http://t.co/hexapNIPLO
    В итоге, получается вариант с <img> элементом и атрибутами src-1, src-2, src-n.
    Становится страшнее http://t.co/9HmmzDPrLa
    Ещё вариант: новый умный формат для изображений.
    Картинка делится по частям внутри: 1-100 кб — одна, 100-300 кб другая и т.д.
    Благодаря этом очень удобно делать кропы, выбирая только часть картинки, делая его на лету.
    Минусы: новый формат изображений; потребует изменений в браузерах и соотв. софте; должен быть стандартизирован.
    Так что же будет?
    Идеально будет внедрить несколько решений прямо сейчас и в итоге прийти к новому формату изображений.
    Один из полифилов для отзывчивых картинок — Picturefill https://t.co/CXi7O6T4QD
    Есть идеи? Присоединяйтесь к Responsive Images Community Group http://t.co/gso88IVX9O
    Возможные расширения для будущего волшебного формата изображений: .ric (resp img community) или .mif (magic image format).
    Следующая на сцене Анжелина Фабро «Return of Inspector Web: Web Components a year later» http://t.co/HMbwBNPY5F
    «Web Components» — это не просто одна технология, но группа, вроде как HTML5.
    Shadow DOM — это способ спрятать элементы внутри другого элемента так, что родительский документ ничего не будет знать о них.
    Отрисовка вложенного Shadow DOM заменяет заменяет родительский элемент в основном DOM. Именно отрисовку, а не элемент в дереве.
    Демка, работает в Chrome Canary: http://t.co/gKimBDlkoF
    Новая @-конструкция в CSS: @host, которая позволяет подняться на уровень выше из вложенного документа. @host { border:red }
    Псевдоэлемент ::part для Shadow DOM http://t.co/f8LxrcK00J
    Поддержка Shadow DOM: Firefox скоро, Chrome да, IE пока никаких новостей, про Safari тоже не очень понятно.
    Содержимое нового элемента <template> будет обработано, но не отрисовано. Он может содержать элементы, стили и т.п.
    <template> это замена <script type="text/template">, которая не хак.
    Есть уже даже такое <link rel="import" href="some-page.html"> Firefox: скоро; Chrome за флагами; про IE никто не знает.
    Специальные элементы: var foo = document.register('my-widget‘); document.body.append(foo);
    Создание нового элемента: <my-widget></my-widget> или <div is="my-widget"> — первый способ лучше.
    my-widget { color:red } my-widget:unresolved { opacity:0 } — если элемент не зарегистрирован в документе, то он не будет виден.
    Поддержка: Firefox и Chrome за флагами; про IE ничего не известно.
    Элемент <element> пока убрали из спецификации. Но способ создавать специальные элементы пока остался.
    Новая штука Dectorators, о ней мало информации и нет собств. спецификации.
    <decorator> — это способ применения презентационной разметки через задание логики в CSS. Что-то вроде шаблонизации, управляемой через CSS.
    Считанные люди понимают как это работает. Звучит сомнительно, но есть некоторые удачные юзкейсы. Хотя нет ни одной реализации и спеки.
    В проектах Мозиллы X-Tags и Brick используются полифилы для реализации части расказанного в докладе.
    Polymer Project — проект, построенный на основе веб-компонентов http://t.co/M2yhTg3aFS
    Polymer 168 кб, Angular 81 кб, X-Tag 63 кб.
    Пример на Polymer, он поддерживает большую часть веб-компонентов, в отл. от других http://t.co/f33kIxVWwY
    То, что делает AngularJS крайне похоже на спецификации веб-компонентов.
    Чем больше создаётся библиотек, чем больше пишется кода, тем ближе спецификации веб-компонентов становятся к стабилизации и внедрению.
    Один человек с любимой фичей ничего не значит. Сообщество, которое использует фичу через трюки или полифилы — повод внедрить это в браузер.
    Визуальный редактор для приложений, использующий веб-компоненты — http://t.co/OnEH5HN3ZX
    Получасовой перерыв: подышим, разомнёмся.
    Следующий Доменик Деникола «The state of JavaScript» http://t.co/FQqCIcOZIx
    95-й ролловеры, валидация форм; 97-й ECMA-262 1, IE4, DHTML; 99-й ES3: function expressions, try/catch/finally/regexp.
    2004: сформировалась WHATWG и сфокусировала внимание на веб-приложениях; 2005 Ajax aka XMLHttpRequest; 2006 jQuery 1.0 и JS в массы.
    2008 V8, началась гонка за скоростью, вышла книга «JS Good Parts» Крокфорда; 2009 ES5, ServerJS, CommonJS, Node.js, PhoneGap, JSConf EU.
    2009-й начало JS-бума; 2010 Backbone.js, RequireJS; 2012 Windows 8, Nodecopter; 2013 Nodebots, Ember, Angular, Ext. Web Manifesto; asm.js
    2014 ES6 финал, ES7 начало, ???
    JS на фронтенде сегодня
    Началось всё с jQuery, потом Backbone.js, потом Angular (гл. фишка компонентная система) и Ember (гл. фишка мультистраничные приложения).
    Почему всё веселье доступно только с библиотеками?
    Потому, что спека Web Components (Веб-компоненты) пока не готова, но будет. Сейчас можно использовать Polymer вместо неё.
    Идею веб-компонентов сначала подхватил Angular.
    Дальше: http://t.co/05Bjg6Ad1s
    Неофиц. лого лучше передаёт мощь Node.js http://t.co/Wr1e0lw4nN
    JS с помощью Node.js можно завести на любом устройстве.
    Windows 8 была этапом, когда крупнейшая компания предложила писать приложения для ОС на JS.
    js-git — http://t.co/n5lwr2FrBI
    PDF через JS (осн. движок PDF в Firefox) — https://t.co/4B4JwhYBKw
    Но мы пошли дальше: Shumway SWF (Flash) через JS — http://t.co/y1UWe5WcrE
    Browserify — способ заставить работать большинство пакетов из npm в браузере http://t.co/L6S16snYVr
    http://t.co/vwQQBeuAck — что-то вроде Minecraft в браузере
    asm.js — это крайне оптимизированное подмножество JS, работающее с нативной скоростью http://t.co/slhZstS3U8
    Идея JS как виртуальной машины для веба. Писать можно на чём угодно, но компилировать в JS.
    .NET, JVM, Ruby, Python, Haskel — всё это можно скомпилировать в JS и запустить в браузере.
    CoffeScript — это конечно круто, но круче компилировать ES6 в обычный JS.
    ES6 в JS? См. traceur https://t.co/jkQFPGLFcw и es6ify https://t.co/GH0M9eVIvw
    Новое в ES6, синтакс: class, extends, super — синтаксический сахар, вместо JS-библиотек; Arrow functions arr.map(x => x*x);
    Destructuring: var {x,y} = getPoint(); Rest/spread: var [first, …rest] = els; Math.max(…myArray);
    Извините, трансляция перегрелась от ES6.
    Изменения в ES6 проходят под лозунгом: мы не можем ничего удалить или исправить из-за совместимости, но можем добавить новое и лучшее.
    Доминик, помимо прочего, автор спецификации промисов (promises), которая вошла в ES6.
    И такое можно будет делать в JS '<a href="${url}">${text}</a>'
    ES7 будет ещё круче.
    Что будет в ES7: Weak references; Async/await function^() {var res = await promise }; Object.observe; Типы значений: встроенные (int) и спец
    И ещё оператор байндинга: var method = ::obj.foo
    Firefox (OS) обычно не прячет новые фичи из ES6 за флагами (многое уже доступно в нём), в отличие от Chrome.
    И закрывает конференцию Брюс Лоусон «HTML.future — what the web needs next» http://t.co/NMyvryz579
    @thebits, Firefox (OS) — это Firefox и Firefox OS
    @fetis26, будут, обычно к ноябрю
    IndexedDB = Index Douchebag
    Веб по всем цифрам проигрывает приложениям (20/80%) и приложения совсем не переходная технология, какой были плагины.
    Брюс поражает аудиторию дизайнерскими способностями http://t.co/m8jjdVqf7m
    DRM для веба продвигают Google и Microsoft — и вряд ли для того, чтобы погубить веб.
    Помимо главных DRM-жупелов, технологию продвигает медиа-гигант BBC, по понятным причинам.
    Если не будет DRM, то медиаконтент будет похоронен из апсторах и исчезнет из веба.
    Большая цель PhoneGap — стать ненужным. Чтобы фронтенд мог появиться на платформах без его помощи.
    Blink и соотв. браузеры внедряет автоматичекую фичу Lazy Layout, которая анализирует раскладку сайта и рисует её быстрее, чем остальное.
    Или <img lazyload src=“…”>, новый способ отложенной загрузки изображений.
    Opera работала над спецификацией W3C Widgets, но спека не выжила. По многим причинам, кроме глупого названия.
    Очень похожие творится в Chrome App Store и даже на Windows 8. Было бы хорошо объединить все хорошие идеи под одним API.
    Та же идея для браузерных расширений: Opera предложила независимый формат для расширений NEX (на основе CRX для Chrome).
    «Мир переходит на смартфоны» местами большой миф, поскольку на плохой сети люди всё равно пользуются Opera Mini.
    Fronteers всё. Спасибо, что читали трансляцию, следите за анонсами следующих включений http://t.co/2G1SzYJ2H5
    }
    ]
    File renamed without changes.
  7. h4 revised this gist Oct 11, 2013. 1 changed file with 1271 additions and 1273 deletions.
    2,544 changes: 1,271 additions & 1,273 deletions fronters.dump.json
    1,271 additions, 1,273 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
  8. h4 revised this gist Oct 11, 2013. 1 changed file with 0 additions and 500 deletions.
    500 changes: 0 additions & 500 deletions fronters.dump.json
    Original file line number Diff line number Diff line change
    @@ -1620,16 +1620,6 @@ id: 388639690020356100,
    created_at: "Fri Oct 11 12:18:17 +0000 2013"
    },
    {
    text: "Плюсы: нравится браузерам, уже внедрено в Safari. Минусы: не решает проблему с кропом, сложный синтаксис, что значит «w»?",
    id: 388639690020356100,
    created_at: "Fri Oct 11 12:18:17 +0000 2013"
    },
    {
    text: "Комьюнити и W3C http://t.co/e8Newav6fz",
    id: 388639779220647940,
    created_at: "Fri Oct 11 12:18:38 +0000 2013"
    },
    {
    text: "Комьюнити и W3C http://t.co/e8Newav6fz",
    id: 388639779220647940,
    created_at: "Fri Oct 11 12:18:38 +0000 2013"
    @@ -1640,16 +1630,6 @@ id: 388639901119705100,
    created_at: "Fri Oct 11 12:19:07 +0000 2013"
    },
    {
    text: "Что же нам на самом деле нужно: &lt;img src=“”path-to-image&gt;. И всё.",
    id: 388639901119705100,
    created_at: "Fri Oct 11 12:19:07 +0000 2013"
    },
    {
    text: "Четвёртое решение: использует HTTP для т.н. «client hints», то есть подсказок для клиентской части.",
    id: 388640105738801150,
    created_at: "Fri Oct 11 12:19:56 +0000 2013"
    },
    {
    text: "Четвёртое решение: использует HTTP для т.н. «client hints», то есть подсказок для клиентской части.",
    id: 388640105738801150,
    created_at: "Fri Oct 11 12:19:56 +0000 2013"
    @@ -1660,16 +1640,6 @@ id: 388640344067559400,
    created_at: "Fri Oct 11 12:20:53 +0000 2013"
    },
    {
    text: "Плюсы: не нужна доп. разметка; браузер может заявить, что он поддерживает и только тогда получит что-то от сервера.",
    id: 388640344067559400,
    created_at: "Fri Oct 11 12:20:53 +0000 2013"
    },
    {
    text: "Минус: вы не всегда можете управлять заголовками «своего» сервера: Github pages, CDN, дешёвые хостинги.",
    id: 388640525399887900,
    created_at: "Fri Oct 11 12:21:36 +0000 2013"
    },
    {
    text: "Минус: вы не всегда можете управлять заголовками «своего» сервера: Github pages, CDN, дешёвые хостинги.",
    id: 388640525399887900,
    created_at: "Fri Oct 11 12:21:36 +0000 2013"
    @@ -1680,16 +1650,6 @@ id: 388640838777327600,
    created_at: "Fri Oct 11 12:22:51 +0000 2013"
    },
    {
    text: "Ещё минусы: прокси могут резать непонятное; может потребовать SSL для стабильной работы.",
    id: 388640838777327600,
    created_at: "Fri Oct 11 12:22:51 +0000 2013"
    },
    {
    text: "Набрасываем идеальное решение на лету http://t.co/KoOjYYfCaj",
    id: 388641449128230900,
    created_at: "Fri Oct 11 12:25:16 +0000 2013"
    },
    {
    text: "Набрасываем идеальное решение на лету http://t.co/KoOjYYfCaj",
    id: 388641449128230900,
    created_at: "Fri Oct 11 12:25:16 +0000 2013"
    @@ -1700,26 +1660,11 @@ id: 388641573082525700,
    created_at: "Fri Oct 11 12:25:46 +0000 2013"
    },
    {
    text: "Следующий шаг http://t.co/hexapNIPLO",
    id: 388641573082525700,
    created_at: "Fri Oct 11 12:25:46 +0000 2013"
    },
    {
    text: "В итоге, получается вариант с &lt;img&gt; элементом и атрибутами src-1, src-2, src-n.",
    id: 388642296109232100,
    created_at: "Fri Oct 11 12:28:38 +0000 2013"
    },
    {
    text: "В итоге, получается вариант с &lt;img&gt; элементом и атрибутами src-1, src-2, src-n.",
    id: 388642296109232100,
    created_at: "Fri Oct 11 12:28:38 +0000 2013"
    },
    {
    text: "Становится страшнее http://t.co/9HmmzDPrLa",
    id: 388642696828817400,
    created_at: "Fri Oct 11 12:30:14 +0000 2013"
    },
    {
    text: "Становится страшнее http://t.co/9HmmzDPrLa",
    id: 388642696828817400,
    created_at: "Fri Oct 11 12:30:14 +0000 2013"
    @@ -1730,26 +1675,11 @@ id: 388642898830721000,
    created_at: "Fri Oct 11 12:31:02 +0000 2013"
    },
    {
    text: "Ещё вариант: новый умный формат для изображений.",
    id: 388642898830721000,
    created_at: "Fri Oct 11 12:31:02 +0000 2013"
    },
    {
    text: "Картинка делится по частям внутри: 1-100 кб — одна, 100-300 кб другая и т.д.",
    id: 388643101289758700,
    created_at: "Fri Oct 11 12:31:50 +0000 2013"
    },
    {
    text: "Картинка делится по частям внутри: 1-100 кб — одна, 100-300 кб другая и т.д.",
    id: 388643101289758700,
    created_at: "Fri Oct 11 12:31:50 +0000 2013"
    },
    {
    text: "Благодаря этом очень удобно делать кропы, выбирая только часть картинки, делая его на лету.",
    id: 388643360841682940,
    created_at: "Fri Oct 11 12:32:52 +0000 2013"
    },
    {
    text: "Благодаря этом очень удобно делать кропы, выбирая только часть картинки, делая его на лету.",
    id: 388643360841682940,
    created_at: "Fri Oct 11 12:32:52 +0000 2013"
    @@ -1760,26 +1690,11 @@ id: 388643623153467400,
    created_at: "Fri Oct 11 12:33:55 +0000 2013"
    },
    {
    text: "Минусы: новый формат изображений; потребует изменений в браузерах и соотв. софте; должен быть стандартизирован.",
    id: 388643623153467400,
    created_at: "Fri Oct 11 12:33:55 +0000 2013"
    },
    {
    text: "Так что же будет?",
    id: 388643683622744060,
    created_at: "Fri Oct 11 12:34:09 +0000 2013"
    },
    {
    text: "Так что же будет?",
    id: 388643683622744060,
    created_at: "Fri Oct 11 12:34:09 +0000 2013"
    },
    {
    text: "Идеально будет внедрить несколько решений прямо сейчас и в итоге прийти к новому формату изображений.",
    id: 388644018869268500,
    created_at: "Fri Oct 11 12:35:29 +0000 2013"
    },
    {
    text: "Идеально будет внедрить несколько решений прямо сейчас и в итоге прийти к новому формату изображений.",
    id: 388644018869268500,
    created_at: "Fri Oct 11 12:35:29 +0000 2013"
    @@ -1790,16 +1705,6 @@ id: 388645134700912640,
    created_at: "Fri Oct 11 12:39:55 +0000 2013"
    },
    {
    text: "Один из полифилов для отзывчивых картинок — Picturefill https://t.co/CXi7O6T4QD",
    id: 388645134700912640,
    created_at: "Fri Oct 11 12:39:55 +0000 2013"
    },
    {
    text: "Есть идеи? Присоединяйтесь к Responsive Images Community Group http://t.co/gso88IVX9O",
    id: 388645367912624100,
    created_at: "Fri Oct 11 12:40:51 +0000 2013"
    },
    {
    text: "Есть идеи? Присоединяйтесь к Responsive Images Community Group http://t.co/gso88IVX9O",
    id: 388645367912624100,
    created_at: "Fri Oct 11 12:40:51 +0000 2013"
    @@ -1810,16 +1715,6 @@ id: 388645982394937340,
    created_at: "Fri Oct 11 12:43:17 +0000 2013"
    },
    {
    text: "Возможные расширения для будущего волшебного формата изображений: .ric (resp img community) или .mif (magic image format).",
    id: 388645982394937340,
    created_at: "Fri Oct 11 12:43:17 +0000 2013"
    },
    {
    text: "Следующая на сцене Анжелина Фабро «Return of Inspector Web: Web Components a year later» http://t.co/HMbwBNPY5F",
    id: 388646325124079600,
    created_at: "Fri Oct 11 12:44:39 +0000 2013"
    },
    {
    text: "Следующая на сцене Анжелина Фабро «Return of Inspector Web: Web Components a year later» http://t.co/HMbwBNPY5F",
    id: 388646325124079600,
    created_at: "Fri Oct 11 12:44:39 +0000 2013"
    @@ -1830,16 +1725,6 @@ id: 388647030299840500,
    created_at: "Fri Oct 11 12:47:27 +0000 2013"
    },
    {
    text: "«Web Components» — это не просто одна технология, но группа, вроде как HTML5.",
    id: 388647030299840500,
    created_at: "Fri Oct 11 12:47:27 +0000 2013"
    },
    {
    text: "Shadow DOM — это способ спрятать элементы внутри другого элемента так, что родительский документ ничего не будет знать о них.",
    id: 388647284961189900,
    created_at: "Fri Oct 11 12:48:28 +0000 2013"
    },
    {
    text: "Shadow DOM — это способ спрятать элементы внутри другого элемента так, что родительский документ ничего не будет знать о них.",
    id: 388647284961189900,
    created_at: "Fri Oct 11 12:48:28 +0000 2013"
    @@ -1850,16 +1735,6 @@ id: 388647943546605600,
    created_at: "Fri Oct 11 12:51:05 +0000 2013"
    },
    {
    text: "Отрисовка вложенного Shadow DOM заменяет заменяет родительский элемент в основном DOM. Именно отрисовку, а не элемент в дереве.",
    id: 388647943546605600,
    created_at: "Fri Oct 11 12:51:05 +0000 2013"
    },
    {
    text: "Демка, работает в Chrome Canary: http://t.co/gKimBDlkoF",
    id: 388648597568626700,
    created_at: "Fri Oct 11 12:53:41 +0000 2013"
    },
    {
    text: "Демка, работает в Chrome Canary: http://t.co/gKimBDlkoF",
    id: 388648597568626700,
    created_at: "Fri Oct 11 12:53:41 +0000 2013"
    @@ -1870,16 +1745,6 @@ id: 388649002591588350,
    created_at: "Fri Oct 11 12:55:17 +0000 2013"
    },
    {
    text: "Новая @-конструкция в CSS: @host, которая позволяет подняться на уровень выше из вложенного документа. @host { border:red }",
    id: 388649002591588350,
    created_at: "Fri Oct 11 12:55:17 +0000 2013"
    },
    {
    text: "Псевдоэлемент ::part для Shadow DOM http://t.co/f8LxrcK00J",
    id: 388649684652539900,
    created_at: "Fri Oct 11 12:58:00 +0000 2013"
    },
    {
    text: "Псевдоэлемент ::part для Shadow DOM http://t.co/f8LxrcK00J",
    id: 388649684652539900,
    created_at: "Fri Oct 11 12:58:00 +0000 2013"
    @@ -1890,16 +1755,6 @@ id: 388650096562552800,
    created_at: "Fri Oct 11 12:59:38 +0000 2013"
    },
    {
    text: "Поддержка Shadow DOM: Firefox скоро, Chrome да, IE пока никаких новостей, про Safari тоже не очень понятно.",
    id: 388650096562552800,
    created_at: "Fri Oct 11 12:59:38 +0000 2013"
    },
    {
    text: "Содержимое нового элемента &lt;template&gt; будет обработано, но не отрисовано. Он может содержать элементы, стили и т.п.",
    id: 388650391170461700,
    created_at: "Fri Oct 11 13:00:48 +0000 2013"
    },
    {
    text: "Содержимое нового элемента &lt;template&gt; будет обработано, но не отрисовано. Он может содержать элементы, стили и т.п.",
    id: 388650391170461700,
    created_at: "Fri Oct 11 13:00:48 +0000 2013"
    @@ -1910,16 +1765,6 @@ id: 388650748911054850,
    created_at: "Fri Oct 11 13:02:13 +0000 2013"
    },
    {
    text: "&lt;template&gt; это замена &lt;script type="text/template"&gt;, которая не хак.",
    id: 388650748911054850,
    created_at: "Fri Oct 11 13:02:13 +0000 2013"
    },
    {
    text: "Есть уже даже такое &lt;link rel="import" href="some-page.html"&gt; Firefox: скоро; Chrome за флагами; про IE никто не знает.",
    id: 388651469383401500,
    created_at: "Fri Oct 11 13:05:05 +0000 2013"
    },
    {
    text: "Есть уже даже такое &lt;link rel="import" href="some-page.html"&gt; Firefox: скоро; Chrome за флагами; про IE никто не знает.",
    id: 388651469383401500,
    created_at: "Fri Oct 11 13:05:05 +0000 2013"
    @@ -1930,16 +1775,6 @@ id: 388651758291263500,
    created_at: "Fri Oct 11 13:06:14 +0000 2013"
    },
    {
    text: "Специальные элементы: var foo = document.register('my-widget‘); document.body.append(foo);",
    id: 388651758291263500,
    created_at: "Fri Oct 11 13:06:14 +0000 2013"
    },
    {
    text: "Создание нового элемента: &lt;my-widget&gt;&lt;/my-widget&gt; или &lt;div is="my-widget"&gt; — первый способ лучше.",
    id: 388652028794511360,
    created_at: "Fri Oct 11 13:07:19 +0000 2013"
    },
    {
    text: "Создание нового элемента: &lt;my-widget&gt;&lt;/my-widget&gt; или &lt;div is="my-widget"&gt; — первый способ лучше.",
    id: 388652028794511360,
    created_at: "Fri Oct 11 13:07:19 +0000 2013"
    @@ -1950,26 +1785,11 @@ id: 388652395968090100,
    created_at: "Fri Oct 11 13:08:46 +0000 2013"
    },
    {
    text: "my-widget { color:red } my-widget:unresolved { opacity:0 } — если элемент не зарегистрирован в документе, то он не будет виден.",
    id: 388652395968090100,
    created_at: "Fri Oct 11 13:08:46 +0000 2013"
    },
    {
    text: "Поддержка: Firefox и Chrome за флагами; про IE ничего не известно.",
    id: 388652546778484740,
    created_at: "Fri Oct 11 13:09:22 +0000 2013"
    },
    {
    text: "Поддержка: Firefox и Chrome за флагами; про IE ничего не известно.",
    id: 388652546778484740,
    created_at: "Fri Oct 11 13:09:22 +0000 2013"
    },
    {
    text: "Элемент &lt;element&gt; пока убрали из спецификации. Но способ создавать специальные элементы пока остался.",
    id: 388652816463835140,
    created_at: "Fri Oct 11 13:10:26 +0000 2013"
    },
    {
    text: "Элемент &lt;element&gt; пока убрали из спецификации. Но способ создавать специальные элементы пока остался.",
    id: 388652816463835140,
    created_at: "Fri Oct 11 13:10:26 +0000 2013"
    @@ -1980,26 +1800,11 @@ id: 388653030021017600,
    created_at: "Fri Oct 11 13:11:17 +0000 2013"
    },
    {
    text: "Новая штука Dectorators, о ней мало информации и нет собств. спецификации.",
    id: 388653030021017600,
    created_at: "Fri Oct 11 13:11:17 +0000 2013"
    },
    {
    text: "&lt;decorator&gt; — это способ применения презентационной разметки через задание логики в CSS. Что-то вроде шаблонизации, управляемой через CSS.",
    id: 388653685825605600,
    created_at: "Fri Oct 11 13:13:54 +0000 2013"
    },
    {
    text: "&lt;decorator&gt; — это способ применения презентационной разметки через задание логики в CSS. Что-то вроде шаблонизации, управляемой через CSS.",
    id: 388653685825605600,
    created_at: "Fri Oct 11 13:13:54 +0000 2013"
    },
    {
    text: "Считанные люди понимают как это работает. Звучит сомнительно, но есть некоторые удачные юзкейсы. Хотя нет ни одной реализации и спеки.",
    id: 388654004626288640,
    created_at: "Fri Oct 11 13:15:10 +0000 2013"
    },
    {
    text: "Считанные люди понимают как это работает. Звучит сомнительно, но есть некоторые удачные юзкейсы. Хотя нет ни одной реализации и спеки.",
    id: 388654004626288640,
    created_at: "Fri Oct 11 13:15:10 +0000 2013"
    @@ -2010,26 +1815,11 @@ id: 388654314979610600,
    created_at: "Fri Oct 11 13:16:24 +0000 2013"
    },
    {
    text: "В проектах Мозиллы X-Tags и Brick используются полифилы для реализации части расказанного в докладе.",
    id: 388654314979610600,
    created_at: "Fri Oct 11 13:16:24 +0000 2013"
    },
    {
    text: "Polymer Project — проект, построенный на основе веб-компонентов http://t.co/M2yhTg3aFS",
    id: 388655202456588300,
    created_at: "Fri Oct 11 13:19:55 +0000 2013"
    },
    {
    text: "Polymer Project — проект, построенный на основе веб-компонентов http://t.co/M2yhTg3aFS",
    id: 388655202456588300,
    created_at: "Fri Oct 11 13:19:55 +0000 2013"
    },
    {
    text: "Polymer 168 кб, Angular 81 кб, X-Tag 63 кб.",
    id: 388655624843960300,
    created_at: "Fri Oct 11 13:21:36 +0000 2013"
    },
    {
    text: "Polymer 168 кб, Angular 81 кб, X-Tag 63 кб.",
    id: 388655624843960300,
    created_at: "Fri Oct 11 13:21:36 +0000 2013"
    @@ -2040,16 +1830,6 @@ id: 388655892780298240,
    created_at: "Fri Oct 11 13:22:40 +0000 2013"
    },
    {
    text: "Пример на Polymer, он поддерживает большую часть веб-компонентов, в отл. от других http://t.co/f33kIxVWwY",
    id: 388655892780298240,
    created_at: "Fri Oct 11 13:22:40 +0000 2013"
    },
    {
    text: "То, что делает AngularJS крайне похоже на спецификации веб-компонентов.",
    id: 388656124389769200,
    created_at: "Fri Oct 11 13:23:35 +0000 2013"
    },
    {
    text: "То, что делает AngularJS крайне похоже на спецификации веб-компонентов.",
    id: 388656124389769200,
    created_at: "Fri Oct 11 13:23:35 +0000 2013"
    @@ -2060,16 +1840,6 @@ id: 388656663315906560,
    created_at: "Fri Oct 11 13:25:44 +0000 2013"
    },
    {
    text: "Чем больше создаётся библиотек, чем больше пишется кода, тем ближе спецификации веб-компонентов становятся к стабилизации и внедрению.",
    id: 388656663315906560,
    created_at: "Fri Oct 11 13:25:44 +0000 2013"
    },
    {
    text: "Один человек с любимой фичей ничего не значит. Сообщество, которое использует фичу через трюки или полифилы — повод внедрить это в браузер.",
    id: 388657210945191940,
    created_at: "Fri Oct 11 13:27:54 +0000 2013"
    },
    {
    text: "Один человек с любимой фичей ничего не значит. Сообщество, которое использует фичу через трюки или полифилы — повод внедрить это в браузер.",
    id: 388657210945191940,
    created_at: "Fri Oct 11 13:27:54 +0000 2013"
    @@ -2080,16 +1850,6 @@ id: 388657722084053000,
    created_at: "Fri Oct 11 13:29:56 +0000 2013"
    },
    {
    text: "Визуальный редактор для приложений, использующий веб-компоненты — http://t.co/OnEH5HN3ZX",
    id: 388657722084053000,
    created_at: "Fri Oct 11 13:29:56 +0000 2013"
    },
    {
    text: "Получасовой перерыв: подышим, разомнёмся.",
    id: 388658846937673700,
    created_at: "Fri Oct 11 13:34:24 +0000 2013"
    },
    {
    text: "Получасовой перерыв: подышим, разомнёмся.",
    id: 388658846937673700,
    created_at: "Fri Oct 11 13:34:24 +0000 2013"
    @@ -2100,16 +1860,6 @@ id: 388665610110251000,
    created_at: "Fri Oct 11 14:01:17 +0000 2013"
    },
    {
    text: "Следующий Доменик Деникола «The state of JavaScript» http://t.co/FQqCIcOZIx",
    id: 388665610110251000,
    created_at: "Fri Oct 11 14:01:17 +0000 2013"
    },
    {
    text: "95-й ролловеры, валидация форм; 97-й ECMA-262 1, IE4, DHTML; 99-й ES3: function expressions, try/catch/finally/regexp.",
    id: 388666059441831940,
    created_at: "Fri Oct 11 14:03:04 +0000 2013"
    },
    {
    text: "95-й ролловеры, валидация форм; 97-й ECMA-262 1, IE4, DHTML; 99-й ES3: function expressions, try/catch/finally/regexp.",
    id: 388666059441831940,
    created_at: "Fri Oct 11 14:03:04 +0000 2013"
    @@ -2120,16 +1870,6 @@ id: 388666453043740700,
    created_at: "Fri Oct 11 14:04:38 +0000 2013"
    },
    {
    text: "2004: сформировалась WHATWG и сфокусировала внимание на веб-приложениях; 2005 Ajax aka XMLHttpRequest; 2006 jQuery 1.0 и JS в массы.",
    id: 388666453043740700,
    created_at: "Fri Oct 11 14:04:38 +0000 2013"
    },
    {
    text: "2008 V8, началась гонка за скоростью, вышла книга «JS Good Parts» Крокфорда; 2009 ES5, ServerJS, CommonJS, Node.js, PhoneGap, JSConf EU.",
    id: 388666851997519900,
    created_at: "Fri Oct 11 14:06:13 +0000 2013"
    },
    {
    text: "2008 V8, началась гонка за скоростью, вышла книга «JS Good Parts» Крокфорда; 2009 ES5, ServerJS, CommonJS, Node.js, PhoneGap, JSConf EU.",
    id: 388666851997519900,
    created_at: "Fri Oct 11 14:06:13 +0000 2013"
    @@ -2140,16 +1880,6 @@ id: 388667281016102900,
    created_at: "Fri Oct 11 14:07:55 +0000 2013"
    },
    {
    text: "2009-й начало JS-бума; 2010 Backbone.js, RequireJS; 2012 Windows 8, Nodecopter; 2013 Nodebots, Ember, Angular, Ext. Web Manifesto; asm.js",
    id: 388667281016102900,
    created_at: "Fri Oct 11 14:07:55 +0000 2013"
    },
    {
    text: "2014 ES6 финал, ES7 начало, ???",
    id: 388667365313245200,
    created_at: "Fri Oct 11 14:08:15 +0000 2013"
    },
    {
    text: "2014 ES6 финал, ES7 начало, ???",
    id: 388667365313245200,
    created_at: "Fri Oct 11 14:08:15 +0000 2013"
    @@ -2160,16 +1890,6 @@ id: 388667442777841660,
    created_at: "Fri Oct 11 14:08:34 +0000 2013"
    },
    {
    text: "JS на фронтенде сегодня",
    id: 388667442777841660,
    created_at: "Fri Oct 11 14:08:34 +0000 2013"
    },
    {
    text: "Началось всё с jQuery, потом Backbone.js, потом Angular (гл. фишка компонентная система) и Ember (гл. фишка мультистраничные приложения).",
    id: 388667818776199200,
    created_at: "Fri Oct 11 14:10:03 +0000 2013"
    },
    {
    text: "Началось всё с jQuery, потом Backbone.js, потом Angular (гл. фишка компонентная система) и Ember (гл. фишка мультистраничные приложения).",
    id: 388667818776199200,
    created_at: "Fri Oct 11 14:10:03 +0000 2013"
    @@ -2180,16 +1900,6 @@ id: 388667970928783360,
    created_at: "Fri Oct 11 14:10:40 +0000 2013"
    },
    {
    text: "Почему всё веселье доступно только с библиотеками?",
    id: 388667970928783360,
    created_at: "Fri Oct 11 14:10:40 +0000 2013"
    },
    {
    text: "Потому, что спека Web Components (Веб-компоненты) пока не готова, но будет. Сейчас можно использовать Polymer вместо неё.",
    id: 388668180966944800,
    created_at: "Fri Oct 11 14:11:30 +0000 2013"
    },
    {
    text: "Потому, что спека Web Components (Веб-компоненты) пока не готова, но будет. Сейчас можно использовать Polymer вместо неё.",
    id: 388668180966944800,
    created_at: "Fri Oct 11 14:11:30 +0000 2013"
    @@ -2200,26 +1910,11 @@ id: 388668272692199400,
    created_at: "Fri Oct 11 14:11:51 +0000 2013"
    },
    {
    text: "Идею веб-компонентов сначала подхватил Angular.",
    id: 388668272692199400,
    created_at: "Fri Oct 11 14:11:51 +0000 2013"
    },
    {
    text: "Дальше: http://t.co/05Bjg6Ad1s",
    id: 388668391240003600,
    created_at: "Fri Oct 11 14:12:20 +0000 2013"
    },
    {
    text: "Дальше: http://t.co/05Bjg6Ad1s",
    id: 388668391240003600,
    created_at: "Fri Oct 11 14:12:20 +0000 2013"
    },
    {
    text: "Неофиц. лого лучше передаёт мощь Node.js http://t.co/Wr1e0lw4nN",
    id: 388668715853938700,
    created_at: "Fri Oct 11 14:13:37 +0000 2013"
    },
    {
    text: "Неофиц. лого лучше передаёт мощь Node.js http://t.co/Wr1e0lw4nN",
    id: 388668715853938700,
    created_at: "Fri Oct 11 14:13:37 +0000 2013"
    @@ -2230,26 +1925,11 @@ id: 388669650206478340,
    created_at: "Fri Oct 11 14:17:20 +0000 2013"
    },
    {
    text: "JS с помощью Node.js можно завести на любом устройстве.",
    id: 388669650206478340,
    created_at: "Fri Oct 11 14:17:20 +0000 2013"
    },
    {
    text: "Windows 8 была этапом, когда крупнейшая компания предложила писать приложения для ОС на JS.",
    id: 388669828573446140,
    created_at: "Fri Oct 11 14:18:02 +0000 2013"
    },
    {
    text: "Windows 8 была этапом, когда крупнейшая компания предложила писать приложения для ОС на JS.",
    id: 388669828573446140,
    created_at: "Fri Oct 11 14:18:02 +0000 2013"
    },
    {
    text: "js-git — http://t.co/n5lwr2FrBI",
    id: 388670176784576500,
    created_at: "Fri Oct 11 14:19:25 +0000 2013"
    },
    {
    text: "js-git — http://t.co/n5lwr2FrBI",
    id: 388670176784576500,
    created_at: "Fri Oct 11 14:19:25 +0000 2013"
    @@ -2260,26 +1940,11 @@ id: 388670326718365700,
    created_at: "Fri Oct 11 14:20:01 +0000 2013"
    },
    {
    text: "PDF через JS (осн. движок PDF в Firefox) — https://t.co/4B4JwhYBKw",
    id: 388670326718365700,
    created_at: "Fri Oct 11 14:20:01 +0000 2013"
    },
    {
    text: "Но мы пошли дальше: Shumway SWF (Flash) через JS — http://t.co/y1UWe5WcrE",
    id: 388670495438417900,
    created_at: "Fri Oct 11 14:20:41 +0000 2013"
    },
    {
    text: "Но мы пошли дальше: Shumway SWF (Flash) через JS — http://t.co/y1UWe5WcrE",
    id: 388670495438417900,
    created_at: "Fri Oct 11 14:20:41 +0000 2013"
    },
    {
    text: "Browserify — способ заставить работать большинство пакетов из npm в браузере http://t.co/L6S16snYVr",
    id: 388670955545178100,
    created_at: "Fri Oct 11 14:22:31 +0000 2013"
    },
    {
    text: "Browserify — способ заставить работать большинство пакетов из npm в браузере http://t.co/L6S16snYVr",
    id: 388670955545178100,
    created_at: "Fri Oct 11 14:22:31 +0000 2013"
    @@ -2290,16 +1955,6 @@ id: 388671186097688600,
    created_at: "Fri Oct 11 14:23:26 +0000 2013"
    },
    {
    text: "http://t.co/vwQQBeuAck — что-то вроде Minecraft в браузере",
    id: 388671186097688600,
    created_at: "Fri Oct 11 14:23:26 +0000 2013"
    },
    {
    text: "asm.js — это крайне оптимизированное подмножество JS, работающее с нативной скоростью http://t.co/slhZstS3U8",
    id: 388671637400588300,
    created_at: "Fri Oct 11 14:25:14 +0000 2013"
    },
    {
    text: "asm.js — это крайне оптимизированное подмножество JS, работающее с нативной скоростью http://t.co/slhZstS3U8",
    id: 388671637400588300,
    created_at: "Fri Oct 11 14:25:14 +0000 2013"
    @@ -2310,16 +1965,6 @@ id: 388671748293787650,
    created_at: "Fri Oct 11 14:25:40 +0000 2013"
    },
    {
    text: "Идея JS как виртуальной машины для веба. Писать можно на чём угодно, но компилировать в JS.",
    id: 388671748293787650,
    created_at: "Fri Oct 11 14:25:40 +0000 2013"
    },
    {
    text: ".NET, JVM, Ruby, Python, Haskel — всё это можно скомпилировать в JS и запустить в браузере.",
    id: 388671887825731600,
    created_at: "Fri Oct 11 14:26:13 +0000 2013"
    },
    {
    text: ".NET, JVM, Ruby, Python, Haskel — всё это можно скомпилировать в JS и запустить в браузере.",
    id: 388671887825731600,
    created_at: "Fri Oct 11 14:26:13 +0000 2013"
    @@ -2330,16 +1975,6 @@ id: 388672217422516200,
    created_at: "Fri Oct 11 14:27:32 +0000 2013"
    },
    {
    text: "CoffeScript — это конечно круто, но круче компилировать ES6 в обычный JS.",
    id: 388672217422516200,
    created_at: "Fri Oct 11 14:27:32 +0000 2013"
    },
    {
    text: "ES6 в JS? См. traceur https://t.co/jkQFPGLFcw и es6ify https://t.co/GH0M9eVIvw",
    id: 388672389674172400,
    created_at: "Fri Oct 11 14:28:13 +0000 2013"
    },
    {
    text: "ES6 в JS? См. traceur https://t.co/jkQFPGLFcw и es6ify https://t.co/GH0M9eVIvw",
    id: 388672389674172400,
    created_at: "Fri Oct 11 14:28:13 +0000 2013"
    @@ -2350,16 +1985,6 @@ id: 388672881435369500,
    created_at: "Fri Oct 11 14:30:10 +0000 2013"
    },
    {
    text: "Новое в ES6, синтакс: class, extends, super — синтаксический сахар, вместо JS-библиотек; Arrow functions arr.map(x =&gt; x*x);",
    id: 388672881435369500,
    created_at: "Fri Oct 11 14:30:10 +0000 2013"
    },
    {
    text: "Destructuring: var {x,y} = getPoint(); Rest/spread: var [first, …rest] = els; Math.max(…myArray);",
    id: 388673189754441700,
    created_at: "Fri Oct 11 14:31:24 +0000 2013"
    },
    {
    text: "Destructuring: var {x,y} = getPoint(); Rest/spread: var [first, …rest] = els; Math.max(…myArray);",
    id: 388673189754441700,
    created_at: "Fri Oct 11 14:31:24 +0000 2013"
    @@ -2370,16 +1995,6 @@ id: 388673540696064000,
    created_at: "Fri Oct 11 14:32:47 +0000 2013"
    },
    {
    text: "Извините, трансляция перегрелась от ES6.",
    id: 388673540696064000,
    created_at: "Fri Oct 11 14:32:47 +0000 2013"
    },
    {
    text: "Изменения в ES6 проходят под лозунгом: мы не можем ничего удалить или исправить из-за совместимости, но можем добавить новое и лучшее.",
    id: 388674248409362400,
    created_at: "Fri Oct 11 14:35:36 +0000 2013"
    },
    {
    text: "Изменения в ES6 проходят под лозунгом: мы не можем ничего удалить или исправить из-за совместимости, но можем добавить новое и лучшее.",
    id: 388674248409362400,
    created_at: "Fri Oct 11 14:35:36 +0000 2013"
    @@ -2390,16 +2005,6 @@ id: 388674916457132000,
    created_at: "Fri Oct 11 14:38:15 +0000 2013"
    },
    {
    text: "Доминик, помимо прочего, автор спецификации промисов (promises), которая вошла в ES6.",
    id: 388674916457132000,
    created_at: "Fri Oct 11 14:38:15 +0000 2013"
    },
    {
    text: "И такое можно будет делать в JS '&lt;a href="${url}"&gt;${text}&lt;/a&gt;'",
    id: 388675678977425400,
    created_at: "Fri Oct 11 14:41:17 +0000 2013"
    },
    {
    text: "И такое можно будет делать в JS '&lt;a href="${url}"&gt;${text}&lt;/a&gt;'",
    id: 388675678977425400,
    created_at: "Fri Oct 11 14:41:17 +0000 2013"
    @@ -2410,16 +2015,6 @@ id: 388675927523463200,
    created_at: "Fri Oct 11 14:42:17 +0000 2013"
    },
    {
    text: "ES7 будет ещё круче.",
    id: 388675927523463200,
    created_at: "Fri Oct 11 14:42:17 +0000 2013"
    },
    {
    text: "Что будет в ES7: Weak references; Async/await function^() {var res = await promise }; Object.observe; Типы значений: встроенные (int) и спец",
    id: 388676400359948300,
    created_at: "Fri Oct 11 14:44:09 +0000 2013"
    },
    {
    text: "Что будет в ES7: Weak references; Async/await function^() {var res = await promise }; Object.observe; Типы значений: встроенные (int) и спец",
    id: 388676400359948300,
    created_at: "Fri Oct 11 14:44:09 +0000 2013"
    @@ -2430,16 +2025,6 @@ id: 388676591074951200,
    created_at: "Fri Oct 11 14:44:55 +0000 2013"
    },
    {
    text: "И ещё оператор байндинга: var method = ::obj.foo",
    id: 388676591074951200,
    created_at: "Fri Oct 11 14:44:55 +0000 2013"
    },
    {
    text: "Firefox (OS) обычно не прячет новые фичи из ES6 за флагами (многое уже доступно в нём), в отличие от Chrome.",
    id: 388677456133365760,
    created_at: "Fri Oct 11 14:48:21 +0000 2013"
    },
    {
    text: "Firefox (OS) обычно не прячет новые фичи из ES6 за флагами (многое уже доступно в нём), в отличие от Chrome.",
    id: 388677456133365760,
    created_at: "Fri Oct 11 14:48:21 +0000 2013"
    @@ -2450,26 +2035,11 @@ id: 388678977394864100,
    created_at: "Fri Oct 11 14:54:24 +0000 2013"
    },
    {
    text: "И закрывает конференцию Брюс Лоусон «HTML.future — what the web needs next» http://t.co/NMyvryz579",
    id: 388678977394864100,
    created_at: "Fri Oct 11 14:54:24 +0000 2013"
    },
    {
    text: "@thebits, Firefox (OS) — это Firefox и Firefox OS",
    id: 388679487665500160,
    created_at: "Fri Oct 11 14:56:25 +0000 2013"
    },
    {
    text: "@thebits, Firefox (OS) — это Firefox и Firefox OS",
    id: 388679487665500160,
    created_at: "Fri Oct 11 14:56:25 +0000 2013"
    },
    {
    text: "@fetis26, будут, обычно к ноябрю",
    id: 388680352921030660,
    created_at: "Fri Oct 11 14:59:52 +0000 2013"
    },
    {
    text: "@fetis26, будут, обычно к ноябрю",
    id: 388680352921030660,
    created_at: "Fri Oct 11 14:59:52 +0000 2013"
    @@ -2480,26 +2050,11 @@ id: 388680734145531900,
    created_at: "Fri Oct 11 15:01:23 +0000 2013"
    },
    {
    text: "IndexedDB = Index Douchebag",
    id: 388680734145531900,
    created_at: "Fri Oct 11 15:01:23 +0000 2013"
    },
    {
    text: "Веб по всем цифрам проигрывает приложениям (20/80%) и приложения совсем не переходная технология, какой были плагины.",
    id: 388681157501808640,
    created_at: "Fri Oct 11 15:03:03 +0000 2013"
    },
    {
    text: "Веб по всем цифрам проигрывает приложениям (20/80%) и приложения совсем не переходная технология, какой были плагины.",
    id: 388681157501808640,
    created_at: "Fri Oct 11 15:03:03 +0000 2013"
    },
    {
    text: "Брюс поражает аудиторию дизайнерскими способностями http://t.co/m8jjdVqf7m",
    id: 388681504731430900,
    created_at: "Fri Oct 11 15:04:26 +0000 2013"
    },
    {
    text: "Брюс поражает аудиторию дизайнерскими способностями http://t.co/m8jjdVqf7m",
    id: 388681504731430900,
    created_at: "Fri Oct 11 15:04:26 +0000 2013"
    @@ -2510,26 +2065,11 @@ id: 388681834877698050,
    created_at: "Fri Oct 11 15:05:45 +0000 2013"
    },
    {
    text: "DRM для веба продвигают Google и Microsoft — и вряд ли для того, чтобы погубить веб.",
    id: 388681834877698050,
    created_at: "Fri Oct 11 15:05:45 +0000 2013"
    },
    {
    text: "Помимо главных DRM-жупелов, технологию продвигает медиа-гигант BBC, по понятным причинам.",
    id: 388682044488052740,
    created_at: "Fri Oct 11 15:06:35 +0000 2013"
    },
    {
    text: "Помимо главных DRM-жупелов, технологию продвигает медиа-гигант BBC, по понятным причинам.",
    id: 388682044488052740,
    created_at: "Fri Oct 11 15:06:35 +0000 2013"
    },
    {
    text: "Если не будет DRM, то медиаконтент будет похоронен из апсторах и исчезнет из веба.",
    id: 388682496726298600,
    created_at: "Fri Oct 11 15:08:23 +0000 2013"
    },
    {
    text: "Если не будет DRM, то медиаконтент будет похоронен из апсторах и исчезнет из веба.",
    id: 388682496726298600,
    created_at: "Fri Oct 11 15:08:23 +0000 2013"
    @@ -2540,16 +2080,6 @@ id: 388683025028231200,
    created_at: "Fri Oct 11 15:10:29 +0000 2013"
    },
    {
    text: "Большая цель PhoneGap — стать ненужным. Чтобы фронтенд мог появиться на платформах без его помощи.",
    id: 388683025028231200,
    created_at: "Fri Oct 11 15:10:29 +0000 2013"
    },
    {
    text: "Blink и соотв. браузеры внедряет автоматичекую фичу Lazy Layout, которая анализирует раскладку сайта и рисует её быстрее, чем остальное.",
    id: 388685100378247200,
    created_at: "Fri Oct 11 15:18:44 +0000 2013"
    },
    {
    text: "Blink и соотв. браузеры внедряет автоматичекую фичу Lazy Layout, которая анализирует раскладку сайта и рисует её быстрее, чем остальное.",
    id: 388685100378247200,
    created_at: "Fri Oct 11 15:18:44 +0000 2013"
    @@ -2560,16 +2090,6 @@ id: 388685563400044540,
    created_at: "Fri Oct 11 15:20:34 +0000 2013"
    },
    {
    text: "Или &lt;img lazyload src=“…”&gt;, новый способ отложенной загрузки изображений.",
    id: 388685563400044540,
    created_at: "Fri Oct 11 15:20:34 +0000 2013"
    },
    {
    text: "Opera работала над спецификацией W3C Widgets, но спека не выжила. По многим причинам, кроме глупого названия.",
    id: 388686047087194100,
    created_at: "Fri Oct 11 15:22:29 +0000 2013"
    },
    {
    text: "Opera работала над спецификацией W3C Widgets, но спека не выжила. По многим причинам, кроме глупого названия.",
    id: 388686047087194100,
    created_at: "Fri Oct 11 15:22:29 +0000 2013"
    @@ -2580,16 +2100,6 @@ id: 388686511816077300,
    created_at: "Fri Oct 11 15:24:20 +0000 2013"
    },
    {
    text: "Очень похожие творится в Chrome App Store и даже на Windows 8. Было бы хорошо объединить все хорошие идеи под одним API.",
    id: 388686511816077300,
    created_at: "Fri Oct 11 15:24:20 +0000 2013"
    },
    {
    text: "Та же идея для браузерных расширений: Opera предложила независимый формат для расширений NEX (на основе CRX для Chrome).",
    id: 388686885935386600,
    created_at: "Fri Oct 11 15:25:49 +0000 2013"
    },
    {
    text: "Та же идея для браузерных расширений: Opera предложила независимый формат для расширений NEX (на основе CRX для Chrome).",
    id: 388686885935386600,
    created_at: "Fri Oct 11 15:25:49 +0000 2013"
    @@ -2600,16 +2110,6 @@ id: 388689374608908300,
    created_at: "Fri Oct 11 15:35:43 +0000 2013"
    },
    {
    text: "«Мир переходит на смартфоны» местами большой миф, поскольку на плохой сети люди всё равно пользуются Opera Mini.",
    id: 388689374608908300,
    created_at: "Fri Oct 11 15:35:43 +0000 2013"
    },
    {
    text: "Fronteers всё. Спасибо, что читали трансляцию, следите за анонсами следующих включений http://t.co/2G1SzYJ2H5",
    id: 388691216403300350,
    created_at: "Fri Oct 11 15:43:02 +0000 2013"
    },
    {
    text: "Fronteers всё. Спасибо, что читали трансляцию, следите за анонсами следующих включений http://t.co/2G1SzYJ2H5",
    id: 388691216403300350,
    created_at: "Fri Oct 11 15:43:02 +0000 2013"
  9. h4 created this gist Oct 11, 2013.
    2,617 changes: 2,617 additions & 0 deletions fronters.dump.json
    2,617 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.