Халид — новый язык программирования для обработки изображений, который (вот так поворот) использует принцип изолированной оптимизации на уровне синтаксиса. Офигенно интересный дизайн языка: программа состоит из двух частей — собственного алгоритма как суперпозиции функций-фильтров и «расписания» — секции, описывающей, как этот алгоритм выполнять (что кешировать, а что пересчитывать, как хранить какие результаты, как делить на ядра, потоки и т. д.). Советую глянуть в ПДФ чтобы сравнить код на Си и на Халиде.
Стойя объясняет в чём, на её взгляд, разница между проституткой и порноактрисой.
Учебник математики Романа Добровенского. Роман начинает свой учебник с введения в логику (а это самая крутая наука). Я дал ссылку на первый параграф; из-за того, что он пишет на каком-то левом движке, там трудно понять, как перейти к следующему, поэтому вам надо будет по тегам ориентироваться.
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»
Новое большое открытие — десятая симфония Шостаковича:
Видео надо не только слушать, но и смотреть: поведение и эмоции дирижёра (это Густаво Дудамель) сильно радуют (и вызывают зависть). Кстати, ему тут всего 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 снова. М? Как бы так развить слух, чтобы сразу это всё слышать?
Наслаждайтесь! Научил Павел Урусов, за что ему спасибо.
Скотт Форстолл (старший вице-президент Эпла по Ай-ОСу), говоря о том, как начинался процесс работы над Айфоном:
[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» Юрий Подорожный поделится айос-экпертизой и опытом ведения проектов, объяснит, как грамотно готовить исходники и общаться с разработчиками.
Ребята, есть задача: расставить на карте России около сотни городов. Исходник примерно такой, только шириной около 1000 пикселей:
Нужно правильно поставить и подписать точки всех городов. Точки должны стоять географически точно, по подписям должно быть понятно, какая к какой точке относится. Эстетика не волнует, можно сделать каждую точку в своём слое и сам слой подписать, если так удобнее.
Точность должна быть такая, чтобы никто из жителей этих городов не придрался. Кто возьмётся? Пожалуйста, пишите срок и желаемое вознаграждение: ilyabirman@ilyabirman.ru. Спасибо.
Как всегда не без приключений мы с Алексеем Блиновым выпустили версию 1.5. Точнее, Алексей выпустил: к этой версии я вообще оказался слабо причастен, поскольку дизайн я сформулировал в паре предложений (см. следующий абзац), а потом Алексей это реализовывал, преодолевая сопротивление ОС и Эпла.
Итак, новая версия умеет адаптироваться к свободному месту в меню. Когда полное название исполнителя и трека не влезают, Эмси теперь не пропадает, а показывает только название трека. Если не влезает даже трек, он показывает свою иконку, а весь текст переезжает в выпадающее меню. Ну, если уж даже иконка не влезает, то не судьба.
Сделать это было не так просто, потому что система никак не сообщает программам, сколько у них есть места в меню и даже не информирует о том, скрыты они или показаны. То есть система тупо скрывает все пункты меню, которые не влезают.
Алексей Блинов делится хаком (из нашей майской переписки):
Там решение настолько неизящное, что как-то неловко даже. Но написать можно все равно :-) Чтобы проверить, видно ли наш статус-айтем, я прошу у системы список всех окон, которые выше окна статус-айтема в иерархии. Если в этом списке нет несистемных окон (системные окна всегда выше всех), то значит нас видно. А когда не видно, в этом списке появляется левое окно.
К сожалению, это решение по каким-то причинам работало не совсем надёжно. Потом Алексей его поменял:
После общения с Питером Эммоном на ВВДЦ запрос «дай все окна, которые выше окна статус айтема» я заменил на запрос «дай список вообще всех видимых окон в системе» и проверку, есть ли окно статус айтема в этом списке. Про запрос всех видимых окон я не знал, это Питер мне подсказал.
А дальше самое интересное:
При получении нотификации о смене текущего приложения либо при смене трека, делаю такую проверку на видимость. Нас видно?
если да, и мы показываем всё полностью, ничего не делать;
если да, и мы показываем только название или только иконку, пробуем показать чуть больше (вдруг есть место); проверяем на видимость, и если не видно, возвращаемся к предыдущему состоянию;
если нет, значит мы показываем сликом много; пробуем показать чуть меньше, проверяем на видимость, и если видно, останавливаемся.
Это здорово работает, но при этом наш статус-айтем моргает, потому что когда показывается только название, и переключается приложение, Эмси пытается показать всё; если это все не влазит, статус-айтем на долю секунды пропадает, и потом возвращается, опять показывая только название. Поэтому я придумал следующую штуку.
Если нас видно и мы показываемся не полностью, вычисляем сколько надо места, чтобы показать всё. Вычисляем дельту между этим значением и текущей шириной. Создаем ещё один статус-айтем без содержания (чтобы его не видно было) с шириной дельта. Добавляем его в меню-бар. Проверяем этот статус-айтем на видимость (это можно сделать несмотря на то, что в нем нет содержания). Если его видно, значит новое состояние влезет. Убираем проверочный статус-айтем и рисуемся с новым состоянием.
Когда приложение было готово, Эпл его по традиции (о нелёгкой судьбе Эмси читайте в заметке про версию 1.3) не пустил в стор. Оказалось, что там всплыли какие-то проблемы с голден-мастером «Горного льва», которые не проявлялись на всех предыдущих билдах. Алексей быстро что-то подправил и переотправил приложение в стор.
Наконец, Эмси 1.5 на экранах ваших Маков! Покупайте наше прекрасное приложение за доллар!
Обновление до 10.8 вносит изменения в конфигурацию Апача, после чего ваши локальные сайты могут перестать работать. Старый /etc/apache2/httpd.conf инсталлятор оставляет рядом с пометкой previous, поэтому его откатить легко. Всё же я решил внести изменения в новый — вдруг в нём что-нибудь изменилось в лучшую сторону в тех местах, которые я не трогаю. Но вот то, что он удаляет всё из /etc/apache2/users/ — это неприятно, если у вас нет Тайм-машины или другого компьютера с которого можно взять старые файлы.
Вот какие изменения я внёс в новый httpd.conf из 10.8:
А вот как выглядит мой /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 у меня всё завелось.
Хардкорные программисты на Си, пишущие сложные алгоритмы, делают так: пишут кусок кода в лоб, понятно и просто. Когда в нем баги исправлены, рядом (отдельно, не вперемешку) пишется версия того же кода, только более эффективная. Пользы у такого подхода много:
Весь код по теме находится рядом и в одном контексте — не нужно искать его в разных местах и (главное!) не нужно создавать дополнительных функций/интерфейсов для передачи необходимых данных туда, где происходит дальнейшая оптимизация.
Если что-то нужно изменить в логике, то сразу понятно где и как это можно сделать в «медленной» версии. Внеся и протестировав изменения, можно затем переписать оптимизированную версию.
Если что-то накосячено в оптимизированной версии, а сейчас нет человека или времени разбираться, можно переключиться обратно на медленную.
#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