Избранное

Позднее Ctrl + ↑

О словах sharp и flat

В музыке слова sharp и flat означают диез и бемоль соответственно. Например:

Symphony No. 7 in C sharp minor 7-я симфония в до-диез миноре
Violin Concerto No. 1 in B flat major 1-й скрипичный концерт в си-бемоль мажоре

Интересно, что вне музыки эти слова означают точность и неизменность. Например, можно договориться о встрече at five sharp, и это будет означать «ровно в пять». О биржевом индексе скажут flat, имея в виду, что он не изменился. Как же получилось, что в музыке эти слова означают, наоборот, отклонения на полтона от «основной» ноты?

О том, что sharp — это диез, я знал сто лет, видимо, благодаря языку «Си-диез» (C#). А встречая flat в названиях тональностей, я был уверен, что речь идёт о неизменённой ноте, и удивлялся, зачем же вообще писать это слово. Но однажды моё удивление заставило меня всё-таки заглянуть в словарь.

Добавлено позже: внимательные читатели замечают, что если уж читать # в названии языка как «диез», то и C надо читать не как «си», а как «до». Пожалуй, это хороший аргумент в пользу того, чтобы говорить «Си-шарп».

Десятая симфония Шостаковича

Новое большое открытие — десятая симфония Шостаковича:

Видео надо не только слушать, но и смотреть: поведение и эмоции дирижёра (это Густаво Дудамель) сильно радуют (и вызывают зависть). Кстати, ему тут всего 26 лет.

Первая часть медленная, длинная и сложная. Первые несколько раз я просто проматывал после 2-3 минут, потому что не за что было зацепиться совсем. Слушал я симфонию, кстати, как 5-ю Малера, с конца — сначала понял, что крутая концовка, а потом и всё остальное распробовал.

Возможно, имеет смысл сразу переходить ко второй части (27:30), там движуха. Правда, первые два-три раза эта часть может казаться просто истерическим воплем, но постепенно всё сложится. Она совсем коротенькая.

Третья часть (32:00) начинается спокойно, но в ней есть пара ярких, на мой взгляд моментов. 33:19...34:22, например, кайф, ну а 39:50...40:37 так вообще. Ещё в ней важна концовка (44:10...44:28) — в четвёртой части эти четыре ноты будут особенно важны.

Четвёртая часть (44:45) — праздник. Начало, кажется, не предвещает ничего грандиозного. С 45:20 начинается красивая флейта (ну или что это, я не шарю). Это похоже на начало 5-й части 10-й симфонии Малера — прямо восточное звучание. Дальше эту восточную флейту задавят остальные инструменты, но она будет отчаянно сопротивляться.

Главное начинается с 49:40, дальше нельзя перематывать. В 50:20 вдруг настроение резко меняется, начинается быстрая радостная тема. Она развивается и изменяется в течение следующей минуты (на самом деле там всё разное, но после нескольких прослушиваний понимаешь, что всё сильно связано). В 51:20 всё начинается заново, но со второй попытки она приходит уже к самому сильному месту во всей симфонии — 51:33....54:27. Это просто ни с чем не сравнимый кайф: 52:00! 52:06! 52:11!!! 52:41! 52:52! 53:25! 53:53! 54:08! (обратите внимание, как сквозь всё это пытается прорваться наша «восточная флейта»). В 54:18 это фрагмент заканчивается теми же четырьмя нотами, на которые я обращал ваше внимание в конце третьей части.

Потом всё снова успокаивается — понадобится ещё один «заход» на финал (55:48). Честно говоря, по-моему этот фрагмент уже не такой мощный, как предыдущий, но именно его Шостакович оставил для финала. В 56:08 звучит знакомая весёлая мелодия, в 56:37 — снова самое крутое место всей симфонии, но в несколько урезанном виде, а с 57:10 — многочисленные повторы главных четырёх нот разными инструментами, и потом концовка.

Когда разбираешься в 2, 3 и 4-й частях, смысл обретает и первая. Какой бы скучной она не казалась вначале, теперь я её тоже люблю. Особенно хорошо с 7:15... и дальше с 8:15, 8:53, 9:13, 9:54, 10:11 и до 10:44. Или вот с 12:15 до 14:00. Или с 15:55, например. И дальше в 20:10 снова. М? Как бы так развить слух, чтобы сразу это всё слышать?

Наслаждайтесь! Научил Павел Урусов, за что ему спасибо.

Навигация на сайте Студии Лебедева

Изучал устройство необъятного портфолио Студии Лебедева и обнаружил любопытную вещь. Вот, например, недавняя работа — пакет для кафе. Где в структуре сайта лежит эта страница? Смотрим на верхнее меню:

В разделе «Наше всё» есть подраздел «Графдизайн», в нём — «Проекты студии», и уже внутри него лежит наш пакет. Так?

Нет, не так. Посмотрим, куда ведут ссылки в меню, и на адрес страницы пакетов:

Наше всё /everything/
Графдизайн /everything/graphic/
Проекты студии /everything/als/
Пакеты для кафе /everything/als/gift-bag/

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

Берём приём на вооружение.

Курс «Интерфейсы для айфона»

Сегодня среда, а значит — пришло время рекламы чего-то хорошего и полезного. Слово Тане Мисютиной.

Реклама. Текст предоставлен клиентом

Курс «Интерфейсы для айфона»

9, 10 и 12 августа в Москве мы с ребятами проводим учебный курс «Интерфейсы для айфона». Курс будет интересен дизайнерам любого уровня, которые проектируют интерфейсы приложений для айфона или только планируют этим заняться. И вот почему.

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

Интенсивная «промывка мозгов». Обучение проходит с 10 утра до позднего вечера. Три учебных дня и один день самостоятельной работы потребуют от вас максимума внимания, старания и сосредоточенности. Лекции сопровождаются интерактивной практикой и совместным разбором результатов, чтобы по горячим следам закрепить теорию.

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

Опыт и общение. Курс проходит в неформальной обстановке: во время кофе-брэйков и обедов участники знакомятся и общаются друг с другом и с инструкторами. Мы, в свою очередь, с удовольствием делимся опытом, разъясняем непонятные моменты, советуем и критикуем.

Грамотные инструкторы. На курсе три преподавателя. Я, дизайнер интерфейсов Таня Мисютина, веду секцию о проектировании, расскажу о принципах хороших мобильных интерфейсов, о приёмах и этапах создания приложений и об инструментах прототипирования. Дизайнер интерфейсов и техдизайнер Антон Ловчиков проведёт часть курса, посвящённую графике и покажет, как нарисовать красивую «шкурку» для приложения. Основатель и руководитель компании «Anyvoid» Юрий Подорожный поделится айос-экпертизой и опытом ведения проектов, объяснит, как грамотно готовить исходники и общаться с разработчиками.

Подробная программа и запись на курс: http://brainwashing.pro/interfaces-for-iphone

Восстанавливаем работу Апача на Горном льве

Обновление до 10.8 вносит изменения в конфигурацию Апача, после чего ваши локальные сайты могут перестать работать. Старый /etc/apache2/httpd.conf инсталлятор оставляет рядом с пометкой previous, поэтому его откатить легко. Всё же я решил внести изменения в новый — вдруг в нём что-нибудь изменилось в лучшую сторону в тех местах, которые я не трогаю. Но вот то, что он удаляет всё из /etc/apache2/users/ — это неприятно, если у вас нет Тайм-машины или другого компьютера с которого можно взять старые файлы.

Вот какие изменения я внёс в новый httpd.conf из 10.8:

  1. Раскомментировал строчку 116:
    #LoadModule php5_module libexec/apache2/libphp5.so;
  2. Раскомментировал строчку 447:
    #Include /private/etc/apache2/extra/httpd-vhosts.conf
    (я использую виртуальные хосты).

А вот как выглядит мой /etc/apache2/users/ilyabirman.conf, который пришлось создать заново:

<Directory "/Users/ilyabirman/Sites/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

<Directory "/Users/ilyabirman/Sites/*/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Я не уверен, что тут всё по делу, но с таким конфигом после sudo apachectl restart у меня всё завелось.

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

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

Реклама

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

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

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

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

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

Про халяву

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Чай или кофе

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

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

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

Лив и лайв

Люди массово путают английские слова live и live — что немудрено, ведь пишутся они совершенно одинаково. Давайте разберёмся.

Live, который «лив» — это глагол, означающий «жить». I live in Chelyabinsk. Live, который «лайв» — это пригалательное, означающее «живой». Когда на Евроспорте в углу написано «Live» — это «лайв», а не «лив». Если услышите, что кто-то называет Лайвджорнал «Ливджорналом», сразу передавайте привет.

Ранее Ctrl + ↓