Позднее Ctrl + ↑

Кенон ЕОС М

Новый Кенон ЕОС М очень клёво выглядит (см. также кучу фоток на Вёрдже):

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

Скидка на Гетвеар

Когда я в прошлый раз рекламировал Гетвеар, я ставил фотографии с сайта. Яша и Слава (создатели Гетвеара) попросили меня вывесить фотографии моих собственных джинсов и рассказать, что я о них думаю. Спойлер: в конце поста вас ждёт раздача небольшой халявы.

Реклама

Про мои джинсы

Короче, любимые джинсы приехали ко мне такими:

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

Ну и заклёпки греют душу до сих пор. На других джинсах они какие-то дешёвско-анонимные, будто просто взяли, там, какие нашлись, не запаривась — кого волнует? А то ли дело на Гетвеаре: каждая заклёпочка специально для меня сделана!

Я теперь жду, когда Гетвеар начнёт другую одежду выпускать, потому что я хочу, чтобы у меня всё такое было. Сколько можно терпеть какие попало шнурки на ботинках? Куда это годится, когда пуговицы на рубашках — это просто пластиковые фиговины? Я уж молчу про тёплую одежду всякую, в которой ещё больше всего хочется сделать «правильно».

Про халяву

Тем не менее, пока Гетвеар делает джинсы, и у меня есть пять кодов (добавлено позже: уже все раздал), дающих скидку 20% и право выслать пять таких же кодов друзьям. То есть те из вас, кто купит джинсы по моему коду, смогут ещё и другим подарить такие коды (вам их пришлют по почте после покупки).

Если вы хотите купить себе крутые джинсы со скидкой, то напишите мне письмо на ilyabirman@ilyabirman.ru с темой «Скидка на джинсы», и я вам вышлю код. Только есть просьба: не берите скидку «про запас», лучше уступите её кому-то ещё, если сами не собираетесь воспользоваться.

Чтобы выбрать джинсы, отправляйтесь на сайт getwear.com. Код вам понадобится только перед самой оплатой, так что вы можете спокойно повыбирать-подумать сначала. Напоминаю, что на сайте можно выбрать готовые джинсы и указать стандартный размер, но я вам горячо рекомендую сочинить себе джинсы самостоятельно и не полениться померить себя по специальному гиду. Так джинсы подойдут идеально (а если нет, Гетвеар перешьёт и пришлёт новые).

Ещё два слова по поводу «пришлёт». Гетвеар перешёл на Федекс. Доставка ЕМС используется только в Белоруссию и туда, куда Федекс не доставляет.

Принцип изолированной оптимизации

Я начал программировать, когда мне было лет 12, и моим первым языком был Паскаль. Компьютеры тогда были медленными и глупыми. Часто приходилось писать фрагменты программ на Ассемблере, чтобы заставить их работать с хоть сколько-нибудь приемлемой скоростью.

Это время приучило меня думать о производительности. Писать код, который делает лишние или бессмысленные вещи, было очень плохо, за это даже на уроках программирования оценки снижали. Так что к каждому куску программы подсознательно задавался вопрос: не зря ли я загружаю компьютер этой работой? Можно ли её избежать?

Сегодня постоянные мысли об оптимальности сильно мешают жить, увеличивают время на разработку и нередко даже снижают качество кода. Я завидую людям, которые начали программировать сравнительно недавно и сразу получили в своё распоряжение мощные компьютеры и языки высокого уровня. Когда они используют регулярные выражения, у них не возникает мысли, что это катастрофически сложная работа, и что надо по возможности её избегать. Благодаря этому у них быстрее выходят работающие продукты.

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

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

Постепенно я пришёл к подходу, который мне очень помогает в разработке моих продуктов. Наконец я его сформулировал.

Принцип изолированной оптимизации состоит в том, что любой код, отвечающий за оптимизацию, должен быть написан отдельно от кода, отвечающего за смысл. «Отдельно» означает: в другое время, в другом месте.

Допустим, я делаю сайт, и для вывода главной страницы «в лоб» нужно 18 запросов к базе. Поскольку в голове постоянные мысли о производительности, то я начинаю думать, как бы подсократить число запросов. Естественно, сразу же обнаруживаются места для оптимизации. Оказывается, что если запрос №1 вернул меньше 10 строк, то запросы 2—5 можно вообще не делать, а результаты запросов 10—12 будут отличаться от результатов запросов 7—9 на константу. Если же строк в первом запросе получилось 10, то нужно проверить, нет ли среди них строки X, потому что если она есть, то не нужны уже запросы 6 и 13 (а они как раз самые тяжёлые).

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

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

Давайте применим принцип изолированной оптимизации. Напишем наш код из 18 запросов «в лоб» и наплюём на его неоптимальность. Теперь посмотрим на него со стороны. Как можно сделать, чтобы он работал быстрее, не меняя его?

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

Кеширование, конечно, не всегда лечит. Иногда данные устаревают слишком быстро. Тогда делаем более сложную манипуляцию. Делаем все запросы к базе не напрямую, а через специальную умную функцию, которая знает обо всех особенностях данных, за счёт которых число запросов можно снизить. А наша умная функция уже решит, делать ли настоящий запрос или вернуть данные исходя из своих «знаний» и результатов других запросов. Результат, снова в том, оптимизация изолирована от смысла.

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

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

Сборка Эгеи 2662

У меня для вас новая сборка. Уже всё почти готово к тому, чтобы назвать её версией 2.2, осталась пара прям совсем мелочей. Так что давайте это назовём, например, релиз-кандидатом.

Что изменилось с прошлой сборки:

  • заголовки заметок теперь стандартно ведут себя как в моём блоге — если заметка избранная, заголовок крупный (причём переключается аджаксом с анимацией, всё как положено);
  • тема «Нью-Йорк» похорошела;
  • новый интерфейс тегов стал менее глючным (но пока не идеальным — Мурат Шидаков ещё работает над ним, за что ему спасибо)
  • скрипт, отвечающий за масштабирование картинок, теперь подгружается только в тех заметках, в которых используется, а не вообще везде;
  • теперь уменьшенные версии изображений создаются только если это даёт существенный выигрыш в размере (если надо уместить картинку, шириной 800 пикселей, в 768, то будет использована большая, а уменьшение будет доверено браузеру);
  • старые заметки, написанные до Нисдена, снова кавычатся;
  • уровни заголовков в заметках теперь начинаются не с h1, а с h2, потому что h1 — это заголовок самой заметки;
  • теперь картинки можно делать ссылками в Нисдене — достаточно после названия картинки написать урл, на который она должна вести (а уже после урла — альт картинки, если надо);
  • иной раз вылезала ошибкой e2m_note_flagnote_flag;
  • в описаниях тегов не работали ссылки;
  • улучшены многие иконки (и их вёрстка, они теперь сделаны через ЦСС);

Чтобы подключить Фотораму, нужно положить её в /user/library/fotorama/ и пересохранить заметки, в которых она должна заработать (ну или сбросить кеш). Никаких конфигов, экстеншенов и прочей фигни больше настраивать не нужно, ура.

Чтобы обновиться, нужно заменить папку /system/ новой, а вот и ссылка на архив.

Что почитать на выходных — 21

Накопилось:

  1. Software Inventory. Джоел Сполский о том, почему надо релизить всё максимально быстро и не копить большие «фича-бэклоги».
  2. О парковках. Максим Кац говорит, что без репрессивных мер чисто физически невозможно преодолеть проблему нехватки парковочных мест.
  3. О мозге и математике. Роман Добровенский объясняет, почему нужно заниматься математикой и как это помогает в жизни. Если вам кажется, что «ну, мне это пофигу» или «это не для меня», то это точно для вас, обязательно прочитайте.
  4. Что такое бозон Хиггса. Типа «популярное» объяснение. Понять по-прежнему нереально, но читать всё равно интересно.
  5. Relativistic Baseball. Ещё немного физики. Что будет, бейсболист кинет мяч со скоростью, близкой к скорости света? (Спойлер: мало никому не покажется).

Шендерович о Свете из Иванова

Шендерович, комментируя приход знаменитой Светы из Иванова ведущей на канал НТВ:

От Светланы Сорокиной до Светланы Курицыной. Вот, собственно говоря, вся эволюция телеканала НТВ. Больше ничего даже и пояснять особенно не надо.

Лук щипет глаза

Тёма вот задаётся вопросом «Почему лук больше не щипет глаза?». Не знаю, что произошло с Тёмой, но мне как щипал, так и щипет.

Вообще, у меня глаза к луку имеют какую-то аномальную чувствительность. Когда лук начинают резать через две закрытых двери от меня, моим глазам уже становится плохо. Я всегда стараюсь уйти в самый дальний от кухни конец квартиры, и, в идеале, открыть там окно. А саму кухню после резки лука надо ещё час проветривать, чтобы я мог туда зайти и не умереть.

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

Чай или кофе

Я всегда пью чай и никогда не пью кофе. Чё-то не понимаю, в чём фишка кофе.

Но я заметил интересную вещь — если я хочу с кем-то встретиться «по делу», то я предложу «попить кофе» (хотя реально буду всё равно чай). А если хочу с друзьями пообщаться, то уже «попить чаю» (хотя, возможно, что реально кто-то предпочтёт кофе). Почему-то «попить кофе» звучит как деловая встреча, а «попить чаю» — как потрындеть с друзьями за жизнь. К самим напиткам это отношения не имеет.

Ещё у «попить кофе» есть оттенок «в перерыве между делами, не слишком затягивая». Поэтому даже если я хочу встретиться с другом, скажем, в Москве, когда я прилетел на 3 сверхнасыщенных дня, то это снова будет называться «попить кофе», потому что чай-то некогда ведь пить.

Ранее Ctrl + ↓