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

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

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

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

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

Проигрыватель

Путь решения бага Фубара с GFX Window

Я думал, что баг Фубара с GFX Window, когда на странице настроек GFX Window ничего путёвого не показывалось, уже решён — вроде жаловаться после последнего обновления все перестали. Однако Владимир Игонин придерживается иного мнения. В общем, ему слово:
Привет! Разобрался я с фубаром, на тему той ошибки. Вроде дело было так:
  1. Устанавливаем пакет А, установка foobar2000 в режиме — Normal.
  2. Распаковываем в него пакет Б.
  3. Добиваем пакетом В.
  4. Запускаем.
  5. Лезем в Preference/Display/gfx_window и получаем: Nothing to configure, if there is no skin loaded.
  6. Выходим из проги и снова в неё заходим, снова просит выбрать компонент и таже хренотень.
  7. В корне папки, куда мы установили foobar, видим файл user_profiles_enabled с размером 0 байт.
  8. Ага, а в папке Documents and Settings/User/Application Data/foobar2000/ находим файл конфигурации foobar2000.cfg.
  9. Мучительно чешем в затылке.
  10. Идём в корень папки, куда мы установили foobar и убиваем файл user_profiles_enabled с размером 0 байт.
  11. Перезапускаем прогу и вуаля! Всё работает, менюшка кажет, шкурки выбираются!
  12. Что-же случилось? Идём в корень папки, куда мы установили foobar и видим там старый знакомый файл foobar2000.cfg, а ещё до кучи foo_ui_gfx.cfg.
  13. Мучительно чешем в затылке.
  14. Вспоминаем процесс установки и пункт Enable per-user settings. Если снять эту галочку, то всё будет работать сразу.
  15. Итог. Копать разработчикам на тему расположения файлов конфигурации. Спасибо за внимание.
Что делать с этой информацией — решать вам.
 2 комментария    14   2007   Проигрыватель

Баг в GFX Window и очередная попытка фикса

В ответ на моё письмо о том, что баг про «Bug check» по сути сохранился, изменился лишь текст сообщения, Ян Хаммершмидт, автор GFX Window, выложил ещё один билд DLL’ки и написал, что, возможно бага не будет на этот раз. Те, у кого баг имеет место, попробуйте, что ли, снова скачать DLL’ку и заменить ей старую.
 3 комментария    11   2006   Проигрыватель

The Player: Please Digg This

Anyone who thinks that The Player («Проигрыватель») is a great thing, please vote for the post linking to it at Digg, so that more people around the world know about it, download and use it.

If you also write a comment on it (on Digg), that would be awesome.

Thanks in advance!

This post is not intended to artificially inflate or alter the «digg count». If you don’t think The Player is something worth spreading a word about, please don’t vote.
 4 комментария    6   2006   Проигрыватель

Проигрыватель 1.1

После выпуска «Проигрывателя» я связался с автором компонента GFX Window, и озадачил его горой вопросов; в том числе тем, почему у некоторых пользователей не открывается страница настроек, а вместо неё отображается какая-то ерунда про Bug check. Также я попросил его добавить возможность вычислять нажатость шифта и контрола и узнавать, сколько пикселей нужно строке в ширину, чтобы вместиться в текстовое поле.

Он оказался очень отзывчивым человеком!

В итоге мы имеем Проигрыватель 1.1:
  • используется новая версия GFX Window, в которой, по заверению автора, не должно происходить ошибки про Bug check;
  • автоматическая подстройка размера правого поля (больше не нужно указывать его в пикселях в настройках);
  • мигание текстовых полей в режиме паузы теперь заключается в смене уровня непрозрачности, поэтому можно его сделать менее раздражающим (см. также новую переменную paused_blink_opacity в lua-файле);
  • перемотка с шифтом теперь посекундная, а с контролом — наоборот, в 10 раз быстрее, чем настроено;
  • громкость с шифтом теперь меняется по одному шагу, а с контролом — наоборот, вдвое быстрее, чем настроено;
  • правый клик с шифтом теперь открывает системное меню;
  • даблклик с шифтом теперь делает плей/паузу независимо от выбранного действия по даблклику;
  • даблклик с контролом теперь открывает/закрывает плейлист независимо от выбранного действия по даблклику.
Страница про управление плейером обновлена; также добавлена страница про историю версий.

Чтобы обновиться с 1.0 до 1.1, вам нужно скачать как минимум комплект Б (так как изменилась версия используемого GFX Window).

Те, у кого была проблема с Bug check’ом, пишите, изчезла ли она.
 5 комментариев    17   2006   Проигрыватель

Проигрыватель 1.0

Выложил «Проигрыватель». С момента беты изменилось не так много:
  • новая иконка в трее;
  • скины немного причёсаны и, кажется, стали выглядеть приятнее;
  • ресайзинг плейлиста за любую из сторон, таскание — за верх;
  • добавилось отображение смены порядка воспроизведения (Shuffle, Repeat, Default), то есть если вы это повесите на клавиатуру, то даже будете видеть, что что-то меняется;
  • добавилась строчка slider_on_bottom = false, чтобы можно было отображать бегунок в нижней части окна (это для тех, у кого панель задач сверх; нужно поменять на true; скин при этом не перевернётся).
Ну и ещё кое-что, что вообще никто не заметит.

Если создатель GFX Window откликнется на мои просьбы сделать кое-что ещё в своём компоненте, то тогда возможно, что в будущем я сделаю ещё несколько улучшений.
 23 комментария    14   2006   Проигрыватель

Проигрыватель: Beta

Если вы ещё не скачали и не установили себе Foobar 2000, самое время сделать это. Скачать его можно прямо на главной странице официального сайта.

На данный момент там висит версия 0.9.4.1, именно она нам и нужна. Совместимость компонентов, входящих в мою «сборку», с другими версиями не то, что не гарантируется, а вообще не волнует меня совершенно.

Слово «сборка» я взял в кавычки, потому, что это не сборка в привычном смысле, когда люди закидывают в zip-архив все компоненты, которые им удалось найти, и думают, что это очень круто. Я доверяю вам, дорогие читатели, найти себе нужный мусор самим. Вот я себе, например, поставил foo_alarm — позволяет начать проигрывание в определённое время. Он, конечно, в «сборку» не входит. Кому надо — сами поставят себе такой же.

Результат моих трудов называется просто Проигрывателем. Проигрыватель — это комплект, состоящий из трёх ключевых элементов:
  • программа Foobar 2000, которая, собственно, является стержнем для компонентов, и которая умеет играть музыку и работать с плейлистами;
  • компонент foo_ui_gfx, который позволяет написать интерфейс полностью самому на языке программирования Lua;
  • скрипт birman.lua, который и реализует весь тот сказочный интерфейс, который я придумал.
Также в комплект входит набор из 5 скинов и компонент foo_notaskbar, который убирает кнопку Фубара с Панели задач.

Поскольку сегодня у нас бета, то в качестве дистрибутива я выкладываю урезанную версию, не включающую сам Фубар (именно поэтому я и предложил вам в самом начале скачать его). Теперь скачайте дистрибутив беты (231 КБ).

Дистрибутив — это zip-архив, внутри которого лежит две папки. Обе их нужно закинуть в папку установленного Фубара (предположительно в C:\Program Files\foobar2000). Папка components там есть и так, но нужно просто, чтобы файлы из моей components попали в вашу. Там как раз лежат foo_ui_gfx.dll и foo_notaskbar.dll. Папка birman-interface содержит скрипт birman.lua и пять картинок в формате BMP. Это скины. Посмотрев на эти, вы, возможно, догадаетесь, как легко делать свои. А если не догадаетесь, то к финальному релизу я это, скорее всего, опишу.

После установки Фубара вам надо будет зайти в его Preferences и там, где Display, в качестве интерфейса выбрать gfx_window. После этого Фубар придётся перезапустить. По Ctrl+P (или по правой кнопке к трей-иконке, Preferences) вы можете снова попасть в Preferences. В ветке gfx_window находятся настройки интерфейса. Там можно выбрать скин и разные другие параметры. Нажимайте Reload, чтобы изменения как-то проявились. Не забудьте также назначить себе удобные горячие клавиши в ветке Keyboard Shortcuts.

Наслаждайтесь (если что-то этому мешает, пишите в комментарии).

Update: Дописал про то, что после изменения настроек gfx_window нужно нажимать Reload.
 31 комментарий    73   2006   Проигрыватель   Фубар 2000

Проигрыватель: отображение информации

Для своего фантастического проигрывателя я в порядке развлечения нарисовал несколько скинов.

Пять скинов

Каждый скин по-своему раскрашивает и сам плейер, и окно плейлиста:

Плейлист

Плейлист — отдельное окно, однако при перетаскивании оно «примагничивается» к окну плейера и к краям экрана. По правой кнопке в любой части рамки окна вываливается системное меню Фубара, где можно добавить файлы в плейлист. В отличие от винамповского, оно не состоит из ста тысяч пунктов.

Формат отображения в строчках плейлиста описывается на Tagz в настройках Фубара.

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

Содержимое окна плейера

Правое поле также используется для отображения «временной» информации. Например, когда вы крутите колесо мышки, там появляется строчка «Volume: 83%». Когда перестаёте — она через какое-то время исчезает. Через какое именно — можно настроить, но интерфейса для этого нет, так как это нафиг не нужно. В исходнике это называется temp_display_delay = 1500.

В режиме паузы плейер мигает обоими полями. Зачем мигать во время паузы? Кассетники мигали потому, что в режиме паузы плёнка неравномерно растягивалась, что было для неё не полезно. Нужно было как-то привлечь внимание пользователя к тому, что пауза — функция для кратковременного использования, и оставлять кассетник в таком положении не надо. На CD-проигрывателях смысла в этом стало несколько меньше. От вращения диск не изнашивается. Однако напомнить человеку, что он там крутится, всё же, не повредит. Может быть, диск крутится зря уже вторую неделю, остановите его. На компьютере смысл, кажется, и вовсе исчез. С точки зрения всей механики компьютера вообще ничего не меняется в режиме паузы. Однако есть всё-таки три момента:
  • есть некая привычка, что в режиме паузы оно должно мигать, это почему-то кажется естественным, несмотря на то, что все объективные причины, по которым это придумывалось, более не играют роли.
  • паузу я обычно нажимаю когда отвлекаюсь на что-то, чему музыка мешает, например, на телефонный звонок; мигание напомнит мне, что музыку надо включить обратно;
  • когда файл на паузе, он открыт; его нельзя переименовать, перетащить или удалить;
Поэтому, решил я, пусть будет. Но если вы решили иначе, к вашим услугам строчки: paused_blink = true и paused_blink_delay = 750.

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

Выложу уже буквально совсем очень скоро. Осталось только заставить жесты работать и в плейлисте тоже и ещё несколько мелких багов исправить.

Проигрыватель: управление мышью

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

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

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

Изменение размеров окна

Теперь займёмся колёсиком. Для начала, конечно, сделаем, чтобы с его помощью можно было как в Винампе менять громкость, однако шаг сделаем настраиваемым. Далее, держать колесо нажатым и при этом вращать — довольно трудно: периодически отпускаешь его, и иногда получается, что, не желая того, меняешь громкость. Сначала я повесил туда выбор трека. Чаще всего не нужно прыгать сразу на 7 треков вперёд, а нужно только либо просто на предыдущий, либо просто на следующий. А прокрутить нажатое колесо на 1 шаг совсем не трудно. Однако в таком варианте я несколько раз сбился, потому, что уже привык в Винампе к тому, что это перемотка. В результате остановился на таком варианте:

Выбор действия при нажатии и вращении колеса

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

Опера нам подарила гениальную комбинацию: вращение скроллинга при нажатой правой кпонке. Этой находкой мы воспользуемся для нормальной организации перемотки. Нажал правую кнопку — и крути колесо сколько душе угодно в любую сторону. Естественно, скорость перемотки сделаем настраиваемой.

Cделаем настраиваемым и даблклик:

Выбор действия по даблклику

Мне удобнее всего вешать на даблклик плей/паузу, но если вы повесите что-то другое, у вас по-прежнему есть выбор того, как именно сделать плей/паузу:

Выбор способа приостановки/продолжения воспроизведения

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

Ладно, как же нам перейти на предыдущий или следующий трек, если на нажатие-и-поворот колеса мы повесили какое-то другое действие? Очевидно, здесь мы воспользуемся жестами. (Вы не пользуетесь жестами в Опере? Тогда мы идём к вам!) Жест влево — предыдущий трек, жест вправо — следующий трек. Легко, логично, и, главное, не требует прицеливания к чему бы то ни было.

Кстати, если на вашей мыши есть кнопки Back и Forward по бокам, то вот вам ещё один способ — они работают как Prev/Next без дополнительных ухищрений.

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

Кое-какие тонкие настройки, связанные с мышью, можно также найти в исходнике интерфейса, в самых первых строчках:
  • snap_gap = 10 — за сколько пикселей до края экрана плейер будет к нему пытаться прилипнуть;
  • gesture_insensitivity = 10 — на сколько пикселей можно сдвинуть мышь с нажатой правой кнопкой, чтобы это не считалось жестом;
  • playlist_scroll_step = 1 — на сколько позиций будет скроллиться плейлист за один шаг поворота колеса;
  • o_gestures = true — жесты здесь можно вообще отключить, если они вам не нужны или, например, если вы пользуетесь каким-нибудь полномасштабным жестикулятором (вроде StrokeIt) и хотите настроить их в нём.
Подведём итоги:

Управление мышью

Пять минут привыкания — и более непонятно, как без этого жить.

В следующей заметке — про отображение, скины и плейлист.

Проигрыватель: Sneak Peek

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

В Windows есть место, которое всегда пропадает понапрасну. Можно ругать Microsoft за это, а можно воспользоваться этим промахом для своих целей. Это, конечно, правый угол заголовка окна, развёрнутого на весь экран.

Место, которое мы займём
Масштаб 1:2

Обратите внимание, у окна довольно длинный заголовок, и это разрешение 1024×768. А я вот, например, работаю в 1920×1440. То есть, места дополна.

В Винампе использовался убогий шрифт, где все буквы были заглавными, а кириллицы не было вообще. Мы будем использовать шрифт, который в Windows выбран для использования в заголовках окон. В моём случае это Segoe UI, 9, Bold.

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

Как выглядит проигрыватель
Масштаб 2:3

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

Ещё одна мелочь: в Винампе, помимо того, что можно было ткнуть на полоску бегунка, чтобы сразу прыгнуть в нужное место, за бегунок можно было ещё и «зацепиться», чтобы перетащить его куда-то и бросить. В реальной жизни вторая фича только мешала. Тыкаешь куда-то, потом тыкаешь на 5 пикселей левее, — ничего не происходит, а ты хотел сместиться на чуточку назад. А всё потому, что Винамп думает, что ты зацепился за бегунок, просто за другую его точку. У меня эта проблема отсутствует, так как Фубар не позволяет зацепиться за бегунок; бегунок просто следует за мышкой, когда левая кнопка нажата, оказываясь своим центром точно под курсором.

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