phpmyadmin 3.4.4deb1 не работает (ошибка 500)

Сегодня на сервере debian/sid обновился phpmyadmin до 3.4.4.
И, каким-то странным образом перестал работать.

Оказалось, что всему виной php5-xcache.
Решение проблемы:
  1. mv /etc/php5/conf.d/xcache.ini /etc/php5/xcache.ini
  2. apache2ctl restart


Конечно же, придётся что-то придумать с акселератором php. Например, использовать apc или eaccelerator.

TP-Link TL-WR1043ND — отличный роутер

Недавно сгорел мой давний друг, D-Link DIR-320 и нужно было найти замену.
Среди всего ассортимента маркетинговых провокаций и ненужных бирюлек, я тщательно выбирал роутер, который не только имеет красивый и впечатляющий product description, но и хорошо выполнять возложенные на него функции.

DIR-320 довольно хорош, учитывая что он — «железный» клон ASUS WL-500g, который восхваляют направо и налево.

Так вот, даже 320-й не всегда справлялся с нагрузкой: то подвиснет, то просто тупит…
В сменившем его TP-Link'e-же, процессор в 2 раза мощнее — целых 400 Mhz! Новые стандарты Wi-Fi (802.11n, 300 Mb/s, 3×3dBi всенаправленные антенны), все 5 портов гигабитные, есть USB, в который можно вставить жёсткий диск и раздать на всю сеть, контролируя доступ (поддерживается samba-шара, ftp и медиа-сервер; можно создавать пользователей и назначать им права).

Железка сейчас топовая в TP-Link, на неё активно делают прошивки: с момента покупки, установил уже 2-ю.
Для «экспериментаторов» тоже есть где разгуляться: ROM 8 МБ, RAM 32 МБ; поддерживаются OpenWRT, DD-WRT и другие.

В общем, не нарадуюсь. А учитывая, что стоял выбор между ним и Netgear'ом, вдвойне доволен, что решил довериться китайцам.

Транслитерация для генерации имени получателя Western Union

В последнем проекте понадобилась оплата товаров через Western Union. Для отправки платежа необходимо сообщить ФИО в транслите, страну и город получателя.
Вот как получить необходимое ФИО, в соответствии с таблицей транслитерации Western Union:
  1. function transliterateForWesternUnion( $str ) {
  2. $str = mb_strtoupper( $str, 'utf-8' );
  3. return str_replace(
  4. array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ы','Э','Ю','Я','Ь','Ъ'),
  5. array('A','B','V','G','D','E','YO','ZH','Z','I','Y','K','L','M','N','O','P','R','S','T','U','F','H','TS','CH','SH','SCH','Y','E','YU','YA','',''),
  6. $str
  7. );
  8. }

«Взлом» cForms CAPTCHA для WordPress

Некоторые капчи просто удивительны: принимают GET-параметры количества символов, используемых шрифтов и многого другого.

Сегодня наткнулся на следующее: WordPress-конпонент cForms, а конкретно CAPTCHA, предоставляемая им, в качестве аргумента URL принимает используемый при построении изображения алфавит.

Пример кривых рук, которые участвовали в разработке этой поделки. Пообновляйте страницу, это поднимает настроение.

Установка Virtualbox Guest additions в Ubuntu Server

Что за дополнения и для чего они нужны?

Virtualbox Guest additions изначально были сделаны для систем линейки Windows (согласно документации) и представляют из себя набор драйверов и утилит для управления гостевой ОС.

В Linux эти дополнения так же набор драйверов, но представляют собой модули для ядра. В связи с этим, модули необходимо пересобирать каждый раз, как будет обновлён пакет ядра Linux (linux-image-*), если в системе не установлен DKMS.

В большинстве *nix систем модули Virtualbox присутствуют, но зачастую очень старых версий. В официальной документации рекомендуется заменять их Дополнениями, актуальными для версии Virtualbox, установленной на хосте.

Устанавливаем

Итак, для того чтобы установить дополнения гостевой ОС, необходимо:
  • Обновить гостевую систему, так как модули ядра работают только с той версией ядра, на которой они собраны:
    sudo apt-get update && sudo apt-get upgrade

  • Установить build-essential, так как мы планируем собирать модуль ядра, а данный метапакет содержит необходимые нам make и gcc:
    sudo apt-get install build-essential

  • К счастью, в Ubuntu есть DKMS и нам не придётся собирать модули в ручную каждый раз, как обновили систему. Ставим его:
    sudo apt-get install dkms

  • В меню Virtualbox выбираем Устройства → Установить Дополнения гостевой ОС или нажимаем Host+D. Монтируем cdrom:
    sudo mount /dev/cdrom /media/cdrom

  • Переходим на смонтированный диск и запускаем установку:
    cd /media/cdrom && sudo sh ./VBoxLinuxAdditions.run
Дальше установщик сделает всё сам.
В случае, если вы проделываете это не в Ubuntu или в Ubuntu до 8.10, или в вашей системе попросту отсутствует DKMS, то необходимо будет после каждого обновления ядра системы пересобирать модули Virtualbox. Для этого необходимо выполнить команду sudo /etc/init.d/vboxadd setup.

Использование локального принтера в сеансе удалённого доступа — RDP printer redirection/mapping

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


  1. Разрешить подключение локальных принтеров в удалённом сеансе:


  2. После подключения необходимо установить драйвер принтера (такой же, как вы используете локально). На примере Samsung SCX-4216F:

    Скачать и установить

    Принтер скорее всего появится в списке. УДАЛЯЕМ ЕГО.

    Удостоверяемся, что необходимый драйвер остался задействован. Файл → Свойства сервера → Драйверы:

    Отключаемся от RDP и подключаемся снова — локальный принтер должен появиться при подключении

Use cases:


  • Терминальный сервер 1С: печать на принтер, который стоит рядом

  • Терминальный сервер «…»: печать на принтер, который стоит рядом


Восстановление писем из архива Kerio Mail/Connect — вытащить иголку из стога

В один прекрасный день, у одной прекрасной дамочки пропали письма в Outlook'е, да при этом аж за три месяца. Очень странным это может показаться, но .pst и не такое умеет.

В качестве сервера почты работает Kerio Connect 7.0.1 build 1249. Включены бэкапы, но работают они не так, как хотелось бы — делается копия текущего состояния ящика (а у пользователей, конечно же, стоит удаление писем с сервера).

К счастью, когда-то давно мной была выставлена спасительная галочка в настройках — «сохранять архив сообщений», благодаря которой Kerio любезно складывал всю почту (почта raw — там и спам, при желании можно заставить kerio и вирусы туда класть) за последние полгода в архив. Вздохнули с облегчением.

Структура архива Kerio Connect/Mail

А структуры нет. Ну, я конечно же преувеличиваю.. Но она ужасна.
Архив делится на папки по месяцам. И все, чёрт побери, все письма за этот месяц лежат в одной папке. В моём случае писем было ≈15 тысяч. Что может быть проще — разделить почту на папки на уровне почтового сервера, выделив почтовые адреса как сущности.

Разделить архив по получателям

Ну, это было первой идеей. Позже руки опустились, к сожалению. Поскольку писем много, а нам нужен только один получатель — пойдём «лоб в лоб»: возьмём плохой и ужасный php, чудесный и прекрасный Notepad++, такой розовый и блондинистый Denwer.. В общем, как обычно.

Спасительный говнокод.

  1. <?php
  2.    foreach( new DirectoryIterator( '.' ) as $file ) {
  3.       if ( $file->isDot() || $file->isDir() || $file->getFilename == __FILE__ ) {
  4.          continue;
  5.       }
  6.       
  7.       $name = $file->getFilename();
  8.       $file = file_get_contents( './' . $name );
  9.       if ( preg_match( '/(whatShouldWeFind@domain.(ru|com))/', $file ) ) {
  10.          rename( './' . $name, '../#saved/' . $name );
  11.          echo "moved " . $name . PHP_EOL;
  12.       }
  13.       
  14.       echo "skipped " . $name . PHP_EOL;
  15.    }
Ах да — мне было лень, создайте сами папку #saved рядом с #messages. Скрипт класть в папку #messages. Запускать как-то так: cd dirWithArchive/2011-Jan/#msgs && /usr/local/php5/php script.php. В 9-й строке меняется необходимый получатель.

Подведём итог

Скрипт ужасен. Скрипт работает. Разработчики Kerio в очередной раз доказали, что продукт хорош до тех пор, пока его используют стандартно — поставили, взломали через ukaip86.exe, настроили и забыли.
Спасибо за внимание.