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

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

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

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

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

Решения

Позднее Ctrl + ↑

Как починить мышь на Маке

Если кто не знает, в чём проблема с мышью на Маке (например, не читал мою давнюю заметку про три беды МакОСа), то суть её состоит в том, что кривая ускорения у Эплов слишком кривая. Когда мышь по столу двигаешь медленно, по экрану она ползёт совсем как черепаха, но стоит её начать двигать хоть чуть-чуть быстрее — и ты уже на другом конце экрана. См. также «mac mouse acceleration» на Гугле.

Кстати, чем больше монитор, тем сильнее ощущается проблема.

Естественно, это нужно починить, потому, что без идеальной мыши пользоваться компьютером невозможно. Поиск в интернете приводит нас к следующим вариантам решения:
  • поставить программу MouseFix (iMouseFix), USBOverdrive или SteerMouse и всё будет хорошо (все они лишь изменяют коэффициенты в эпловской кривой, сохраняя её дебильную форму; последние две ещё и требуют перезапуска системы, и выглядят как говно);
  • поправить какой-то .plist (то же самое, там только коэффициент);
  • поставить фирменные драйверы от мыши: они могут разрешать более тонкую настройку (логитековский Контроль-центр не является драйвером, а просто даёт навешивать всякие фичи на боковые кнопки, что можно намного удобнее делать и встроенными средствами);
  • купить микрософтовскую мышь: её драйверы сами управляют перемещением указателя в обход системы и делают его правильным (покупать мышь ради решения сугубо софтверной проблемы — явный левак);
  • просто использовать микрософтовские драйверы: они заработают с любой мышкой (с моей не заработали, точнее, не повлияли на её поведение);
  • выкинуть мышь, перейти на планшет (это интересно в принципе, но не решает обозначенной проблемы);
Моё любопытство привело меня к документу Микрософта, где описывается правильная кривая ускорения. В Виндоусе зависимость скорости перемещения указателя от фактической скорости движения мыши достаточно близка к линейной:

Кривая ускорения мыши в Виндоусе

В итоге я бросил поиски решения «в один клик» и стал копать глубже. Поисковый запрос «edit mouse acceleration curve» привёл меня к чудесной программе ControllerMate, которая умеет делать с любыми устройствами ввода и вывода такие вещи, что закачаешься. Например, я в порядке эксперимента заставил её всякий раз, когда я нажимаю на правую кнопку мыши, мигать трижды лампочкой Капс-лока на клавиатуре. Но нам она нужна для другого: в ней есть редактор кривой ускорения мыши:

Редактируем кривую ускорения в Контроллермейте

Бледно-голубыми нарисованы системные кривые с разными коэффициентами — только здесь я глазами увидел, насколько же они бесчеловечны. Чтобы повторить кривую Микрософта потребовалось две минуты, на подбор удобных коэффициентов (с нажатыми Command/Option можно масштабировать всю кривую целиком по одной из осей) — ещё три.

И после этого наступило счастье.

После трёх дней ощущения себя на этом компьютере в гостях я, наконец-то, дома.
 22 комментария    211   2008   Мак   решения

О «ручном» рендеринге текста в Фотошопе

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

Вот, например, набросок кнопки «Выйти» для воображаемого сайта (слово слегка утоплено в кнопку за счёт теней):

Рендеринг текста

Выпуклости и тени трогать не будем, сконцентрируемся на надписи. Она сделана шрифтом «Ариал», 12 п, в режиме «хрустящего» антиалиасинга (crisp). Проблема в том, что она мыльная:

Рендеринг текста крупным планом

Сравним рендеринг с другими режимами антиалиасинга — резким (sharp), насыщенным (strong) и спокойным (smooth), а также попробуем выключить его совсем:

Рендеринг текста с разным антиалиасингом

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

В общем, у машины получается плохо — требуется человеческое вмешательство. То, чем мы займёмся дальше, называется «пиксельными войнами» (pixel wars). Отталкиваться будем от хрустящего антиалиасинга.

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

Будем потихоньку увеличивать шрифт и достигнем красоты на отметке 13,2 п

Горизонталь буквы т теперь выглядит хорошо, а вот верхняя часть у „В“ размазалась. Возьмём её и загоним обратно в пиксели. Будем её уменьшать, а не увеличивать, чтобы относительный размер строчных стал больше:

Возьмём букву В и загоним обратно в пиксели

Горизонтальные палки теперь легли как надо, можно заняться и вертикальными. Хочется сделать так, чтобы вертикальные штрихи занимали по горизонтали хотя бы один пиксель целиком, а не размазывались на два серых.

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

Будем пододвигать каждую букву так, чтобы её левый вертикальный штрих попал в пиксели

Как видим, кернинг помог лишь отчасти: в некоторых буквах при хорошем попадании одного штриха, другой размазывается. Тут нам поможет растягивание букв. Возьмём „ы“ и сделаем её чуть-чуть пошире, чтобы правый штрих «защёлкнулся»:

Возьмём „ы“ и сделаем её чуть-чуть пошире, чтобы правый штрих «защёлкнулся»

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

В итоге получится что-нибудь вроде такого:



Сравним с исходным рендерингом (было — стало):

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

Наверняка можно добиться и ещё лучшего вида. Можно также было начать с другого режима антиалиасинга, но он должен быть один и тот же во всём наборе кнопок, если их делается несколько.

Приятных экспериментов.
 18 комментариев    98   2008   решения   типографика   Фотошоп

Работа с текстом в Фотошопе без мыши

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

Alt+Backspace — закрасить выделенные кусок текста текущим основным цветом;
Ctrl+Shift+U — подчеркнуть/неподчеркнуть;
Ctrl+Shift+B — зажирнить/отжирнить;
Ctrl+Shift+I — наклонить/выпрямить.

На самом деле Alt+Backspace заливает выделенную инструментом M область текущим основым цветом, просто я случайно обнаружил, что в случае с текстом это тоже работает (Ctrl+Backspace заливает выделенную область второстепенным цветом, но выделенный текст он удаляет).

Заодно, раз уж речь пошла о работе с текстом, скажу тем, кто не в курсе, что Alt+влево/вправо позволяет изменять кернинг между символами, между которыми стоит курсор, а если в тексте есть выделенный фрагмент — трекинг в нём; а Alt+вверх/вниз настраивает интерлиньяж в выделенном фрагменте.
 4 комментария    38   2008   решения   Фотошоп

Холодильник Студии Лебедева

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

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

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

Моя версия

Предлагаю интересующимся, раз уж такое дело, обсудить задачу здесь. Вот мой подход:
  • продукты кладутся в холодильник только на верхнюю полку частной зоны;
  • если кто-то видит, что какой-то продукт «чё-то сильно уж давно лежит» (с учётом того, сколько обычно такой продукт не портится), то он его перекладывает на нижнюю полку;
  • если кто-то видит, что какой-то продукт сильно давно лежит на нижней полке, он перекладывается в общественную зону;
Короче, сомнительные продукты опускаются ниже на одну полку.

Нижняя полка служит автоматической напоминалкой типа: «эй, это чьё? съешьте или выкините уже!» Владелец всякого продукта имеет возможность и скорректировать неоправданное «понижение полки»: увидел свою колбасу на нижней полке — заволновался — переложил обратно на верхнюю.

Продукт из общественной выкинет первый же обнаруживший, что он уже негоден. Если же продукт вдруг окажется годным, то он его съест, предотвратив порчу.

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

Понятие «нижняя полка» условно; это может быть просто какая-то часть частной зоны. Можно просто положить туда жёлтый лист бумаги; то что на нём — под вопросом.

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

Комментарий к лебедевскому решению

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

Кроме того, продукты с наклейками будут смотреться как в поликлинике смотрятся баночки с мочой с приделанными направлениями.
 20 комментариев    133   2008   Лебедев   решения

Отучаем инсталлятор проверять версию ОС

На днях я спрашивал на Вотсоуэвере как поставить под 2003-м Виндоусом приложение, которое требует XP. К сожалению, предложенные там решения (подписать в реестре другую версию) не сработали, и поэтому вместо того, чтобы обманывать инсталлятор, я решил зайти с другой стороны: отучить его проверять версию Винды вовсе. Это оказалось совсем не сложно.

Начну с того, что мой инсталлятор был EXE-файлом, который встречал меня словами о том, что он распаковывает MSI-файл, а уже после того, как распакованный MSI запускался, он ругался на то, что Виндоус у меня не XP.

Как нетрудно догадаться, MSI можно выловить в C:\Documents & Settings\<Your name here>\Local Settings\Temp. Попутно замечу, что «распакованный» из 25-мегабайтного дистрибутива файл оказался всего лишь 19-мегабайтным...

Теперь нам понадобится Orca MSI editor. Оказывается, MSI-файл представляет собой базу данных с какой-то кучей таблиц. Что там к чему — понять трудно, но моё внимание привлекла таблица LaunchConditions, в которой была всего одна строчка:

(Not Version9X=400) And (Not Version9X=410) And (Not Version9X=490) And (Not VersionNT=400) And (Not VersionNT=500) And (Not VersionNT=502) And (Not VersionNT=600)[ProductName] requires that your computer is running Windows XP

Я эту строчку тупо удалил, перезапустил инсталлятор, и прога встала как миленькая.
 9 комментариев    46   2008   решения

Корректное завершение explorer.exe

Так уж вышло, что explorer.exe иногда падает. Одна из связанных с этим проблем — это то, что он забывает какие-то изменения, сделанные на панели задач или рабочем столе. Например, если вы добавили новый тулбар с ярлыками на панель задач, поставили его слева от тулбара с кнопками задач, рассортировали там иконки, а потом explorer.exe упал, то всё это он забудет напрочь.

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

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

Мало кто знает, что корректно завершить процесс explorer.exe (и, таким образом, добиться сохранения всего) можно не перезагружаясь. Для этого нужно нажать Пуск — Завершение работы, а потом выбрать Отмену, удерживая Ctrl, Alt и Shift.

После этого через Ctrl+Shift+Esc — Файл — Новая задача explorer.exe запускается обратно, и он всё помнит.
 18 комментариев    116   2008   Виндоус   решения

Заставляем Photoshop CS2 работать с кириллицей

Photoshop CS2 любит переключаться в шрифт Myriad Pro каждый раз, когда вы пишете что-то по-русски некоторыми шрифтами. Со стандартными системными шрифтами этой проблемы не происходит. Шрифт Myriad Pro — вообще какой-то шрифт-загадка, в папке шрифтов Windows его нет, и вообще нигде на компьютере найти что-то похожее мне не удаётся. Почему фотошоп переключается именно в него — тоже непонятно. Но факт остаётся фактом.

В Photoshop’е CS можно было набрать текст выбранным шрифтом, игнорируя то, что вместо букв печатаются кракозябры, а потом выделить его — и ещё раз выбрать нужный шрифт; всё вставало на свои места. В CS2 выбрать нужный шрифт не удаётся: тыкаешь на него, а он всё равно делает Myriad Pro.

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

Как пишут в некоторых местах, проблема в том, что сами шрифты записаны в каком-то таком формате, который фотошоп не понимает. И вот, «если гора не идет к Магомету», то почему бы не сконвертировать сами шрифты в понятный фотошопу формат? Для этого нашлась специальная программка ttfconv (16 KB), которую можно скачать вот тут. Технология использования программы: кладём «неправильные» шрифты с ней в одну папку, запускаем ttfconv *.ttf, полученные шрифты устанавливаем. Запускаем фотошоп, наслаждаемся.

P. S. На первое апреля пост попал случайно; решение действительно рабочее.
 5 комментариев    63   2006   решения   Фотошоп   шрифты

Изображения в RSS-читалке Оперы

Сенсация! Оказывается, RSS-читалка Оперы умеет показывать изображения. Я был совершенно уверен, что не умеет!

Хитрость в том, что во время просмотра RSS нужно на тулбаре нажать на View и в подменю Display снять галочку с Suppress external embeds... Кроме того, там должен быть выбран формат HTML, а не Plain text. Ужас какой.

Очевидно, эта корявость связана с тем, что RSS-читалка использует много кода из почтового клиента Оперы (в случае с которым такое поведение вполне логично). Но от этого она не перестаёт быть корявостью.

Надеюсь, в девятке они сделают что-нибудь, чтобы это работало сразу.
 5 комментариев    9   2006   глюки   Опера   решения

Ужасный баг Оперы с куками

Как известно, браузер решает, какие куки слать странице вместе с запросом, на основании того, какие домен и путь прописаны у куки. Причём домены тупо сравниваются своими концами. То есть, кука, оставленная для домена ilyabirman.ru, видна всем доменам *.ilyabirman.ru.

Страшный баг Оперы состоит в том, что если домены ilyabirman.ru и something.ilyabirman.ru создадут куки под именем name, то им обоим будет слаться та кука, которая оставлена для домена ilyabirman.ru. Таким образом, если something.ilyabirman.ru по неосторожности оставил куку с таким же именем, с каким уже успел оставить куку ilyabirman.ru, то он никак не сможет достать её значение.

Другие браузеры понимают, что более «родные» куки должны иметь приоритет...

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

Секс с этим багом продолжался несколько часов: записываю в куку значение, а прилетает совсем другое, что за чертовщина!? Всё это ещё и осложнялось тем, что изучаемые куки представляли собой случайные 40-значные шестнадцатиричные последовательности, поэтому чисто визуально понять, что прилетевшая кука относилась к ilyabirman.ru не представлялось возможным. Но, наконец, я вычислил в чём было дело.

Начиная с v1104, e2 приписывает ко всем создаваемым кукам префиксы, состоящие из такого числа знаков подчёркивания, насколько глубоко относительно второго уровня зарыт домен, где он установлен. То есть, сайт something.ilyabirman.ru получает куки, например _key, _commenter_email и так далее.

Это уже второй баг Оперы, который мне пришлось сегодня исправлять самому в e2. Но про первый я даже рассказывать не хочу, там такииииие дебри DOM...

Fix That SpeSta!

Возможно, кто-то заметил, что SpeSta работает из-под e2 как-то криво.

То есть, вроде бы она всё и считает, но на страницах типа «Откуда идут» и «Запрашиваемые страницы» отображалось что-то странное (точнее сформулировать трудно). Я этого долгое время вообще не замечал, т. к. довольно давно вся статистика мне стала вполне до барабана. Потом мне на эту проблему указал один умелец, который, по его словам, писал «статью про e2» (судя по всему, не дописал и умер). Как починить это всё я понятия не имел, поковырялся чё-то, выпустил пару хотфиксов, которые вроде бы всё исправляли, обнаружил, что ничерта они не исправляли, и забил.

Победа пришла неожиданно. Вчера в ходе общих поисково-расследовательских мероприятий я обнаружил заметку, в которой написано, как заставить штуку работать. Слово автору:
Открываем файл stat/counter.php (если SpeSta установлена у вас в папку stat, разумеется). Находим пару строчек следующего содержания:

if (!isset ($ref) ) $ref=$GLOBALS[’HTTP_REFERER’];
if (!isset ($pg) ) $pg=$GLOBALS[’REQUEST_URI’];

Меням на следующее:

if (!isset ($ref) ) $ref=$_SERVER[’HTTP_REFERER’];
if (!isset ($pg) ) $pg=$_SERVER[’REQUEST_URI’];
Попробовал — вроде бы помогло. Исправление довольно приятное в том плане, что хуже таким образом сделать не возможно точно. Поэтому, думаю, следующий хотфикс научит e2 влезать в counter.php и править это автоматически.
 12   2005   решения   Эгея
Ранее Ctrl + ↓