?

Log in

No account? Create an account

Категория: it

Прибито гвоздём
  1. Всё, написанное здесь ниже — личное мнение автора либо цитата, что указывается явно. Редакция автор в переписку вступает (например, посредством комментов), однако рукописи не рецензирует и не всегда возвращает. Автор предпочитает писать и читать на русском языке, хотя может (или когда-то мог) на английском, немецком, перле, пхп, яваскрипте, C/C++, ассемблере процессора Intel 8086, бейсике, паскале, а также на ЯП ПМК «Электроника МК-52». В изучении иврита, итальянского, китайского, литовского, питона, руби, татарского, форта, французского и эсперанто автор пока не преуспел.
  2. Анонс:
  3. В записях используются метки — используйте их для поиска нужной темы.
  4. Основной адрес этого блога — shoorick.ru (с октября 2013). В ЖЖ — копия. Помимо ЖЖ транслируется в:
  5. Этот блог не является средством массовой информации.
  6. Используемые обозначения:
    • цитаты и фрагменты программного кода
    • программный код
    • клавиатурный ввод
    • аббревиатуры и другие сокращения

Тестирование в моджо — только через прув
Рыжий
shoorick

Из перлового веб-фреймворка Mojolicious начиная с вышедшей ровно четыре месяца назад версии 8.0 убрана команда test

попытка выполнить тест

Теперь вместо этой команды надо использовать prove.

http://shoorick.ru/2019/01/15/mojo-no-test/
Метки: , ,

Разрешаем Имиджмеджику делать PDF
Рыжий
shoorick

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

convert: not authorized `result.pdf' @ error/constitute.c/WriteImage/1028.

Причина — в том, что в конкретном экземпляре может быть запрещено создавать PDF, но есть рецепт, как это исправить: в файле /etc/ImageMagick-6/policy.xml надо включить нужное разрешение — строку

<policy domain="coder" rights="none" pattern="PDF" />

надо заменить на 

<policy domain="coder" rights="read|write" pattern="PDF" />

После этого PDF-файл будет нормально создаваться.

Теперь осталось понять, почему же готовый файл вдвое тяжелее суммы исходных. Добавление в команду преобразования параметров -dither none -colors 2 на размер готового файла практически не влияет.

http://shoorick.ru/2018/12/19/magick-allow-pdf/

Инструменты разные — методы похожие
Рыжий
shoorick
Попробовал решить одну из рабочих задач, применив нелюбимый язык PHP в комплекте с современными инструментами — получилось близко к тому, что делал сравнительно недавно на перле, с некоторыми отличиями:

  • Вместо  перла — PHP,

  • Модули тоже лежат рядом со своим кодом, но управляются не картоном, а через composer,

  • Композер и тесты может запустить (composer test), и отладочный сервер (composer start). Но можно для однообразия для обоих языков сделать Makefile и выполнять нужные действия командой make. Например, у меня запуск тестов — всегда make test, чтобы не путаться.

  • Вместо Mojolicious::Lite — микрофреймворк Slim. Для быстрого старта — Slim-Skeleton.

  • В шаблонах вместо Embedded Perl — Twig.

  • Если сайт работает через PHP-FPM, то нет нужды пинать демона каждый раз, как обновится код — он сам обрабатывает подобную ситуацию. Развёртывание свежей версии простого веб-приложения сводится к трём действиям: обновление рабочей копии (svn up либо git pull), разрешение зависимостей (composer install) и на всякий случай запуск тестов.


Слон и код

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

http://shoorick.ru/2018/10/24/slim-php/

Кросспроектное связывание коммитов с задачами в Редмайне
Рыжий
shoorick
Багтрекер Redmine не позволяет связать задачу с фиксацией изменений в системе контроля версий^W^W^W^W^W^W коммитом, относящимся к части хранилища, не связанной с проектом, куда входит задача — ни автоматически, указывая номер задачи в комментарии к коммиту, ни вручную, на странице коммита. Однако при наличии связи в базе данных Редмайн всё же отобразит ссылки на страницах и задач, и коммитов.

Связи хранятся в таблице changesets_issue
changeset_id issue_id
24645 2224

Сопоставить номер связи с номером ревизии можно через таблицу changesets
id repository_id revision committer ...
24645 37 8801 as ...

Таблицы в MySQL Workbench

Для создания связи достаточно внести запись в таблицу changesets_issue, подставив в поле changeset_id правильное значение changesets.id — ссылки появятся при ближайшем посещении страниц.

Добавка/12.10:
Привязать редмайновую задачу с заданным номером ко всем коммитам, в комментариях к которым есть этот номер, можно запросом

SET @issue_id = 1234;
    
INSERT IGNORE INTO changesets_issues
SELECT 
    id, @issue_id
FROM
    changesets
WHERE
    comments REGEXP CONCAT('.*#', @issue_id, '[^0-9].*');


http://shoorick.ru/2018/10/11/redmine-link-issue-changeset/
Метки: , , ,

Склоняем точнее
Рыжий
shoorick
Мы стали более лучше одеваться^W^W^W правильнее склонять имена с фамилиями. Вчера вышла свежая версия предназначенного для этого перлового модуля Lingua::RU::Inflect (он же есть и на гитхабе — чуть свеже́е, чем на CPAN).

Фрагмент документации модуля Lingua::RU::Inflect

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

Итак, в новой версии:

  • Закрыты все имевшиеся по состоянию на вчерашний день issues, в том числе

  • Исправлена проблема с экспортом всего возможного оператором use Lingua::RU::Inflect ':all' — компилятор теперь не ругается на попытку экспортировать функции, убранные в другой модуль.

  • Имена с беглыми гласными (Лев, Павел) и некоторые фамилии на -ец (Песец, Писец и Отец) стали склоняться правильно — беглая гласная убегает, как ей и положено. Там, где убегать не положено (Швец, Жнец, Надудеигрец и полный крах, крушение всех надежд — шесть букв, вторая И, но не фиаско) — не убегает.

  • Женские фамилии, оканчивающиеся на -ов, -ёв, -ин, -ий, -ый — похожие на мужские, но всё-таки женские — перестали склоняться.

  • Мужские фамилии, оканчивающиеся на -их и -ых, могут всё-таки склоняться: например, Бултых, Жмых, Отдых, Дитрих, Рерих, Ульрих, Фрейндлих и Эрлих склоняются, а Синих, Серых, Карих, Чёрных — нет.

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


В итоге количество ошибок на тестовом наборе данных сократилось в 2–3 раза, до одной ошибки на 200–300 человек — есть неочевидные случаи, потому и оценка приблизительна. Двойные имена и фамилии пока слоняются неправильно — исправлю как-нибудь потом.

http://shoorick.ru/2018/10/05/inflect-006/

Сфинкс спрятался? Сделаем туннель, но ненадолго
Рыжий
shoorick
Ситуация: жил-был Сфинкс (поисковая система Sphinx) на старом сервере, да пришла пора на новый переезжать. Нужный порт на новом месте доступен скриптам, что живут там же, а снаружи — нет и не надейтесь. Результат — кое-где тесты покраснели.

На сервере есть SSH — значит, можно проложить туннель, чтоб разработчик мог тестировать свои приложения на своих компьютерах, прежде чем делать коммиты и лезть на сервер. Команда для проброса стандартного сфинксового порта 9312 с локальной машины на сервер может выглядеть так:
ssh -L 9312:localhost:9312 server.name

Однако в таком виде она неудобна: команду надо запускать в одном окне терминала, тесты — в соседнем, а после завершения тестов надо ещё и закрывать SSH-сессию в первом окне.

man ssh

В инструкции (man ssh) пишут:
SYNOPSIS
     ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address]
         [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
         [-e escape_char] [-F configfile] [-I pkcs11]
         [-i identity_file] [-J [user@]host[:port]] [-L address]
         [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option]
         [-p port] [-Q query_option] [-R address] [-S ctl_path]
         [-W host:port] [-w local_tun[:remote_tun]]
         [user@]hostname [command]
...
     -f      Requests ssh to go to background just before
             command execution.

То есть, ssh позволяет и команду выполнить, и перед этим уйти в фоновый режим. Приме́ним полученные знания:
ssh -fL 9312:localhost:9312 server.name sleep 5

Такая команда откроет туннель, не выводя ничего в терминал, подождёт пять секунд и закроется — почти то, что надо!

Осталось исключить рытьё тоннелей на сервере
test `uname -n` != 'server' && ssh -fL 9312:localhost:9312 server.name sleep 5

и скрестить открытие туннеля с тестированием. Тесты в перловом веб-приложении, написанном с использованием микрофреймворка Mojolicious::Lite, могут вызываться различными путями — и как ./application.pl test, и командой prove, и как-нибудь ещё — я, например, обычно создаю Makefile с нужными мне задачами и тесты выполняю командой make test — мне так удобнее. Чтоб не рассматривать все возможные варианты тестирования, надо поместить открытие туннеля прямо в тест. Если конфигурация приложения хранится в каком-либо отдельном файле (YAML хорошо для этого подходит — в Моджолишисе есть плагин для чтения ЯМЛ-конфигов), можно команду открытия туннеля хранить рядом с остальными настройками — это лучше, чем пихать её в тест. А в тесте останется лишь вызвать её после создания объекта Test::Mojo:
my $t = Test::Mojo->new();

system($t->app->config->'sphinx'->'tunnel') == 0
or warn "Cannot open SSH tunnel to Sphinx: $!";

Тесты зеленеют, можно спокойно идти заниматься музыкой :-)

P.S. Если вместо system применить функцию exec, то тест не будет выполняться до тех пор, пока не закроется туннель — тест будет ждать завершения дочернего процесса и в итоге так и останется красным.

http://shoorick.ru/2018/03/21/sphinx-tunnel/

Простая drag’n’drop-передача файлов в перловое приложение на Mojolicious::Lite
Рыжий
shoorick
Хочу упростить загрузку файлов пользователем на некоторые сайты, сделанные на Mojolicious::Lite — нужна обработка нескольких файлов за раз плюс поддержка drag and drop — это удобно, когда надо загрузить несколько файлов, которые в проводнике файловом менеджере либо просмотрщике картинок отображаются не рядом.

Естественно, ищу готовые примеры, чтоб не изобретать велосипед. Нашёл два:

  • Один из них красивый и работает (надо брать!), но примеры серверной части для него — не на перле. Понятно, что можно взять имеющиеся примеры (на пхп и питоне) и перевести их. Либо погуглить тщательнее.

  • Другой — маленький и простой, и даже конкретно под Mojolicious::Lite, но не работает, потому как был написан во времена, когда автор активно пилил Моджолишес, не обращая внимания на обратную совместимость — мне уже приходилось сталкиваться с необходимостью допиливания старых приложений, которые не взлетали на новом Моджо. Пара взмахов напильником — и оно заработало.


Pull request

Попутно выяснилось, что в клиентской части можно даже без jQuery обойтись — оно способно работать на голом JavaScript.

http://shoorick.ru/2018/03/09/simple-dragndrop-upload/

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

Russian road sign font

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

http://shoorick.ru/2018/02/05/road-sign-font-has-all-latin-letters/

Нужен перлдок
Рыжий
shoorick
Программам нужна документация и чем программа больше — тем сильнее эта самая документация нужна. Для некоторых языков программирования существует возможность генерировать документацию на основе имеющихся комментариев при помощи специальных программ. В перле подобная возможность — создавать документацию из комментариев — тоже есть, но здесь не требуются какие-то сторонние программы — всё уже сразу есть. Речь идёт о POD — Plain Old Documentation format — языке разметки для документирования перла, перловых программ и перловых модулей — текст, размеченный с его помощью, можно сразу в скрипты вставлять. Подробнее написано в man perlpod.

Можно сделать и так, чтоб консольное перловое приложение выводило документацию о себе, если запущено с определёнными аргументами, например, -?, -h или --help вызывало бы вывод краткой информации, а -m, --man или --manual — полной. Делается это так:
#!/usr/bin/perl

=head1 SYNOPSIS

./script-name.pl I<[options]>

=head1 OPTIONS

... ещё документация

=cut

use Getopt::Long;
use Pod::Usage qw( pod2usage );

my $need_help;
my $need_manual;

GetOptions(
    # обработка других аргументов
    'help|?'            => \$need_help,
    'manual'            => \$need_manual,
);

pod2usage(1)
    if $need_help;
pod2usage('verbose' => 2)
    if $need_manual;

Запускаем с аргументом -? — видим краткую справку, пробуем -m — видим что попало: где-то видна документация, а где-то — исходный код. Если после выхода из просмотра этого кода внимательнее посмотреть на экран, можно заметить сообщение
You need to install the perl-doc package to use this program.

Причина — отсутствие перлдока. В некоторых системах, например, во FreeBSD, perldoc сразу установлен, в других, таких как Debian — нет, и его надо ставить отдельно. Если поставить perldoc, то и скрипты начинают нормально выводить свою документацию:

$ perldoc ./script-name.pl
You need to install the perl-doc package to use this program.
$ sudo apt install perl-doc
...
$ ./script-name.pl --man
SYNOPSIS
./script-name.pl [options]
...


http://shoorick.ru/2018/01/26/perldoc-needed/

Старый хром
Рыжий
shoorick
Браузер Google Chrome не желает обновляться на 32-битных системах, включая всякие линуксы:

Unsupported 32-bit Linux

застрял когда-то на версии 48, и всё. Всякие сайты ругаются, но Хром обновляться не желает.

About Google Chrome 48

Выход — использовать Chromium. Он спокойно продолжает обновляться и видит те дополнения, что были поставлены в Хроме.

About Chromium 61

http://shoorick.ru/2017/10/15/old-chrome/

Чтоб не тыкать вручную — автоматическое совмещение кадров в Hugin
Рыжий
shoorick
Под виндой для склеивания панорам есть Kolor Autopano, под линуксом — Hugin. В принципе, Хугином вполне можно пользоваться: единственное, чего в нём не было по сравнению с Автопано — автоматического поиска серий кадров, но это не критично. С остальными задачами — аккуратно совместить кадры, внося необходимые геометрические искажения и поправляя цвет, дать пользователю выбрать тип проекции и сделать панораму в нужном размере — Хугин справляется. Однако с недавних пор в нём пропала возможность автоматически находить контрольные точки для совмещения кадров — приходится указывать их вручную. На панорамах из двух-трёх кадров это ещё терпимо, но если кадров десяток и панорам — не одна, это быстро утомляет.

Причина оказалась в том, что программу autopano-sift, которая использовалась для совмещения, из доступных в Ubuntu программ убрали, а альтернативу — autopano-sift-c — не добавили.

Способ решения — поставить что-нибудь из программ совмещения, с которыми Хугин умеет работать. Мне, как перлопрограммеру, ближе способ, который сводится к установке модуля Panotools::Script, и выбору Match-n-shift в настройках Хугина (File → Preferences → Control Point Detectors) в качестве программы по умолчанию. Попробовал — работает.

Аргазинское водохранилище

Аргазинское водохранилище

Аргазинское водохранилище

Река Миасс

http://shoorick.ru/2017/09/10/rather-than-autopano/

Подсветка синтаксиса LESS- и SCSS-файлов в geany
Рыжий
shoorick
Пробую на работе писать код в geany — он в отличие от Комодо, Атома и Вижл Студио Кода сделан сам по себе, а не из браузера и поэтому гораздо шустрее. Имеющаяся у меня версия 1.24.1, вышедшая почти три года назад (да, я знаю, что есть и более свежие, но у меня дебиан) не подсвечивает синтаксис в LESS- и SCSS-файлах, а при ручном указании типа (Document → Set Filetype → Markup Languages → Cascading Stylesheet) подсветка хоть и включается, но ругается на особенности синтаксиса, выходящие за рамки обычного CSS.

Решение нашлось на http://superuser.com/questions/344441/less-syntax-highlighting-in-geany:

1. В файле ~/.config/geany/filetype_extensions.conf меняем
CSS=*.css

на
CSS=*.css;*.less;*.scss;

Если такого файла нет, его можно взять из /usr/share/geany (в дебиане — так).

2. В файл ~/.config/geany/filedefs/filetypes.css (который тоже можно взять из /usr/share/geany) добавляем
[lexer_properties]
lexer.css.less.language=1

3. Если geany уже запущен — перечитываем конфигурацию: Tools → Reload Configuration

Подсветка синтаксиса LESS-файлов в geany

Результат — подсветка включается автоматически при открытии LESS- и SCSS-файлов и всякие специфические штуки отображаются нормально: geany теперь не ругается на вложенность правил, на селекторы с амперсандом, на комментарии в стиле C++ (две косые черты), на LESS-переменные с @собакой и на SCSS-переменные с $долларом.

http://shoorick.ru/2017/03/01/geany-less-highlight/

Statt zu schlafen
Рыжий
shoorick
Учёт домашних доходов с расходами — сплошное расстройство. Теперь вот вместо того, чтоб спать, пытаюсь вспомнить, что же умею делать за деньги, потому что на одну зарплату прокормить семью вообще нереально.

Могу:

  • Программировать на Перле — как древние CGI-приложения, так и современные, с использованием фреймворков Mojolicious, Dancer, Catalyst.

  • Программировать на PHP: в основном допиливать существующие приложения, а не писать с нуля что-то большое.

  • Настраивать CMS Drupal и WordPress, а также дорабатывать их темы оформления.

  • Настраивать и дорабатывать Open Journal Systems, включая реализацию многоязычности имён — делал это в OJS 2.4.2, 2.4.7.1, 2.4.8.1, думаю, и в Open Conference Systems смогу реализовать.

  • Кроссбраузерно верстать веб-страницы.

  • Немножко программировать на Руби (в том числе, с использованием Ruby on Rails) — наверное, на юниорском уровне.

  • Немножко программировать на ЯваСкрипте — как голый JavaScript, так и с jQuery.

  • Постоянно внушать коллегам необходимость использования багтрекера и системы контроля версий.

  • (хоть и не считаю это основными профессиональными навыками) фотографировать, петь, аккомпанировать на шестиструнной гитаре, водить легковой автомобиль, быть Дедом Морозом, набирать ноты в MuseScore и LilyPond — медленно, но красиво.


1000 рублей

Хочу от 15 USD / 1 kRUB в час.




Statt zu schlafen (нем.) — вместо того, чтобы спать

http://shoorick.ru/2016/10/18/statt-zu-schlafen/

Паама́им некудота́им
Рыжий
shoorick
Израильские PHP-разработчики как назвали оператор двойного двоеточия на иврите — так оно в пхп и просочилось.

Паамаим некудотаим

Но в пхп с юникодом — фигня. Потому-то T_PAAMAYIM_NEKUDOTAYIM пишется всё-таки латинскими буквами :-)

http://shoorick.ru/2016/09/20/paamayim-nekudotayim/

Как отменить прилипание указателя мыши к краю экрана
Рыжий
shoorick
Так получилось, что не дождавшись апреля, когда должна выйти очередная версия Ubuntu 14.04 LTS, обновил свою старую 12.04 LTS до актуальной 13.10 — и тут же напоролся на кучу глюков в старом гноме, куда пошёл по привычке. Решил всё-таки попробовать Unity — кое-что (например, запуск приложений по клавише Win) мне там показался удобным.

В Unity, запущенной на двух мониторах, обнаружились мелочи, мешавшие радоваться и продуктивно работать: указатель мыши прилипал к краям монитора — особенно это раздражало при переходе между мониторами. Ну и выскакивающая при этом залипании панель с иконками тоже не радовала.

Погуглил — нашёл метод: достаточно в настройке дисплеев отключить прилипание и задать тот, монитор, на котором панель всё-таки нужна.

Displays

Параметры Launcher placement и Sticky edges как раз и позволяют это настроить. По умолчанию панель отображается на обоих мониторах и прилипание включено.

Droid Sans и Open Sans — почти близнецы
Рыжий
shoorick
Заметил, что шрифты Droid Sans и Open Sans сильно похожи. Стал сравнивать — почти что близнецы:

Шрифты Droid Sans и Open Sans

Droid Sans чуть у́же и темнее, а в остальном они похожи. Из статьи в английской википедии узнал, что разница у этих шрифтов не только в ширине — в наличии курсива. В Open Sans курсив настоящий, а в Droid Sans — жалкая китайская подделка нет — всего лишь наклонное начертание. Ну и выбор начертаний у Open Sans побогаче: помимо Normal и Bold есть ещё и Light, Semi-Bold, Ultra-Bold.

Open Sans можно использовать на сайтах — он размещён в Google WebFonts. При указании шрифта в CSS лучше сначала указать Open Sans (потому что он с настоящим курсивом), а уж потом Droid Sans (на случай, когда Open Sans недоступен):
.some {
  fond-family: "Open Sans","Droid Sans",sans-serif;
}

На чём делать перловый веб-сервер?
Рыжий
shoorick
Как я только не запускал перловые скрипты на веб-серверах — и как CGI, и как mod_perl (на обоих апачах), и как FastCGI через nginx.

А какой способ принято сейчас использовать?

Мы завели отдельную железяку под перловый хостинг, чтоб выселить туда всё перловое: несколько сайтов на Mojolicious, Catalyst и Movable Type плюс древний самописный кошмар, который давно переписать на чём-нибудь современном.

Хочется сделать это хорошо и правильно. Как быть? Что читать?

Свободный шрифт с цифрами с дорожных знаков
Рыжий
shoorick
Цифры и буквы

Если кому-то нужен шрифт с цифрами, используемыми на дорожных знаках — берите с https://github.com/shoorick/russian-road-sign-font

БезДвозДмезДно. CC-BY-SA. Пулл-реквесты принимаются. Кернинга и нормальных хинтов пока нет.

Сейчас в шрифте есть все цифры и немного букв. Программа-максимум — отрисовать все символы, определённые в ГОСТ 10807-78 плюс ещё чуть-чуть. Программа-минимум — хотя бы те, что определены в ГОСТ Р 52290-2004.

Рисовал в FontForge + Inkscape. Под виндой ещё не тестировал.

Re: Не в ту сторону
Рыжий
shoorick
Решил проблему, описанную час назад. Естественно, методом тыка проб и ошибок.

Итак, задача для начала достаточно проста: соединить синтезатор (тут он выступает как MIDI-клавиатура) с компьютером и вывести описанный MIDI-командами звук через компьютер. Потому как встроенный MIDI-синтез в клавишах ужасен (а чё вы хотите за 100 баксов?). Задачу ввода нот с MIDI-клавиатуры решать пока не будем — не до неё сейчас (хотя, насколько мне известно, rumor и Rosegarden могут MIDI-команды преобразовывать в ноты и сохранять их в формате LilyPond).

Рецепты и решениеСвернуть )

Меню для тебю
Рыжий
shoorick
В этом вашем друпале, как показал метод научного тыка, вывести нужное меню можно командой
<?php print render( menu_tree('menu-info-for-root') ); ?>
Но найти информацию об этом на drupal.org с его миллионом страниц или, что ещё хуже, на drupal.ru, который представляет из себя форум, где одни чайники спрашивают совета у других — нереально.

Тот, кто ругает Mojolicious за корявую документацию — не видел, наверное, тот ужас, который творится в друпале.

Я негодую.

Numpad и стрéлки
Рыжий
shoorick
Обнаружил, что можно вводить дополнительные символы при помощи цифровой клавиатуры. Настройка оказалась до смешного простой: надо в ствойствах клавиатуры (Keyboard Preferences) в группе «Numeric keypad layout selection» выбрать, например, пункт «Unicode additions» и получить такую раскладку:

Numpad

Красным отмечены символы, вводимые на третьем уровне (в моём случае — с нажатой правой клавишей Alt), оранжевым — на четвёртом (правый Alt плюс Shift).

Косая черта — не простая, а особенная, для ввода произвольных обыкновенных дробей. Если числитель в такой дроби записать как верхний индекс (вводится как Compose, ^, цифра), а знаменатель — как нижний (Compose, _, цифра), то получается, например, ¹⁷∕₄₂.

На кнопке с минусом — минус. Именно минус (−, U+2212, MINUS SIGN), а не дефис (-). На кнопке со звёздочкой — точка (⋅, U+22C5, DOT OPERATOR). RAlt+Shift+. — узкий неразрывный пробел (U+202F, NARROW NO-BREAK SPACE)

Есть и другие раскладки, например, без двойных стрелок, но с квадратными скобками, знаками <, > и прочей околоматематической красотой.

Mojowka по-русски
Рыжий
shoorick
  1. Свежая новость: оказалось, что трёхпалая чайка — не моёвка, а мóевка.
  2. Mojowka теперь умеет показывать страницы посетителю на нужном ему языке. Язык может быть указан явно самим посетителем либо (если не указан) может выбираться автоматически, исходя из переданного заголовка Accept-Language. Пока доступны два языка — английский и русский.

    Сделано с использованием Mojolicious::Plugin::Textdomain, о котором я писал в декабре. К сожалению, Анатолий Лапицкий (nuclon) до сих пор не выложил свой модуль на CPAN.
  3. Увидев в моёвке экземпляр jQuery плюс мою яваскриптовую писанину, GitHub почему-то решил, что проект в целом яваскриптовый, а не перловый. Как переучить его обратно — пока не знаю.

Реанимировал файлопомойку
Рыжий
shoorick
Роутер ASUS WL500g.PremiumV2 — штука многофункциональная. И одна из возможных его функций — организация файлового сервера (NFS, FTP, Samba) на внешнем USB-диске. Когда-то настроил — оно спокойно работало, а потом перестало: вроде бы, роутер диск видит, монтирует его, демон nfsd запущен — но на клиентах примонтировать этот диск по NFS не удаётся. На роутере, естественно, давно ничего не обновлялось: не сломалось — не чини. Чего нельзя сказать о клиентах: на одном из них уже сменилось несколько операционных систем, не говоря уж о постоянно проводимых обновлениях, после одного из которых монтирование файлопомойки и накрылось медным тазом. Сегодня наконец-то собрался и починил: весь ремонт заключался в добавлении опции udp в команду монтирования либо в /etc/fstab на клиенте — после этого всё заработало.
Метки: , , ,

Кривой импорт из трака в редмайн
Рыжий
shoorick
Перенос проекта из трака в редмайн 0.9.* работал. Хоть и не в полном объёме, конечно же, но Redmine после такой операции спокойно мог работать с новыми данными. Сейчас, в версии 1.0.2, такой фокус не проходит: редмайн ругается при попытке открыть импортированную задачу или список, где такие задачи присутствуют. При этом другие задачи (как и списки из соседних проектов) отображаются нормально.

Пошерстил форум на сайте разработчика, нашёл лишь рекомендации запускать скрипты миграции и перезапускать сервер. Но это относилось всё-таки к процедуре обновления редмайна, а не импорта данных в него. Написал о проблеме, а потом сам же нашёл причину: скрипт миграции не заполнял поля lft и rgt в таблице issues. Заполнил поля вручную — заработало.
Метки: , ,

Баловство с напильником в руках
Рыжий
shoorick
Пробую прикручивать к редмайну разные плагины. Русский перевод — не везде. Причём в подобной ситуации выводится не текст на языке по умолчанию (например, на английском), а сообщение, что перевод не найден — выглядит ужасно.

Решил допилить: зашёл на github, поглядел хелп, попробовал форкнуть проект — получилось. Добавил перевод (два YAML-файла со списком пар кодовое_название: Перевод на русский), закоммитил, вытолкнул обратно на гитхаб, отправил автору pull request. Посмотрим, что получится. Такой вот social coding.

Но YAML редактировать — фигня: это один из самых удобных языков разметки, да и программизма тут никакого. А вот что делать, коль не найду нужного плагина? Придётся ж тогда на руби писать! Хотя, говорят, на него перл сильно повлиял — может, осилю...

Установка гимпового плагина Wavelet denoise под FreeBSD
Рыжий
shoorick
Сабж потребовал хитрых телодвижений. Правда, до применения бубна дело не дошло — удалось запустить, хотя, мне кажется, всё равно процесс установки ещё требует доводки напильником, ибо сейчас плагин установлен неправильно (хоть и работает).
  1. Wavelet denoise — плагин для GIMP, убирающий шум с фотографий. Работает хорошо (например, снимки сделанные с чуствительностью 800 и более единиц, улучшаются весьма заметно) и быстро (на порядок быстрее, чем GREYCstoration). Под винду устанавливается легко — запуском инсталлятора. Установка под FreeBSD — сложнее.
  2. Вместо укананного в ./INSTALL make надо использовать gmake — make ругается и не хочет ничего собирать
  3. Требуется отредактировать po/Makefile: заменить во второй строке
    LOCALEDIR = /usr/share/locale
    на
    LOCALEDIR = /usr/local/share/locale
  4. Получившийся src/wavelet-denoise gmake копирует в /usr/local/lib/gimp/2.0/plug-ins — надо скопировать его (или поставить симлинк) туда, где лежат гимповые плагины (в моём случае — /usr/local/libexec/gimp/2.2/plug-ins)
Метки: , ,

Конвертер карт mp → svg
Рыжий
shoorick
Накорябал на перле сабжевый скрипт, перегоняющий карту из польского формата (используется в GPSMapEdit для промежуточного хранения карт, их которых потом можно скомпилировать карты для гарминской gps) в SVG (используется много где). Писал правильно: ленивым способом, порывшись на CPAN, где нашлись нужные модули Geo::Parse::PolishFormat и SVG. Поэтому скрипт весит (вместе с комментариями) ок. 3 кБ.

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

Как допилю — выложу.

Re: Миграция с КОИ-8 на UTF-8 и обратно
Рыжий
shoorick
Я как-то пытался съехать из-под родной КОИ-8 в новомодную UTF-8, после чего вернулся обратно, Ибо полночному командиру было плохо и неуютно в юникодном терминале. А ведь живущему под кедами доступно простое как топор решение: в konsole можно указать кодировку терминала: Settings → Encodings → Cyrillic (koi-8). И проблема почти решена: если по SSH зайти на соседний хост — всё хорошо. Но на своём — mc слегка чудит:
  п⌡п╣п╡п╟я▐ п©п╟п╫п╣п╩я▄     п╓п╟п╧п╩     п п╬п╪п╟п╫п╢п╟
┌<─/usr/home/as/tmp──────v>┐┌<─~/music/instrumental───v>┐
│   п≤п╪я▐  │п═п╟п│п░я┌я─п╦││  п≤п╪я▐  │п═п╟п│п▓я─п╣п╪я▐│
│ КОИ-8.txt │   23│-rw-r--r││/..       │п═п╔-│          │
│           │     │        ││ Мален~mp3│ 754K│▌п╩ 12 13:│
├──────────────────────────┤├───────────────────────────┤
│ КОИ-8.txt │   23│-rw-r--r││/..                        │
└──────────────────────────┘└───────────────────────────┘
Совет: Вы можете выбрать редактор для F4 с помощью переме
[as@country ~/music/instrumental]$                    [^]
1п÷п╬п╪п2п°п╣п╫я3п÷я─п╬я4п÷я─п╟п5п п╬п©п6п÷п╣я─п7п²п╡п я┌
Но если сделать хитрый ход конём: ssh localhost и уже из-под этой сессии запускать mc — картина меняется:
  Левая панель     Файл     Команда     Настройки     Пр/
┌<─/usr/home/as/tmp──────v>┐┌<─...aertsky/1998 - Вымя─v>┐
│    Имя    │Разме│Атрибуты││    Имя   │Разме│Время прав│
│ xorg.conf │15406│-rw-rw-r││*01 - ~mp3│4439K│н  9  2000│
│ КОИ-8.txt │   23│-rw-r--r││*02 - ~mp3│4595K│н  9  2000│
├──────────────────────────┤├───────────────────────────┤
│ КОИ-8.txt │   23│-rw-r--r││*01 - Восьмое Марта.mp3    │
└──────────────────────────┘└───────────────────────────┘
Совет: Используйте C-x t для копирования помеченных файло
[as@country /usr/home/as/music/d/Laertsky/1998 -      [^]
1Помощь 2Меню   3Просмот4Правка 5Копия  6Перемес7НвКтлог
Осталось ещё ljklient научить музыку по-русски определять...

Раскрашивание стрелок в Inkscape
Рыжий
shoorick
Оказывается, в Inkscape есть эффект, позволяющий почти автоматически красить наконечники стрелок в нужный цвет: Эффекты / Изменение контура / Раскрасить маркеры в цвет штриха. Но у меня оно не работает :-(
The inkex.py module requires PyXML. Please download the latest version from <http://pyxml.sourceforge.net/>.
Хотя py-xml установлен...

Пришлось идти уже знакомым обходным путём: ковырять XML:
  • Выделив нужный элемент, нажать Ctrl+Shift+X — откроется XML-редактор
  • у выделенного элемента смотрим значение атрибута style — там, помимо прочего, указан и ID маркера, например: marker-start:url(#Tail)
  • В XML-дереве ищем элемент <svg:svg ...><svg:defs ...><svg:marker id="нужный_нам_ID"><svg:path ...>
  • добавляем к атрибуту style нужные нам цвета: fill — цвет заливки, stroke — цвет штриха; или меняем значения на нужные, если цвета уже указаны
  • радуемся :-)

ЗЫ Поставил вчера на домашнюю машину виндузовую версию Inkscape. Работает...

Re: Date::Manip
Рыжий
shoorick
Чтение исходников показало, что всё не так уж плохо: Date::Manip и по-русски кой-чё понимает, справляясь с такими датами как «первый четверг» → 04.01.2007, «следующий вторник» → 18.09.2007, «вперед на 2 года» → 12.09.2009, «назад на 2 дня» → 10.09.2007, «назад на 2 недели» → 29.08.2007, «первый среда мая» → 02.05.2007, «3 вторник марта 77» → 15.03.1977... Осталось ещё научить его всем падежам — и будет вообще хорошо. Хэш русских строк из Date::ManipСвернуть )

Распознавание дат используя Date::Manip
Рыжий
shoorick
Наткнулся в кукбуке перловой книге на пример парсинга дат. Попробовал. Не получилось: модуль Date::Manip хотел предварительной ласки настройки в виде указания часового пояса. Попутно, глядя на perldoc и исходники модуля, указал в настройках русский язык и начал скармливать даты скрипту:
#!/usr/bin/perl -w

use POSIX 'strftime';
use Date::Manip qw(Date_Init ParseDate UnixDate);

Date_Init('TZ=+0600', 'Language=Russian', 'DateFormat=non-US');

while (<>)	{
	my $date = ParseDate($_);
	if (!$date)	{
		warn "Bad date\n";
		next;
	}
	else	{
		my ($y, $m, $d) = UnixDate($date, '%Y', '%m', '%d');
		print "Date: $d.$m.$y\n";
	} # else
} # while
Выяснил, что скрипт действительно понимает русский язык. Во всяком случае, даты заданные словами: «1 мая», «пятнадцатое марта», «сегодня» и «вчера» — он понимает. Хотя понимает не всё: на английском корректно распознались даты «2 weeks ago» и «1st monday in september», а аналогичные по-русски — нет.

Хозяйке на заметку: двумерный массив в перле
Рыжий
shoorick
Чтобы не забыть. С двумерными массивами в перле можно работать так:
перловкаСвернуть )
Плюс к тому — man perlref.