Временная блокировка проекта на symfony

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

Continue reading

Volume testing: быстрое наполнение тестовых таблиц в MySQL

Представим, что вы создаете новое приложение и вам нужно протестировать его на большом объеме данных (volume testing). В этом случае вы можете взять уже готовые данные, или же подготовить их самостоятельно. Если у вас есть набор данных для тестов достаточного объема – это просто замечательно, но чаще всего данных нужного объема у вас не будет и вам будет нужен способ для быстрого их создания. Ниже будут перечислены три способа создания больших наборов данных простых типов (чисел, слов, дат).

Continue reading

MySQL генерация непрерывного диапазона дат

Столкнулся с ситуацией, когда посредством MySQL необходимо выбрать непрерывный диапазон дат. Казалось бы, что тут сложного? А вот что – в целевой таблице может не быть данных за какую-то из дат в диапазоне. Соответственно непрерывный диапазон не получается.

Решений наверное может быть много разных. Предлагаю ознакомиться с одним из них.
Continue reading

Strict php time zone

После миграции на PHP 5.3.0 посыпалось некоторое количество ошибок вида

SYSTEM WARNING: date(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘UTC’ for ‘GMT/0.0/no DST’ instead

Собственно они вызваны тем что по умолчанию отображаются ошибки уровня E_STRICT, что поидее должно подталкивать людей к исправлению ошибок, а не к игнорированию их. Ну раз так, то указанную ошибку нужно исправить указанием корректной таймзоны в php.ini (Документация: http://us2.php.net/manual/en/datetime.configuration.php#ini.date.timezone; Списки доступных зон: http://us2.php.net/manual/en/timezones.php). Меня устроил такой вариант:

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = Europe/Moscow

Установка свежей версии PHP на RedHat / CentOS 5

В основных репозиториях версии PHP зачастую не самые свежие, поэтому если хочется версию поновее (обычно хочется самую новую), нужно воспользоваться репозиторием remi.

На самом деле все очень просто, и если нужна не какая-то специфичная конфигурация, установка собранного php себя вполне оправдывает. Итак:

Continue reading

mysqldump и /*!40001 SQL_NO_CACHE */

Долгое время в рассылке медленных логов от maatkit меня тревожила запись вида:

#               pct   total     min     max     avg     95%    stddev    median
# Count         38    310
# Exec time     67    355s       0      85s      1s    992ms    8s         0
# Lock time     0     0          0       0       0       0      0          0
# Rows sent     99    10.57M     0      2.66M  34.93k  65.68k  223.39k    9.83
# Rows exam     60    10.57M     0      2.66M  34.93k  65.68k  223.39k    9.83
# Users         1     dbusr
# Databases     3     d1 (4), d2 (2), d3(1)
# Time range 2009-10-07 08:00:02 to 2009-10-07 16:02:38
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s  ################################################################
#  10s+  ##########################
# Tables
#    SHOW TABLE STATUS FROM `d1` LIKE 'tbl_n'G
#    SHOW CREATE TABLE `d1`.`tbl_n`G
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tbl_n`G
# Converted for EXPLAIN
# EXPLAIN
SELECT /*!40001 SQL_NO_CACHE */ * FROM `tbl_n`G

Пренеприятнейший лог надо вам сказать. Какая-то зараза выбирает до 2.66M записей разом (за половину суток > 10М). И так каждый день. Собственно забивать закрывать глаза на эту проблему помогал тот факт что на сервисе и нагрузке это вроде бы никак не отражалось.

Однако стоило приглядеться и картина стала ясной.

1. факт – большой разброс макс-мин-95% строк за выборку: 2.66M –  34.93k –  65.68k
2. факт – mk-query-digest агрегирует схожие запросы

Виновником этой строки стал mysqldump (что и было проверено и подтверждено визуально слежением за slow-log во время дампа).

p.s. спасибо munin и maatkit за наш спокойный сон )

hth!

Отправка email из компонента joomla

Как оказалось это несложно

$user =& JFactory::getUser(); 
$message =& JFactory::getMailer();
$message->addRecipient($user->email); 
$message->setSubject('Your subject string');
$message->setBody("Your body stringnin double quotes if you want to parse the nnewlines etc"); 
$sender = array( 'sender@email.address.org', 'Sender Name' );
$message->setSender($sender);
$sent = $message->send();
if ($sent != 1) echo 'Error sending email';

Источник – http://docs.joomla.org/How_to_send_email_from_components