Работа над ошибками
- Документация на cpan.org показывается в правильной кодировке. Правда, всё равно
pod2html
ругается, что не знает слова=encoding
, а в man-страницах кириллица пропадает вовсе. - Добавлена документация на русском языке.
- Добавлена функция
choose_prepositions_by_next_word
для выбора предлога с беглой гласной по следующему за ним словом, а также куча коротких имён для вызова этой функции с разными предлогами:izo
,ob
,so
и т. п. - Добавлены новые тесты. Выявленные при добавлении баги пофиксены.
А смысл?
Ну воткнул, ну запустил (настроив выдачу статики nginx'ом, а остального, как и раньше — апачем) — а пользы не видно: как апачные процессы жрали процессор — так и жрут, как mod_perl отъедал всё больше и больше памяти — так и отъедает.
Скорость выдачи статики у обоих серверов практически совпадает, а на выдаче динамического контента апач даже чуть-чуть шустрее связки nginx+apache (что предсказуемо).
В чём смысл-то? Разве что вынести backend на другую железяку (или завести несколько бэкендов на разных машинах) — может быть, что-то улучшится. Или попробовать FastCGI в надежде на уменьшение потребления памяти? Непонятно.
Толкового мануала к nginx'у нет (во всяком случае, на сайте разработчика). Ни на русском, ни на английском — лишь какие-то обрывки да разрозненные статьи, раскиданные по интернетам. Вот их и придётся изучать...
Не выходит каменный цветок
Тяжко. Мануал и кукбук весьма обрывочны и противоречивы, а программирование методом научного тыка неэффективно — в редкие моменты, когда сервер не падает, среди SQL-запросов появляются более сложные, с джойнами, но и они дублируются, так что общее число запросов не сокращается.
Чё делать? То ли забить (не вариант, ибо в новом году ожидается трёхкратное возрастание нагрузки на сервер), то ли дальше курить маны в ожидании просветления...
Перлдок, как и ман, должен быть сразу
С перловой документацией — аналогичная фигня. Причём, что интересно, man perldoc есть, а самого перлдока — нет. Надо опять же ставить самому. Если пытаться найти пакет в мандриве по слову perldoc, то это не даст нужных результатов — обнаружится пара перломодулей, но не документация. Оказывается, пакет с документацией на перл называется perl-doc. Зачем — непонятно.
Соединение пауз на многоголосных нотных станах
В сибелиусе есть метод объединения пауз — удалить паузы в одном из голосов (или можно ещё и прятать их? Не помню), в этом случае оставшая пауза встаёт по центру, на третью линейку.
В лилипонде такой метод не работает: даже при удалении паузы (точнее, при замене паузы
r
на пропуск s
) пауза соседнего голоса никуда не двигается. Гугление (в 4 часа ночи) открыло несколько методов (включая написание какого-то мегахака на Scheme), но наиболее простым оказался такой: надо добавить строку \revert Rest #'direction
в нотный стан, где сидят несколько голосов (ну или внутрь определения переменной, вызываемой из разных нотных станов) — после этого паузы наложатся друг на друга и наступит Щастье™. Или не наступит, если в нотах попадаются паузы с точками (в этом случае паузы обрастут двоеточиями: в нотах появится что-то похожее на 
Чтобы убрать двоеточия, придётся всё-таки одну из таких пауз заменить пропуском (мне вчера повезло: на 103 набранных такта нашлась всего одна пауза с точкой) — после этого отобразится одна точка, как и задумано.
С многотактовыми паузами оказалось посложнее: мануал не предлагал очевидного решения, в коллекции
Придумал такой трюк: добавляем строку
\override MultiMeasureRest #'staff-position = 0
После этого и многострочные паузы становятся на третью линейку.Re: Перловый gettext
__
и ещё куча удобных штуковин, при этом нет ненужного ООП. В том же мануале — ключи для xgettext
:-k__ -k\$__ -k%__ -k__x -k__n:1,2 -k__nx:1,2 -k__xn:1,2 -kN__ -k
Чтение мануалов просветляет...Перловый gettext
- Держать по несколько версий одного и того же скрипта, отличающихся лишь выводимыми строками — неправильно. Значит, надо разобраться с интернационализацией.
- Пытаюсь понять, как использовать gettext в перлосриптах. Пока не совсем понятно. Толковую доку на русском не нагуглил, пытаюсь понять на аглицком.
- Глядя в мануал и творчески применяя напильник, сотворил скрипт (тут приведена далеко не первая итерация):
добыл список строк командой#!/usr/bin/perl -w use strict; use Locale::gettext; use POSIX; setlocale( LC_MESSAGES, '' ); # OO interface my $d = Locale::gettext->domain_raw( 'man_1' ); $d->dir( 'i18n' ); # __ is alias for $d->get sub __ ($) { $d->get( shift ) } print __ 'Hello world!', "\n"; print gettext( 'Who they are?!' ), "\n"; print $d->get( 'Goodbye world!' ), "\n";
xgettext
, добавил к нему перевод (можно вручную, можно задействоватьkbabel
), скомпилировал при помощиmsgfmt
, сложил полученный перевод в ./i18n/ru_RU.UTF-8/LC_MESSAGES, подвожу итоги:gettext
обнаруживается xgettext'ом, но не работает (в мануале:Perl programs should use the object interface.
)$d->get
работает, но отвратительно выглядит (что обходится вводом псевдонима — функции__
)и не обнаруживается xgettext'ом__
работает, выглядит хорошо,но тоже не обнаруживается xgettext'ом.
- Исходя из имеющейся ситуации самым правильным, наверное, будет научить xgettext находить в исходнике те строки, перед которыми стоит
__
- Пошёл читать мануал дальше...
xgettext
можно научить понимать разные ключевые слова: запущенный с ключами -k__ -kget, он всё находит. Завтра попробую применить на практике.Внедрение мандрив в домашнем хозяйстве
- man не на всё: скажем, man man есть, а
какого-нибудь man ls или man rm — нетостальные маны добавляют установкой пакета coreutils-doc. - админить мышкой, может, и весело, но как-то малоэффективно.
- не удалось поставить ни
kate
, ниkdewebdev4
(там прячется Quanta+) — установщик ругается: Sorry, the following package cannot be selected - некоторых софтин (
mc
,lilypond
) нет среди тех, которые хотя бы теоретически можно поставить. - консольных редакторов кроме
vim
нет вообще никаких: ниee
, ниnano
, ниjoe
, из vi я умею только выходить. - wi-fi то работает, то нет.
- в /etc/fstab вместо понятных путей к устройствам типа /dev/sda1 написан кошмар: UUID=385852ba-e6c0-4511-accf-104c26fe7073. Чё с этим делать?
- cpan,
- man,
- perl,
- xml,
- xslt,
- вебмастерство,
- программизм
Перловый XSLT-трансформатор
Послушав мнение коллег, решил что для преобразований XML → (X)HTML лучше всего подойдёт XSLT. Но чем преобразовывать? Первый попавшийся учебник рассказывал об интерфейсах на разных языках, но перла среди них на было.
Однако, перловый программер про CPAN вспоминает быстро. Недолго думая, нашёл XML::XSLT, в мане на который есть пример, подлежащий весьма небольшой обработке напильником надфилем до работоспособного состояния:
#!/usr/bin/perl -w
use strict;
use XML::XSLT;
die qq{XML Transformer\nUsage:\n\t$0 xml-file xslt-file\n}
if ($#ARGV < 1);
my $xslt = XML::XSLT->new($ARGV[1], warnings => 1);
$xslt->transform($ARGV[0]);
print $xslt->toString;
$xslt->dispose();
Ковыряюсь дальше...upd/18:15: ковыряние показало непрограммерский путь:
$ xsltproc xslt-file xml-file
Век живи — век учись
eq
) не только выше, чем у логический операций заданных словами (например, or
), но даже выше, чем &&
и ||
.Это ж сколько лишних скобок я за 10 лет поставил!
- ajax,
- catalyst,
- javascript,
- man,
- perl,
- программизм
Аякс и каталист
- catalyst,
- db,
- dbix::class,
- man,
- perl,
- программизм
many_to_many
many_to_many
в DBIx::Class — ни хрена не понятно :-(Плюс к тому мануалы написаны по-дурацки: вместо того, чтобы подробно описать параметры используемых функций, автор ограничился парой примеров. За что и поимел — вынужден отвечать юзерам, что всё устроено не так, как они понимают.
- db,
- man,
- perl,
- программизм
Утренняя мантра
Глянув поутру в perldoc DBI, очередной раз понял, что делаю всё неправильно: пользуюсь самописным лисапедом (причём, давно пользуюсь: отдельные его методы существуют уже лет семь), выполняющим
$dbh->prepare()
, $dbh->execute()
, а затем, если $sth->rows
позволит, в цикле выбирающем строки при помощи $sth->fetchrow_hashref
. В то время как $dbh->selectall_hashref
, $dbh->selectcol_arrayref
и $dbh->selectrow_hashref
.Поздравляю тебя,
Лишь бы не работать
О чтении мана
А потом поглядел man perlref и стало Щастье™. В результате получил скрипт, который почти правильно перегоняет линейные и плоскостные объекты из старой карты города в mif. Правда, mifshape.exe на него ругается, пытается склеивать некоторые линии — иногда получается то, что надо, иногда — жуткая мешанина линий, идущих через весь город.
Кроме того, проблема возникла и в качестве исходных данных: в некоторых слоях исходной карты объекты имеют уникальные номера, в некоторых — нет. Расставить подобные номера — задача нехитрая: делается в FAR'е одной заменой с использованием регэкспов, но проблема в том, что в ряде случаев такая замена не нужна, поэтому приходится пока отсматривать слои вручную. Впрочем, малое количество слоёв делает задачу преобразования вполне выполнимой.
Возможно, сегодня вечером отлажу...
Читал man, много думал...
Ожидал просветления. Не помогло.
Почитал толстую бумажную книгу. Был послан ею снова читать man.
Снова читал man.
Получил искомого просветления. Доволен.
А результат — всего одна строка:
find . -type f -name "*html*" -exec perl -e "s^(href=\"?)http://(www\.)?susu\.ac\.ru/^\$1/^gi" -pi '{}' ';'
upd: P. S. Русский man есть на http://citforum.urc.ac.ru/operating_systems/manpages/