61.2
Karma
1.1
Rating

Люблю проверять гармонию алгеброй

Билайн: россияне стали тратить гораздо больше денег на дорогие смартфоны

0
Как ее ни крути, с отдельным аппаратом телефоны конкурировать не могут.
С зеркалками не могут, но это совсем другие габариты и вес, в кармане постоянно не потаскаешь. С мыльницами — могут, более чем.

User Inyerface — как не надо мучать пользователя

+14
Вчера эта ссылка облетела весь интернет — мне её прислали человека 4.
Местами авторы перегибают палку, делают явный гротеск. Но что меня заставило сказать «вот прямо жизненно!» — это когда тыкаешь в инпут, а плейсхолдер становится частью value. Это камень в огород любителей зачем-то городить нативный функционал на js.

Как сделать офисную кухню через продуктовый подход

+2
Слово «здоровые» написано четыре раза. А если я люблю холистерин, мясо и выпечку, но терпеть не могу морковку и обезжиренный кефир?

Советы начинающим программистам

+5
Венгерская нотация — один из самых старых и безнадежных холиваров.

Фингерпринтинг через рекламные баннеры? Теперь это обычное дело

Фингерпринтинг через рекламные баннеры? Теперь это обычное дело

«Мобильный контент» бесплатно, без смс и регистраций. Подробности мошенничества от Мегафона

Сколько стоят юнит тесты?

+2
Ловля багов — лишь одна из задач тестов (я даже не уверен, что главная).
Помимо этого, тесты служат документацией, которая снижает bus-фактор модуля. Ни один менеджер/тимлид никогда в жизни не опишет задачу с аналогичным уровнем подробности.
И ещё. Как показывает практика, сам разработчик поначалу очень приблизительно представляет, что ему нужно получить в итоге. И если броситься кодить с места в карьер, то когда модуль будет «готов», то внезапно окажется, что в нем не были учтены многие ситуации. Так вот ранее написание тестов устаканивает функциональную спецификацию.

Как ворваться в велосезон во всеоружии — в спортивной и городской комплектации

+9
Первое что бросилось в глаза. Положение седла и посадка сразу сообщают нам всё об уровне экспертности автора :)

Сколько зарабатывают выпускники разных российских ВУЗов

«Мобильный контент» бесплатно, без смс и регистраций. Подробности мошенничества от Мегафона

0
Да, оговорился, мак-адреса. Потом это дело сопоставляется с адресами, которые вытянуты из телефонов через установленные приложения (а точнее даже не сами приложения, а встроенные в них рекламные сети и аналитики) — и вуаля, рекламщики знают, что этот конкретный абонент был в этом конкретном магазине.

«Мобильный контент» бесплатно, без смс и регистраций. Подробности мошенничества от Мегафона

Как повысить производительность фронтенда веб-приложения: пять советов

0
Хотел написать то же самое. Когда jsperf показывает результаты в десятки-сотни миллионов (не говоря уже о миллиардах) операций в секунду — почти наверняка это означает, что тест некорректный.

Почему ['1', '7', '11'].map(parseInt) возвращает [1, NaN, 3] в Javascript?

+3
Статья занятная и полезная, но посыл первого абзаца ложный. Ничего странного, всё работает как задумано и как должно.

13 самых заминусованных статей минувшего года

+75
Когда-то политика существовала в своем параллельном мире, а сегодня она стучится ломится в каждый дом и по каждому ip. Игнорировать уже не получается.

Где находился Ваш дом миллионы лет назад

+1
Первая трава появилась гораздо позже цветов, животных и даже приматов? Неожиданно.

Госдума планирует повысить штраф за хранение персональных данных россиян вне России до 18 млн рублей

0
Далеко не всё равно. Например, сообщение «депутат X на заседании госдумы ковырял в носу» будет восприниматься сильно по-разному, если а) предъявить видеозапись б) ну вот у меня в блокноте карандашиком записано. Запись может иметь доказательную силу, а почеркушки в блокноте вряд ли.

Как мы делали клубную программу Спортмастера

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

P.S. Справедливости ради, лаг при начислении бонусов есть во многих местах. Причина — возможный возврат товара в течение 1-2 недель. Иначе в теории можно купить товар X, полученные за него бонусы сразу же потратить на товар Y, а потом X сдать.

Как мы делали клубную программу Спортмастера

+7
На дворе стоял 2004-й год. Что было — клубная программа у Спортмастера и доллар по 27 рублей. [...] В те годы мы сами написали систему лояльности, которая могла нормально вести учёт бонусных баллов каждого пользователя.
Я не в курсе, может быть в разных городах было по-разному, но у нас в те благословенные времена ещё не было никаких бонусных баллов, а были скидочные карты. И это было хорошей программой лояльности: скидка живыми деньгами, здесь и сейчас.
Летом 2006 года я получил карту на 7%. Но толком попользовать её не успел — где-то через год старые правила смыли в унитаз и ввели те самые бонусы. Которыми можно было оплатить только будущие покупки, причем не более 30% цены, а самое главное — раз в год всё сгорало.
Благодаря этой реформе, а также постепенному скатыванию ассортимента брендов в УГ, я забыл дорогу в СМ. Привет маркетологам.

Тёмные времена наступают

+3
По поводу цветов.
Полезно изучить книгу «Color Appearance Models», автор Mark Fairchild (один из мэтров колориметрии). Существует русский перевод от Алексея Шадрина — Марк Фершильд, «Модели цветового восприятия» (легко гуглится).
Глава 6 — «Феномены цветового восприятия».
Там это описывается.

Руководство: как выбрать электровелосипед на примере Twitter — говорим о рамах

От адвоката до тестировщика в Яндексе. История моей стажировки

0
А сколько бы лет и «страданий» вам понадобилось, чтобы стать врачом-хирургом, ученым-математиком, летчиком?
Да зачем далеко ходить? Адвокатом. Сколько времени понадобится, чтобы с нуля стать адвокатом? На этом фоне полгода это даже не легко и быстро — это пулей.

API IntersectionObserver и ленивая загрузка изображений

0
А хотя нашелся пример. Да, он использовался на практике, хотя и редко.
Я выше упоминал о разных ориентациях экрана — для десктопа и телефона показываются фотки с разным кадрированием.
Ну и плюс конечно размеры тоже, но тут они убраны для наглядности.
<picture>
	<source srcset="horizontal.jpg" media="(orientation: landscape)">
	<source srcset="vertical.jpg" media="(orientation: portrait)">
	<img src="fallback.jpg">
</picture>

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

API IntersectionObserver и ленивая загрузка изображений

0
Я не говорил, что повторить поведение source нельзя. Слово «невозможно» относилось ко фразе «задавайте правила без избыточности».

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

Российские космонавты на Луне к 2030 году: презентация Рогозина

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

Российские космонавты на Луне к 2030 году: презентация Рогозина

+12
Кириенко поставили на 3 месяца, когда все было уже неизбежно, чтобы вывести из под удара Черномырдина. Чтобы дефолт ассоциировался с другой фамилией. А потом сразу вернули Черномырдина обратно. Как видно по таким комментариям, операция оказалась успешной.

API IntersectionObserver и ленивая загрузка изображений

0
По src/srcset понятно. Но есть один нюанс — вы заставите юзеров старых браузеров качнуть эту самую картинку максимального качества. А ведь обычно люди со старыми браузерами сидят на слабом железе.

Задавайте правила без избыточности и у Вас не будет никаких проблем.
В общем случае это невозможно. Потому что это только в стерильном примере я написал фиксированное значение в px. А в реальности там будут какие-нибудь vw или calc.
А главное, неизбежно пересекающиеся медиа-запросы — размеры экранов, ориентации экранов, плотности пикселей. И там будет избыточность. Если бы нужно было делать адаптивность строго по одному параметру (ширине или плотности пикселей) — то тогда проблемы действительно нет.

API IntersectionObserver и ленивая загрузка изображений

0
Тем что Бот должен видеть картинку в максимальном качестве
Я понимаю семантическое значение img. Я не понимаю, в чем принципиальная разница между ситуациями подмены src и srcset.
Если мы решили экономить трафик, то в src в любом случае будет небольшая (но осмысленная!) заглушка.
Если же у нас в src картинка максимального качества (для бота), то причем тут ленивая загрузка, если эта большая картинка будет всё равно загружена? Ведь она будет загружена? Потому что srcset у нас пустой до момента, когда элемент въедет во вьюпорт.
Нет не имеют. sizes всегда интерпретируется однозначно
В спецификации написано, что все эти атрибут имеют информационный характер, и юзер-агент может выбирать любой вариант исходя из своих соображений.
Например, если я напишу:
[img src="0.jpg" srcset="1.jpg 1000w, 2.jpg 2000w" sizes="1500px"]
Браузер вправе выбрать любой из вариантов хотя бы потому, что 1500 ровно посередине между 1000 и 2000.
На практике браузеры обычно выбирают большее значение. Но я как-то натыкался на случай, где Хром и ФФ делали разный выбор в пограничных значениях (к сожалению, уже не воспроизведу).

API IntersectionObserver и ленивая загрузка изображений

0
Вы нагружали CPU тысячами срабатываний вашего обработчика
Разумеется, нужно делать тротлинг, и нормальные библиотеки его делают. Это несколько строк кода, есть готовые реализации.
Я ж не спорю, что с новым апи удобнее. Но ничего принципиально нового, что раньше ну вот никак не получалось, он не дал.
Сейчас правильный лейзилоад оперирует исключительно атрибутом srcset
Смысл абзаца я понял. Но не очень понятно, а что раньше мешало в атрибуте src держать не какую-то формальную заглушку, а LQIP-версию той же контентной картинки? Я именно так и делал. Опять же ничего принципиально нового.
lazyload не ограничивается работой только с изображениями.
Это да. Например, моя реализация умела лениво навешивать стили или вводить дополнительные временнЫе задержки.
Здесь нет перемета спора.
Его действительно нет в том смысле, что оба подхода вполне имеют право на существование в зависимости от ситуации. Ни про какой нельзя однозначно сказать, что он плох.
в sizes можно указывать media запросы да еще и под каждый конкретный файл?
Можно, но это верный способ взорвать мозг даже себе :) Не говоря уж о тех, кто будет читать код впоследствии. Проблема атрибутов srcset/sizes в том, что между файлами и размерами не устанавливается взаимно-однозначного соответствия.
Пример из блога Оперы
<img
sizes="(max-width: 30em) 100vw, (max-width: 50em) 50vw, calc(33vw - 100px)"
srcset="swing-200.jpg 200w, swing-400.jpg 400w, swing-800.jpg 800w, swing-1600.jpg 1600w"
src="swing-400.jpg" alt="Kettlebell Swing">

Что сейчас должно загрузиться?! Да черт его знает.
Возможно, пример переусложнён, но потенциал для «творчества» демонстрирует.
dev.opera.com/articles/native-responsive-images
Удобно там решается только простые вопросы типа «фикс размеры + плотность пикселей» (1x/2x). А когда в дело вступают сложные комбинации размеров/пропорций/кадрирования и тп. — получается всё очень запутанно и непонятно (во всяком случае для меня). И ко всему прочему, браузер имеет некоторую свободу при интерпретации атрибута sizes.

Российские космонавты на Луне к 2030 году: презентация Рогозина

API IntersectionObserver и ленивая загрузка изображений

0
Непонятно, что сделал возможным IntersectionObserver? Он ведь не дает ничего принципиально нового, что нельзя было бы реализовать руками. Да, с ним удобнее, надёжнее, меньше возможностей накосячить — это всё верно и хорошо.
Но ведь атрибуты src/data-src всё равно точно так же меняются местами. В отличие от нативного варианта. (Хотя справедливости ради, библиотеки дают шире возможности).

По поводу source. Даже если не вступать в спор, на чьей стороне лучше решать вопрос с форматами, у него есть другой интересный атрибут — media. И он бывает даже более важен для нрмальной адаптивности, чем srcset/sizes.

API IntersectionObserver и ленивая загрузка изображений

+1
Что делать, если у меня есть статья-лонгрид с 20 картинками, размазанными по всей её длине? Не карточки в интернет-магазине, не посты в ленте — одна цельная статья.

API IntersectionObserver и ленивая загрузка изображений

+1
1. Экономия трафика (причем и клиентского, и серверного).
2. Экономия памяти устройства (актуально для мобильников).
3. Возможность управлять порядком загрузки (например, сначала загрузить контентные картинки, а уж потом размытый декоративный фон).

Основная суть ленивой загрузки не в том, чтобы загрузить картинку чуть попозже — а в том, чтобы загрузить её только при реальной необходимости. Потому что пользователь может вообще никогда до неё не доскролить, то есть картинка не пригодится.
А пагинация это не всегда приемлемый (по разным соображениям) костыль.

API IntersectionObserver и ленивая загрузка изображений

+4
IntersectionObserver API — штука очень спорной необходимости. На первый взгляд — ну как же, lazy-load картинок, оптимизация, все дела! Я сам писал библиотеку для ленивой загрузки картинок и она даже довольно неплохо работала (не опубликована).
Но! Всё разбивается о скалы picture/source/srcset. Как только нужно делать адаптивность по-взрослому, под все устройства/браузеры/ретины, реализовать ленивую загрузку становится очень-очень сложно.
Вывод прост: полноценная ленивая загрузка должна реализовываться нативно в браузере — и Хром сейчас идет в правильном напрвлении.

Человек без смартфона

0
В ME45 никакой камеры сроду не было. И даже в следующей 55-ой модели, кажется, тоже.

Самая дорогая ошибка в моей жизни: подробно об атаке на порт SIM-карты

0
Политика у него сложная и непонятная. Думаю, там дело не исчерпывается каким-то набором простых правил — там наверное прикрутили machine learning, big data и вот это всё.
Я как-то пытался заходить в гуглопочту из инкогнито — он выдал окно с требованием привязать телефон. Оно и раньше иногда бывало, но всегда присутствовала некая кнопка «пропустить», «отмена» или что-то такое. А в тот раз — равняйсь, смирно, привязывай тебе говорят или никуда дальше ты не пройдешь.

Человек без смартфона

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

7 вещей об авто-возобновляемых подписках, о которых следует знать

+6
Я бы назвал это автопродлением. Автовозобновление звучит так, как будто я отключил, а оно само обратно включилось.

Самая дорогая ошибка в моей жизни: подробно об атаке на порт SIM-карты

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

Самая дорогая ошибка в моей жизни: подробно об атаке на порт SIM-карты

0
Это когда как. Если всё время логиниться с одного устройства, он действительно может просить, но не настаивать. Но стоит попытаться войти с другого IP, который гуглу покажется подозрительным, и там уже с большой вероятностью не пустят. А ещё можете любопытства ради попробовать войти в аккаунт из инкогнито-окна браузера…
1 There