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 всё исправляет.