суббота, 16 октября 2010 г.

Наш товарищ Гринни

Grinnie: ты не ездил в романтик?
art: ездил
Grinnie: я хотел заказать у тебя мамаджек -_-
art: ну я туда ещё поеду
art: я хотел купить ещё какую-то фигню
art: забыл какую
Grinnie: когда поедешь?
art: в выходные вероятно
art: а тебе зачем мамаджек?
Grinnie: куда-то хотел впаять
Grinnie: забыл куда, но он мне нужен

Проба пера

Прошедшим летом я решил подарить моей девушке на д/р её книгу. Говорят, книга — лучший подарок. Ещё лучше, если книга — твоя собственная. Подарок был благополучно изготовлен за время отпуска и Светланке очень понравился. Немного погодя, уже при непосредственном участии автора, книжка выросла в полноценный сборник рассказов и стихов, который мы и выпустили ультраограниченным (на данный момент) тиражом!

Первые копии

Пара слов о технической стороне. В процессе подготовки макета я здорово освежил мои знания LaTeX. В дистрибутиве TeX Live есть три TeX-процессора: pdfTeX, LuaTeX, XeTeX, которые совместимы с латехом, и загадочная штука под названием ConTeXt (пакет TeX-макросов вроде LaTeX, ориентированный на типографику). Опробовав эти варианты, я решил остановиться на XeLaTeX, о чём и не пожалел. Во-первых, исходник набирается в UTF-8, что позволяет напрямую загружать «чистый» ввод с правильными кавычками, тире и многоточиями. Очень удобно, если текст необходимо править на лету и/или повторно использовать после. Во-вторых, XeTeX работает с truetype/opentype-шрифтами. Наконец, так любимая Кибероном висячая пунктуация (ради которой я и связался с латехом) поддерживается и в XeTeX.

Прозу и поэзию с одной стороны проще верстать, чем, скажем, научную литературу. С другой стороны есть и свои приколы. К примеру, неудачные переносы окончаний в конце строк с прямой речью способны сильно испортить общий вид страницы. Работа осложняется ещё больше, если следовать стандартам отечественной типографики (приводка, запрет висячих строк и т. д.), но к счастью нерешаемых проблем тут нет. Верстать в латехе очень просто, однако есть несколько моментов, которые я предпочёл бы знать прежде, чем начинать:
  • TeX Live лучше ставить не из дистрибутивных пакетов, а родным инсталлером. Скачивать придётся много и долго, но установку можно в любой момент прервать и продолжить, когда захочется. Поддерживается установка в режиме portable.
  • Класс memoir — мощный и гибкий стилевой пакет с длинным руководством, которое я очень рекомендую к прочтению.
  • Нужно иметь ввиду, что при высоких \clubpenalty и \widowpenalty в сочетании с \flushbottom, латех будет растягивать межабзацный отступ (\parskip), что устраняет висячие строки, но нарушает совмещение строк на просвет. Установка \parskip в нерастяжимое значение приводит к большому количеству пустых строк внизу страниц и миллиону ошибок в логе. Впрочем, если не лениться, их можно вручную поправить вгонкой и выгонкой строк на предшествующей полосе.
  • Вгонка и выгонка строк в LaTeX (XeLaTeX) легко делается (бажной) командой \addfontfeatures из пакета fontspec. Например: \addfontfeatures{WordSpace={0.95,1,1}}. Сбрасывать WordSpace после проблемного участка текста приходится вручную, группировка фрагмента в фигурные скобки не срабатывает. Вообще, для хранения этих параметров очень пригодился бы внутренний стек.
  • Длинные тире в XeTeX по умолчанию переносятся в начало следующей строки и вообще ведут себя нечестно. Для нормальной их расстановки можно воспользоваться параметром babelshorthands при загрузке polyglossia, но результат не особенно радует — в документе на выходе длинные тире заменяются двумя короткими с небольшим наложением, которые копируются в буфер как «--». Более правильным решением мне кажется определение тире как активного символа или окружение его в исходнике двумя активными символами с присвоенными командами \allowbreak (\nobreak) и \thinspace.
  • Висячие предлоги (а также стоящее в начале предложений «Я» и т. п.) перестают быть висячими, если вставить после них неразрывный пробел (~) при помощи простейшего регулярного выражения.
  • Регулярные выражения — совершенно незаменимый инструмент на любой стадии обработки текста.
Скачать книжку в PDF можно по этой ссылке. Есть и твёрдые копии. Мы печатаем их дома на качественной суперкаландрированной бумаге (твёрдый переплёт 7БЦ). Копии нумеруются и подписываются, выдаются и высылаются. По совету Киберони мы сделали и «мобильную» версию в формате fb2. Не уверен, насколько хорошо она вышла, поскольку с имеющимися под линукс читалками я так и не разобрался. Надеюсь, что всё ок. Приятного чтения, друзья! Любые замечания и предложения приветствуются!

четверг, 24 декабря 2009 г.

Оксюморон

У нас на работе сегодня пьют монгольский чай «Хаан». На вкус как солёный чай с молоком, непривычный, но говорят, у алтайцев вроде бы даже так принято... Что удивляет, так это дизайн продукции. Спрашивается, какого хрена на упаковке с монгольским чаем (который, к слову сказать, производится в Сингапуре) делает американский флаг!? Судите сами:


среда, 16 декабря 2009 г.

Привет, трафарет!

Только что, в поиске трафаретных шрифтов для плоттерной резки, я наткнулся на суперский, потрясающий шрифт:



Шрифт бесплатный и доступен для скачивания на сайте gimpstuff.org или на сайте автора. Советский трафарет — сила!

пятница, 11 декабря 2009 г.

Стеммер от Hunspell

Да, совсем забыл. Я давно уже хотел попробовать стеммер Hunspell (то есть такую штуку, которая приводит слова к канонической форме) на основе орфографических словарей, но руки не доходили, в том числе и потому, что существующие интерфейсы к питону не слишком хорошо обращались с юникодными строками.

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

>>> from hunspell import Hunspell
>>> h = Hunspell("ru_RU.aff", "ru_RU.dic")
>>> h.stem("ищет")
['искать']
>>> h.stem("суши")
['сушить', 'суша', 'сушь']

Словарь я скопировал из пакета myspell-ru, но следует иметь в виду, что при всей своей полноте и выверенности он не лишён недостатков:

>>> h.stem("лжёт")
['лжёт']

Тем не менее, стеммер Hunspell показал куда лучшие результаты, чем, например, алгоритм Портера (Snowball). Он очень быстрый и вполне пригоден для индексирования незамороченных документов, логов и тому подобных задач, но его возможности, понятное дело, ограничиваются объёмом и структурой словаря.

А поэтому, для более продвинутого анализа лучше использовать комбинированный (словарно-алгоритмический) метод, который реализован, например, в библиотеке pymorphy, плюсом которой также является отсутствие привязки к системным библиотекам.

Имбирное пиво...

...это, оказывается, совсем не пиво; оно вообще не содержит сколько-нибудь ощутимых доз алкоголя. При этом его не только легко и приятно делать, но ещё и легко и приятно пить! А делается оно следующим образом:
  1. Стакан сахара перемешиваем с чайной ложкой дрожжей и засыпаем в пустую пластиковую бутыль (2л) через воронку.
  2. Небольшой очищенный кусок имбирного корня натираем на мелкой тёрке и смешиваем с соком лимона.
  3. Получившуюся смесь добавляем к сахару и оперативно заливаем водой (так, чтобы заполнить посудину примерно на 95%).
  4. Бутыль закручивается, встряхивается и несколько раз переворачивается, чтобы растворился сахар.
Вот собственно и весь процесс. Смесь ставится в тёплое место на 24 часа. Некоторое время спустя пиво начнёт бродить, что будет заметно по выделению пузырьков. Готовность определяется по твёрдости бутылки — если пластик продавливается пальцем, значит пусть бродит ещё немного...

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

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

четверг, 27 августа 2009 г.

Пакет дня

Совет от Ubuntu Server: Если вы выполнили команду и забыли про 'sudo', вы можете набрать 'sudo !!' для вторичного запуска предыдущей команды с использованием 'sudo'.
Сегодня утром в репозиториях Кармика появился крутейший пакет под названием «fortunes-ubuntu-server». Как можно догадаться, в пакете — фортунки с разными хинтами по использованию Ubuntu Server (и не только). А ещё он автоматически добавляет эти хинты в motd и показывает их при входе с консоли. Очень приятная и полезная штука. Люблю, когда день начинается с таких вот маленьких и симпатичных радостей!