WordPress – WEBO Site SpeedUp vs WP Super Cache
Попалась статейка на хабре про новую версию WEBO Site Speed Up и как выяснилось имеется версия и для WordPress-а - стало интересно т.к. сам пользуюсь WP Super Cache. Решил их сравнить.
Сравнил давно, выложить результаты время нашлось только сейчас.
Для сравнения результатов оптимизации были использованы следующие инструменты:
- Плагин для FireBug-a YSlow
- Плагин для FireBug-a Page Speed
- Замер от webo.in
- Стресс-тест с помощью loadimpact
Тестируемая версия WEBO Site SpeedUp - 1.2.1
Тестируемая версия WP Super Cache - 0.9.9.3
Тестируемый блог - этот
Т.к. loadimpact используется с бесплатными возможностями были выключены все счётчики и вся реклама т.к. при превышении лимита loadimpact не даёт тестировать если есть ресурсы (картинки, скрипты), запрашиваемые с других сайтов, а т.к. тестировал я несколько раз то лимиты были исчерпаны и пришлось ждать пока они восстановятся и проводить тест уже без внешних ресурсов.
При помощи YSlow также производились замеры размера страницы и скорости загрузки.
Сначала представлю сводную таблицу результатов и подведу итог, а уже если будут интересны подробности то их можно прочитать ниже:
| Чистый сайт | WEBO Site SpeedUp | WP Super Cache | |
|---|---|---|---|
| Размер страницы, КБ | 143.2 | 161.2 | 143.3 |
| Рейтинг webo.in | 70 | 82 | 70 |
| Рейтинг webo.in, интегральный | 73 | 65 | 73 |
| Page Speed Score | 82 | 83 | 86 |
| YSlow Score | 86 | 96 | 86 |
| Среднее время загрузки (YSlow), секунд | 2.69 | 2.86 | 1.91 |
| Самый быстрый по версии Loadimpact | 3 | 1 | 2 |
| Цена, рублей | 0 | 499-1999 (~120 тугриков в день на SaaS версии) | 0 |
Исходя из сравнительного тестирования можно сделать вывод что WP Super Cache лучший и это так и есть, почти. Он подходит больше для «домашнего использования» т.к. бесплатный и механизм кеширования действительно позволяет выдержать довольно сильный наплыв посетителей.
Однако для серьёзных блогов я бы использовал WEBO т.к. у него огромное количество всевозможных настроек и оптимизаций которые позволят выжать из блога больше чем WP SP, например мне не удалось протестировать CDN и распределение данных по хостам за неимением оных.
Kubuntu 10.04 – Эффекты и проприетарные драйвера для ATI
После обновления (а точнее после чистой установки) Kubuntu 10.04 установил проприетарные драйвера для своей ATI Radeon HD 4800 Series и как обычно что-то сломалось...на этот раз сломались эффекты рабочего стола (Через XRender работали но уж очень медленно). Что впрочем не удивительно т.к. дрова свежие и ещё толком не обкатанные. К тому же это ведь ATI...
Для справки - драйвера можно установить через jockey-kde или же:
sudo apt-get install linux-headers-`uname -r` fglrx fglrx-amdcccle fglrx-dev fglrx-modaliases
sudo aticonfig --initial
sudo reboot
Покопавшись в настройках обнаружил что эффекты будут работать если выставить флаг «Отключить внутреннюю проверку» в разделе Параметры системы - Рабочий стол - Эффекты рабочего стола - Дополнительно
Но нужно же что бы они работали и в обычном режиме
Для этого нужно проверить чтобы в соответствующих разделах xorg.conf были эти значения:
Option "AllowGLXWithComposite" "true"
EndSection
Section "Extensions"
Option "Composite" "Enable"
Option "DAMAGE" "Enable"
Option "RENDER" "Enable"
EndSection
После применения настроек эффекты работают и при отключении «Отключить внутреннюю проверку».
KDE 4.4.0 – Поломался Skype – Kubuntu 9.10
С горем пополам обновился на KDE 4.4.0.
Всё красиво но сломался Smooth Tasks и Skype.
По Smooth Tasks отписал автору (не у меня одного такая проблема), а вот Skype пришлось реанимировать своими силами.
Запуск из консоли выдавал вот такой листинг и Skype намертво зависал
bt_audio_service_open: connect() failed: В соединении отказано (111)
bt_audio_service_open: connect() failed: В соединении отказано (111)
QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: Нет такого файла или каталога
(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
(process:7282): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed
(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
(process:7282): GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed
(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function
(process:7282): GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed
(process:7282): Gtk-CRITICAL **: gtk_widget_style_get: assertion `GTK_IS_WIDGET (widget)' failed
Ничего лучше в голову не пришло как переустановить GKT темы.
Как оказалось gtk2-engines у меня установлено не было (а может оно и не нужно).
После чего зашёл в настройки внешнего вида и заново выбрал тему для GTK+ - оказалось этого достаточно т.к. Skype заработал
Версия Skype 2.1.0.81 (ИМХО предыдущая была лучше, эта иногда виснет).
Linux – MySQL binary log
Основательно занявшись решением вопроса "Куда пропадает свободное место?" с удивлением обнаружил что оно занято файлами mysqld-bin.* в /var/lib/mysql
Это же надо было так проколоться. Сервер работает больше года и и за это время бинарные логи разрослись и заняли 14 гигабайт из 20 гиг выделенных на всю систему (не очень активно MySQL используется) но т.к. всегда было что удалить как-то не особо обращал на это внимание (то сорцы старые удалишь то ещё что-то).
Что можно было бы сделать в данной ситуации:
- Перенести логи на другой раздел (мне не подходит)
- Увеличить размер, выделенный под систему (тоже не подходит)
- Уменьшить суммарный объём логов (самое оно)
Чтобы уменьшить занимаемое логами место можно в файл настроек /etc/mysql/my.cnf добавить следующую конфигурацию:
Вообще не знаю зачем их хранить даже 5 дней, разве что делать репликацию на slave с задержкой до пяти дней...Да и восстаноление из них выглядит как-то сомнительно (хотя тоже имеет место быть).
Также можно удалить старые логи до нужного файла выполнив запрос:
А вообще если они не нужны (а не нужны они в 99% на единичном сервере) то их можно отключить (в /etc/mysql/my.cnf):
BIND – Настройка зоны и домены третьего уровня для сервера разработки.
В интернете можно найти много документации на тему настройки BIND на любом языке так что пусть это будет ещё один вариант настройки.
Данная настройка отличается тем, что предназначена (как видно из заголовка) в первую очередь для сервера разработки но также может быть использована в домашних сетях.
Краткое содержание:
- Настройка своей зоны (в данном случае - home)
- Настройка обратной зоны (PTR)
- Настройка зоны третьего уровня для нужд разработки
SSH – Авторизация по ключу, что делать если ключ украли.
Ни для кого ни секрет насколько удобна авторизация по публичному ключу, а если для кого-то секрет - то можете ознакомиться вот с этой статьёй.
Но случается и такое, что ключ нужно заменить, причины? Честно говоря вижу только две - ключ скомпрометирован и, что почти то же самое, его украли.
Заменить ключ не составляет особого труда - всего-то нужно удалить с серверов старый публичный и записать вместо него новый. Вроде бы всё предельно просто, а что если серверов не один, не два и не три, а 10, 20 и более? Вот тут-то и просыпается великая и могучая лень
Но есть необходимость, а значит нужно что-то делать.
На этот случай и был написан небольшой скрипт:
renew.sh
# Author: Dmitriy Beketov (freemandigger --@-- gmail.com)
# Site: http://gentooway.ru
# Licence: Attribution-Noncommercial 3.0 Unported (http://creativecommons.org/licenses/by-nc/3.0/)
USAGE="Usage: ${0#*/} [-i id_rsa.old] [-d] <id_rsa.pub.old> <id_rsa.pub.new> <host list>"
privkey=""
dryrun=0
# Parse command line
while getopts i:d opt; do
case "$opt" in
i) privkey="$OPTARG";;
d) dryrun=1;;
*) echo $USAGE;;
esac
done
shift $(($OPTIND - 1))
[[ "$1" == '--' ]] && shift
if [[ $# -lt 3 ]]; then
echo $USAGE
exit 1
fi
oldpubkey=$1
hostlist=$3
newpubkey=$2
# Check files for exist
if [ "$privkey" ]; then
if [ ! -f "$privkey" ]; then
echo $USAGE
echo "Old private key file not found"
exit 1
fi
privkey="-i $privkey"
fi
if [ ! -f "$oldpubkey" ]; then
echo $USAGE
echo "Old public key file not found"
exit 1
fi
if [ ! -f "$hostlist" ]; then
echo $USAGE
echo "Host list not found"
exit 1
fi
if [ ! -f "$newpubkey" ]; then
echo $USAGE
echo "New public key file not found"
exit 1
fi
# Get the part of old public key for grep
OLD=`cat $oldpubkey | awk '{print $2}'`
SSH='/usr/bin/ssh'
SSH_COPY='/usr/bin/ssh-copy-id'
SCP='/usr/bin/scp'
test $dryrun -gt 0 && echo "START DRY RUN" || echo "START"
for host in `cat $hostlist`
do
printf "Copy new key to $host\n"
$SCP -q $privkey $newpubkey $host:.ssh/newpubkey
if [ "$?" > 0 ]; then
printf "\t[OK]\n"
printf "\tAdding new key to authorized_keys\n"
test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host "cat ~/.ssh/newpubkey >> ~/.ssh/authorized_keys"
test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
printf "\tDeleting temporary file of new public key\n"
$SSH $privkey $host "rm ~/.ssh/newpubkey"
test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
printf "\tBackup authorized_keys to authorized_keys.bak\n"
test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host cp .ssh/authorized_keys .ssh/authorized_keys.bak
test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
printf "\tDeleting old public key from authorized_keys\n"
test $dryrun -gt 0 && printf "dry run" || $SSH $privkey $host "cat ~/.ssh/authorized_keys.bak | grep -v '$OLD' > ~/.ssh/authorized_keys"
test $? -gt 0 && printf "\t[FAIL]\n" || printf "\t[OK]\n"
else
printf "\t[FALSE]\n"
fi
done
echo "FINISH"
exit 0
Параметры вызова (не обязательные):
-d - Тестовый запуск, скрипт попробует скопировать новый ключ во временный файл на удалённом сервере, а затем его же и удалить.
-i - Ключ для авторизации на серверах, на случай если в ~/.ssh/id_rsa уже установлен новый ключ то в данном параметре можно указать где брать старый.
Параметры вызова (обязательные):
id_rsa.pub.old - старый публичный ключ, который нужно заменить.
id_rsa.pub.new - новый публичный ключ.
host list - файл со списком пользователей/серверов, где нужно заменить ключ, формат user@host или из ~/.ssh/config
user2@host2
user223@host4
my_predefined_host
blabla@eee
Также можно скачать скрипт
Nginx – Как убрать вопрос «?» в строке адреса
Бывает необходимо сделать из адреса /index.php? просто /index.php (без ненужного вопроса). Для чего? Ну например для т.к. в индекс попадает страничка без вопроса в конце.
Помню что где-то видел решение, но где забыл, а заодно и забыл как это было сделано ![]()
Пришлось сделать своё, метод далеко не нов, но лучше я его запишу:
...
set $rr 0;
if ($request_uri ~ ^/index.php\?$) {
set $rr 1;
}
if ($request_method = POST) {
set $rr 0;
}
if ($rr) {
rewrite .* /index.php permanent;
}
...
}
Очень просто.
Ubuntu – Шифруем home и swap в Ubuntu 9.10 Karmic
При установке (K)Ubuntu 9.10 Karmic (alternate) на очередную виртуальную машину обратил внимание на вопрос системы о том, желаю ли я зашифровать домашнюю директорию, я конечно же ответил "Да". Но при этом вспомнил что у самого домашняя машина была установлена без данной опции (давно устанавливалась, ещё 8.10 кажется была). Вобщем решил и себе сделать "апгрейд", а заодно зашифровать home и swap разделы...
Стоит заметить, что, проще наверное было бы переустановить систему с включенной опцией шифрования, но это же не "gentoo way" ![]()
К тому же стандартная поставка использует для шифрования eCryptfs и не шифрует swap. В чём разница? Это два разных подхода - eCryptfs шифрует на уровне файлов, а LUKS это блочное устройство (/dev/sdb5). Это как SSL и IPSec. У каждого есть свои плюсы и минусы.
Так что инструкция только для ознакомления. Внимание, при неосторожных действиях вы можете потерять весь домашний раздел...вобщем, вы предупреждены.
Используя Linux Unified Key Setup (LUKS) установка шифрованного раздела происходит очень быстро.
Подготовка
Установим необходимые пакеты:
device-mapper должен быть активирован (если нет - перезагрузитесь):
crw-rw---- 1 root root 10, 60 2009-11-16 21:12 control
...с поддержкой шифрования:
Отлично. Всё готово, приступим.
Полезные команды MySQL
Авторизация на сервере (из консоли), -h при необходимости авторизации на удалённом сервере
Создание БД
Создание БД с указанием необходимой кодировки
Получить список всех БД на сервере
Переключится на БД
Получить список таблиц в базе
Посмотреть структуру таблицы
Ещё один вариант
Удалить БД
Удалить таблицу
Показать все данные в таблице
Показать строки, где поле `field name` имеет значение "whatever".
Показать строки с именем "Bob" и номеном "3444444"
Показать строки с номером "3444444" не содержащие имени "Bob" отсортированные по номеру.
Показать записи с именем, начинающимся на "bob" и номером 3444444
Верннуть все данные с именем, начинающемся на "bob" и номером 3444444 ограничить вывод пятью первыми строками
Используем регулярное выражение. Для регистрозависимого выбора используйте "REGEXP BINARY". Данный запрос найдёт все записи, начинающиеся на "a"
Ubuntu – Использование FFmpeg и x264
Самый простой способ получения высококачественного видео - использовать при кодировании предустановки libx264 которые идут вместе с FFmpeg.
Перед использованием этих настроек рекомендую прочитать инструкцию по кодированию FFmpeg и x264 (на английском) дабы иметь более чёткое представление об используемых опциях. Вы можете добавлять свои опции такие как разрешение фрэйма (например: -s 640x480) или модифицировать мои примеры для своих нужд. Текущий список различный предустановок, например losless и ipod, можно посмотреть в директории /usr/share/ffmpeg.
![[Google]]( http://gentooway.ru/wp-content/plugins/easy-adsenser/google-light.gif)

