Темы выпуска: добавляем вывод мета-тэгов description в WordPress, делаем самопальную замену clip2net, учим оболочку Erlang’а сохранять историю команд, настраиваем L2TP VPN в Ubuntu, и не только. Предыдущие выпуски: восьмой , седьмой , шестой , пятый .
1. Как добавить meta-тэги description в WordPress
Тэг description используется поисковыми системами при формировании SERP, а также некоторыми социальными сетями при размещении ссылки на страницу. В случае отсутствия тэга описание страницы генерируется автоматически, но при этом оно зачастую оказывается не вполне корректным.
В случае с WordPress существует множество готовых плагинов для добавления в страницы тэга description. Однако у меня есть некоторые сомнения относительно их быстродействия. Кроме того, с плагинами иногда возникают проблемы при переходе с одной версии WordPress на другую. Поэтому я решил справиться с проблемой самостоятельно.
Для этого я добавил в header.php следующий код:
<meta name=»description» content=»Записки программиста: блог о программировании, алгоритмах, операционных системах, компьютерных сетях, безопасности, девайсах, сайтостроении и не только» />
<?php } else if ( is_home ( ) ) { ?>
<meta name=»description» content=»Записки программиста: архив блога, страница <?php echo $paged ?> » />
<?php } else if ( is_tag ( ) ) { ?>
<meta name=»description» content=»Записки программиста: посты с меткой « <?php single_tag_title ( ) ?> » <?php if ( $paged ) { echo «, страница $paged » ; } ?> » />
<?php } else if ( is_single ( ) ) { ?>
<meta name=»description» content=» <?php single_meta_description ( ) ?> » />
<?php } ?>
Функция single_description ( )
определяется в functions.php:
global $wp_query ;
// вырезаем html-тэги
$temp = preg_replace ( ‘#<[^>]*>#su’ , ‘ ‘ ,
$wp_query -> post -> post_content ) ;
// заменяем html entities на соответствующие символы
$temp = htmlspecialchars_decode ( $temp ) ;
// удаляем пробелы перед знаками препинания
$temp = preg_replace ( ‘#s+([.,;:!?)])#su’ , ‘$1’ , $temp ) ;
// заменяем последовательности из нескольких пробелов на один пробел
$temp = preg_replace ( ‘#s+#su’ , ‘ ‘ , $temp ) ;
// оставляем только первые 160 символов, пропуская пробелы в начале
$temp = preg_replace ( ‘#^s*(.{0,160}).*$#su’ , ‘$1’ , $temp ) ;
echo htmlspecialchars ( $temp ) ;
}
У меня в блоге не используются рубрики и нет возможности просматривать посты за указанный год или месяц. Если они есть в вашем блоге и вы решите воспользоваться приведенным кодом, вам придется соответствующим образом поправить header.php.
2. Работаем с несколькими мониторами в i3
В оконном менеджере i3 предусмотрена возможность перемещения рабочих мест между различными мониторами. Делается это следующими командами:
i3-msg move workspace to output left
Вводить ручками такие длинные команды грустно, поэтому повесим их на какие-нибудь сочетания клавиш. Открываем ~/.i3/config и дописываем в него:
bindsym $mod+x move workspace to output right
Если у вас всего лишь два монитора, то вторая команда, очевидно, является лишней.
3. Утилита xxkb
Xxkb — это небольшая программа для отображения текущей раскладки клавиатуры. Вот так у меня выглядит файл ~/.xxkbrc:
XXkb.mainwindow.enable: yes
XXkb.mainwindow.type: tray
XXkb.mainwindow.geometry: 15×15+0+0
XXkb.image.path: /usr/share/xxkb/
XXkb.mainwindow.image.1: en15.xpm
XXkb.mainwindow.image.2: ru15.xpm
Для автозапуска xxkb в ~/.i3/config у меня прописано exec xxkb &
.
4. Настройка шрифтов в Skype
У меня были слишком мелкие шрифты в Skype. Исправить ситуацию помогла утилиты qtconfig:
Запускаем qtconfig, меняем шрифт по умолчанию, перезапускаем Skype.
5. Добавляем сохранение истории в оболочку Erlang’а
Существует заплатка для Erlang’а, добавляющая сохранение истории команд между запусками оболочки. Устанавливается эта заплатка очень просто:
cd erlang-history
sudo make install
К сожалению, идущий в комплекте Makefile не работает под FreeBSD, и, вероятно, некоторыми другими системами. Я послал pull request , который исправляет эту ситуацию, но на момент написания этих строк он еще не был принят. Однако вы все равно можете воспользоваться скриптом install.escript из этого pull request’а.
6. Как в Git объединить несколько коммитов в один
При работе с Git иногда требуется объединить несколько коммитов в один. Например, если одно логическое изменение расползлось по нескольким коммитам, их имеет смысл объединить, чтобы изменение было проще понять по git log -p
.
Вот как можно объединить несколько последних коммитов. Смотрим git log
и находим коммит, который идет после (то есть, был сделан ранее) группы коммитов, которые мы хотим объединить. Говорим:
В $EDITOR будет открыт файл, в котором первую строку следует оставить без изменений, а во всех остальных — заменить слово pick на слово squash. Если строк, которые нужно изменить, много, и при этом вы пользуетесь vim , то можете воспользоваться следующей командой:
Сохраняем все изменения, правим описание коммита, проверяем по git log
, что получили именно то, что хотели. Затем удаляем нашу ветку с origin:
… и создаем новую с таким же именем:
Есть и другие способы объединения нескольких коммитов. Например, можно сохранить вывод команды git diff
в отдельный файл, создать новую ветку от нужного места, а затем накатить изменения из файла с помощью git apply
. Или воспользоваться комбинацией команд git reset
и git commit --amend
.
7. Настройка L2TP VPN в Ubuntu
Для решения этой задачи есть плагин для NetworkManager, написанный Сергеем Прохоровым :
sudo apt-get update
sudo apt-get install xl2tpd openswan network-manager-l2tp-gnome
sudo service xl2tpd stop
sudo update-rc.d xl2tpd disable
При первом коннекте я получил ошибку «The VPN connection ‘myvpn’ failed because there were no valid VPN secrets». Избавиться от нее помогла команда:
Хм… или сначала сделать restart, затем соединиться, введя пароль вручную, отсоединиться, ввести пароль в настройках соединения, после чего снова соединиться. Как-то так, точно не помню. В общем, то ли в плагине, то ли в NetworkManager имеется бага с сохранением пароля, из-за которой приходится совершать такие телодвижения. Не считая этого момента, все работает, как часы.
8. Как пробросить SSH-ключ
Хранить копии SSH-ключей на разных серверах — не самая удачная идея. По понятным причинам. К счастью, протокол SSH позволяет «пробрасывать» локальные SSH-ключи. Вот как это работает:
ssh-add ~ / .ssh / id_rsa
ssh -A user @ example.ru
Теперь вы можете использовать ключ ~/.ssh/id_rsa, который хранится у вас на ноутбуке, на сервере example.ru. Список «проброшенных» ключей можно посмотреть командой ssh-add -l
.
9. Перенаправление X’ов через SSH
А еще SSH позволяет запускать GUI-приложения на удаленной машине, используя локальный X-сервер:
То есть, вы запускаете какой-нибудь xclock на сервере, а окошко у вас рисуются на мониторе, за которым вы сейчас сидите. Если окажется, что X11 forwarding у вас не работает, проверьте, что в /etc/ssh/sshd_config прописано X11Forwarding yes
.
10. Делаем собственный clip2net за пять минут
Clip2Net — это сервис для публикации скриншотов в интернете. Недавно с их сайта исчез клиент для Linux. Среди достойных альтернатив мне удалось найти разве что JShot , но их клиент мне показался не очень удобным.
Тогда я подумал, а отчего бы не набросать небольшой скрипт, который делает скриншот экрана с помощью scrot, открывает его в каком-нибудь графическом редакторе, а затем заливает на ImageShack? Сложнее всего оказалось найти подходящий графический редактор. Я остановил свой выбор на Pinta. Он работает как под Linux, так и под FreeBSD, умеет делать все необходимое, прост и приятен в использовании. Несмотря на зависимость от Mono, Pinta тянет за собой не так уж много «лишних» пакетов.
Скрипт для создания и заливки скриншотов у меня получился таким:
scrot / tmp / new-screenshot.png
pinta / tmp / new-screenshot.png
chromium-browser ` yfrog_upload / tmp / new-screenshot.png | grep imageshack.us | cut -f 2 `
Скрипт yfrog_upload вы найдете в седьмом выпуске мини-заметок . Если при запуске Pinta вы увидите ошибку «GLib.GException: Icon ‘gtk-dialog-error’ not present in theme …», установите последнюю версию пакета gnome-icon-theme-full, если вы пользуетесь Ubuntu, или пакета gnome-icon-theme, если вы пользуетесь FreeBSD.
Дополнение: Мини-заметки — выпуск 10