shoorick: (Default)
Совершенно случайно обнаружил интересную возможность в скайповом чате: если, заметив ошибку в своём сообщении, написать в следующем сообщении строку s/как_было/как_надо/, то Skype исправит лог у обоих собеседников, заменив в нём все вхождения искомой строки. Регулярных выражений, вроде, не понимает. Исправляет только последнее сообщение. Можно подать несколько команд замены (если очень уж много ошибок :-)
shoorick: (Рыжий)
Читаю документацию на английском, попутно слушаю песню на идиш. Мозгу пофиг, что язык незнакомый — всё равно пытается переводить, используя сходство с немецким.
shoorick: (Default)
Lingua::RU::Inflect 0.02:
  • Документация на cpan.org показывается в правильной кодировке. Правда, всё равно pod2html ругается, что не знает слова =encoding, а в man-страницах кириллица пропадает вовсе.
  • Добавлена документация на русском языке.
  • Добавлена функция choose_prepositions_by_next_word для выбора предлога с беглой гласной по следующему за ним словом, а также куча коротких имён для вызова этой функции с разными предлогами: izo, ob, so и т. п.
  • Добавлены новые тесты. Выявленные при добавлении баги пофиксены.
shoorick: (Default)
Попробовал между клиентом и каталистом воткнуть nginx.

Ну воткнул, ну запустил (настроив выдачу статики nginx'ом, а остального, как и раньше — апачем) — а пользы не видно: как апачные процессы жрали процессор — так и жрут, как mod_perl отъедал всё больше и больше памяти — так и отъедает.

Скорость выдачи статики у обоих серверов практически совпадает, а на выдаче динамического контента апач даже чуть-чуть шустрее связки nginx+apache (что предсказуемо).

В чём смысл-то? Разве что вынести backend на другую железяку (или завести несколько бэкендов на разных машинах) — может быть, что-то улучшится. Или попробовать FastCGI в надежде на уменьшение потребления памяти? Непонятно.

Толкового мануала к nginx'у нет (во всяком случае, на сайте разработчика). Ни на русском, ни на английском — лишь какие-то обрывки да разрозненные статьи, раскиданные по интернетам. Вот их и придётся изучать...
shoorick: (Default)
Пытаюсь, по совету коллег-перловиков, разобраться с префетчингом в DBIx::Class.

Тяжко. Мануал и кукбук весьма обрывочны и противоречивы, а программирование методом научного тыка неэффективно — в редкие моменты, когда сервер не падает, среди SQL-запросов появляются более сложные, с джойнами, но и они дублируются, так что общее число запросов не сокращается.

Чё делать? То ли забить (не вариант, ибо в новом году ожидается трёхкратное возрастание нагрузки на сервер), то ли дальше курить маны в ожидании просветления...
shoorick: (Default)
Авторы некоторых линуксов, вероятно, считают, что в нынешних условиях проще нагуглить желаемое и делают так, что по умолчанию не ставится никакая документация: я уже сталкивался с отсутствием мана и в мандриве, и на роутере — приходилось ставить самому.

С перловой документацией — аналогичная фигня. Причём, что интересно, man perldoc есть, а самого перлдока — нет. Надо опять же ставить самому. Если пытаться найти пакет в мандриве по слову perldoc, то это не даст нужных результатов — обнаружится пара перломодулей, но не документация. Оказывается, пакет с документацией на перл называется perl-doc. Зачем — непонятно.
shoorick: (Default)
Лилипонд, как, впрочем, и сибелиус, при размещении нескольких голосов в одном нотном стане, рисует два комплекта пауз: для верхнего голоса и для нижнего. И даже в тех случаях, когда паузы совпадают, они не объединяются, а отображаются — и сверху, и снизу. В то же время в хоровых нотах нередко паузы всё-таки объединяют, вероятно для того, чтоб не замусоривать партитуру.

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

В лилипонде такой метод не работает: даже при удалении паузы (точнее, при замене паузы r на пропуск s) пауза соседнего голоса никуда не двигается. Гугление (в 4 часа ночи) открыло несколько методов (включая написание какого-то мегахака на Scheme), но наиболее простым оказался такой: надо добавить строку
\revert Rest #'direction
в нотный стан, где сидят несколько голосов (ну или внутрь определения переменной, вызываемой из разных нотных станов) — после этого паузы наложатся друг на друга и наступит Щастье™. Или не наступит, если в нотах попадаются паузы с точками (в этом случае паузы обрастут двоеточиями: в нотах появится что-то похожее на 7:) и многотактовые паузы (они вообще не реагируют на эту команду).

Чтобы убрать двоеточия, придётся всё-таки одну из таких пауз заменить пропуском (мне вчера повезло: на 103 набранных такта нашлась всего одна пауза с точкой) — после этого отобразится одна точка, как и задумано.

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

Придумал такой трюк: добавляем строку
\override MultiMeasureRest #'staff-position = 0
После этого и многострочные паузы становятся на третью линейку.
shoorick: (Default)
В мануале советуют использовать модуль Locale::TextDomain, в котором уже сразу есть функция __ и ещё куча удобных штуковин, при этом нет ненужного ООП. В том же мануале — ключи для xgettext:
-k__ -k\$__ -k%__ -k__x -k__n:1,2 -k__nx:1,2 -k__xn:1,2 -kN__ -k
Чтение мануалов просветляет...
shoorick: (Рыжий)
  1. Держать по несколько версий одного и того же скрипта, отличающихся лишь выводимыми строками — неправильно. Значит, надо разобраться с интернационализацией.
  2. Пытаюсь понять, как использовать gettext в перлосриптах. Пока не совсем понятно. Толковую доку на русском не нагуглил, пытаюсь понять на аглицком.
  3. Глядя в мануал и творчески применяя напильник, сотворил скрипт (тут приведена далеко не первая итерация):
    #!/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'ом.
  4. Исходя из имеющейся ситуации самым правильным, наверное, будет научить xgettext находить в исходнике те строки, перед которыми стоит __
  5. Пошёл читать мануал дальше...
upd/19:30: xgettext можно научить понимать разные ключевые слова: запущенный с ключами -k__ -kget, он всё находит. Завтра попробую применить на практике.
shoorick: (Default)
Устав от висты, балуюсь с мандривой. Кое-что сделано симпатично, кто-что удивляет:
  1. man не на всё: скажем, man man есть, а какого-нибудь man ls или man rm — нет остальные маны добавляют установкой пакета coreutils-doc.
  2. админить мышкой, может, и весело, но как-то малоэффективно.
  3. не удалось поставить ни kate, ни kdewebdev4 (там прячется Quanta+) — установщик ругается: Sorry, the following package cannot be selected
  4. некоторых софтин (mc, lilypond) нет среди тех, которые хотя бы теоретически можно поставить.
  5. консольных редакторов кроме vim нет вообще никаких: ни ee, ни nano, ни joe, из vi я умею только выходить.
  6. wi-fi то работает, то нет.
  7. в /etc/fstab вместо понятных путей к устройствам типа /dev/sda1 написан кошмар: UUID=385852ba-e6c0-4511-accf-104c26fe7073. Чё с этим делать?
Будем гуглить дальше...
shoorick: (Default)

Послушав мнение коллег, решил что для преобразований 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

shoorick: (Default)
Заглянув в man perlop, обнаружил что в перле приоритет операций сравнения (например, eq) не только выше, чем у логический операций заданных словами (например, or), но даже выше, чем && и ||.
Это ж сколько лишних скобок я за 10 лет поставил!
shoorick: (Default)
Почитав man и Transcript of the Auto Completion Movie Demo, доработав прилагаемый пример напильником, прикрутил autocomplete к полю ввода на одной из страниц каталистового сайта. Теперь можно попробовать найти ему практическое применение...
shoorick: (Default)
Пытаюсь понять, как работает many_to_many в DBIx::Class — ни хрена не понятно :-(
Плюс к тому мануалы написаны по-дурацки: вместо того, чтобы подробно описать параметры используемых функций, автор ограничился парой примеров. За что и поимел — вынужден отвечать юзерам, что всё устроено не так, как они понимают.
shoorick: (Default)
Читай man, читай man, читай man... Ну и perldoc. И снова: читай man, читай man...
Глянув поутру в perldoc DBI, очередной раз понял, что делаю всё неправильно: пользуюсь самописным лисапедом (причём, давно пользуюсь: отдельные его методы существуют уже лет семь), выполняющим $dbh->prepare(), $dbh->execute(), а затем, если $sth->rows позволит, в цикле выбирающем строки при помощи $sth->fetchrow_hashref. В то время как ракеты бороздят существуют $dbh->selectall_hashref, $dbh->selectcol_arrayref и $dbh->selectrow_hashref.
Поздравляю тебя, Шарик Shoorick — ты балбес!
shoorick: (Default)
Почитал на ангельской мове (ибо по-русски чё-то как-то нету) всячину про DBIx::Class и прочий перломаньячизм. Мозг опух и выключился.
shoorick: (Default)
Вчера очередной раз убедился в полезности сабжа. До этого ломал голову, листал толстую книжку, гонял скрипт под отладчиком... Никак!
А потом поглядел man perlref и стало Щастье™. В результате получил скрипт, который почти правильно перегоняет линейные и плоскостные объекты из старой карты города в mif. Правда, mifshape.exe на него ругается, пытается склеивать некоторые линии — иногда получается то, что надо, иногда — жуткая мешанина линий, идущих через весь город.

Кроме того, проблема возникла и в качестве исходных данных: в некоторых слоях исходной карты объекты имеют уникальные номера, в некоторых — нет. Расставить подобные номера — задача нехитрая: делается в FAR'е одной заменой с использованием регэкспов, но проблема в том, что в ряде случаев такая замена не нужна, поэтому приходится пока отсматривать слои вручную. Впрочем, малое количество слоёв делает задачу преобразования вполне выполнимой.

Возможно, сегодня вечером отлажу...
shoorick: (Default)
Помня коммент, написанный sappaоднофамильцем ещё год назад, пошёл читать man perlstyle.
shoorick: (Default)
Читал 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/

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 11th, 2025 01:18 pm
Powered by Dreamwidth Studios