Архив рубрики: рабочее

Узковатое меню

Open Journal Systems 3 вышла уже шесть лет назад — в 2016 году, но за всё это время русское меню, отображаемое администратору в шапке страниц в теме оформления, включенной по умолчанию (Manuscript), слишком узкое:

OJS 3 с узким административным меню

Я этот баг 🐞 видел, но как-то не до него было — я поддерживал старые журналы, сделанные ещё на OJS 2. Сейчас посмотрел — исправляется буквально изменением одного байта — github.com/pkp/ojs/pull/3618

Меню стало чуть шире

Когда пулл-реквест будет принят и это изменение появится в новых версиях OJS, пока не знаю, но кому не терпится, может добавить собственное стилевое правило:

@media (min-width: @screen-desktop) {
    .pkp_navigation_user {
        ul {
            width: 13em;
        }
    }
}

Переводы для темы оформления Manuscript лежат в plugins/themes/default/locale — можно найти слово «Администрирование» на разных языках и сравнить ширину:

grep -R 'msgid "navigation.admin"' -A 1 \
| sort \
| perl -nle 'print qq{<li title="$1">$2</li>} if m{^(.+)/.*msgstr "(.*)"}'
Список переводов
Ширина голубой части — 10em

Оказывается русское слово — самое длинное. И самое широкое, потому что буква и шире, чем i.

Почти что Геттекст

Open Journal Systems начиная с вышедшей в позапрошлом году версии 3.2 хранит переводы интерфейса не в XML-файлах, а использует для этого нечто, весьма напоминающее Gettext, но с некоторыми особенностями:

  • Переводы хранятся в обычных геттекстовских файлах *.po, но компилировать их в *.mo не надо. То ли сама OJS компилирует, то ли просто вручную разбирает файлы переодов — не знаю пока, не разбирал ещё так глубоко.
  • Вместо привычного для Геттекста использования в качестве ключей фраз естественного языка (обычно английского) в OJS по-прежнему ключами служат последовательности вида тема.подтема.словоИлиНесколько. Предположу, что так оставили для совместимости.

Имиджмеджику надо бы добавить память

Если собирать Имиджмеджиком многостраничный PDF-файл из картинок разрешением 600 DPI, он ругается на недостаточный размер памяти даже для файлов, которые не такие и большие

convert-im6.q16: cache resources exhausted `0002-bw.png' @ error/cache.c/OpenPixelCache/4095.
convert-im6.q16: cache resources exhausted `0003-bw.png' @ error/cache.c/OpenPixelCache/4095.

Раньше оно работало, но сломалось в процессе обновления системы — в ходе него изменился файл /etc/ImageMagick-6/policy.xmlтот самый, где по умолчанию запрещено создавать PDF — в нём же задаются и предельные размеры картинок и используемых для их обработки ресурсов. Я эти параметры уже менял в 2018 году, ещё живя под Ubuntu — сейчас у меня Debian, от которого Убунту и происходит. Значения параметров в сохранённой копии конфигурационного файла отличаются от того, что появилось после обновления. Увеличим парочку параметров вдвое:

  <policy domain="resource" name="area" value="256MP"/>
  <policy domain="resource" name="disk" value="2GiB"/>

После этого сборка идёт как надо.

Лишь недавно заметил, что площадь всё-таки указывается в мегапикселях (MP), а не в мегабайтах, как у меня почему-то было раньше. При этом в policy.xml допустимы два варианта: традиционный двоичный, равный 2²⁰ = 1048576 байт, обозначается как MiB, а то, что обозначают как MB — мегабайт десятичный, по системе СИ.

Как добавить флаги в меню выбора языков Google Translate

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

То, что недавно использованные языки выделены значками, немного помогает, но в случае, когда языков много, значки остаются лишь у четырёх последних языков. В случае, когда в меню слишком много пунктов, улучшить ситуацию можно добавлением иконок — с подобной ситуацией я сталкивался и в LibreOffice, и в Inkscape.

Существуют браузерные дополнения, позволяющие задавать свои стилевые правила для конкретных сайтов — для Firefox, Google Chrome и других брауеров, основанных на Chromium, это делает Stylebot. Попробуем добавить стилевые правила для отдельного пункта — укажем не только иконку (пусть будет флаг), но и цвет:

div[data-language-code="lt"] div.Llmcnf {
  color: #060;
}

div[data-language-code="lt"] div.Llmcnf:before {
  content: "🇱🇹";
  padding-right: .25em;
}

Стало гораздо заметнее:

Как долго в Google Translate будет использоваться название класса Llmcnf — не возьмусь предсказывать, но пока такой метод работает и работает уже не первую неделю.

Если помечать таким образом не все языки, а только нужные, их найти будет достаточно легко — например, раньше я всё время очень долго искал немецкий, потому что искал не German, а Deutsch — теперь же вижу его сразу:

Цветной вывод в отладочную консоль браузера

Метод console.log достаточно популярен у пишущих на JavaScript — он позволяет выводить отладочную информацию, справляясь как со скалярными данными, так и с объектами.

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

console.log('%d', 77/64)

выведет целое число 1, а

console.log('%f', 77/64)

выдаст 1.203125, что получилось бы и без '%f'. При этом бо́льшая часть знакомых по Си или Перлу форматов вообще не работает — встретив такое, console.log посчитает первый аргумент обычной строкой, которую надо вывести — так

console.log('%x', 48879)

выведет %x 48879 вместо ожидаемого слова beef.

Но зато у console.log нашёлся формат %c, позволяющий применить к выводимому тексту стили, заданные вторым параметром — так можно раскрашивать вывод

Пример использования — codepen.io/jscottsmith/pen/VLzMLo

44, 33, 22… Полетели!

44 года живу, из них 33 года ходил по институту, а позже университету, учась чему-нибудь и как-нибудь, а последние 22 — ещё и работал full time в нём же. Но надо всё-таки что-то менять — вчера ещё я был в отпуске, а с сегодняшнего для покинул alma mater.

Пока ещё гуляю по Вильнюсу, но и новую работу потихоньку ищу. Как и в прошлый раз — в области IT. Место — Вильнюс, Москва или Челябинск, но лучше удалённо. Резюме — shoorick.ru/cv

Концы строк в LibreOffice

Writer — текстовая часть пакета LibreOffice — аналог Microsoft Word — имеет странную особенность: если поставить в диалоге замены галочку «Регулярные выражения», то выражение \n будет иметь разное значение в зависимости от того, где его написать: в строке поиска оно соответствует переводу строки ↲, вставляемому сочетанием клавиш Shift+Enter, но в строке замены это же самое будет уже концом абзаца ¶, который вставляется одиночным нажатием клавиши Enter.

Как же заменить концы абзацев на переводы строк?

На форуме по LibreOffice нашёлся рецепт:

  • Вводим где-нибудь перевод строки (Shift+Enter), копируем его в буфер обмена
  • Вызываем диалог поиска и замены клавишами Ctrl+H либо через меню: Edit → Find & Replace
  • В поле Search for пишем $
  • Раскрываем при необходимости группу параметров Other options и отмечаем там Regular expressions
  • Нажимаем кнопку Find All — выделятся концы абзацев, закрываем диалоговое окно
  • Вставляем из буфера переводы строк
диалог поиска и замены

Я проверил в LibreOffice 6.1.5.2 — работает.

Скачивание видеороликов с попутным их склеиванием

Если что-то в интернете можно посмотреть, значит, это можно и скачать, хоть это и не всегда удобно.

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

Как известно, если нельзя, но очень хочется, то можно.

Метод

1. Заходим на страницу с архивом, находим нужный фрагмент, открываем отладчик (клавишей F12), переключаемся на вкладку Network — так и в Google Chrome, и в Mozilla Firefox.

2. Запускаем воспроизведение — отладчик покажет выполненные запросы.

3. Когда запросы перестанут идти (то есть, всё нужно, уже скачалось), можно, щёлкнув по ним правой кнопкой, выбрать пункт “Save all as HAR” — запросы и ответы на них будут сохранены единым файлом с расширением HAR — на самом деле это JSON.

В отладчике открыта вкладка Network

4. Берём какой-нибудь HAR-extractor (есть всякие варианты — мне подошёл первый попавшийся, написанный на Node.JS), натравливаем его на HAR-файл, получаем папку, в одной из подпапок которой будут лежать видеофайлы с расширением TS.

5. Смотрим эти видеофайлы — под линуксом с гномом можно использовать стандартный видеоплеер totem или всеядный mpv (ну или mplayer, из которого он и вырос).

6. Создаём текстовый файл, каждая строка которого состоит из слова file, пробела и имени файла в апострофах:

file 'cam42_16-10-2020_26778689266.ts'
file 'cam42_16-10-2020_26778699914.ts'

7. Склеиваем мелкие видеофрагменты в один большой файл:

ffmpeg -f concat -i список.txt -codec copy результат.mp4

Всё!


Аналогичный способ — сохранение кучи мелких файликов через HAR — можно использовать для того, чтоб добыть тайлы — небольшие квадратные картинки из которых состоят интерактивные карты на сайтах, а потом, делая свою карту, разместить эти тайлы где-нибудь у себя, чтоб не создавать лишнюю нагрузку на тайлопровайдера — они этого не любят: OpenStreetMap просит не брать тайлы непосредственно у них, а фонд ВикиМедиа всё время клянчит денег на поддержку функционирования Википедии. Реальный пример такого подхода — карта Global SUSU на сайте Южно-Уральского университета: тайлы там сгенерированы Википедией из общедоступных данных OpenStreetMap, но хранятся на одном из университетских серверов.