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

Re: Неожиданные маршруты челябинского электротранспорта
Рыжий
shoorick
Прошлое исследование показало, что в Челябинске фактически вдвое больше троллейбусных маршрутов, чем кажется плюс сплошной беспорядок в нумерации. А что же с трамваями? А с ними — аналогично.



Посчитаем. Четыре тройки, пятёрка, семь шестёрок, семёрка...Свернуть )
Итого — больше сорока маршрутов, причём в Металлургическом районе творится совсем уж полное безобразие: там и одному номеру могут соответствовать разные маршруты, и по одному и тому же маршруту могут хоть трамваи с разными номерами.



Что делать с этим — вообще не понятно. Если не оставлять всё как есть, и не менять маршруты принципиально, остаётся лишь смена нумерации. И тут, как нетрудно догадаться, есть два варианта: либо каждому маршруту давать номер, состоящий только из цифр, либо нормальные номера давать только рейсам между самыми дальними конечными (например, номер 3 относился бы только к маршруту Завод имени Колющенко — ЦХП), а к рейсам покороче добавлять буквы. Трамвайная сеть в Челябинске хоть и не самая большая (даже в Магнитогорске больше), но достаточно развитая — её можно представить таким графом:



«Самые дальние конечные» — это те вершины графа, к которым приходит только одно ребро и таких вершин всего девять, что даёт ещё один вариант нумерации, точнее, разновидность второго из предложенных ранее вариантов: пусть номер маршрута складывается из номеров его самых дальних конечных, а если он до них не доезжает — добавим букву. Если конечные будет пронумерованы таким образом: 0 — Чичерина, 1 — Медгородок, 2 — Колющенко, 3 — ЧГРЭС, то, например, нынешний семнадцатый маршрут «Чичерина — Медгородок» получит номер 1, шестнадцатый «Колющенко — Чичерина» — 2, а семёрка «Колющенко — ЧГРЭС» — 23.

Преимущество подобного подхода в том, что номера девяти конечных проще запомнить, чем несколько десятков маршрутов, но вот недостатков у него — множество:

  • нумерация меняется очень сильно,

  • нумерация не сплошная, а с разрывами,

  • некоторые популярные маршруты могут получить неудобные длинные номера: например, 26к или 26а вместо тройки.


Надо чел. урбанисту подкинуть идею — раз уж удалось поменять схемы в трамваях, может, и нумерацию можно выправить? :-)

http://shoorick.ru/2018/05/13/weird-routes/

Насекомые проснулись
Рыжий
shoorick


Челябинская область, граница Сосновского и Чебаркульского районов, сад «Оптимист».

http://shoorick.ru/2018/05/12/insects/

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



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

  • 1. Вокзал — ПКиО

  • 2. ЧТЗ — ПКиО

  • 4. ЧКПЗ — Копейское шоссе — улица Гагарина — Солнечный берег

  • 5. АМЗ — Вокзал

  • 6. ЧТЗ — Первоозёрный

  • 7. ЧМК — АМЗ

  • 5, 7, 12. АМЗ — Троллейбусное депо № 2 (часть обычного седьмого маршрута)

  • 7, 14. ЧМК — Троллейбусное депо № 2 (часть обычного седьмого маршрута)

  • 8. ПКиО — улица Гагарина — ЧКПЗ

  • 8, 19. ПКиО — Копейское шоссе — ЧКПЗ (в восьмидесятые так ходил 18-й троллейбус)

  • 8. ЧКПЗ — Копейское шоссе — улица Гагарина — ЧКПЗ (а так ходил 20-й)

  • 8. ПКиО — улица Сони Кривой —Дворец спорта «Юность» — Троллейбусное депо № 2

  • 10. Улица Молдавская — Солнечный берег

  • 10, 26. Улица Молдавская — Копейское шоссе — ЧКПЗ

  • 10. Улица Молдавская — улица Гагарина — ЧКПЗ

  • 10. Солнечный берег — улица Новороссийская — ЧКПЗ (маршрут 4 в 2002 году)

  • 11. ЧТЗ — АМЗ

  • 12. АМЗ — улица Молдавская

  • 14. ЧМК — улица Братьев Кашириных — ПКиО

  • 14. ПКиО — улица Братьев Кашириных — улица Молдавская (почти как 13-й маршрут до 1997 года, только от ПКиО идёт по проспекту Ленина, а не по улице Сони Кривой)

  • 14, 17. Улица Молдавская — улица Братьев Кашириных (внутри Северо-Запада)

  • 14, 15. ЧМК — ДК «Строитель» (внутри ЧМЗ)

  • 14, 15. ЧМК — Братьев Кашириных (четырнадцатый так ходил в 1994–2004)

  • 14. ПКиО — проспект Ленина — Дворец спорта «Юность» — Троллейбусное депо № 2

  • 14. Троллейбусное депо № 2 — Алое поле — улица Братьев Кашириных — ЧМК

  • 14. Улица Братьев Кашириных — ПКиО (часть нынешнего 14-го, в 1997–2012 так ходил 13-й)

  • 15. ЧМК — улица Молдавская

  • 16. АМЗ — ЖБИ

  • 17. Вокзал — улица Молдавская

  • 17. Улица Молдавская — Алое поле (он так ходил в 1995–2001, а до этого — почти так же, только оборачивался не по Труда → Свердловскому → Ленина → Энгельса, а против часовой стрелки: по Коммуны → Энгельса → Сони Кривой, да и шёл по Комсомольскому и Свердловскому проспектам, а не по улице Братьев Кашириных)

  • 17. Троллейбусное депо № 2 — улица Братьев Кашириных — Вокзал

  • 17, 26. Троллейбусное депо № 2 — Алое поле — улица Братьев Кашириных — улица Молдавская

  • 19. ПКиО — Первоозёрный — ТЭЦ-3

  • 19. ПКиО — Первоозёрный (обычный 19-й, как он ходил до этого мая)

  • 19. ПКиО — Солнечный берег (как 10-й в 1997–2013) — а нет, рейсов-то ноль

  • 19. Первоозёрный — ТЭЦ-3 — и тут ноль рейсов

  • 19, 26. ЧКПЗ — Копейское шоссе — Первоозёрный (14 утренних рейсов в рабочие дни и пять — в выходные, но только в одну сторону, потому что с театра ЧТЗ на КБС на троллейбусе не повернёшь)

  • 26. Улица Молдавская — улица Чичерина — Первоозёрный

  • 27. Улица Молдавская — улица Чичерина — ПКиО

  • 27. Улица Братьев Кашириных — улица Молодогвардейцев — улица Чичерина — ПКиО


Итого — почти сорок троллейбусных маршрутов с диким бардаком в нумерации.

С трамваями такая же фигня, особенно с теми, что ходят по Металлургическому району. Но это — тема отдельного поста.

http://shoorick.ru/2018/05/11/wired-routes/

Не скайп
Рыжий
shoorick
Скайп на моём компьютере теперь выглядит так:

Скайп не работает

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

http://shoorick.ru/2018/04/27/no-skype/

Удивился? Отметь!
Рыжий
shoorick
Интегрированная среда разработки Geany умеет искать некоторые слова в тексте текущего документа либо проекта и выводить их в отдельное окошко — это удобно, когда по тексту рассыпаны комментарии со словами TODO или FIXME и хочется быстро их найти.

Настройки плагинов Geany

Geany позволяет вносить новые слова в число разыскиваемых: Edit → Plugin Preferences → Addons. Мне стандартных слов не хватает, пришлось ещё добавлять. Теперь можно вставить в текст удивлённое нерусское восклицание, а потом быстро его найти.

http://shoorick.ru/2018/04/09/wtf-geany/

Понедельник начинается в субботу
Рыжий
shoorick
Скриншот багтрекераГляжу в багтрекер на время появления комментариев к задачам и коммитов: 15:30, 20:08, 22:30, 01:42, 01:49, 06:18. Что-то в пятницу работа затянулась.

http://shoorick.ru/2018/04/07/hard-working/

Тестирование перловых mojolicious-приложений в Geany
Рыжий
shoorick
Программировать, используя какую-нибудь могучую интегрированную среду разработки (IDE) — хорошо и зачастую удобно: там «из коробки» могут предоставляться различные удобные штуковины — компиляция, отладка, тестирование, работа с системами контроля версий. Однако некоторые системы при всём своём могуществе оказываются не совсем подходящими — например, могут много весить и сильно тормозить. Приходится выбирать что-нибудь полегче, например, Geany.

В Geany есть (в том числе и средствами дополнительных модулей) всякое:

  • подсветка синтаксиса,

  • организация файлов в проекты,

  • поиск текста как в текущем файле, так и в произвольном их наборе с обходом подкаталогов,

  • поиск парных скобок и тэгов HTML/XML, а также переход по ним,

  • составление оглавления используемых функций,

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


С отладчиком в Geany пока не удалось разобраться, а вот процесс тестирования кода можно сделать более удобным.

Итак, у нас есть:

  • IDE Geany,

  • Веб-приложение, написанное на языке Perl с использованием фреймворка Mojolicious и системы управления модулями carton,

  • Желание запускать тесты почаще и попроще, без лишних переключений из редактора в терминал.


Geany позволяет для каждого проекта задать список действий: как общих для всего проекта, так и специфичных для конкретного типа файлов — найти настроки можно в меню Project → Properties → вкладка Build либо Build → Set Build Commands.

Настройки команд в Geany

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

Пойдём дальше — научим Geany прогонять тесты из текущего файла. В Mojolicious тесты представляют собой перловые файлы, имеющие расширение .t и лежащие в каталоге t/. Для того, чтоб, видя в редакторе открытый файл с тестами, прогнать тесты, в настройках придётся добавить путь к корневой папаке приложения. Чтоб не писать путь целиком, можно воспользоваться шаблонами. В документации пишут:
The first occurrence of each of the following character sequences in each of the command and working directory fields is substituted by the items specified below before the command is run.

  • %d - substituted by the absolute path to the directory of the current file.

  • %e - substituted by the name of the current file without the extension or path.

  • %f - substituted by the name of the current file without the path.

  • %p - if a project is open, substituted by the base path from the project.

  • %l - substituted by the line number at the current cursor position.



то есть, некоторые имена файлов и пути к папкам можно указывать специальными переменными.

Вторая команда в списке тех, что зависят от типа файла, получает в меню кирпичную иконку и (по умолчанию) клавишу F9 для быстрого запуска. Клик по кнопке с кирпичом, расположенной на панели инструментов под меню также вызовет выполнение этой второй команды.

Пробуем выполнить тест — в окно Compiler выводятся результат выполнения. Если есть ошибки, они будут выделены и в этом окне, и в исходном коде теста.

Результат тестирования в Geany

http://shoorick.ru/2018/04/04/test-mojo-geany/

U — UI, UX, Usability
Рыжий
shoorick
Диалог закрытия проекта в Geany

Закрыть проект — Alt+C, не закрывать — тоже Alt+C.

http://shoorick.ru/2018/04/04/u-ui-ux-usability/

Комментарий к «Редактор для Perl»от ext_742814 в ru_perl
Рыжий
shoorick
Прошло несколько лет — я поменял мнение о Geany :-)

— Подсказки по функциям для некоторых языков есть, для перла можно запилить самому. Я начал пробовать, но ещё не доделал.
— Проекты есть.
— Есть мелкомасштабная полоса справа.
— Есть не самый плохой поиск/замена. В том числе с регулярными выражениями. В том числе по куче файлов.
— Есть компиляция либо проверка синтаксиса с быстрым переходов к месту ошибки.
— Можно удобно выполнять make и другие команды. Для каждого проекта можно определить свой список того, что выполнять.
— Можно видеть список отсортированных символов: для перла это определения функций, для HTML и Маркдауна — заголовки, для CSS — селекторы.
— В отличие от Komodo IDE, Komodo Edit, Atom, Visual Studio Code, Brackets и других модных редакторов, сделанных из браузеров, оно не тормозит.

Geany

Посмотреть обсуждение, содержащее этот комментарий


Сфинкс спрятался? Сделаем туннель, но ненадолго
Рыжий
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/

С новым годом!
Рыжий
shoorick
41

Слушаю сюда.

Желающих поздравить лично буду ждать в субботу на традиционном месте.

Сорок один флажок
Рыжий
shoorick
0. КДПВ:

41 флажок

1. ДР — уже в четверг, место и время отмечания — традиционные: в субботу 17 марта в лесу в карьере.

Карта

Мясо, чай и гитара будут. Дрова есть. Снега мало, но хотя бы одна пригодная для катания горка найдётся — проверял в конце февраля. Нынешний прогноз — от −8 до +1 °C, облачно, небольшой снег.

P.S. Вишлиста не существует :-)

http://shoorick.ru/2018/03/13/41-flags/

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

Один из вариантов — использовать carton. Для тех, кому лень читать по-английски, есть перевод — статья Вячеслава Тихановского «Локальная установка и использование Perl-модулей» из журнала Pragmatic Perl за 2014 год.

Дерево каталогов

Carton берёт список модулей, ставит их локально (root не нужен) вместе с зависимостями и позволяет запускать приложения с таким вот набором модулей. Список используемых модулей (если carton ещё ничего не ставил) можно достать из скриптов и своих модулей:
find . -type f -name \*p\[lm\] -exec egrep -n '^use ' '' ';' \
 | cut -d' ' -f 2 | sort -u

Чтоб указать необходимость установки какого-нибудь Module::Name, достаточно добавить в файл cpanfile строку
requires 'Module::Name';

Carton умеет ставить нужные версии модулей, однако в документации этот момент вскользь упомянут, но не описан должным образом. Если захотеть, например, поставить старую версию модуля Sphinx::Search (это потребуется, если сам Сфинкс не новый) и написать
requires 'Sphinx::Search', '0.28';

то вместо желаемой версии будет установлена свежая (0.31 по состоянию на март 2018) — похоже, такая запись указывает минимально допустимую версию. Если поменять код на
requires 'Sphinx::Search', '== 0.28';

и снова выполнить carton install, версия поменяется
Installing modules using /home/.../cpanfile
Successfully installed Sphinx-Search-0.28 (downgraded from 0.31)
1 distribution installed


Команда carton exec может пригодиться для запуска не только самого́ приложения, но и чего-нибудь ещё:
carton exec prove -l


http://shoorick.ru/2018/03/10/carton/

Простая 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
Для разминки и в честь приближения весны поковырял один зелёный сайт.

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

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

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

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

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

http://shoorick.ru/2018/02/27/tests-become-green/

Разноцветный полуночный командир
Рыжий
shoorick
Популярный в юниксоподобных операционных системах файловый менеджер 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:execut
able=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:e
ditmarked=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-скины. И это хорошо :-)

http://shoorick.ru/2018/02/07/colorful-mc/
Метки: , , ,

Как засунуть имиджмеджиком растровые картинки в PDF нужного размера
Рыжий
shoorick
Для несложных преобразований картинок: изменение размера, увеличение резкости, добавление надписей и преобразование типов — большой и тяжёлый графический редактор не нужен — достаточно взять 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-файл с разным заполнением страниц

http://shoorick.ru/2018/02/07/convert-png-a4-pdf/

Шрифт дорожных знаков теперь содержит все предусмотренные стандартами латинские буквы
Рыжий
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
Из всего, в чём доводилось набирать ноты последние лет двадцать, самые красивые получаются в Лилипонде — там и шрифт хороший (хотя Bravura ещё лучше), и расположение нот на листе достаточно компактное. Но в MuseScore набирать проще плюс можно услышать любую ноту да и все изменения видны сразу — не надо ждать, пока компиляция завершится. Лет десять назад MuseScore, как и Denemo, можно было использовать лишь для предварительного набора — сборку и доводку приходилось делать в Лилипонде, потому что Музскор не способен был нормально расставить ноты по странице. Со временем Музскор улучшился — теперь его можно использовать для всего процесса — до самого конца — вывода на печать или в готовый PDF-файл.

И встал вопрос открытия лилипондовых файлов Музскором — нынешние его версии умеют работать с MusicXML, но формат Лилипонда не понимают совсем. Сам же LilyPond умеет читать всякое (точнее, в его состав входит скрипт на питоне, перегоняющий в формат Лилипонда ноты из MusicXML, ABC, MIDI и, вроде, ETF), но выводить в это всякое не желает.

Поэтому воспользуемся сторонним ПО. Например, выяснилось, что Frescobaldi умеет экспортировать ноты в формат MusicXML, но по умолчанию эта возможность в нём отключена. Включить можно в настройках: Edit → Preferences → Generap Preferences → Enable experimental features.

Настройки Frescobaldi

После перезапуска Фрескобальди в его меню File → Export можно найти пункт Export to MusicXML. А уж MusicXML можно открыть и в Музскоре, который будет ругаться на на корявость файла,

Сообщение о невалидном XML

Сообщение о повреждённом файле

но всё равно (если повезёт?) его откроет

MuseScore — результат импорта

Вместо экспорта через Frescobaldi можно с командной строки использовать python-ly:


ly musicxml solo.ly -o solo.musicxml


Результат почти полностью совпадает с тем, что выдаёт Фрескобальди — скорее всего, этот же скрипт и вызывается.

http://shoorick.ru/2018/01/29/lilypond2musescore/

Нужен перлдок
Рыжий
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/

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

  • Через меню: A̲dd → F̲rames → Insert Horizontal Frame вставит фрейм перед текущим тактом;

  • A̲dd → F̲rames → Append Horizontal Frame — после текущего;

  • Команду Insert Horizontal Frame можно найти и в палитрах инструментов: и в обычной, вызываемой клавишей F9, и в мастер-палитре (Shift+F9) в разделе Frames & Measures.
    Insert horizontal frame


Фрейм вставляется перед всей группой нотных станов — нет нужды двигать каждый нотный стан.

Отступ в MuseScore

http://shoorick.ru/2018/01/22/musescore-system-indent/

Без картинок
Рыжий
shoorick
Люди-снежинки из ЖЖ зачем-то пытаются отдавать мои картинки через свой nginx, который нифига не работает и утверждают при этом, что проблема на моей стороне — якобы мой сайт не хочет отдавать им картинки. Хотя их прокси в моём логе посещений вообще не виден.

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

ЭкспериментСвернуть )

Половина концерта
Рыжий
shoorick
В воскресенье 14 января в 14 часов в храме Георгия Победоносца (Челябинск, Металлургический район, улица Жукова, 30) — концерт духовной музыки.

Академический хор русского культурного центра города Челябинска под управлением Заслуженного работника культуры РСФСР Владимира Александровича Шереметьева исполнит получасовую программу из произведений русских и зарубежных композиторов.

В концерте примет участие (если я правильно понял) академический хор ЮУрГИИ имени П. И. Чайковского (руководитель Ольга Кочетова) — мы с ними вместе выступали в Троицке в сентябре 2017 года в рамках международного фестиваля духовной музыки.

Афиша

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

Извещение о посылке

А извещение с почты идёт семнадцать дней. Две с половиной недели! Средняя скорость — 74 сантиметра в час. Ну ладно, с тридцатого по восьмое были каникулы и почтальонам тоже надо отдохнуть. Но за пять предновогодних рабочих дней неужели нельзя было принести?

Дорогая Почта России! Объясни, пожалуйста, ситуацию.

http://shoorick.ru/2018/01/09/slowpost/

Плакат с ошибками
Рыжий
shoorick
Весной на работе попался на глаза плакат

Плакат с ошибками

Учись и путешесвуй в Перьм!

Правда, провисело это недолго — на следующий день заменили на исправленную версию.

http://shoorick.ru/2018/01/04/perm-poster/

Банк-полиглот
Рыжий
shoorick
Письма

Гуглопочта считает, что банк мне присылает уведомления на разных языках: английском, казахском и словацком.

http://shoorick.ru/2017/12/28/many-languages-in-notification/

Re: чтобы в спешке не забыть
Рыжий
shoorick
Поглядел в список

Жидкости и смазка

добыл немного жидкостей:
  • Пять литров красного антифриза AWM на основе BASF Glysantin G30 (разливают в Дзержинске, как и обычный тосол, в интернетах пишут, что близок к G33) — 816 рублей — долил до нужного уровня, полную замену (на неё надо восемь литров) отложил на потом,
  • Четыре литра синтетического моторного масла Total Quartz 9000 вязкостью 5W-40 — 1440 рублей, в которые входит бесплатная замена плюс ещё 50 рублей за мойку. Мойка и замена — в том же здании. Пока меняли, обнаружил пару вмятин на левом пороге, где их получил — не помню, но вполне допускаю, что летом мог где-нибудь на свежем воздухе поймать: с моим стремлением лезть куда попало это вполне ожидаемо. Вся процедура (прийти, дождаться кладовщика, выяснить, что рекомендуемого масла в упакованном виде нет ни на складе, ни на витрине, согласиться на такое же, но на разлив и подешевле, заплатить, пообщаться со старшим мастером, перегнать машину к месту процедур, поглядеть на мойку (не в телевизор же пялиться), поглядеть на процесс смены масла, поговорить с мастером о найденных неисправностях, перегнать машину поближе к кассе, заплатить за мойку) — 45 минут. С учётом того, что магазин в центре и не надо ехать на край света — очень хорошо.


Пробег — 120152 км.

http://shoorick.ru/2017/12/27/re-peugeot-fluids/

MOW ✈ CEK
Рыжий
shoorick
Ув. тов. френды! А не летит ли кто в ближайшее время из Москвы в Челябинск? Один хороший человек ждёт разрешённую к перевозке самолётом посылку примерно в полкило весом. Если вдруг — дайте знать мне или ему.

Счётчики в углу
Рыжий
shoorick
Случается, что сложные партитуры я набираю в каком-то странном порядке: то из одной партии кусочек, то из другой. Чтоб не забывать, где остановился, сам себе придумал небольшой lifehack — записывать номера последних набранных тактов прямо в нотах и лучше всего — в левом верхнем углу, чтоб быстрее найти можно было.

Счётчики

Попробую на практике — может быть, приживётся...

http://shoorick.ru/2017/12/23/corner-counters/

Запиши себе названье, чтобы в спешке не забыть
Рыжий
shoorick
В руководстве по эксплуатации, техобслуживанию и ремонту на странице 0•17 — смазочные материалы и эксплуатационные жидкости (в английском — 0•19 — Lubricants and fluids)

Lubricants and fluids

Чуть ниже, на странице 1A•2 — объём используемых жидкостей



Мне как раз пора менять в машине хотя бы три жидкости. И проверить уровень ещё двух.

http://shoorick.ru/2017/12/06/peugeots-fluids/
Метки: , ,

Малоснежный декабрь
Рыжий
shoorick

Читать дальше...Свернуть )

Переключение окон в mc
Рыжий
shoorick
Midnight Commаnder позволяет переключаться между панелями и окнами редатора и просмотра — в меню F9 → C̲ommand есть пункт Screen list̲ M-` — эта же клавиатурная команда работает и в редакторе mcedit (хотя в меню там нет такого пункта), и в просмотрщике (хотя там вообще нет меню). Сочетания клавиш LWin+` (точнее, Meta+`) и LAlt+` третий гном по умолчанию использует для переключения окнами одного приложения (хотя некоторые приложения поддерживают ещё и традиционное Ctrl+Tab), так что мне в терминале доступен лишь один способ ввести M-` — нажать и отпустить по очереди Esc и `



В командной строке эти клавиши не работают — для возврата к синим панелям оттуда есть традиционное сочетание Ctrl+O.

http://shoorick.ru/2017/11/24/mc-screen-list/
Метки: , ,

Разъезд № 93
Рыжий
shoorick
На карте Челябинска немало загадочных мест. Вот, например, 2ГИС одну из  улочек в Калининском районе параллельно Новомеханической называет Разъезд 93 км. Вот откуда там девяносто три километра? До Екатеринбурга по железной дороге — больше двухсот, а от других городов по той ветке считать смысла нет — узловые станции примерно в сотне километров от Челябинска есть, но они невелики.

Если посмотреть карту пятидесятых годов, всё станет ясным.

Карта Челябинска

На нынешних картах в этом месте нет никакой станции несмотря на большое количество путей. На старых картах попадается станция Першино (хотя одноимённый посёлок — несколькими километрами севернее), а на ещё более старой — безымянные разъезды: № 93 вместо станции Першино и № 94 — вместо Электростанции.

http://shoorick.ru/2017/11/21/halt-93/

?

Log in

No account? Create an account