Архив за месяц: Февраль 2018

Тесты зеленеют

Для разминки и в честь приближения весны поковырял один зелёный сайт.

Обновление Mojolicious приложения

Попутно выяснил странную штуку: почему-то перловое приложение на Mojolicious::Lite всегда запускает тесты в режиме отладки вместо боевого несмотря на явное указание

./app.pl test -m deployment

Хотя раньше, вроде, разница была. Или не было?

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

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

Разноцветный полуночный командир

Популярный в юниксоподобных операционных системах файловый менеджер Midnight Commander можно перекрасить — вдруг кому-то синий цвет не нравится? Я когда-то mc перекрашивал для того, чтоб не путаться в серверах. Каждому серверу — свою раскраску. Делалось это, например, так:

MC_COLOR_TABLE=normal=black,cyan:selected=white,brown:marked=yellow,cyan:markselect=yellow,brown:menu=brightcyan,brown:menusel=black,white:menuhot=yellow,brown:menuhotsel=yellow,white:executable=brightgreen,cyan:directory=white,cyan:link=blue,cyan:stalelink=brightred,cyan:device=magenta,cyan:special=brightblue,cyan:core=red,cyan:editnormal=black,cyan:editbold=brightcyan,green:editmarked=white,brown
export MC_COLOR_TABLE
mc

Прошли годы, сейчас стало всё гораздо проще: через меню теперь можно выбрать нужный внешний вид: F9 → Options → Appearance — и можно выбирать из двадцати восьми вариантов

Меню в Midnight Commander

А можно перекрасить во что-нибудь своё: для этого надо взять ini-файл из /usr/share/mc/skins, скопировать к себе, перекрасить, а потом подсунуть его миднайт командеру:

mc -S path/to/file.ini

Если терминал способен показывать 256 цветов, то можно и mc научить их показывать, указывая их по номеру: от color16 до color231 — эти 216 цветов совпадают с безопасной веб-палитрой (кто-то помнит ещё про такую?), то есть по 6 градаций яркости на каждый компонент — красный, синий и зелёный. Чтоб не рыться в таблицах с кодами цветов, можно указывать цвет синонимами — от rgb000 до rgb555. Оттенков серого побольше — их двадцать четыре, от чёрного gray0 до белого gray23, причём чёрный gray0 в отличие от обычного black не становится серым при добавлении к нему жирности. Результат может быть, например, таким:

Сине-зелёный mc с серым меню

Подробно о раскрашивании mc в 256 цветов написано в комментариях в файле /usr/share/mc/skins/sand256.ini, а судя по тому, что лежит на гитхабе, кое-кто, раскрашивая mc, указывает цвета, выбирая из 16 миллионов — уже существуют TrueColor-скины. И это хорошо 🙂

Как засунуть имиджмеджиком растровые картинки в PDF нужного размера

Для несложных преобразований картинок: изменение размера, увеличение резкости, добавление надписей и преобразование типов — большой и тяжёлый графический редактор не нужен — достаточно взять ImageMagick. ImageMagick знает не только кучу разных растровых форматов файлов, но и кое-какие векторные, в том числе PDF, однако преобразование в них требует иногда плясок с бубном: например, если для преобразования толпы PNG-файлов написать

convert *png result.pdf

то результат может и не понравиться. Путём экспериментов с найденным на всяких форумах кодом получился такой рецепт для преобразования в PDF размером 210×297 мм (A4) кучи растровых файлов, отсканированных с разрешением 600 точек на дюйм

convert *png -units pixelsperinch -density 600 -resize 100% \
 -gravity center -background white -extent 4960x7016 result.pdf

размер растровых файлов не меняется, они располагаются в центре получившихся страниц.

PDF-файл с разным заполнением страниц

Для картинок с разрешением 300 dpi цифры будут чуть другими:

convert *png -units pixelsperinch -density 300 -resize 100% \
-gravity center -background white -extent 2480x3508 result.pdf

Для 150 dpi числа надо ещё вдвое уменьшить:

convert *png -units pixelsperinch -density 150 -resize 100% \
-gravity center -background white -extent 1240x1754 result.pdf

Шрифт дорожных знаков теперь содержит все предусмотренные стандартами латинские буквы

Государственные стандарты ГОСТ 10807-78 и ГОСТ Р 52290-2004 описывают дорожные знаки и шрифт для них. Образцы латинских букв предусматривают явно не всё — помимо основных пятидесяти двух букв (два раза по двадцать шесть) предусмотрены ещё 42: Āā Ää Ąą Čč Ēē Ėė Ęę Ģģ Īī Įį Ķķ Ļļ Ņņ Õõ Öö Šš Ūū Üü Ųų Žž, в том числе пара лигатур: эсцет ß и амперсанд &. По-французски или по-испански таким набором не напишешь. Да и для западнославянских языков типа польского и чешского букв не хватит. А вот для языков советских прибалтийских республик — хватит: указанные в стандартах буквы есть в латышском, литовском и эстонском. Ну и для немецкого — там есть Ää Öö Üü ß.

Russian road sign font

Все эти буквы теперь есть в шрифте дорожных знаков. Есть и буквы, нужные для русских текстов въ дореволюціонной орѳографіи — Іі Ҍѣ Ѳѳ Ѵѵ. Ну и для современных русских текстов давно уже есть. Когда доберусь до добавления остальной кириллицы (стандартом предусмотрено больше 160 кириллических символов) — неизвестно, но могу предположить, что в конце года ещё что-нибудь добавлю. Когда исправлю размеры букв и отступы — даже не рискну предполагать.