20071130

Управление закладками в Firefox 3 Beta1: впечатления

Добрались руки попробовать вышедшую на той неделе бета-версию Firefox 3. И надо сказать, что работает она хорошо, во всяком случае не хуже, чем раньше. Мои давние читатели уже знают, что этот релиз я очень жду, поскольку связываю некоторые надежды с его новой системой закладок Places.

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

И хотя положительные изменения налицо, реализацией интерфейса я остался разочарован:

  • Диалог «Управление закладками» в данный момент не очень удобен и выглядит сыро, по сравнению с его набросками в проекте. Надеюсь, к релизу доделают.
  • Использование одновременно и папок, и меток для закладок выглядит довольно странным. Метки не являются виртуальными папками, как можно было бы ожидать (и как сделано, например в Epiphany), и спрятаны от пользователя. Папки показываются пользователю, но добавление закладки в нужную папку — по прежнему неудобно и требует нескольких кликов по мелким элементам интерфейса. Подглядывание в схему базы данных, в которой хранятся теперь закладки (а они хранятся теперь в SQLite-базе, а не в плоском HTML-файле), подтвердило, что и папки, и метки рассматриваются как родительские объекты, но разных типов.
  • Как результат — увидеть список используемых меток нельзя, ни в виде списка, ни в виде облака. Увидеть можно только папки (Bug 406161). Все добавленные метки старательно скрываются от пользователя.
  • Искать же закладки по названию папки, в которой они находятся — нельзя. Можно искать только по адресу (!), заглавию сайта или метке (Bug 406157).
  • Быстро перейти к закладке, набрав одно-два слово из её заглавия — нельзя (Bug 405645). В Epiphany это работает нормально и позволяет быстро переходить по нужной закладке (даже не открывая панель закладок).


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

В общем, в Firefox 3 сохряняется интерфейсная болезнь ранних версий Netscape: образование закладко-помойки, найти что-то в которой часто труднее, чем заново на гугле. А ведь закладки в браузере для того и должны быть, чтобы быстро находить то, что уже раз было найдено. И к 2007-му году уже придуманы удобные интерфейсы поиска по закладкам...

Что понравилось: ну, конечно, то, что теперь всё лежит в SQLite; весьма симпатичная и удобная кнопка-звёздочка в строке адреса для создания «быстрых закладок»; автоматические списки всяких «наиболее часто посещаемых», «недавно посещённые».

В общем, Firefox 3 в области закладок пока заслуживает оценки «3, удовлетворительно». Пользоваться можно, но любая система онлайн-закладок и некоторые альтернативные браузеры дадут ему фору в плане удобства поиска и навигации по коллекции закладок. Впрочем, надежд я пока не теряю.

Дополнение. «Вкусности» Firefox 3, не имеющие отношения к закладкам: 1. Встроенный менеджер закачек научился докачивать прерванные закачки. 2. Вроде бы можно в качестве обработчиков mailto: использовать веб-сервисы вроде GMail (не пробовал). 3. Сильно улучшилось масштабирование страниц (думаю, перекочует в течение пары месяцев и во все другие основанные на Gecko браузеры).

Использование коммандной оболочки SHELL, ссылки

Наткнулся на довольно интересный сайт с разными советами по использованию коммандной оболочки: SHELLdorado.com (на англ.)

Дополнение 5 февраля: Нашёл ещё один интересный сайт, посвящённый программированию на bash, это форум BashScripts.org, в духе вопрос-ответ.

Дополнение 13 февраля: А вот книжка по программированию на Bash, Bash Scripting, автор Hamish Whittal. Распространяется по лицензии Creative Commons AT-SA. Желающие перевести есть? ;)

И ещё перевод руководства Искусство программирования на языке сценариев командной оболочки (Advanced Bash Programming).

20071123

Синхронизация каталогов по SSH и по FTP

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

Пусть есть два каталога: на локальной машине и на удалённой. Предполагаем, что изменения происходит только в одном месте (для объединения параллельных изменений нужно использовать средства управления версиями вроде subversion, а не средства синхронизации). Нужно перенести все произошедшие изменения в другой из них. Это и есть задача синхронизации.

Обычно синхронизация двух каталогов делается с помощью Rsync и SSH.

Пусть изменяется удалённый каталог, копируем его на локальную машину так:
$ rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда

Если же «отражаем» локальный каталог на удалённую машину (выкладываем изменённый сайт на хостинг), то
$ rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда

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

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

Всё это хорошо, да вот только доступ по SSH есть далеко не всегда (например, если хостинг дешёвый...). Иногда требуется синхронизировать каталоги по FTP. Это умеет программка lftp. О том, как пользоваться lftp, уже писали. Поэтому напишу кратко по теме, а остальное — см. man lftp.

Вытянуть каталог с удалённого сервера (синхронизировать локальный каталог с удалённым):
$ lftp -e 'mirror -e каталог-на-сервере локальный-каталог; bye;' -u логин,пароль удалённый.хост

И наоборот, выложить локальный каталог на удалённый сервер:
$ lftp -e 'mirror -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост


Это, конечно, можно делать и используя lftp в интерактивном режиме. Если команде mirror параметры не давать, то синхронизуются текущий удалённый и текущий локальный каталог.

Конечно, если задачи синхронизации не стоит, а нужно просто выложить или скачать каталог со всеми подкаталогами, то тогда задачу можно решить проще, scp -r или рекурсивный put, имеющийся во многих других FTP-клиентах, для этого будут достаточны.

Смотрите также:

Резервное копирование и шифрование архивов с помощью cpio (или tar) и gpg

20071120

gnuplot: терминал по умолчанию

После одного из недавних обновлений gnuplot стал в качестве терминала (устройства вывода) по умолчанию использовать wxt вместо обычного x11. wxt, конечно, в чём-то лучше: можно сохранить изображение в буфере обмена, можно настроить уровень сглаживания... Однако работает как-то медленнее, и, вдобавок, при выходе из gnuplot пишется:
(:25249): GLib-GObject-WARNING **: /tmp/buildd/glib2.0-2.14.1/gobject/gsignal.c:1741: instance `0x822cdd8' has no handler with id `123'

(:25249): GLib-GObject-WARNING **: /tmp/buildd/glib2.0-2.14.1/gobject/gsignal.c:1741: instance `0x83b5f20' has no handler with id `248'

(:25249): GLib-GObject-WARNING **: /tmp/buildd/glib2.0-2.14.1/gobject/gsignal.c:1741: instance `0x822c958' has no handler with id `50'
В общем, вернуть старый добрый x11 в качестве терминала по умолчанию просто. Для этого достаточно поместить команду выбора терминала в ~/.gnuplot:
$ echo set terminal x11 > ~/.gnuplot

Vim в терминале: сохранение отступов вставленного текста

Как известно, vim можно запускать как в графическом режиме, так и в текстовом, в любом терминале. Так сложилось, что я привык запускать его именно в терминале. Однако при этом есть одно неудобство: если в режиме вставки попытаться вставить текст из «иксового» буфера обмена нажатием средней кнопки мыши, то отступы (отбивка) вставленного текста ломаются.

Например, если я, редактируя файл с текстом программы на Си, попытаюсь выделить мышью в соседнем окне и вставлять в vim такой текст:
int main(int argc, char *argv[]) {
printf("Hello World!\n");
printf("Vim 6 and later breaks indentation\n");
printf("when text is pasted with a mouse into terminal...\n");
}

получится скорее всего вот так:
int main(int argc, char *argv[]) {
printf("Hello World!\n");
printf("Vim 6 and later breaks indentation\n");
printf("when text is pasted with a mouse into terminal...\n");
}


И это очень раздражает! Происходит это только в терминале. Vim, запущенный в графическом режиме обрабатывает вставку из «иксового» буфера правильно. Самое интересное, что отключение автоматической отбивки (:set noautoindent, :set nosmartindent, :set nocindent...) проблему решает не всегда.

К счастью, решение (костыль?) есть. Если перед вставкой мышью использовать команду :set paste, то текст вставляется с сохранением отступа. После этого можно включить обратно используемый режим отступа командой :set nopaste.

(По мотивам Tip #330: how to stop auto indenting, :help paste и :help pt)

20071119

vim в Debian: включение-отключение расширений

В Debian некоторые популярные расширения к vim, вроде vim-latexsuite, поставляются в виде готовых пакетов (см. также пакет vim-scripts). Однако установить пакеты vim и vim-latexsuite обычно мало. Нужно ещё включить расширение (то бишь поместить на него символические ссылки в своём ~/.vim).

Расширения включаются и отключаются с помощью vim-addons из пакета vim-addons-manager:
$ vim-addons list # показать список доступных расширений
$ vim-addons install latex-suite # установить/включить расширение
$ vim-addons disable latex-suite # отключаем расширение latex-suite
$ vim-addons remove latex-suite # удаляем расширение latex-suite (из ~/.vim)

Вот такой Debian-way.

20071114

RuNIX.org — планета русских блогов о BSD, GNU/Linux и свободном ПО. Вторая итерация

Идея создания единой ленты русских блогов о *nix нашла поддержку. Сейчас на http://feeds.feedburner.com/ru_nix_blogs подписано уже почти 80 человек.

Более того, Alexander GQ Gerasiov предоставил сервер для размещения полноценной планеты и доменное имя, RuNIX.org, так что планета с моего Google Reader-а переезжает туда, а создаваться единая лента будет силами скрипта planetplanet.

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

RSS-лента ru_nix_blogs будет теперь перезаряжена с RuNIX.org, поэтому для существующих подписчиков ничего измениться не должно (максимум, будут скачаны повторно недавние сообщения). В любом случае, в ближайшее время возможны какие-то технические накладки, о которых прошу своевременно сообщать, а за возникшие неудобства извинить.

Итак, встречайте:
RuNIX.org — планета блогов о *NIX на русском языке.

20071113

Как скачать альбом Picasaweb целиком (без Picasa)

Написал маленький скрипт download-picasa-album, позволяющий из коммандной строки за раз скачать все изображения из альбома Picasaweb в полном разрешении.

Использовать так:
download-picasa-album 'ссылка-на-RSS-фид-альбома'


И все фотографии албома скачиваются и помещаются в текущую директорию. Русские буквы в именах файлах обрабатываются нормально (в UTF-8 локали), а вот пробелы, думаю, вызовут проблемы в том месте, где awk вызывает wget. Надо бы поправить...

Да, можно вместо ссылки давать имя файла с уже скачанным фидом.

Скачать скрипт


Идею заимствовал у Дмитрия Астапова, но воспользовался xmlstarlet вместо Xtract и оформил всё это дело в виде скрипта. Кусок awk-кода, декодирующий URL взял с сайта Huidae Cho. Скрипту также требуется iconv.

Дополнение: Похоже, мой скрипт удачно скачивает только открытые альбомы; надо будет посмотреть, что там ломается с частными альбомами. В общем, если мой скрипт у вас не работает, можете попробовать ещё скрипт Loïc Serf-а. Код его скрипта можно найти также в комментариях ниже.

P.S. Вот, теперь из коммандной строки, не устанавливая громоздкую Picasa, можно не только выкладывать фотографии на Picasaweb, но и скачивать альбомы друзей. Я доволен.

Vim: как закоментировать блок кода

Во многих языках программирования есть синтаксис комментариев, при котором всё начиная с некоторой последовательности символа и до конца строки является комментарием. Чаще это комментирующими символами являются: «#» (скриптовые языки), «//» (C++ и компания) или «;». Это довольно удобно, если надо закомментировать строчку. Если же надо так закоментировать несколько подряд идущих строк, то добавление символа комментария в каждую строчку вручную довольно утомительно...

К счастью, в редакторе vim есть возможность сделать это быстро:
  1. CTRL-v (для выделения блока текста движением курсора вниз (j) или вверх (k)),
  2. затем заглавная I (вставка во все строки блока) и комментирующие символы, которые нужно добавить (например, «//» или «#»), ESC.
И всё, 6+N нажатий на клавиши для комментирования N строк текста. Обратите внимание, что команда блоковой вставки — это заглавная I, а не строчная, как обычно.

Удалять можно также быстро: CTRL-v, выделение блока, X. Если символов комментирования два («//», «--») повторяем последнюю команду: . (точка). И всё! Никаких замен.

Пользователям vim под Windows следует использовать CTRL-Q вместо CTRL-V

P.S. Добавить текст в конец всех строк блока можно поместив курсор в конец первой строки блока ($), блоковым выделением и блоковой командой вставки после курсора (A,текст для конца строки,ESC).

P.P.S. Как заметили в комментариях, есть специальный плагин для быстрого комментирования: NERD Commenter. Плагин предоставляет больше возможностей, зато описанный выше способ работает «из коробки», в практически любом vim-е.

20071112

Taglist плагин для Vim: навигация по исходникам

Давно пользуюсь vim, но только сегодня открыл для себя плагин Taglist (спасибо iar.spb.ru, за его список любимых расширений).

Как известно, если исходный код программ обрабатывать программкой ctags, то можно формировать файлы tags, наличие которых позволяет vim переходить к нужной функции/классу по имени-метке (нужный файл открывается автоматически). Это сильно облегчает поиск нужного места в коде в проекте из большого числа файлов. Для этого используется команда :tag идентификатор и сочетание клавиш CTRL-] (перейти к определению функции/класса, на идентификатор которого указывает курсор). Сочетание CTRL-T позволяет вернуться назад. Это стандартная возможность vim. И очень полезная.

Если же установить плагин Taglist, то возможности навигации по коду с использованием меток-идентификаторов значительно расширяются. В частности, список используемых идентификаторов становится доступен в «левой панели» (буфере). Это лучше увидеть:
скриншот vim-а с открытой «панелью» Taglist


Для установки плагина нужно скачать его zip-архив, распаковать в ~/.vim. Если всё необходимое для работы плагина уже есть (в первую очередь, программа ctags), то для того, чтобы начать его использовать, достаточно набрать :Tlist

20071108

Видеосвязь в Skype для Linux

А в Skype для Linux появилась, наконец, видео-связь.


Скачать Skype 2.0 beta для Linux.

20071107

Флажки раскладки клавиатуры в GNOME

В блоге Кирилла Колышкина появилась инструкция как в индикаторе раскладок клавиатуры в GNOME включить флажки (флаг России — для русской раскладки, флаг США или Великобритании — для английской и т.д.).

Скриншоты OpenMoko (октябрь 2007)

Вчера Google объявил о планах создания новой открытой мобильной платформы. Что из этого выйдет пока неизвестно. А вот софт к другой открытой платформе, OpenMoko, активно пишется.

Я читаю иногда блоги разработчиков, и радуюсь, что дело движется. Сейчас уже работает набор номеров, адресная книга, появилась поддержка тем и графический менеджер пакетов. Выглядит это вот так:

скриншот OpenMoko, октябрь 2007
Image Hosted by ImageShack.us
Image Hosted by ImageShack.us


А другие октябрьские скриншоты можно посмотреть в блоге Томаса Вуда. Такими темпами к январю будет уже вполне пригодная к повседневному использованию телефонная прошивка для FIC Neo 1973.

И особенно радует, что особое внимание разработчики уделяют удобству часов и будильника на телефоне (камень в огород смартфонов Nokia).

20071105

Почему не работает CTRL в GNOME (Nautilus)

Столкнулся с тем, что в сессии GNOME моей жены, в обозревателе файлов (Nautilus), не работало выделение файлов с помощью CTRL + щелчок мышью. При том, что у меня всё работало нормально. Ситуация казалась тем более странной, что на CTRL не было повешено никаких сочетаний клавиш, да и в других программах всё работало нормально.

Как выяснилось, одно «сочетание» на CTRL всё же висело. Впрочем догадаться, где оно задано было не так-то просто. Помог гугл. Задавалось оно в Система — Параметры — Окна. Почему-то «клавишей перемещения окон» по умолчанию была задана именно CTRL. Изменение её на ALT всё исправляет.

20071031

Идея: планета русских *nix блогов

Кратко

Единая RSS-лента всех известных мне линукс-блогов на русском языке.

А вместо блог-ролла у меня теперь список последних постов в этих линукс-блогах. Добавлен он вот так:


Проблема


Вот читаю регулярно всякие русские линукс-блоги, а всех нас — так и не знаю. В этом отношении у пользователей ЖЖ с его системой друзей и сообществ удобств больше: им проще узнать друг о друге. А мы узнаём друг о друге в основном случайно.

Да, есть поиск... Но честно говоря, я им не пользуюсь. Почти. Только чтобы перед тем, как писать длинный пост, проверить, что тему никто до меня сильно не пахал, то есть, чтобы не делать двойную работу :)

Да, есть блог-роллы, по которым никто не кликает...

Да, есть Google Reader, в который можно добавить фиды по очереди всех людей из поиска... А если появиться ещё кто-то, то как об этом узнать?

Решение


А есть зато такая концепция сайта, как «планета». Идея: собрать RSS-фиды со всех независимых личных блогов членов сообщества и соединить в единый поток. Смотрите, например, http://planet.debian.org/.

Это удобно: появляется естественное единство сообщества, при этом каждый волен вести свой блог так и там, где ему вздумается. А интересующийся может не подписываться на каждый из блогов по отдельности. Можно подписаться на фид «планеты».

Есть уже для этого готовый скрипт: http://www.planetplanet.org/. Для PlanetPlanet нужен Python и cron на сервере. У меня доступа к такому серверу сейчас нет. Зато я узнал, как объединять несколько RSS потоков в один с помощью Google Reader-а. Для начала, я решил, чтобы испытать идею — и это сойдёт. А что вышло — смотрите в конце поста.

Итак, я взял список ссылок на известные блоги с http://iar.spb.ru/doku.php, вытащил из них вот таким скриптиком ссылки на фиды, преобразовал полученный список фидов в OPML формат (онлайн-конвертер здесь), и загрузил в свой Google Reader, добавив к тем блогам, которые у меня там уже были. После этого пошерстил список на предмет соответствия заявленной тематике (об этом ниже). Затем просто пометил их одним тегом, сделал этот тег общедоступным и отжёг выданный мне RSS на feedburner.

Теперь все русские *nix блоги (из моего списка) можно читать на одной странице, как «планету». И даже можно на них подписаться на все за раз.

Теперь о критериях отбора. Членом клуба может быть примерно такой блог:
  • индивидуальный
  • на русском языке
  • посвящённый использованию или разработке GNU/Linux, *BSD или другого свободного программного обеспечения или родственным темам (как минимум 80% — тематические посты)
  • где есть интересное и уникальное содержимое (а не копипаст)


Новые блоги будут добавляться (и удаляться) мной вручную, если кажутся подходящими (заявку на вступление в клуб писать в комментарии) или неподходящими. Благо сообщество линукс-блоггеров достаточно небольшое. Адрес фида такой: http://feeds.feedburner.com/ru_nix_blogs

Ну как вам такая идея, нравится? Если затея понравится — может доживём до полноценной планеты :)

20071030

Сертификат подлинности Debian

С планеты Debian прилетело:

Сертификат подлинности Debian
SVG-исходник прилагается


Сертификат подлинности Debian[, который можно и не показывать].

«Легализуйте вашу копию Debian, предоставьте подтверждение, и помогите нам бороться с пиратством».

P.S. См. также сертификаты подлинности Ubuntu и Fedora.

20071018

Русский подкаст с новостями о GNU/Linux

С недавних пор я начал-таки слушать подкасты, и обнаружил, что это довольно хорошая штука. Почти как интернет-радио, только слушать «передачи» (mp3-файлы с выпусками подкаста) можно слушать в удобное время. Работает это так: добавляем ссылку на RSS-ленту подкаста в программу для прослушивания, после этого новые выпуски будут скачиваться автоматически (или вручную, как настроено). Я слушаю подкасты в Rhythmbox, но и других программ в GNU/Linux для этого хватает.

К чему я всё это пишу — нашёл, похоже, первый русский подкаст посвящённый именно новостям о GNU/Linux. Подкаст ведёт некто skid. Вышло уже три выпуска, и получается у товарища skid довольно хорошо. Каждый выпуск — это дайджест новостей примерно за неделю. Вот ссылка на RSS-ленту подкаста.

Обзор мобильных устройств с GNU/Linux

Хочу дать ссылку на интересный и довольно толковый обзор КПК, смартфонов и других мобильных устройств на базе GNU/Linux.

Краткое содержание:
  • Sharp Zaurus — фактически мёртв,
  • Nokia 770, N800, N810 (Maemo) — продуманы и удобны, подают надежды,
  • OpenMoko Neo1973 — железка уже есть, софт ещё в разработке,
  • Qtopia Greenphone — скорее мёртв, чем жив,
  • Intel MID — внушает надежды, но пока только на картинках,
  • ACCESS Linux Platform — надежд на неё мало.
Я бы добавил сюда ещё дешёвый субноутбук ASUS eeePC, который хоть и не совсем карманный, но уже продаётся. И по умолчанию на нём тоже установлен GNU/Linux.

Nokia N810: интернет-планшет, теперь с GPS

Хотя у меня до сих пор нет интернет-планшетика Nokia, отношусь я к ним с большой симпатией. Нравятся и возможности устройства, и то, что внутри — линукс...

Вот сегодня узнал о выходе новой редакции планшета: N810. В отличие от уже известной всем N800 — в N810 будет модуль GPS и выдвижная клавиатурка. Ещё в N810 будет 2 ГБ встроенной флэш-памяти (но на один разъём для карт памяти меньше). Также с новым устройством будет идти и новая версия операционной системы, OS 2008, несовместимая с предыдущей. Впрочем, старую N800 тоже можно будет обновить до OS 2008, и оба устройства будут продаваться и поддерживаться одновременно.


сравнение N800 и N810


Подробности можно прочитать в других блогах. Ориентировочная цена $479 + налоги. Конечно же, это за океаном.

Для меня наличие в планшетике GPS — большой плюс. Уже давно задумываюсь о приобритении карманного GPS-устройства. Мне почему-то кажется, что новая версия устройства может стать ещё популярнее предыдущей.

Дополнение: 500 наиболее активных разработчиков и участников проекта Maemo (включая авторов документации, блоггеров и остальных) могут получить новый планшет всего за 99€. Условие — общедоступный вклад в развитие платформы. Новички могут поучавствовать в конкурсе на скидку, выдвинув интересные идеи. Подробнее — в этом объявлении.

20071017

Делаем из текстового файла PDF с подсветкой синтаксиса

Есть такой полезный инструмент diff, чтобы смотреть, какие строки изменены в файле. Иногда же мне хочется получить красивую распечатку этих самых изменений. Это можно сделать, скормив текстовый вывод diff программке enscript:
$ diff -u файл1 файл2 | LANG=C enscript -Ediffu --color -o changes.ps && ps2pdf changes.ps && rm changes.ps && xpdf changes.pdf

или, в случае использования svn,
$ svn diff | LANG=C enscript -Ediffu --color -o changes.ps && ps2pdf changes.ps && rm changes.ps && xpdf changes.pdf
Ключевой момент — это вызов enscript, который создаёт файл changes.ps (параметр -o changes.ps), где удалённые и добавленные строки подсвечены разными цветами (-color), в соответствии с синтаксисом diff (-Ediffu).

Кстати, кроме подсветки синтаксиса diff-ов, enscript умеет подсвечивать и многие другие форматы файлов, включая большинство распространённых языков программирования. Загляните в /usr/share/enscript/hl/.

Да и результат можно сохранить не только в PS, но и в HTML. Так, чтобы «раскрасить» файл с текстом программы на C++ можно сделать следующее:
$ cat hello.cc | enscript -Ecpp --color -whtml -o hello.html
А если сделать алиас
alias hidiff="enscript -Ediffu --color -wansi -o -"
то смотреть «подкрашенный» diff можно прямо в терминале:
$ svn diff | hidiff


К сожалению, enscript не работает с уникодом. Поэтому если файлы написаны по-русски в кодировке UTF-8 — ничего хорошего не выйдет. Да и дату, если локаль русская, он скорее всего попытается отобразить кракозябами… В общем, мне обычно надо сравнивать куски кода или текста на английском, где русских букв нет, и такого решения хватает.

20071015

Vim-LaTeX: обзор пакета

В блоге «Всё о Vim» появился неплохой обзор пакета Vim-LaTeX, предназначенного для интеграции системы вёрстки LaTeX и текстового редактора Vim.

Пакет добавляет возможность быстрой вставки стандартных «окружений» LaTeX (своего рода мини-шаблоны), функцию быстрой компиляции документа (\ll) и предварительного просмотра (\lv), словарь команд LaTeX со встроенной помощью по ним и автодополнением (CTRL-X, CTRL-K).

От себя замечу, что пользователям Debian/Ubuntu можно не устанавливать Vim-LaTex вручную, а воспользоваться уже готовым пакетом vim-latexsuite.

20071014

Как набирать с клавиатуры ударения в словах

Некоторое время назад я уже писал об использовании клавиши Compose для набора символов с акцентами, необходимых при наборе европейских языков, типографских кавычек, тире и других знаков, отсутствующих в обычной раскладке клавиатуры.

Однако как ставить ударения в русских словах — я до сегодняшнего дня не знал, пока не прочитал замечательную статью «Как ставить ударение» в блоге Словомания. Идея состоит в том, что в таблице символов уникода уже имеются специальные «дополняющие диакритические знаки», которые изменяют идущие перед ними или после них символы. В частности, символ U+0301 ставит нужный штрих над предыдущей буквой.

U+0301 COMPOSING ACUTE ACCENT


С помощью этого символа можно легко ставить ударение над любой буквой, даже над «ы́» (и над согласными!:)). К сожалению не во всех шрифтах и программах этот символ выглядит правильно. В частности, в некрасивом поведении замечен шрифт Verdana. Зато программы, которые не умеют его обрабатывать — обычно просто его игнорируют. Это удобно.

В HTML набирать ударения просто. Достаточно набрать ́ после буквы, на которой должен стоять знак ударения. Пользователи Windows могут набирать ударение, нажимая клавишу Alt и набирая код символа на цифровом блоке клавиатуры…

А вот набирать ударение с помощью Compose-последовательностей оказалось непросто.

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


В списке стандартных последовательностей дополняющего знака ударения нет.

Выход я нашёл такой:
  1. взял исходники дополнительных методов ввода для GTK+ Latin Plus,
  2. в таблице Compose-последовательностей (файл src/imlatinplus.c) повесил дополняющее ударение на место знака апострофа, который я могу набрать с клавиатуры напрямую, без Compose:
    RCS file: /cvsroot/gtk-im-extra/gtk-im-extra/src/imlatinplus.c,v
    retrieving revision 1.9
    diff -r1.9 imlatinplus.c
    325c325
    < GDK_Multi_key, GDK_apostrophe, GDK_space, 0, 0, 0x0027, /* APOSTROPHE */
    ---
    > GDK_Multi_key, GDK_apostrophe, GDK_space, 0, 0, 0x0301, /* COMBINING ACUTE ACCENT */

  3. собрал и установил Latin Plus с дополняющим ударением.
После этого в приложениях, использующих GTK+, можно выбирать метод ввода Latin Plus и набирать ударение, нажимая последовательно Compose, апостроф и пробел после символа, над которым нужно поставить знак ударения.

выбор метода ввода Latin Plus в GTK+


К сожалению, у такого подхода довольно жёсткое ограничение: работает только с приложениями, написанными на GTK+.

Набрано в gedit: «Приве'т, интерне'т!»


Да и со шрифтами ситуация далеко не радужная. Из установленных у меня шрифтов правильно ударение отображается в Arial, Arial Black, Arphica PL Kaiti, Bitstream Charter, Bitstream Vera Sans, Bitstream Vera Serif, Century Schoolbook L, Comic Sans MS, Courier 10 Pitch, DejaVu Sans, DejaVu Serif, Free Avant Garde, Free Bookman L, Free Courier, Free Helvetian, Free Helvetian Condensed, Free Paladin Roman, Free Sans Medium, Free Schoolbook Roman, Free Serif, Free Times Roman, Georgia, Impact, Nimbus Roman No9 L, Nimbus Sans L, Sans, Serif, Teams, Times New Roman (слишком высоко), Trebuchet MS, URW Bookman L (слишком слева), URW Gothic L, URW Palladio.

Неправильно: Andale Mono, Bitstream Vera Sans Mono, Courier New, DejaVu Sans Mono, Free Chancery Italic, Free Mono, Kochi Gothic, Kochi Mincho, Monospace, Nimbus Mono L, Sazanami Mincho, Terminus, Verdana.

Всё это относится, естественно, только к набору ударений средствами уникода. В LaTeX же ударения можно набирать как всегда:
Прив\'ет, мир!


Результат обработки строки «Прив\'ет, мир!» в LaTeX


Резюме. Средствами уникода можно набирать ударения в словах, для этого после буквы, на которую падаёт ударение нужно поставить символ U+0301. В HTML он набирается так: &#x301;. Для прямого набора этого символа с клавиатуры требуются ухищрения. Способ работает не со всеми программами и не со всеми шрифтами. Пользователи LaTeX могут набирать ударение, не прибегая к уникоду, поставив \' перед нужной буквой.

P.S. В списке стандартных Compose-последовательностей отсутствую также такие нужные для набора русского текста знаки как многоточие («…», U+2026) и знак номера («№», U+2116). Похоже, имеет смысл или делать для себя отдельный метод ввода для русского (модифицировав Latin Plus, например), или просить разработчиков Xorg и GTK+ добавлять указанные символы в их обычные таблицы. Есть какие-нибудь другие идеи?

Дополнение 07.02.2008:
Я нашёл простой способ настроить клавишу Compose с помощью файла ~/.XCompose.

20071004

Сравнение 9 программ для построения графиков

Как известно, среди пользователей GNU/Linux довольно много людей из академической среды, то есть тех людей, которые наблюдают, измеряют, вычисляют, сравнивают и пишут в конечном итоге научные статьи. Эта работа обычно сопряжена с графическим представлением информации или визуализацией. В простонародье — построением графиков. Именно о программах, для этого предназначенных, и пойдёт речь.

Я сравнил 9 свободных программ для визуализации двумерных и одномерных данных. Все эти программы доступны в GNU/Linux, а многие — доступны и пользователям других операционных систем. Все 9 программ позволяют строить такие графики, которые не стыдно показывать или печатать. Это то, что называется «publication quality».

Выбор программ ограничен теми, которые предназначены для визуализации одномерных или двумерных данных. Под одномерными (1D) данными я подразумеваю отображение одного одномерного множества на другое, например функциональную зависимость y = sin(x). Под двумерными (2D) данными я подразумеваю отображение двумерного множества на одно- или двумерное, например функциональную зависимость z = x*x + y*y или векторно-значную функцию заданную на плоскости. На мой взгляд, именно визуализация одно- и двумерных данных — самая распространённая задача.

Программы, ориентированные в первую очередь на визуализацию многомерных данных, из сравнения исключены. Однако упоминания все эти программы вполне заслуживают: OpenDX, VTK, MayaVi, Vis5D+. Всё это интересная, но уже совсем другая история. Так же в сравнении не учавствовали программы для построения графов и для других, экзотичных, способов визуализации. Из них стоит упомянуть graphviz и prefuse.

Итак, в сравнении учавствовалии:
  • gnuplot — ветеран отрасли, поэтому с ним знакомы и умеют работать почти все, кому нужны графики; я сам пользуюсь им с удовольствием, поскольку с помощью всего одной-двух коротких команд можно сносно отобразить данные;
  • Gri — менее известный проект, фактически язык программирования для рисования научных графиков; изначально активно использовался для представления географической информации, поэтому здесь полный порядок с изолиниями и цветовыми картами;
  • matplotlib — сравнительно молодой, но богатый возможностями и активно развивающийся проект, является библиотекой для языка Python; особенность matplotlib — синтаксис, приближенный к MATLAB; отсюда и второе название проекта: pylab;
  • PyX — другой пакет для визуализации с помощью Python; выбор между matplotlib и PyX во многом дело вкуса, но надо отметить, что некоторые вещи естественнее делать в одном, а другие — в другом (см. таблицу);
  • Tioga — библиотека для языка Ruby, использующая PDFLaTeX для отрисовки графиков; как следствие — радующий глаз качественный результат, но достаточно крутая кривая обучения (кроме освоения Ruby потребуется разобраться с самой тиогой);
  • Ctioga — та же самая Tioga для тех, кто хочет сейчас и сразу; параметры графика задаются из командной строки, а для его рисования уже используется Tioga; к сожалению, годится Ctioga только для одномерных данных, но для них вполне может заменить gnuplot;
  • GNU plotutils — они же утилитка graph; лично я нахожу её интерфейс менее интуитивным и удобным для работы, а возможности более ограниченными, чем у других программ; однако входящая в тот же пакет библиотека libplot может быть интересна с точки зрения написания своих программ для построения графиков;
  • plotmtv — далеко не новый проект, и, как мне кажется, находящийся в стагнации; отлично справляется с двумерными скалярными и векторными данными; основной недостаток: команды для построения графиков необходимо внедрять в файлы с данными; зато, если файлы в формате plotmtv уже есть, строить графики просто, качество весьма приличное, а основные параметры графика можно поменять и с помощью графического интерфейса;
  • Grace — единственная программа из рассмотренных, в которой можно полностью контроллировать построение графиков с помощью графического интерфейса; к сожалению, именно поэтому мне до сих пор не удалось с ней подружиться; возможности у неё весьма приличные, но годится она для визуализации только одномерных данных;
Надо сразу сказать, что у каждой программы есть свои сильные и слабые стороны. Поэтому выбор подходящей программы — это вопрос, который каждый должен решать сам. Выбор зависит от того, какие данные и в каком формате имеются, какие графики хочется получить, насколько высоки оформительские требования, насколько быстро нужно получить графики и в каком количестве их строить... Приведённая ниже сравнительная таблица должна в этом помочь. Для начала советую обратить внимание на примеры (ссылки на галереи с примерами в таблице), они быстро дадут представление о том, на что эти программы способны.

Я лично пользовался и пользуюсь gnuplot, Gri, matplotlib, Tioga и Ctioga — и доволен каждой из них. Если нужно отрисовать что-то быстро (для себя) — обычно gnuplot, Gri или Ctioga мой выбор. Gnuplot также использую, если нужно отрисовать поверхность уровня. Если нужно рисовать изолинии или цветовые карты по двумерным данным, лучше всего с этим справляются Gri и Tioga. Это может делать и matplotlib, но с ней я познакомился сравнительно недавно и использовал пока что только для разных диаграмм.

В сравнение, наверное, можно было бы также добавить программы Kchart и SciGraphica. К сожалению, эти программы я лично не использовал ни разу, и судить о них не могу. Буду рад добавить информацию и по ним, если ей располагает кто-то из читателей.

Сравнительная таблица доступна онлайн на Google Docs, и прямо здесь (правда, придётся использовать прокрутку):



Смотрите также:

Как построить график с изолиниями в gnuplot, gri и pylab
Как строить цветные поверхности в gnuplot в режиме pm3d
Как отрисовывать географические карты и отображать на них данные с помощью GMT

20070926

Интеграция Vim и Subversion (SVN)

Сегодня попробовал плагин svncommand для vim-а. Позволяет выполнять команды SVN не выходя из редактора. Так, раньше я редактировал файлы рабочей копии, потом нажимал Ctrl-Z, набирал в коммандной строке что-нибудь вроде svn diff | vim - чтобы посмотреть, что изменилось, запоминал имена файлов, выходил (:q!) и делал один или несколько раз svn commit и вновь возвращался в редактор (fg).

Теперь можно редактируя файл сразу посмотреть изменения относительно его версии в SVN нажав \sd или набрав :SVNDiff. Чтобы посмотреть изменения для всего каталога — открыть каталог (:e .) и опять \sd. Чтобы отправить изменения текущего файла в репозиторий (закоммитить) — \sc или :SVNCommit. Буфер для ввода комментария открывается автоматически. Точно также добавить новый файл можно с помощью \sa (:SVNAdd), а откатиться к версии из репозитория — с помощью \sr (:SVNRevert). Первое впечатление — это довольно удобно.

Для установки плагина достаточно поместить файл svncommand.vim в ~/.vim/plugins, а svn.vim и svnlog.vim в ~/.vim/syntax.

P.S. Комбинации клавиш svncommand.vim у меня частично совпали с комбинациями клавиш для другого используемого плагина — SpellChecker.vim, который проверяет орфографию. Так что я в конечном итоге подправил свой svncommand.vim, заменив все сочетания вида \sбуква на \vбуква.

P.P.S. Уже написав эту заметку наткнулся на плагин vcscommand.vim. Он, похоже, делает то же самое, поддерживая CVS, SVN и SVK, и судя по всему более свежий.

20070919

OpenID в Blogger

2008-11-26: Данная заметка частично устарела. Поддержка OpenID доступна теперь всем пользователям Blogger и не требует специальной настройки. Просто используйте стандартный шаблон и адрес своего блога в качестве OpenID. И всё.

2010-09-15: Теперь проще всего в качестве OpenID использовать страницу гугло-профиля. Достаточно создать профиль и выбрать ему URL.

Нашёл заметку, как можно использовать OpenID в blogger (ну и, в общем, на любом другом сайте). А с OpenID можно постить и в ЖЖ, и во многих независимых блогах, а также пользоваться другими сервисами, не регистрируясь на каждом из них отдельно (например, RUmarkz и Zooomr поддерживают OpenID).

Инструкция такая:

  1. Получить OpenID, например на одном из бесплатных OpenID-сервисов. Можно, например, воспользоваться pip.versignlabs.com или www.myopenid.com. Или ЖЖ, или moikrug.ru.
  2. Добавить в шаблон блога (или в шаблон сайта), в head
    <link rel="openid.server" href="http://pip.verisignlabs.com/server" />
    <link rel="openid.delegate" href="http://логин.pip.verisignlabs.com/" />
    где логин — логин на pip.versignlabs.com в данном случае. Если у вас уже есть учетная запись пользователь в LiveJournal, то можно вставить вместо этого
    <link rel="openid.server" href="http://www.livejournal.com/openid/server.bml" />
    <link rel="openid.delegate" href="http://пользователь.livejournal.com/" />


  3. Всё, можно пользоваться. И указывать адрес своего блога в качестве OpenID. Запрос будет перенапрявляться выбранному OpenID-сервису (в который, предварительно, конечно нужно залогиниться).


 

Другой способ: использование OpenID самого Blogger
(добавлено 07.02.2008)



В январе Blogger разрешил подписывать комментарии с помощью OpenID, а затем и сам стал полноценным OpenID-провайдером. Это значит, что теперь можно не делегировать аутентификацию стороннему провайдеру (например, ЖЖ), а пользоваться сервисом Google. Вероятно это будет работать лучше, чем делегация, которую не всегда корректно обрабатывают, например, некоторые основанные на Wordpress блоги…

Возможность эта пока экспериментальная, но, вроде, работает. Я следовал вот этой инструкции на английском языке.

Порядок такой:

  1. Идём по вот этой ссылке и редактируем свой профиль, используя экспериментальный интерфейс (в общедоступном интерфейсе этой функции ещё нет). В разделе Privacy включаем «Enable OpenID for blogs»*.
  2. В шаблон блога, в раздел <head> вставляем:
    <link rel="openid.server" href="http://draft.blogger.com/openid-server.g" />

Сделал, попробовал, вроде работает (не везде, не срабатывает во многих wordpress-блогах, буду разбираться; есть подозрение, что это связано с тем, что blogger заменяет двойные кавычки в шаблоне на одиночные, а может быть это просто баг плагина для wordpress).

Дополнение: возможно, кому-то будет интересно узнать, откуда все эти «rel="openid.server"» берутся; вот ссылки на спецификации: Transforming an HTML document Into an Identifier (OpenID 1.1) и HTML-based discovery (OpenID 2.0).

*) Дополнение 2008-10-25: Прошёл год. Похоже, OpenID в Blogger вышел из экспериментальной стадии. Теперь его не надо включать в экспериментальном профиле пользователя, но есть вкладка «OpenID» в найстройках блога, а в шаблонах новосозданных блогов уже есть строчка <link rel="openid.server" href="http://www.blogger.com/openid-server.g" />. Так что если вы начали пользоваться Blogger недавно, то скорее всего всё уже и так работает. Пропробовать работу OpenID можно здесь.

20070912

Как выглядит новая система закладок Firefox

Появились «скриншоты» будущей новой системы закладок Firefox, placesOrganizer. Выглядит многообещающе. В общем, наконец, удобный поиск, возможность присваивать закладкам метки-теги, а в перспективе и будут создаваться и мини-скриншоты страниц, на которые указывают закладки.

Preview of new Firefox3 bookmarking system


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

20070907

Учебник: LaTeX, GNU/Linux и русский стиль

На днях попалась ссылка на цикл статей Е. М. Балдина «LaTeX, GNU/Linux и русский стиль». Статьи были написаны им для журнала Linux Format. По соглашению с редакцией, они теперь доступны и онлайн в PDF формате. Фактически, это книга-учебник по LaTeX (автор особо подчёркивает, что это ещё не книга, но по качеству текст близок к ней).

Думаю, этот материал будет полезен и тем, кто только начинает разбираться с LaTeX, и тем, кто уже давно им пользуется. Я, например, нашёл немало интересного в статье, посвящённой написанию компьютерной документации в LaTeX.

А для тех, у кого времени читать длинные тексты нет, а нужно просто писать — я даю ссылку на моё любимое наглядное пособие К. В. Воронцова «LaTeX2ε в примерах». Очень доходчиво.

20070906

Звук во Flash-роликах в Firefox/Iceweasel

Знакомый попросил помочь: чтобы при просмотре Flash-роликов в Iceweasel работал звук и при одновременном включенном и поставленном на паузу музыкальном плеере. Сам я пользуюсь Epiphany, и в ней у меня и так звук работает без проблем. Попробовал запустить Flash-ролик в Iceweasel — и правда нет звука!

Решение такое:
  • использовать звуковые драйвера ALSA
  • устанавить «переходник» alsa-oss
  • в /etc/iceweasel/iceweaselrc (или ~/.mozilla/firefox/rc) указать
    # which /dev/dsp wrapper to use
    ICEWEASEL_DSP="aoss"
После этого звук флэш-роликов в Iceweasel нормально воспроизводится, и другие приложения ему не мешают. Данное поведение документировано в /usr/share/doc/iceweasel/README.Debian. Для firefox, всё, естественно, аналогично с точностью до названия.

20070905

formula2png: как сделать картинку с формулой

Набирать математические формулы в LaTeX легко. Получается в результате документ PDF или PS. А вот что делать, если нужно показать одну-две формулы на веб-странице? Самый простой (и работающий везде) способ: поместить на сайт картинку, на которой и будет формула. Этот пост, рассказывает, как можно быстро делать такие картинки.

Дополнение: несколько ещё более лёгких способов поместить формулу в блоге или на форуме перечислено здесь.


Для этого, кроме LaTeX, Ghostscript и Netpbm потребуется скрипт textogif Джона Уокера. Вот прямая ссылка на textogif_1.1.tar.gz.

К этому скрипту я использую вот такую обвязку, чтобы не создавать файл TeX каждый раз вручную: formula2png. Обвязка создаёт файл LaTeX, в который и помещает нужную формулу, и скармливает этот файл textogif. Использую я её так:
$ formula2png imagename formula
Например:
$ formula2png schröd 'i\hbar\frac{\partial}{\partial t}\psi=-\frac{\hbar^2}{2m}\nabla^2\psi + V\psi'
После этого в текущем каталоге у меня появляется файл schröd.png с прозрачным фоном.

Schrödinger equation: i\hbar\frac{\partial}{\partial t}\psi=-\frac{\hbar^2}{2m}\nabla^2\psi + V\psi

В данном случае формула набрана 12 пунктом, и изображение отрисовано из расчёта на разрешение 120 dpi. Эти параметры, а также уровень серого для фона, на котором предполагается размещать формулу, задаются в параметрах textogif (см. примеры внутри formula2png).

Другой способ размещения формул на веб-страницах — MathML, но он работает не со всеми браузерами и сложнее в использовании. Есть ещё конвертеры, вроде latex2html, но для одной–двух формул — они «тяжеловаты».

20070830

Веб-сервер в одну строчку: версия 2.1

Алексей Свешников опубликовал в своём блоге пример веб-сервера, занимающего одну строчку на bash. Очень меня этой безделушкой порадовал. Красиво!

Однако его «сервер» у меня не заработал :)

Если запрос слать телнетом, то вроде что-то шлёт в ответ, а если запрашивать браузером или wget — нет. Пишется: ««127.0.0.1» разорвал соединение».

У меня возникло подозрение, что это из-за того, что скрипт начинает отвечать, не дождавшись конца HTTP запроса (а должен читать заголовки запроса до пустой строки). Я это исправил и wget заработал.

Также, при выдаче каталога хорошо бы отдавать Content-Type, подумал я. Например, без верного Content-Type wget сохраняет пустой файл.

И честно говорить, что это HTTP/1.0. Или поставить HTTP/1.1 и добавить Connection: close. (HTTP/1.1 applications that do not support persistent connections MUST include the "close" connection option in every message. —RFC2616)

Потом ещё я увидел, что символы перевода строк где-то «защищаются» bash. А именно во время вывода echo. Приходят литералы «\n» вместо кодов CRLF. А положено, чтобы шли именно CRLF. И заголовок ответа также должен заканчиваться пустой строкой.

В общем, вот мой вариант (эта версия у меня работает и с браузером, и с wget):

true; while [ $? -eq 0 ];do nc -vlp 8080 -c'(r=read;e=echo;$r a b c;E=NOTYET;while [ ${#E} -gt 0 ];do $r E;E=`$e $E|tr -d "\r\n"`;done;f=`$e $b|sed 's/[^a-z0-9_.-]//gi'`;h="HTTP/1.0";o="$h 200 OK\r\n";c="Content";if [ -z $f ];then($e -e $o;ls|(while $r n;do if test -f ${n}; then $e "<a href=\"/$n\">$n</a><br>";fi;done););elif [ -f $f ];then $e -e "$o$c-Type: `file -ib $f`\n$c-Length: `stat -c%s $f`\n";cat $f;else $e -e "$h 404 Not Found\n\n404\n";fi)';done


Эта версия ещё и скрывает подкаталоги текущего каталога, показывая только файлы. Набирать одной строчкой и смотреть результаты на 127.0.0.1:8080.

20070827

TiddlyWiki: персональный вики-блокнот

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

*С TiddlyWiki умеют работать Firefox и другие основанные на Gecko, а также Opera**, IE, Safari**, Camino. А вот в Konqueror не работает редактирование.


Применений множество. Во-первых, это удобно использовать для разных записей, например в качестве личного органайзера, ведь при этом есть возможность связывать записи вики-ссылками. Во-вторых, если потом этот файл выложить на любой веб-сервер как статическую страницу, то она превращается в полноценный вики-сайт. С поиском, тегами, AJAX-подобным интерфейсом и прочими вкусностями. Впрочем, при доступе к странице по HTTP редактирование недоступно. Это всё таки персональная вики.

Однако проще один раз увидеть, чем сто раз услышать. Но ещё лучше попробовать (см. ниже). Посмотрите также на ссылки в конце этого поста, если интересно увидеть, как по-разному может выглядеть TiddlyWiki.

На мой взгляд, TiddlyWiki может быть удачной заменой таким приложениям как Tomboy или Zim. В прошлом я пользовался Tomboy, и TiddlyWiki удовлетворяет меня гораздо больше: она быстрее и отзывчивее, она кроссплатформенна, набор заметок и навигация по ним удобнее, и в добавок файл TiddlyWiki всегда можно выложить в веб :)

Ещё одно возможное применение: ведение дневника-блога. Этому помогает функция датированных записей и встроенная поддержка RSS.

Преимущества TiddlyWiki

Итак, я вижу следующие преимущества TiddlyWiki:
  • Переносимость. Ведь все данные и сама программа находятся в одном файле. Его можно поместить на флэшку и иметь доступ к своим записям где бы вы ни оказались. Это большое преимущество перед традиционными программами для ведения записей, которые требуют установки.
  • Кроссплатформенность. Для работы с ней достаточно браузера. И неважно, какая операционная система у вас стоит.
  • Быстрый запуск. Ведь веб-браузер и так почти всегда открыт :) Для приложения, предназначенного для коротких быстрых записей это существенно.
  • Удобный ввод данных. Богатый набор средств разметки. Ненавязчивый интерфейс.
  • Удобство навигации по записям: поиск, теги, возможность выбирать какие записи видны на экране.
  • Формат данных максимально приближен к plain-text. При желании всегда можно отредактировать в обычном текстовом редакторе. При этом, благодаря вики-разметке, записи остаются наглядными и читаемыми.
  • TiddlyWiki является свободным программным обеспечением с очень активным сообществом. Действительно, попробовав, наверное, нельзя в эту программку не влюбиться. Как результат: есть много модов, плагинов и тому подобных вещей.

С чего начать

Инструкция по «установке» следующая:
  1. Пойти на http://www.tiddlywiki.com/#DownloadSoftware и скачать пустой файл вики.
  2. (Необязательно) Пойти на http://glebsite.ru/tw/ и следуя приведённым там инструкциям установить модуль русификаци написанный Глебом Тржемецким (спасибо!)
  3. (Необязательно) По аналогии с установкой модуля русификации можно установить другие модули с других TW-сайтов, например, панельку инструментов wikibar c http://aiddlywiki.sourceforge.net/wikibar_demo_2.html
Для тех, кому лень проделывать все эти шаги самостоятельно, я выложил уже готовые русифицированные шаблоны TiddlyWiki. Они дополнены также небольшой справкой по вики-разметке. Мне её не хватало в умолчальном «пустом» шаблоне. Поэтому для близких и друзей я её написал.

Вот мои шаблоны:
empty-ru.html — базовая TW + русификация + ReminderMacros + справка по вики-разметке
empty-ru-wikibar.html — базовая TW + русификация + ReminderMacros + справка по вики-разметке + wikibar

Впрочем, если времени с момента написания этого поста (август 2007) до момента, когда вы его читаете, прошло немало, лучше пойти на www.tiddlywiki.com и взять последнюю версию оттуда. Кстати, там же есть и инструкция как обновлять код TW с сохранением данных.

Внимание! При сохранении важно использовать вариант «Сохранить ссылку как...» в контекстном меню при правом щелчке мыши по ссылке. Другие варианты могут не работать. Вариант wget URL тоже приемлим.

После этого сохранённый файл можно открывать в браузере и начинать редактировать. Первая запись, которая будет открыта называется GettingStarted. В ней можно задать своё имя и перейти к специальным записям SiteTitle и SiteSubtitle задающим название вашей вики. Ну а дальше на ваше усмотрение. Полезно также заглянуть в раздел «Установки» («Options») справа. После сеанса редактирования вики не забудьте нажать ссылку «Сохранить изменения» или ALT+S (впрочем, браузер вам напомнит, если что). При попытке сохранить файл на диск, браузер вероятно попросит разрешения на диск писать (обычно у него такого права нет, так что это нормально).

При записи создаётся файл с резервной копией (предыдущей версией). Обычно она отличается от имени файла вики добавление большого количества цифр в конце. Я, чтобы появление этих файлов не отвлекало, поставил в настройках сохранять резервные копии в каталог .mywiki.backup.

Миграция записей Tomboy

До TiddlyWiki я пользовался (пытался пользоваться) Tomboy. Милое приложение, только несколько медленное. И не всегда было легко добиться, чтобы создавалась нужная ссылка. И как-то совсем перестало работать, потому что во время одного из distupgrade-ов сломалось Mono, точнее что-то, от чего оно где-то глубоко внутри зависит... В общем, как и с некоторыми другими Mono-приложениями*, Tomboy у меня был, а теперь его нет. Однако после него остались записи.

*В числе других Mono-приложений, от которых я отказался: F-Spot (хотя я однажды и дождался, когда он проиндексирует мой фотоархив, работал медленно, пользоваться тегами было неудобно, а функции редактирования в нём меня после Picasa только расстраивали) и Beagle (поиск это конечно здорово, но не очень-то быстро, и самое главное, что ищет далеко не всё, а это делает его несколько бесполезным). Так что из всех Mono-приложений пользуюсь только autopano-sift.

Для конвертации записей Tomboy в TiddlyWiki я написал маленький скрипт tomboy2tiddly, описание и инструкции к нему здесь. Скрипт сохраняет гиперссылки в записях Tomboy и преобразует их в вики-ссылки, но все выделения шрифтом игнорируются. Для работы скрипта нужен xmlstarlet и python.

Скорость работы

В отличие от того же Tomboy, которых хранит каждую запись в отдельном файле, здесь все записи хранятся в одном файле, и обрабатываются JavaScript. Поэтому наверное при очень большом количестве записей TiddlyWiki будет работать медленнее.

Я провёл следующий эксперимент: взял свою вики с несколькими десятками записей, открыл в vim, и вставил 1001 короткую запись со случайным названием и содержимым (формат записи довольно простой). После этого полученный файл, который увеличился примерно на 100 кБ, открыл в браузере. Результат такой: время открытия файла увеличилось, файл открывался около 2 секунд, но скорость работы с вики осталась субъективно такой же (мои записи среди этой кучи мусора открывались так же быстро и изменение-сохранение записей никак не пострадало). Надо отметить, что генерировались эти 1001 запись куда дольше ;)

Мне кажется это неплохой результат. Во всяком случае, для личного вики-блокнота этого вполне достаточно. И после загрузки, в отличие от того же Tomboy, время отклика зато гораздо меньше.

Ссылки по теме

В заключение хочу дать ссылки на сайты с разными расширениями для TiddlyWiki и её модами (большинство из них сделаны, кстати, на самой TW):
  • Список разных модификаций и вариантов есть как обычно на Wikipedia
  • mptw.tiddlyspot.com MonkeyPirateTiddlyWiki, популярная модификация с изменённой системой тегов
  • www.tiddlytools.com большой архив расширений, тем и прочего добра
  • tw.lewcid.org ещё один репозиторий с расширениями для TW
  • tiddlywiki.abego-software.de и ещё один архив...
  • tiddlythemes.com архив тем для TiddlyWiki
Есть также возможность пользоваться TiddlyWiki онлайн, для этого есть как минимум два сервиса. В этом случае вики находится на сервере, но её всегда можно скачать на локальный диск, и потом синхронизировать обратно:
Стоит также отдельно отметить сайт сообщества разработчиков www.tiddlywiki.org и очень активную гугл-группу, посвящённую обсуждению TiddlyWiki.

Приятных записей!

Обновления: упомянул о поддержке RSS и поставил ссылку на гугл-группу.

Обновление 7.9.2007
**В комментариях отметили, что в Opera 9 не работает сохранение. Я установил Оперу, попробовал — действительно. Впрочем, в Google-группе TiddlyWiki объясняется в чём дело (Javascript в Opera в принципе не может писать на локальный жёсткий диск) и предложено решение проблемы. Сохранять TiddlyWiki в Opera (и Safari) можно с помощью Java-апплета TiddlySaver, помещённого туда же, где находится файл TiddlyWiki. Конечно, в этом случае требуется, чтобы в Opera была включена Java, а в ~/.java.policy было добавлено разрешение на запись файлов
grant codeBase "file:${user.home}/text/wiki/*" {
permission java.io.FilePermission "${user.home}${/}text${/}wiki${/}*", "read,write";
};

Skype читает профиль Firefox, /etc/passwd и разные другие файлы из /etc

На слэшдоте появилась заметка, в которой сообщается, что Skype читает файл /etc/passwd, файлы профиля Firefox (включая настройки плагинов и аддонов), и ещё разные файлы в /etc. Заметили это при использовании AppArmour, запуски Skype с strace информацию подтвердили. Соответственно вот тема на форуме Skype. Замечены в этом версии 1.4.0.94 и 1.4.0.99.

Хотя в Debian и большинстве современных дистрибутивов пароли пользователей больше не хранятся в /etc/passwd (хранятся они в /etc/shadow), доступ Skype к такому количеству настроек системы и приватных данных вызывает беспокойство. Во всяком случае доступ к профилям Firefox мне кажется не меньшим злом. Что с этими данными делает Skype — неизвестно.

Вообще говоря, шпионского модуля в Skype исключать нельзя. В частности, народ отмечает что Skype идеальный вариант для внедрения шпионского модуля спецслужбами (АНБ):
- он установлен на большинстве машин
- он хорошо защищён от декомпиляции/дебага
- он умеет обходить фаерволы
- сетевой трафик Skype шифруется
- он может передавать большие объёмы данных даже если звонок не совершается
- eBay (владелец Skype) уже были замечены в сотрудничестве со спецслужбами

Похоже, запускать Skype желательно исключительно в «песочнице», откуда ему ничего не доступно. Или вообще пользоваться альтернативами с открытым исходным кодом. Когда, кстати, libjingle заработает?

20070824

Планы: о чём я хочу написать

«Мне нужно так много сказать, а времени так мало...»

Я составил список тем, на которые мне бы хотелось написать в этом блоге. Возможно, кому-то какие-то из них представляются более интересны, чем другие. В таком случае, укажите в комментариях, что именно из этого представляет бОльший интерес. Я постараюсь это учесть :)

Итак, темы следующие:
  • Работа с текстом, инструментарий
    • слияние изменений между файлами (merge)
    • моё приглашение коммандной строки PS1
    • 10 любимых инструментов (coreutils)
    • человеколюбивые языки разметки текста (asciidoc, markdown)
    • использование svn для контроля изменений, бесплатные svn-площадки
    • vim (тема обширная, почти бесконечная)
    • использование tiddlywiki в качестве записной книжки (замена tomboy)
  • Графика, фото
    • панорамы в autopanosift+hugin+enblend
    • создаёт изображения расширенного динамического диапазона HDR (cinepaint)
    • создание картинок с текстом (email-on-a-pic) (convert)
  • Интернет
    • epiphany — система закладок основанная на тегах, умные закладки
    • epiphany — представление закладок в виде облака тегов (мой скрипт)
    • оффлайн генераторы сайтов (ikiwiki, m4html, микроблоги)
    • как сохранять вещание интернет-радиостанций в файл
  • Debian, Linux, администрирование системы
    • как отправлять отчёты об ошибках
    • apt-listbugs
    • настройки esmtp (упрощённый MTA)
    • настройка/изменение раскладок клавиатуры на лету с помощью setxkbmap
  • Визуализация данных
    • GRI
    • Tioga и ctioga
    • gnuplot (классика)
    • OpenDX
  • Численные расчеты, программирование
    • FiPy — библиотека для метода конечных объёмов для Python
    • использование screen на удалённых машинах
    • обзор матричных библиотек для C++
    • Blitz++

20070823

vnstat: простая программа для подсчёта трафика

Часто оплата интернета напрямую зависит от количества переданных данных, проще говоря трафика. Особенно это характер для доступа в интернет через мобильный телефон (GPRS, EDGE, UMTS...).

Скажем, я сейчас пользуюсь тарифным планом, предполагающим оплату 20€ за пакет 500 МБ, однако после превыщения указанного предела, услуга не прерывается, но стоимость доступа в Интернет незаметно меняется: просто каждый мегабайт стоит уже около 6€. В общем, жуть. Понятно, что я заинтересован чётко отслеживать израсходованный мной трафик. Подобных ситуаций можно привести ещё много.

Подсчёт трафика в Linux дело несложное. Каждый может настроить iptables как ему угодно, написать свои скрипты, сохранять статистику в базе данных... Можно использовать готовые решения, вроде ntop. Однако для моих целей мне всё это показалось слишком сложным.

И я нашёл очень простой инструмент для учёта трафика: vnstat. Он, кстати, есть в репозиториях Debian, так что установка не представляет сложностей. Она практически не требует настройки, просто считает трафик и позволяет смотреть статистику. Думаю, для «домашнего» использования этого более чем достаточно.

Трафик считается отдельно для каждого сетевого устройства (интерфейса). Чтобы начать подсчёт трафика на том или ином интерфейсе, например ppp0 (в моём случае это подключение через мобильный телефон), надо выполнить следующую команду, которая создаст базу данных для этого интерфейса:

vnstat -u -i ppp0


В случае Debian включается и отключается подсчёт трафика автоматически при включении или выключении сетевого устройства (это можно делать также вручную).

И всё! Теперь весь трафик будет учтён!

Чтобы узнать суммарную статистику по трафику через интерфейс ppp0, достаточно выполнить следующую команду:

$ vnstat -i ppp0
Database updated: Thu Aug 23 22:00:01 2007

ppp0

received: 354.63 MB (76.6%)
transmitted: 108.14 MB (23.4%)
total: 462.77 MB

rx | tx | total
-----------------------+------------+-----------
yesterday 18.58 MB | 3.31 MB | 21.89 MB
today 39.39 MB | 6.28 MB | 45.68 MB
-----------------------+------------+-----------
estimated 42 MB | 6 MB | 48 MB


Как легко видеть, у меня в запасе до ограничения в 500 МБ ещё около 40 МБ. На этот пост точно хватит.

Дополнение: доступны и другие формы отчётов (см. man vnstat). Например, для просмотра использования трафика по месяцам:
$ vnstat -i интерфейс -m

по неделям:
$ vnstat -i интерфейс -w

по дням:
$ vnstat -i интерфейс -d

по часам:
$ vnstat -i интерфейс -h

и, наконец, для желающих формировать собственные отчёты, может пригодится
$ vnstat -i интерфейс  --dumpdb


Если же возникнет желание стереть (сбросить) всю собранную статистику и начать отсчёт с нуля, то, на мой взгляд, самый простой способ это сделать:
  1. остановить подсчёт статистики для используемого интерфейса:
    vnstat -i интерфейс -u -r --disable

  2. удалить базу данных с собранной статистики (файл /var/lib/vnstat/интерфейс)

  3. создать новую базу данных с помощью
    vnstat -u -i интерфейс
    и радоваться начатой заново жизни

20070719

Заработался...

Сегодня вообще дал... написал со всей дури rm -rf ~ и второпях (вот именно после ~) ткнул Enter (это типа удалить весь домашний каталог с потрохами не задавая дурацких вопросов)...


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


По результатам изучения того, что осталось, удалены некоторые дотфайлы, вроде .bashrc, и настройки рабочего стола Гнома, настройки Iceweasel... Архивы почты целы, рабочие папки целы, коллекции статей, фото и музыки целы. Ну и всё действительно ценное лежит в SVN :) Даже набор закладок в Epiphany остался.


Так что доставать бекапы, видимо, не потребуется... А могло быть хуже.



Ghostscript: преобразование цветного PDF в чернобелое изображение

Некоторые журналы требуют предоставлять наряду с цветными иллюстрациями их черно-белые эквиваленты (чтобы не мучатся самим с конвертацией цветов). А мне нравится рисовать цветные PDF... (с помощью PGF).

$ gs -dNOPAUSE -dBATCH -sDEVICE=pnggray -r600x600 -sOutputFile=greyscale.png colourful.pdf

-sDEVICE=epswrite и -sDEVICE=pdfwrite должны давать PDF и EPS на выходе, но в этом случае я пока не разобрался, как преобразовать цвета. По идее -sProcessColorModel=DeviceGray должно работать, но пока не выхоидт.

Впрочем, PNG можно включать напрямую в текст, обрабатываемый PDFLaTeX, а разрешение можно всегда задать более чем достаточное... (600 dpi в моём примере)

LaTeX: как создать собственный стиль BiBTeX

Пользователи LaTeX знают, что отформатировать библиографию в статье в соответствии с требованиями журнала очень просто с помощью программы BibTeX. Если есть файл, описывающий стиль форматирования библиографии.

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

К счастью, создать собственный стиль BibTeX, удовлетворяющий заданным требованиям, легко может каждый с помощью программы makebst.tex. В моей установке LaTeX её можно запустить вот так:
$ latex /usr/share/texmf-texlive/tex/latex/custom-bib/makebst.tex
Далее в качестве исходного файла указываем merlin, задаём имя файла для своего стиля, например, mystyle, и терпеливо отвечаем на все вопросы (их будет много), полученный файл mystyle.bst копируем в каталог со статьёй и используем:
\bibliographystyle{mystyle}
\bibliography{bibfile}

LaTeX: как включить-выключить нумерацию страниц

Включение–выключение нумерации страниц в LaTeX делается вот так:
\pagestyle{empty} % нумерация выкл.
\pagestyle{plain} % нумерация вкл.

Большего можно достичь, если использовать пакет fancyhdr.

Установить стиль нумерации для отдельной страницы можно командой
\thispagestyle{стиль}

Начать нумерацию с другого номера:
\setcounter{page}{3} % начать нумерацию с номера три

20070710

Ввод символов с акцентами в Linux

В Linux (точнее в X Window System) есть потрясающее средство для ввода символов отсутствующих в установленной раскладке клавиатуры. Это средство называется клавиша Compose. С помощью неё можно вводить практически все варианты символов с акцентами, а также разные специальные символы.

Включить клавишу Compose можно там же, где Вы настраиваете клавиатуру, то есть или в /etc/X11/xorg.conf, или в настройках клавиатуры рабочего стола. Я удовлетворяюсь настройками клавиатуры Gnome. Там я «повесил» функцию Compose на клавишу Menu:



Включить клавишу Compose можно также используя setxkbmap. Следующая команда включает две раскладки (us и ru-winkeys), переключаемые по Alt+Shift, с клавишей Compose на месте правого Alt:
$ setxkbmap -layout us,ru -variant ',winkeys' -option 'grp:alt_shift_toggle,grp_led:scroll,compose:ralt'


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

Compose + O + C даёт © (символ авторского права),
Compose + O + R даёт ®,
Compose + = + e даёт (знак евро),
Copmose + = + y даёт ¥ (знак йены),
Compose + - + - + - даёт (тире, знак препинания),
Compose + - + - + . даёт –­ (короткое тире, разделитель диапазонов и фамилий)
Compose + < + < даёт « (левую кавычку-ёлочку),
Compose + > + > даёт » (правую кавычку-ёлочку),
Compose + " + , даёт (левую кавычку-лапку),
Compose + " + < даёт (правую кавычку-лапку),
Compose + пробел + пробел даёт неразрывный пробел.

С клавишей Compose очень легко набирать акценты и особые буквы европейских алфавитов, которые отсутствуют в моей обычной раскладке клавиатуры, но иногда нужны:
Compose + ' + a = á,
Compose + ` + a = à,
Compose + ^ + a = â,
Compose + " + a = ä,
Compose + ~ + a = ã,
Compose + * + a = å,
Compose + a + e = æ,
Copmose + s + s = ß.

Понятно, что вместо буквы «a» в примерах можно подставлять другие буквы. Любопытствующие могут взглянуть полный список Compose-последовательностей.

Если же вы пользуетесь преимущестенно GTK-приложениями, то установив метод ввода Latin Plus, вы заметно расширите возможности этой волшебной клавиши. Вам станет доступен весь греческий алфавит, цифры в виде верхних и нижних индексов, знаки математических отношений, всевозможные стрелки и другие полезные символы... ♥!
Дополнение: всё оказалось гораздо проще, и использовать Latin Plus не обязательно, см. мою заметку про то, как настроить свои Compose-последовательности.


Конечно, это не сравнится по возможностям с LaTeX, но зато эти символы можно использовать где угодно: в письмах, при наборе текста в веб, в простом тексте, ведь они входят во все стандартные unicode-шрифты.

Дополнение: в настоящий момент Compose-последовательности GTK-приложений отличаются от Compose-последовательностей, предоставляемых X.org. Поэтому в разных приложениях возможно немного разное поведение клавиши Compose. В качестве решения проблемы переключить используемый метод ввода в GTK на обычный иксовый X Input Method, см. пост про настройку Compose.

Дополнение 2: пользователи Windows могут насладиться удобством Compose–последовательнстей, установив программку AllChars.

Дополнение 3: существует лёгкий способ задавать и настраивать произвольные Compose-последовательности, редактируя файл ~/.XCompose.

20070706

Русский PDF в LaTeX

Уже достаточно давно практически все тексты, включая презентации, создаваемые в LaTeX я собираю в формат PDF. Он много меньше размером, чем Postscript, позволяет осуществлять поиск по тексту, позволяет включать изображения в формате PNG или JPG, а также делать гиперссылки, встроенное оглавление и многое другое. И самое главное, программы для просмотра PDF распространены гораздо более, чем программы для просмотра PS.

Однако для создания PDF с русскими буквами средствами LaTeX требуются некоторые ухищрения.

Во-первых, в этом случае надо использовать пакет cmap, иначе поиск по русским символам в полученном PDF будет невозможен.


Во-вторых, пакет для работы с графикой graphicx следует подключать с включенной опцией pdftex.

В-третьих, совсем невредно указать pdfTeX-у, что полученный PDF можно и ужать, для этого я устанавливаю переменную \pdfcompresslevel=9.

В-четвертых, я добавляю условный код, который делает всё вышеуказанное только если действительно используется pdfTeX, и использует другие пакеты и настройки, в случае если создаётся DVI/PS.

Ну и наконец, уж раз создаётся документ на русском языке, надо указать кодировку документа, правила расстановки переносов и кодировку шрифтов.
% до \documentclass
\newif\ifpdf
\ifx\pdfoutput\undefined
\pdffalse % pdfLaTeX не используется
\else
\pdfoutput=1 % используется PDFLaTeX
\pdftrue
\fi

% в преамбуле
\usepackage[cp1251]{inputenc} % CP1251 или другая кодировка, с UTF8 не дружит bibTeX
\usepackage[russian]{babel} % правила переноса
...
\ifpdf
\usepackage{cmap} % чтобы работал поиск по PDF
\usepackage[pdftex]{graphicx}
\pdfcompresslevel=9 % сжимать PDF
\else
\usepackage{graphicx}
\fi


После этого полученный файл можно обрабатывать и обычным latex, и pdflatex, который будет сразу создавать PDF. Для просмотра PDF я обычно пользуюсь evince или xpdf, поскольку эти программы позволяют обновлять файл не меняя открытую страницу, что удобно в процессе редактирования.

Все иллюстрации я готовлю сразу в двух форматах: PDF и EPS (epstopdf легко преобразует графику из EPS в PDF), а в командах \includegraphics{image} расширение не указываю, тогда LaTeX автоматически включает изображение в подходящем формате.

Недавно virens написал о создании презентаций в LaTeX с помощью пакета beamer, и указал на ошибки возникающие при обработке русских букв.

Хочу отметить, что у меня подобные ошибки не возникают. При этом файлы beamer я пишу несколько иначе и обрабатываю их непосредственно pdflatex:

\documentclass[ignorenonframetext,hyperref={pdftex,unicode}]{beamer}
...
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}
...
\usepackage{cmap}


Дополнение 1. Минимальный шаблон для PDFLaTeX

Вообще-то минимальный шаблон документа для pdflatex будет такой:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{cmap}

\begin{document}
Текст по-русски в кодировке UTF-8.
\end{document}
Это к тому, что разные \ifpdf выше — совсем не обязательны. Можно проще.

Дополнение 2. Шрифты CM-Super

Есть ещё такая тонкость: при использовании гарнитуры Computer Modern PDF получается гораздо лучше, если установлены шрифты CM-Super (пакет cm-super в Debian/Ubuntu).

Например, без CM-Super:

без CM-Super

С Type-1 шрифтами CM-Super:

с CM-Super

LaTeX: зачеркивание, цветовыделение и заметки на полях

Чтобы зачеркивать слова в LaTeX необходимо подключить пакет ulem. Делается это так:

% в преамбуле
\usepackage{ulem}
...
% в тексте, чтобы вычеркнуть слово
\sout{Неправильно.} Правильно.


Получится тогда что-то вроде этого:

Неправильно. Правильно.


Цветовыделения я обычно делаю с помощью пакета xcolor:


% в преамбуле
\usepackage{xcolor}
...
% в тексте
Некоторые слова можно выделять \textcolor{red}{красным}.

что даёт

Некоторые слова можно выделять красным.


Помимо ряда встроенных цветов xcolor также позволяет задавать свои цвета и оттенки, что особенно удобно при подготовке иллюстраций средствами LaTeX.

Эти пометки (зачёркивания и красные вставки) я использую, когда правлю чужой текст и хочу выделить свои изменения. Дополнительно иногда я дописываю заметки на полях:

% в тексте
\marginpar{Этот текст появится сбоку на полях.}


Это конечно не замена настоящим знакам корректуры, но зато представимо в виде PDF-документа, легко копируется, распечатывается и передаётся по электронным каналам связи :)

20070703

Как скачать сайт к себе на диск целиком

Бывает, что хочется иметь локальную копию какого-то сайта, чтобы можно было её просматривать, не подключаясь к Интернет, или чтобы сохранить её на будущее, на случай, если «оригинал» исчезнет.

Сделать это легко. Я часто использую скрипт siteget, написанный Джильсом Орром. По сути это всего лишь вызов программы wget c «правильным набором опций», однако вводить две строчки опций каждый раз лень :)

Итак,
  • скачайте скрипт siteget
  • поместите его в одно из мест, перечисленных в переменной окружения $PATH (я обычно держу такие вещи в ~/bin), и сделайте скрипт исполняемым (chmod a+x ~/bin/siteget)
  • скачивайте любые сайты одной командой: $ siteget АДРЕС_САЙТА.

Например, чтобы получить локальную копию своего блога, я выполняю
$ siteget http://sovety.blogspot.com/

После этого в текущем каталоге появляется подкаталог sovety.blogspot.com/. Его можно посмотреть любимым браузером (например, Firefox):
$ firefox sovety.blogspot.com/index.html

В большинстве случаев полученная копия вполне функциональна.

Те же, кто не хотят возиться со скриптом, могут использовать wget напрямую:
$ wget -m -k -nv -np -p --user-agent="Mozilla/5.0 (compatible; Konqueror/3.0.0/10; Linux)" АДРЕС_САЙТА


Для ограничения глубины скачивания можно ещё добавлять опцию -l глубина_ссылок. А при работе с плохим или ненадёжным соединением пригодятся опции -c -t 0.

Дополнение: заметно бОльшие возможности зеркалирования/скачивания сайтов предоставляет программа httrack.

20070629

Как перенести адресную книгу GMail (Outlook CSV) в Claws Mail (Sylpheed)

Разбирать, читать и хранить почту мне нравится в почтовой прораммке Claws Mail («Челюсти», ранее известной как Sylpheed Claws). Там у меня собирается почта и с личных ящиков, и с рабочих, и nntp-конференции на GMANE... Всё удобно, архив почты всегда под рукой, даже в оффлайн... Однако личную почту иногда я читаю и через веб-интерфейс GMail.

Недавно же заметил, что часть адресов, которые имеются у меня в адресной книге GMail, отсутствуют в адресной книге почтового клиента, и иногда это бывает неудобно. Вот я и задумал, адресную книгу GMail перенести себе в Claws Mail. Далее я опишу, как это сделал.

Итак, GMail может экспортировать адресную книгу в двух вариантах:
  • CSV для переноса в другую учётную запись GMail
  • и CSV формата Microsoft Outlook


Я выбрал последний. Получил файл, в котором адреса хранятся примерно так:
Имя Фамилия,email@address,,,,,,
по одному на строчку, в кодировке CP1251.

При этом Claws может импортировать адресные книги в следующих форматах:
  • LDIF
  • Адресная книга mutt
  • Адресная книга pine


Всё. Писать конвертер CSV2LDIF мне было лень. Методом тыка установил, что под адресной книгой mutt подразумевается файл .muttrc, в котором есть записи вида:
alias shortname email@address (Имя Фамилия)

Ну вот, собственно, и всё, сохранённый gmail.csv переводится в такой формат следующей командой:
$ cat gmail.csv | konwert cp1251-utf8 | sed '1d' | awk 'FS="," { print "alias",$2,$2,"("$1")" ; }' | sed 's/@[^ @]//' > gmail.mutt

Здесь я конвертировал (konwert cp1251-utf8) файл из кодировки CP1251 в UTF8, поскольку пользуюсь везде ru_RU.UTF-8. Это можно было сделать также с помощью iconv -f CP1251 -t UTF8. команда sed '1d' отрезала первую строчку с названиями полей, awk обработал разделённые запятыми поля и напечатал их в нужном порядке, e-mail дважды, а последний вызов sed сделал муттовские псевдонимы вида userxxx из e-mail аресов вида userxxx@server.

Всё, полученный файл gmail.mutt нормально импортируется в Claws Mail.

Единственное замечание: были повреждены все акценты над латинскими буквами, поскольку в однобайтной кодировке CP1251 они не представимы... На моё счастье, таких имён в моей адресной книге оказалось немного. Ну и разные комментарии к адресам я тоже проигнорировал ;)

Дополнение: нашёл набор скриптов для конвертации почтовых архивов и адресных книг в формат Claws, claws mail tools, который также доступен в виде отдельного пакета claws-mail-tools в Debian.

20070626

Загрузка фотографий на Picasaweb

Есть у гугла такой сервис для выкладывания фотографий: PicasaWeb. Довольно удобный. Бесплатно предоставляется 1 гигабайт места. Можно докупить и больше. Красивый и удобный веб-интерфейс. Есть возможность иметь скрытые альбомы.

Пользователям Windows загружать туда фотографии просто: для загрузки можно использовать программку Picasa. Однако версия Picasa для Linux, во-первых, не работает с русскими буквами, а во-вторых, не умеет загружать фотографии на Picasaweb.

Что же делать пользователям Linux? Добавлять фотографии по одной через веб-интерфейс? Медленно и неудобно. Есть альтернативный каталогизатор фотографий F-Spot, который умеет также и экспортировать выбранные фотографии на Picasaweb.

Однако мне F-Spot не нравится. Помимо того, что он тянет за собой кучу зависимостей (mono), он ещё и медленно работает. Функции редактирования его недостаточны и неудобны (в отличие от функций редактирования в Picasa). Система меток тоже не очень удобна. Самое главное, текущая версия f-spot 0.3.0 из Debian testing загрузить фотографии на Picasaweb не смогла. Да, уже есть f-spot 0.3.5, но он пока в unstable и тащить все его зависимости только ради загрузки фотографий на picasaweb не хочется.

На этих выходных решил я погуглить, что же можно сделать, и нашёл: как использовать маленький скрипт для загрузки фото на picasaweb.

Для работы скрипта потребуется:
  • библиотека python-elementtree, есть в репозитории Debian, у меня всё работает с версией python-elementtree 1.2.6-10.
  • библиотека gdata-python-client для доступа к службам Google. В Debian есть пакет python-gdata, но на данный момент его версия в testing и unstable 1.0, и с ней скрипт не работает. С версией 1.0.4 скрипт работает нормально. Для установки библиотеки необходимо распаковать архив с исходным кодом библиотеки и выполнить примерно такую комманду:
    ./setup.py install --prefix=/usr/local
  • сам скрипт upload2picasa.py.


При первом запуске скрипта он спросит имя пользователя и пароль, и сохранит их в файле ~/.google_auth. Поскольку пароль в файле хранится открытым текстом, поправьте права доступа к файлу таким образом:
$ chmod go-rwx ~/.google_auth

Теперь, чтобы загрузить фотографии на picasaweb и создать новый альбом достаточно выполнить такую команду:
$ upload2picasa.py -n НазваниеНовогоАльбома *.jpg
или, чтобы загрузить в уже существующий альбом:
$ upload2picasa.py НазваниеАльбома *.jpg

Созданный альбом будет закрытый. Изменить настройки альбома и ввести его описание можно через веб-интерфейс. Чтобы сразу создать открытый альбом (доступный всем), можно использовать ключ -p в командной строке.

Посмотреть список альбомов можно с помощью ключика -l
$ upload2picasa.py -l

Альтернативные способы:

  • скрипт picasa_upload.py, предшественник и «предок» upload2picasa.py, очень простой; в последний раз, когда я его попробовал (25 июня 2007), он создавал исключительно открытые альбомы и названия с русскими буквами переводил в кракозябы;
  • расширение IceWeasel/Firefox fireuploader, которое, вроде бы умеет корректно работать с прокси-серверами, я его не пробовал;
  • F-Spot (видимо, версии 0.3.5 и старше)


См. также: