Подписка на блог

В Телеграме помимо ссылок на заметки делюсь околодизайнерскими наблюдениями.

В Твиттере помимо ссылок на заметки пишу всякую чушь.

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

По РСС и Джейсон-фиду трансляции для автоматических читалок

Эмси

Позднее Ctrl + ↑

Эмси 1.3

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

Сначала у него было недостаточно entertaining value (это не шутка). Мы написали им письмо удивления, а пока они его рассматривали, мы добавили поповер, который рассказывал о том, что это и зачем, и засубмиттили апдейт. Тут Эплы вдруг передумали и пропустили нашу недостаточно развлекательную прогу (1.0). А потом стремительно пропустили и версию с поповером (1.1).

Но весь смысл поповера был в том, чтобы добавить им веселья там, а им и так весело сделалось, поэтому мы решили потом его убрать.

Потом был апдейт до 1.2, в котором добавилась голубая сосиска-прогрессбар и альт-перемотка. Правда, версию 1.2 сначала не пропустили в стор из-за того, что на скриншоте в качестве песни в меню было написано «The Beatles: Yesterday»! Сказали, что у нас нет прав на слово Beatles (причём, они это откуда-то знают). Пришлось подправить скриншот и потерять ещё неделю.

В версии 1.3 мы, наконец, убрали поповер, сделали нормальное меню и вообще улучшили дизайн. Прогрессбар больше не рисуется постоянно, а появляется только при нажатом Альте (то есть когда перемоткой можно воспользоваться):

Эмси 1.3

Напомню, что версия 1.1 была новым словом в интерфейсах:

А ещё мы сделали суперважный шаг вперёд в интерфейсах: у нас нет идиотской галочки «запускать при запуске системы». Программа без лишних вопросов прописывается в Login items при запуске и выписывается оттуда при выходе через её меню. Если у вас показывалась текущая песня, а потом вы перезагрузились, то и после перезагрузки она продолжит показываться. А если не показывалась, то и после перезагрузки не будет.

Как вы знаете, во Льве уже официально так стало правильно себя вести — открываться после перезапуска, если тебя не закрыли перед ним. К сожалению, об этом плохо знает компания Эпл: версию 1.3 нам завернули как раз за то, что она перезапускается, не спросив пользователя! При этом предыдущие версии с этой фичей спокойно пропускали.

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

Но зато у нас специальная промоцена!

Бегите покупать Эмси 1.3 за один доллар вместо трёх!

Эмси 1.1

Не все знают, что Эмси давно уже есть в Апсторе. А между тем, он там есть. Мы с Алексеем Блиновым уже доделали новую версию, и она стала доступна пару дней назад. А сегодня мы встретились на Пиккадилли-серкусе и сейчас сидим и пьём кофе в Сохо, и вот торжественно анонсируем её:

В новой версии появился небольшой прогрессбарчик, в который можно тыкать с нажатым Альтом, чтобы перематывать песню в нужное место, и менюшка, из которой можно закрыть программу.

А ещё мы сделали суперважный шаг вперёд в интерфейсах: у нас нет идиотской галочки «запускать при запуске системы». Программа без лишних вопросов прописывается в Login items при запуске и выписывается оттуда при выходе через её меню. Если у вас показывалась текущая песня, а потом вы перезагрузились, то и после перезагрузки она продолжит показываться. А если не показывалась, то и после перезагрузки не будет.

В Лондоне зашибись.

Эмси 0.5

Новости Эмси: мы сделали версию 0.5. Вот та же самая картинка, которую я вешал в прошлый раз:

Эмси 0.5

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

Пока что обновить программу придётся вручную (ссылка туда, где скачать), но с этим мы тоже постепенно что-нибудь сделаем.
 7 комментариев    9   2010   Эмси

Эмси 0.4

На мой призыв присоединиться к разработке Эмси, взяв на себя программирование, откликнулся Алексей Блинов, и у нас уже готова версия 0.4. На самом деле она была готова уже несколько дней назад, но мне было некогда об этом написать, выложить её и обновить страницу Эмси у себя на сайте. Теперь программу можно скачать.

Эмси 0.4

Как видно на картинке, теперь мы показываем название песни жирным, а вся надпись немного уменьшена: теперь она набрана шрифтом остатка батарейки, а не пункта меню. Кроме того, как я и предполагал, у меня нашлись утечки памяти, которые Алексей устранил. Поэтому версия 0.4 рекомендуется всем.

Ну и заодно, смотрите, я обновил свою главную страницу.

Стэй тьюнд, скоро будет ещё всякое новое-интересное.
 14 комментариев    22   2010   софт   Эмси

Эмси 0.3

И года не прошло, как я выпустил апдейт своей маленькой программки «Эмси». Хотя вру, прошло больше года.

В версии 0.3 исправлен баг, из-за которого при запущенном Эмси Айтюнс было нереально закрыть: он перезапускался сам собой. Сейчас всё в порядке. Никаких новых фич не добавлено.

Кстати, если среди моих читателей есть желающий допиливать эту программу под моим арт-директорством, дайте мне знать.
 17 комментариев    17   2010   глюки   софт   Эмси

Эмси будущего

В выходные опять немного поигрался с Какао. Научился делать пункты меню, в которых нарисовано то, что я хочу. Получил поверхностное представление об использовании «имплисит анимейшенс» в Кор-анимейшене. Сделал экспериментальный билд Эмси, в котором реализовал пару вещей.

Во-первых, я сделал шрифт мельче. Когда пунктом меню выступал просто текст в виде NSString, он рисовался стандартным шрифтом для пунктов меню. Я думал, что изменить его я смогу только, если буду использовать кустомный вью (сейчас-то я уже думаю, что, наверное, можно было просто NSAttributedString использовать в качестве тайтла). Короче, теперь у меня используется более мелкий шрифт — из стандартных вещей такой применяется, например, в индикаторе уровня заряда батарейки на ноутбуках.

Эмси будущего

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

Во время паузы вся эта штука красиво зачёрнобеливается.

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

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

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

Эмси теперь поддерживает интернет-радио

По просьбам трудящихся научил Эмси показывать название стрима, когда играет интернет-радио (вместо названия радиостации). Туда обычно кидают названия текущей песни или анонсы типа «Следом в эфире — то-то». Это намного полезнее, чем наблюдать непрерывное «Хрень-ФМ». Так что скачайте версию 0.2.

Ещё она теперь не забывает стереть название песни, когда выходишь из Айтюнса (раньше оставалось висеть). Правда, если запустить прогу, когда Айтюнс ещё не запущен, то потом ей нужно какое-то время, чтобы вкурить, что пора бы что-нибудь написать (природа зависона мне пока непонятна).
 4 комментария    7   2009   софт   Эмси

Эмси

Совершенно поразительно, что все подряд программы-компаньоны к Айтюнсу показывают информацию о играющей песне во всплывающем временном окошке тогда, когда песня только начинается. Это ужасно неудобно:
  • когде песня только началась, тебе, как правило, на неё ещё наплевать;
  • временные окошки обязательно всплывают не там, где тебе нужно, мешая работе;
  • всплытия обычно сопровождаются анимацией, отвлекающей тебя от того, что ты делаешь;
  • они висят на экране слишком долго: ты уже прочитал, а они всё ещё загораживают что-нибудь;
  • они висят на экране слишком мало: ты только начал читать, а они исчезают;
  • в момент, когда тебе нравится песня, и ты задаёшься вопросом о её названии, ответа на этот вопрос нет на экране.
В комплекте с каждым Маком идёт диск с инструментами для разрабоки. Понятное дело, что я их установил практически сразу же, как купил Мак. Я хотел сделать программу, которая бы тихо показывала в правой части меню текущую играющую в Айтюнсе песню. Безо всякого кретинского плавненького скролирования этого названия влево-вправо, как я видел в одной программе. Безо всяких там рейтинговых звёздочек. Тем же самым шрифтом, что и всё остальное. Короче, просто вот так:

Название песни в менюбаре

Тогда я довольно быстро справился с этой задачей: Жан-Даниель Дюпа, автор Спарка (прекрасного менеджера клавиатурных шоткатов) подсказал мне, что нужно копать API под названием Scripting Bridge. Эта штука позволяет используя эплскриптовый словарь любых приложений общаться с ними. Получается вполне поэтический код. Вот так, например, узнаём, что играет в Айтюнсе:

iTunesApplication *iTunes;
iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
if ([iTunes isRunning]) NSString *text = [[iTunes currentTrack] name];


Добиться того, чего я хотел, оказалось не так сложно, но вот только для того, чтобы следить за Айтюнсом, приходилось использовать таймер. Каждые полсекунды я заново спрашивал у бедного Айтюнса, что же в нём играет:

updateTimer = [[NSTimer scheduledTimerWithTimeInterval:(.5)
  target:self selector:@selector(updateSong:) userInfo:nil repeats:YES] retain];


Вчера я наконец-то освоил штуку под названием Distributed Notification Center, которая позволяет отслеживать события в других программах. И поэтому теперь я делаю вот так:

notificationCenter = [NSDistributedNotificationCenter defaultCenter];
[notificationCenter addObserver:self
  selector:@selector(updateSong:) name:@"com.apple.iTunes.playerInfo" object:nil];


А ведь такую штуку уже как бы не стыдно показать. Если кто-то хочет попробовать — вперёд, всего 12 килобайт (зип-архив). Называется «Эмси» (Emcee.app). У программы нет меню, иконки в Доке и она отсутствует в списке Force Quit, поэтому чтобы из неё выйти нужно либо открыть Activity Monitor и прибить её там, либо просто сказать терминалу:

killall Emcee

Кстати, картинка сверху — это скриншот.