20080913

Знакомство с ConTeXt

Разглядывал такую вещь, как ConTeXt. Надстройку над Plain TeX, в некотором смысле альтернативу LaTeX. Достаточно взглянуть на мануал к нему, вот этот или вот этот, чтобы понять, на что он способен. Судя по этим руководствам, некоторые вещи делаются в ConTeXt лучше и проще, чем в LaTeX. Например:
  • размещение илюстраций и таблиц, обтекание их текстом естественны (кто возился с плавающими илюстрациями в LaTeX — знает, чего это стоит там)
  • есть нормально работающая многоколоночная вёрстка (опять же, подводные камни многоколоночной вёрстки в LaTeX на картах широко отмечены)
  • есть возможность вёрстки по сетке (например, возможно сохранение постоянного межстрочного интервала)
  • отложенный вывод материала является стандартным инструментом, а не высшим пилотажем для знатоков, есть возможность создания целой серии документов, использующих общий исходник и общие стилевые настройки (сказывается изначальная ориентация ConTeXt на создание учебных материалов, например, из одного исходника можно сформировать и лекционные записи, и задачник со списком ответов в конце, и решебник с объяснениеми решений, идея понятна)
  • большинство задач, касающихся вёрстки материала, решаемы встренными средствами самого ConTeXt, нет необходимости прибегать к сторонним пакетам (в случае LaTeX иногда имеется по несколько сходных пакетов, разной степени современности и с разными командами/разметкой)
  • есть развитые средства создания интерактивных и гипертекстовых документов
В общем, всё хорошо и интересно. Если не для написания статей, то для личного использования приспособить ConTeXt можно.

Кириллица в ConTeXt вроде тоже должна поддерживаться. Как средствами pdfTeX, так и уникодного XeTeX. Быстренько поставил ConTeXt из репозиториев Debian, решил попробовать. Однако на практике, попытка собрать примеры с русскими буквами в ConTeXt, приводила к появлению на свет PDF, в котором русские слова записаны транслитом. Т.е. вроде и разные кодировки русские понимает, и не ругается, а вот со шрифтами что-то не то. Если кто разберётся с этим зверем — дайте знать.

Решение проблемы с кириллицей. Кажется, найдёно решение проблемы транлитерации русского текста. Эта ошибка в ConTeXt, похоже, появилась недавно и исправление уже есть (думаю, оно попадёт в будущие версии ConTeXt). На данный момент я сделал так:
  • скачал type-one.zip
  • распаковал файл type-one.tex и заменил им файл /usr/share/texmf/tex/context/base/type-one.tex (да, при следующем апгрейде пакета context эта замена пропадёт, по-хорошему надо собрать новый deb-пакет)
После этого стандартный пример
\enableregime[utf]
\useencoding[cyr]
\definetypeface [russian]
[rm] [serif] [computer-modern] [default] [encoding=t2a]
\setupbodyfont[russian,24pt]
\starttext
Немного русского текста для пробы.
\stoptext
сохраняем в файл. Чтобы скомпилировать, запускаем
$ texexec myfile.tex
Результат содержит русские буквы. Выглядят они не лучшим образом, но для начала неплохо:



См. также:
☙ TeX и его варианты

20080903

Простая CMS для AppEngine

Я далёк от серьёзной веб-разработки. Однако довольно регулярно мне приходится делать или браться поддерживать/изменять разные небольшие сайты (до 10–20 страниц). Надо сказать, что готовые решения в этой весовой категории меня ни разу не удовлетворяли.

  • Полноценные CMS всегда оказывались слишком тяжёлые (слишком универсальные) и навязывали слишком сложную (ИМХО) модель и структуру сайта. Их код слишком большой, чтобы можно было что-то быстро под себя переделать. В общем, в программировании я не любитель «отсекать лишнее».
  • Комбинирование языков облёгчённой разметки (Markdown, reST), щепотки PHP и готовых систем шаблонов (вроде Smarty) решало задачу, но требовало решать её каждый раз заново («лепить»).
  • Собственный набор макросов m4 для генерации сайтов был не очень удачен (но «велосипед был вновь изобретён»).
  • Попытки использовать Google Pages или облегчённые вики в качестве движка оставили смешанное чувство (здесь нужно долго и нудно «замазывать»).

В общем, на каникулах развлёк себя знакомством с Google AppEngine (который предоставляет бесплатный и масштабируемых хостинг для веб-приложений), а заодно, в свете того, что нужно сделать очередной мини-сайт, решил сделать для AppEngine простую мини-CMS. Требования у меня к ней были такие:

  • Максимально простая модель сайта: «плоский» сайт из нескольких страниц с автоматически генерируемым «меню».
  • Человек далёкий от веб-разработки должен иметь возможность легко изменять содержимое сайта. Легко — это значит не только «не зная HTML», но и «без страха перед навороченной админкой», и «не зная английского».
  • Должна быть возможность использовать облегчённые языков разметки (Markdown, reST), которые мне кажутся более предпочтительными, чем WYSIWYG-редакторы.
  • Код должен быть достаточно коротким и простым, чтобы понять и изменить его было легко.
  • Доступность бесплатного безрекламного хостинга для динамического сайта:)
В результате пары дней приятных усилий получилось вот что. Дабы подчеркнуть простоту кода (в данный момент это всего 5 кБ), я эту мини-систему управления сайтом нарёк Hello Web. Кое-что ещё надо доработать, но, в целом, уже вполне функциональная вещь. Сам сайт HelloWeb на ней же и работает.

Надеюсь, кому-то кроме меня эта мини-CMS окажется полезна. Лицензия — преданная гуглоанафеме, но свободная и мне симпатичная GNU Affero GPL. Собственно, узнал об этой политике Гугла по отношению к Affero GPL как раз попытавшись завести проект на Google Code. «Ну не хотят, так не хотят,» — решил я, — репозиторий исходного кода был размещён на freeHg.org.

В общем, исправления и дополнения кода приветствуются.

20080830

Как сохранить видео-поток ASF в файл

Как сохранять видеоролики со всяких там ютубов все уже давно знают (см. clive). На некоторых же сайтах (к примеру, на vesti.ru) видео лежит в виде ASF-потоков. Если не плеваться на некошерность таких видео-потоков, то их вполне можно смотреть после установки плагина totem-mozilla, затем только нужно один раз, с помощью контекстного меню плагина, открыть видео непосредственно в видеопроигрывателе и согласиться на установку нужных кодеков. После этого все такие ролики будут показываться прямо в браузере.

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

#!/bin/sh

usage="usage: `basename $0` video_stream_URL video_file"

if  [ $# -ne 2 ]; then
        echo $usage
        exit -1
fi

STREAM=$1
VFILE=$2
BITRATE=4000

mencoder "$STREAM" \
        -oac mp3lame -lameopts vbr=3 \
        -ovc xvid -xvidencopts chroma_opt:vhq=3:pass=2:bitrate=${BITRATE}:autoaspect \
        -o "$VFILE"


И пример использования:
$ vstream2avi.sh mms://video.rfn.ru/rtr-vesti/147104.asf Putin_interview_CNN_20080827.avi