Я в интернете

РСС    Джейсон-фид

Есть автоматические трансляции в Тумблер и Же-же. Если не работает, напишите мне: ilyabirman@ilyabirman.ru.

Позднее Ctrl + ↑

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

Соскучились?

  1. Халид — новый язык программирования для обработки изображений, который (вот так поворот) использует принцип изолированной оптимизации на уровне синтаксиса. Офигенно интересный дизайн языка: программа состоит из двух частей — собственного алгоритма как суперпозиции функций-фильтров и «расписания» — секции, описывающей, как этот алгоритм выполнять (что кешировать, а что пересчитывать, как хранить какие результаты, как делить на ядра, потоки и т. д.). Советую глянуть в ПДФ чтобы сравнить код на Си и на Халиде.
  2. Стойя объясняет в чём, на её взгляд, разница между проституткой и порноактрисой.
  3. Учебник математики Романа Добровенского. Роман начинает свой учебник с введения в логику (а это самая крутая наука). Я дал ссылку на первый параграф; из-за того, что он пишет на каком-то левом движке, там трудно понять, как перейти к следующему, поэтому вам надо будет по тегам ориентироваться.
  4. Who Gets To Be a Geek? Джон Скальци рассказывает, кто может называть себя гиком, и чем гики отличаются от хипстеров. Вроде как и ни о чём, но написано хорошо. На самом деле он кому-то на что-то отвечает, но исходный текст я не читал. «You made the decision based on your life experience as a geek that you could tell other people who is welcome as a geek and who is not. Based on my life experience as a geek, I have made the decision that I am qualified to tell you to suck eggs»

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

 4 мин

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

Видео надо не только слушать, но и смотреть: поведение и эмоции дирижёра (это Густаво Дудамель) сильно радуют (и вызывают зависть). Кстати, ему тут всего 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 снова. М? Как бы так развить слух, чтобы сразу это всё слышать?

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

Цитаты из зала суда

Эпл судится с Самсунгом из-за того, что тот спёр у них дизайн айфона.

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

Each new generation sold approximately equal to all previous generations combined.

О дизайне:

We have a term in marketing at apple that we call the Lust factor.... That’s one of the things we were going for, was a high lust factor

Все показания Шиллера — на Вёрдже.

Скотт Форстолл (старший вице-президент Эпла по Ай-ОСу), говоря о том, как начинался процесс работы над Айфоном:

[Steve Jobs] didn’t want, for secrecy reasons, for anyone outside of Apple to work on the user interface... So I had to find people within Apple to work on that. But he told me I could move anyone within the company to that team

О том, говорил ли он кому-нибудь в Эпле копировать дизайн у Самсунга:

I never directed anyone to go and copy something from Samsung. We wanted to build something great. There was no reason to look at anything they had done.

Все показания Форстолла — тоже на Вёрдже.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Точки на карте

Ребята, есть задача: расставить на карте России около сотни городов. Исходник примерно такой, только шириной около 1000 пикселей:

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

Точность должна быть такая, чтобы никто из жителей этих городов не придрался. Кто возьмётся? Пожалуйста, пишите срок и желаемое вознаграждение: ilyabirman@ilyabirman.ru. Спасибо.

Эмси 1.5

Как всегда не без приключений мы с Алексеем Блиновым выпустили версию 1.5. Точнее, Алексей выпустил: к этой версии я вообще оказался слабо причастен, поскольку дизайн я сформулировал в паре предложений (см. следующий абзац), а потом Алексей это реализовывал, преодолевая сопротивление ОС и Эпла.

Итак, новая версия умеет адаптироваться к свободному месту в меню. Когда полное название исполнителя и трека не влезают, Эмси теперь не пропадает, а показывает только название трека. Если не влезает даже трек, он показывает свою иконку, а весь текст переезжает в выпадающее меню. Ну, если уж даже иконка не влезает, то не судьба.

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

Алексей Блинов делится хаком (из нашей майской переписки):

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

К сожалению, это решение по каким-то причинам работало не совсем надёжно. Потом Алексей его поменял:

После общения с Питером Эммоном на ВВДЦ запрос «дай все окна, которые выше окна статус айтема» я заменил на запрос «дай список вообще всех видимых окон в системе» и проверку, есть ли окно статус айтема в этом списке. Про запрос всех видимых окон я не знал, это Питер мне подсказал.

А дальше самое интересное:

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

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

Если нас видно и мы показываемся не полностью, вычисляем сколько надо места, чтобы показать всё. Вычисляем дельту между этим значением и текущей шириной. Создаем ещё один статус-айтем без содержания (чтобы его не видно было) с шириной дельта. Добавляем его в меню-бар. Проверяем этот статус-айтем на видимость (это можно сделать несмотря на то, что в нем нет содержания). Если его видно, значит новое состояние влезет. Убираем проверочный статус-айтем и рисуемся с новым состоянием.

Когда приложение было готово, Эпл его по традиции (о нелёгкой судьбе Эмси читайте в заметке про версию 1.3) не пустил в стор. Оказалось, что там всплыли какие-то проблемы с голден-мастером «Горного льва», которые не проявлялись на всех предыдущих билдах. Алексей быстро что-то подправил и переотправил приложение в стор.

Наконец, Эмси 1.5 на экранах ваших Маков! Покупайте наше прекрасное приложение за доллар!

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

Обновление до 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 у меня всё завелось.

Хардкорные программисты на Си и два кода

Олег Андреев комментирует мою недавнюю заметку об оптимизации:

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

  1. Весь код по теме находится рядом и в одном контексте — не нужно искать его в разных местах и (главное!) не нужно создавать дополнительных функций/интерфейсов для передачи необходимых данных туда, где происходит дальнейшая оптимизация.
  2. Если что-то нужно изменить в логике, то сразу понятно где и как это можно сделать в «медленной» версии. Внеся и протестировав изменения, можно затем переписать оптимизированную версию.
  3. Если что-то накосячено в оптимизированной версии, а сейчас нет человека или времени разбираться, можно переключиться обратно на медленную.
#if SLOW

    for (int i = 0; i <= 100; i++)
    {
        // медленный, но читаемый код, который полностью передает смысл
    }

#elsif FASTER

    vDSP_ctoz (
        (COMPLEX *) originalReal, 
        2,             // stride 2, as each complex # is 2 floats
        &A, 
        1,             // stride 1 in A.realP & .compP
        nOver2         // n/2 elts
    );

#endif
Ранее Ctrl + ↓