Среда, 29 Марта 2006 г.
21:31 [Soft] FAR Manager 1.70
Аааа! FAR Group выпустила первый релиз за всё время своего существования. Вот будет веселья на все выходные %)
Понедельник, 13 Февраля 2006 г.
00:51 [Web][Soft] Ломаем кайф форумным спамерам
Прикрутил к нашему аниме-форуму автоматическую распознавалку спамных топиков. Теперь бо́льшая часть спама сразу уходит мусорку. Мелочь, а приятно.

читать подробнее

Upd. Ах да. Кажется, они называют это «поисковой оптимизацией».
Вторник, 3 Января 2006 г.
20:37 [Soft] Раскладываем клавиатуру
Я как-то писал про проблему, что при использовании трёх раскладок клавиатуры переключение между ними становится неудобным. И про решениеMicrosoft Keyboard Layout Creator, позволяющий нарисовать себе раскладку по вкусу, причём можно разложить режим Caps Lock совершенно независимо от Shift’а. Воспользуемся этой возможностью и положим туда кириллицу.

Чего я хочу от клавиатурной раскладки?
  • Во-первых, в обычном режиме она должна повторять стандартную латинскую.
  • Во-вторых, в режиме Caps Lock она должна повторять стандартную русскую.
  • В-третьих, Ctrl+буквы должны действовать стандартно.
Это оставляет для возможностей настройки AltGr (режим с зажатой правой Alt) и AltGr+Shift.
  • В-четвёртых, я хочу мочь набирать символы из латинской раскладки, которых нет в русской, без переключения. Вот эти: ` ~ ' [ ] { } < > @ # $ ^ & |. И я хочу их набирать с минимальным переучиванием — они должны лечь на те же клавиши, где они находятся в латинской раскладке.
  • Кроме того, я хочу клавиши для набора некоторых символов расширенного набора. Типографские кавычки-лапки и двойные лапки, «ёлочки», тире длинное и короткое , многоточие , неразрывный пробел, градус ° и ещё всякие мелочи ? ¤ § ¶ µ ‰ × ÷ ¬ ± ∓ ≤ ≥ ≠ • · ™ © ®.
  • Да, и ещё пусть будет клавиша для символа Combining Acute Accent.
Всё остальное нужно не так часто и можно набирать через Character Map.

«Ёлочки» я привык держать на клавишах < > в режиме AltGr. Неравенствам ≤ ≥ остаётся лечь туда же в AltGr+Shift. “Лапки” (и на всякий случай нижние лапки ‚ „) положим в ряд L ; ': ‚ ‘ ’ в AltGr, „ “ ” в AltGr+Shift. Прямому апострофу придётся уехать на клавишу `. Собственно ` можно и не дублировать — в нормальном тексте он не нужен, а в программировании — разве что в коде на Perl’е, для запуска внешних программ, которые всё равно набираются в латинской раскладке.

Оба тире хорошо ложатся на минус, причём менее часто используемое короткое — в Shift. Многоточию самое место на /, а неразрывному пробелу — на пробеле. ± ∓ — на =. — на 5, к проценту. Bullet и центральную точку · — к звёздочке, на 8. Логическое отрицание ¬ —на AltGr+Shift+6 в память о древних машинах, где так выглядел символ ^ (AltGr+6 занято самим символом ^). Обобщённую денежную единицу ¤ — на AltGr+Shift+4 под доллар. положим на 1 — по ассоциации с !=.

Letterlike symbols ? ™ © ® µ логично будут выглядеть на соответствующих буквах E T C R M, а § и — на Section и Paragraph. Наконец, × и ÷ можно положить на X — во-первых, похоже по форме, а во-вторых, в кодовой таблице Windows-1252 они лежат там, где в Windows-1251 Ч и ч.

Осталось положить комбинирующее ударение. Есть большой соблазн положить его на Ctrl+', но вовремя вспоминается, что в Excel’е на этой комбинации висит функция «повторить содержимое ячейки сверху». Будет жалко, если они подерутся. Поэтому пусть будет на AltGr+A, от слова Accent.

Скачать
Воскресенье, 23 Октября 2005 г.
22:09 [Soft] Acrobat вообще, и 7.0 в частности
Когда в Acrobat 6.0 клавиша Ctrl+F стала вместо маленького быстрого диалога Find стала открывать громоздкую и тормозную панель Search, я подумал, что всё, последней юзабельной версией была 5.0, rest in peace, Acrobat.

Ан нет! В 7.0 они таки образумились и вернули Find. Причём сделали его ещё меньше, а именно — тулбаром. А громоздкий и тормозной (зато со списком результатов) Search перевесили на Ctrl+Shift+F.

Да, а ещё они вернули показ/прятание Bookmarks по клику на сплиттере. Тоже фича, которую в 6.0 оторвали и свели всех с ума.

Зачем они приделали к нему Yahoo! Search, ума не приложу. Браузер у меня уже есть, он мне нравится, и менять его я не собираюсь. Поисковик у меня тоже есть, и я его тоже менять не собираюсь.

Интерфейс, конечно, далёк от совершенства. Есть тулбары, которые можно таскать, отрывать, клеить ко всем четырём сторонам окна, и прятать на фиг (как я сейчас сделаю с Yahoo! Search). И есть «подоконник», у которого слева Full Screen и Hide Toolbars (нажатие на которую выдаёт модальный message box о том, что «вы спрятали тулбары, читайте и запоминайте, как их включить обратно»), в середине невразумительные стрелки First Page, Previous Page, Next Page, Last Page, Previous View и Next View и бокс Goto, и справа режимы Page, Continuous, Continuous Facing и Facing.

(Для чего нужны режимы, кроме Continuous, я никогда не понимал. Неужели кому-то может быть удобно читать PDF-ку, отображая на экране сразу две страницы, когда она написана менее чем 24-пунктовым шрифтом?)

Тут мы плавно переходим к вопросу масштабирования.

Для масштабирования есть куча кнопок. Zoom In, Zoom Out, Zoom In Tool, Zoom Out Tool, Dynamic Zoom (это когда ты крутишь колесо или таскаешь мышой вверх/вниз, а оно зумится), Loupe Tool (это когда ты тыкаешь в точку на странице, и её окрестность тебе показывают увеличенной в маленьком окошечке), а также Actual Size (который вроде как честные 100% от печатной страницы, но текст совершенно нечитабелен), Fit Page (который вроде как должен показывать целую страницу на экран, но показывает страницу и начало следующей), Fit Width (единственный разумный режим просмотра), и ещё выпадалка с набором значений увеличения в процентах от 8.33% (когда неразличимы даже отдельные строчки) до 6400% (когда на экран влазит максимум слово из трёх букв).

Всё это можно было выкинуть и оставить Fit Width. Ну и для эстетов, которым надо видеть страницу, ещё Fit Page. Всё остальное от лукавого.

Но на этом история не кончается. Потому что в Acrobat’е есть Закладки.

Будь в Acrobat’е Индекс, как в MS Compiled Help, я бы на закладки особого внимания не обращал. Но Индекса нет, и Закладки становятся основным методом навигации. И это тихий ужас, потому что каждой закладке приписан масштаб. И он, как правило, не Fit Width. И это значит, что после каждого нажатия на букмарк я должен ткнуть ещё раз в кнопку Fit Width, потому что, с одной стороны, не люблю слишком мелкого текста, с другой стороны, не переношу горизонтального скроллинга, и с третьей стороны, имею право менять размер окна как мне вздумается, не уведомляя об этом автора PDF’ки.

Разумеется, выделить все букмарки для внесения в них изменений до версии 7.0 (или, может, 6.0, не помню) было нельзя — выделялись только закладки верхнего уровня. Теперь можно, выделяются все. Разумеется, изменить для них всех скопом zoom нельзя. Потому что zoom — это свойство action’а Go to a page view, второе свойство этого action’а — номер страницы, а не совпадающие почленно action’ы для нескольких выделенных закладок не показываются, вместо них есть только placeholder Varies, который можно только Delete.

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

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

Да, а про хелп. У этого чуда два хелпа. Один краткий и показывается в панели с правого боку окна. Он похож на web-страницы, и сделан на HTML, но всё-таки это не web-страницы — там нельзя выделять текст и нет контекстного меню. А между тем есть целая категория людей, которые при чтении предпочитают выделять отрывки читаемого.

И ещё есть второй, якобы полный хелп. Он сделан в виде PDF-документа. Который, тем не менее, открывается в специальном хелповом окошке, а не в самом Acrobat’е. И в нём нет масштабирования, выделения текста и режима Continuous, но есть Zoom, Print Topic и Индекс. Шизофрения на двух уровнях. Охренеть и не встать больше никогда.

А ещё есть Всплывалки. Когда выделяешь кусок текста, у него рядом с левым верхним углом всплывает полупрозрачное нечто, похожее на кнопоську. Ты двигаешь мышь, оно тонет и снова всплывает. Ты наводишь мышь на него, собираясь потыкать и посмотреть, что у него внутри, а оно, не дожидаясь, пока ты в него ткнёшь, вываливает тебе менюську с действиями, которые, по мнению Adobe, ты мог бы хотеть делать с выделенным текстом. Нет, Create Bookmark в их число не входит.

И ещё есть другая всплывалка. Если страница не влазит в окно по ширине, то внизу показывают scrollbar. Это как бы нормально и к этому все привыкли. У scrollbar’а слева есть псевдо-status bar, где отображается физический размер страницы в сантиметрах, дюймах или чём там у тебя настроено. Это как бы тоже нормально. Но когда scrollbar’а нет, то размер показать негде. Поэтому его показывают в Всплывалке, когда мыша оказывается где-то в левой четверти, нижней пятой части области документа. Всплывание и утонутие сопровождается плавным изменением прозрачности и дико отвлекает. Разумеется, отключить это нельзя.

Ну и вердикт. Если выбирать между 6.0 и 7.0, то 7.0 явно лучше. Но вот между 5.0 и 7.0 ещё стоит хорошенько подумать.
Воскресенье, 21 Августа 2005 г.
21:27 [Soft] Редактор субтитров в виде плагина к FAR’у
Среди анимешников принято смотреть аниме с оригинальной озвучкой и субтитрами, потому что все альтернативные озвучки — в лучшем случае приемлемые, в среднем — отвратительные. Поэтому время от времени встаёт задача субтитры подгонять.

Субтитры — это текстовый файл, состоящий из фраз. Каждая фраза включает в себя, по минимуму, текст, время начала и время окончания. Примерно вот так:
Dialogue: Marked=0,0:00:13.00,0:00:15.00,*Default,,0000,0000,0000,,Lorem ipsum dolor sit amet.
Соответственно, плеер при наступлении начального времени (13 секунд от начала файла) показывает текст на экране, а при наступлении конечного (15 секунд) прячет его.

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

Это всё background. А теперь проблема.

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

Почему-то все виденные мной редакторы субтитров при нажатии на клавишу сдвига двигают только текущую фразу. Видимо, по принципу «двигать умеем, остальное не волнует». Я за собой замечал: когда мне надо править тайминг в готовых субтитрах, самые часто встречаемые проблемы — это (1) одна фраза в субтитрах длиннее/короче, чем в фильме, (2) одна пауза в субтитрах длиннее/короче, чем в фильме. Отсюда вывод: редактор должен иметь клавиши для операций «сдвинуть все фразы, начиная с текущей, на некоторый квант времени», и «сдвинуть конец текущей и целиком все последуюшие фразы».

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

Ну и, наконец, стили. Я обычно использую минимум три стиля — обычная фраза, overvoice (голос за кадром, обозначающий мысли персонажа) и caption (перевод надписи в кадре). Тут use case простой. На входе имеется полностью неформатированный текст после распознавания с DVD. Нужно во время просмотра определять подходящий стиль и применять его без остановки плеера. Соответственно, никаких выдёргиваемых мышью combo box’ов — стили должны быть назначены на клавиши.

Поразмыслив, посидел на выходных, поразбирался в том, как писать плагины к FAR’у, и как рулить программно Media Player Classic’ом (мой любимый плеер на данный момент, и поддержка SSA в нём на уровне).

В принципе ничего сложного. Замечаю за собой, что от C’шного API уже воротит, хочется всё обернуть в C++, классики, шаблончики, RAII.

В общем, получилась такая штука. При активизации находит первый попавшийся запущенный экземпляр Media Player Classic’а и цепляется к нему. При включенном Scroll Lock’е раз в 200 миллисекунд спрашивает у него, где мы сейчас играем, и позиционируется на соответствующую фразу в редактируемом файле. И наоборот — при гулянии по файлу перематывает видео в плеере. В левой руке стили (QWE/ASD/ZXC), в правой тайминг (стрелки/Home/End/Ins/Del), на пробеле — пауза/play, и вперёд. Ну и, если приспичило текст подредактировать, то по Esc останавливаем плеер и вываливаемся в чистый редактор.

Теперь всё это потестировать…
Закрыть