Почему React хуже AngularJS
Моё мнение во многом совпадает с мнением автора статьи http://habrahabr.ru/post/249107/.
Просто про SVG-спрайты
http://www.youtube.com/watch?v=tlUoASUKyd8 Online-генерилка спрайтов — https://icomoon.io/
Как Github логирует клиентские ошибки (Haystack)
http://githubengineering.com/browser-monitoring-for-github-com/ Ничего сверхнового в идеях нет, есть наглядная картинка:
Ещё одна конвертилка картинок в base64
http://b64.io/
Принципы SOLID с примерами на php
Из книги Robert Martin «Clean Architecture» Принцип единственной ответственности (Single responsibility) Каждый модуль системы должен иметь только одну причину для изменения === одного владельца (команду). Принцип открытости/закрытости (Open-closed) Система должна легко изменяться добавлением нового кода, а не изменением существующего. Принцип подстановки Барбары Лисков (Liskov substitution) Части программы должны быть взаимозаменяемы, если они реализуют один и …
Css: высота элемента в 100% — 100px
Да, calc-ом оно делается ровно так (100%-100px). Но его не все браузеры до сих пор умеют, так что вот ещё один способ:
1 2 3 4 |
<body> <div class="header"></div> <div class="main"></div> </body> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
body { width: 100%; height: 100%; margin: 0; padding: 0; } .header { width: 100%; height: 100px; background-color: blue; box-sizing: border-box; padding: 0; } .main { position: absolute; top: 100px; right: 0; bottom: 0; left: 0; background-color: red; } |
Логирование времени загрузки страниц в piwik
В продолжение темы логирования ошибок в пивик. Неплохо было бы логировать в ту же систему и время загрузки страницы у реальных пользователей. Для этого в упомянутый в предыдущей статье логгер нужно добавить следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
function logTimings() { setTimeout(function () { if (! window.performance || ! window.performance.timing) { return; } var timing = window.performance.timing; var perf = { dns_lookup: getTime(timing, 'domainLookupStart', 'domainLookupEnd'), ttfb: getTime(timing, 'requestStart', 'responseStart'), response: getTime(timing, 'responseStart', 'responseEnd'), dom_parse_and_js: getTime(timing, 'domLoading', 'domInteractive'), dom_ready_cbs: getTime(timing, 'domContentLoadedEventStart', 'domContentLoadedEventEnd'), to_dom_ready: getTime(timing, 'responseStart', 'domContentLoadedEventEnd'), to_load: getTime(timing, 'responseStart', 'domComplete') }; perf.type = 'timings'; perf.msg = perf.to_dom_ready; perf.ua = navigator && navigator.userAgent; perf.href = window.location.href; logToPiwik(perf); }, 5000); } function getTime(timing, from, to) { if (timing[from] && timing[to]) { return (timing[to] - timing[from]) / 1000; } return null; } |
И поправить window.onload на:
1 2 3 4 5 6 7 8 |
window.onload = function() { if (! window.__angularLoaded) { window.logError({type: 'app-not-started'}); } logTimings(); }; |
Подробнее об объекте window.performance.timing можно почитать тут — https://blog.bullgare.com/2014/12/%D0%BC%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B-%D1%81-navigation-timing-api/ или сразу на mdn https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming.
Про нормализацию данных в базе
Набрёл на перевод про третью нормальную форму (ссылка в конце). Перевод вроде бы неплохой. Далее цитата. Нормализация базы данных Попала в руки одна замечательная книжка — PHP 6 and MySQL 5 for Dynamic Web Sites , за авторством Larry Ulman. В целом, книга расчитана на новичков — середнячков, но затрагиваются и довольно серьёзные вещи, при …
Реализация определения размера устройства в AngularJS
Идея описана здесь — https://blog.bullgare.com/2013/12/%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D0%B8%D0%BF%D0%B0-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0-%D0%B2-js-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-media/. Т.е. через media-queries задавать параметры, которые определят размеры устройства, по этим параметрам менять z-index. Затем создать в js-файле такой элемент скрытым и считывать его z-index в любой момент. Особенно это удобно делать в css-препроцессорах, чтобы параметризовать параметры media-queries. Тогда изменения внешнего вида сайта через css будут происходить одновременно с изменением …
AngularJS-приложение на TypeScript
Большую часть видео рассказывают о том, что вообще такое TypeScript, а примеры с AngularJS начинаются на 16-17 минуте. https://youtu.be/U7NYTKgkZgo В конце видео есть ссылки на код на гитхабе. Вот они: https://github.com/DanWahlin/AngularIn20TypeScript https://github.com/DanWahlin/AngularIn20JavaScript https://github.com/DanWahlin/AngularTypeScript