вторник, 29 июня 2010 г.

Ресайз картинок в квадрат с пом. ImageMagick

Ресайз картинок а-ля квадратный thumbnail в 1 строку с помощью ImageMagick:

1 файл:

convert original.jpg -thumbnail 480x -resize 'x480<' -resize 50% -gravity center -crop 160x160+0+0 square_thumb.jpg



Для текущего каталога:

mkdir ./preview 2>/dev/null
for fn in `ls ./*.jpg`;do
f=`basename $fn`
convert ./$f -thumbnail 480x -resize 'x480<' -resize 50% -gravity center -crop 160x160+0+0 ./preview/$f
done


Как подобрать размеры.
Например нужен размер 160px
так как размеры фото обычно в пропорции 2:3 или 4:5, значит кроп делать нужно из картинки большая сторона которой равна 160*(3/2)=240.
то есть возможен вариант

convert original.jpg -thumbnail 240x -resize 'x240<' -gravity center -crop 160x160+0+0 square_thumb.jpg


но с

-resize 50%

превьюшка получается более резкой (почему то). Поэтому берем 480.

Итого: 160*(3/2)*2=480.

среда, 17 февраля 2010 г.

UTL has you, %clientname%

Предыстория здесь.

Чуда, как это ни странно, не произошло. УТЛ не отреагировал.

Во вторник пообщался с техподдержкой. Оказалось! что у меня превышен порог 50%. (надо же, 50. эта цифра устанавливается чтоли с потолка каждый месяц? уже звучали и 20 и 80, а тут нате, 50) И на текущий момент (вторник!), у меня идут вторые сутки "наказания".

То есть выводы:
1) то что скорость была урезана как минимум в субботу (просто раньше не проверил, хотя и подозревал уже), - никого не колышит. "Раз мы говорим 2 сутки, значит так и есть". (минимум то четвертые). Поддержка мягко говоря несет ересь. Ах, наша репутация...алярм.
2) 50% - при тарифе 512 это 2700Мб в стуки. то есть порог, до которого резать не должны, за 13 суток составляет около 35 гб. У меня было 9Гб. => порезали.

Ну и кто есть кто после этого? У провайдера не хватает духу признать факт необоснованного понижения скорости?

зы. Специально донял товарища. Он реально качает. Подсел на Доктора Хауса и качает. Ну не режет дальсвязь скорость.
зыы. Зачем УТЛ такая "реклама"? Враги собственному благосостоянию?
зыыы. Я не прошу денег назад. Просто скажите: политика такая то. И не меняйте. Ну или уведомляйте. Ибо у меня в прошлые месяцы было гораздо больше чем было бы в этом (при одинаковой загрузке) - и не было таких толчков. Всего-то нужно быть честными со своими клиентами.

понедельник, 18 января 2010 г.

Хостинги. Начало.

Давненько не излагал мыли. Хотя есть чем поделиться.

Так уж случилось, что хостим мы сайты своих клиентов на виртуальном хостинге от masterhost. Что можно сказать плохого об этом:
  1. Цена. За 4 площадки тарифа "Специалист", где можно разместить 60 доменов и 40 баз MySQL платить приходится около 24 т.р. в год.
  2. Странные тарифы. На 1 площадку дается 1 MySQL пользователь. Получается что если нужно дать доступ клиенту к площадке (по умолчанию не даем, сами обслуживаем - так вернее) - светятся пароли к БД. А докупить 1 БД юзера - 4 у.е. в месяц. Некисло так выходит.
  3. Кодировки сервера MySQL. Я работаю с базами в уникоде. По умолчанию на сервере кодировка баз - кириллица. А сопоставление соединения с MySQL - юникод. В итоге приходится извращаться когда нужно сделать дамп базы - данные дампятся в кириллице, но при этом в дампе валяется "SET NAMES UTF8". И пока не изменишь на cp1251 - дамп по человечески не зальеш. А править файлы например размером 50 мб - не айс, только vi и справляется, а под виндой сделать это нереально. В общем не понимаю я зачем все это :-(
Хотя, надо отдать должное, за более чем 2-х летний опыт работы с хостингом - проблем почти не было. Бэкапы по просьбам "достают" довольно быстро, сайты работают нормально, в почте спам режется хорошо. Был прицидент с системным временем: время на хост-сервере и сервере БД отличалось секунд на 40 - потупил неслабо пока это понял. Но поддержка оперативно таки среагировала, молодцы.

Но кризис есть кризис, и решили мы сэкономить. Толчком послужило открытие сервиса truevds с мизерными ценами на ВПС (при оплате за год - скидка 50%. Это не реклама, просто делюсь:-). Был взят для пробы минимальный тариф, так потыкать и оттестировать предполагаемую схему. Позже был изменен тариф на 256Мб/480МГц/8Гб и взят дополнительный сервер под базу данных - 128Мб/320Мгц/4Гб.
Ну и впоследствии 40 сайтов были перенесены на него. Так как с почтой разбираться категорически влом - почта переехала на Google Apps/pdd.Yandex.ru

Что получилось:
  1. Настроен хостинг с учетом некоторых рекомендаций безопасности на основе FAST-CGI (php-fpm+apc)/lighttpd
  2. Размещены 40 сайтов, их них 35 - динамика (php и mysql)
  3. Экономия денег - считайте сами (расходы были 24 000, стали 6 000)
  4. Свобода действий: понадобился например модуль для псевдостриминга flv и php-ffmpeg - да пожалуйста.
  5. После настройки акселератора - сайты летают. Хотя нагруженных сайтов нет - все они чисто номинальные (самый посещаемый - 1000 хостов/4000 хитов в сутки), но на глаз открываются гораздо шустрее чем это было у мастерхоста.
  6. Глядя на загрузку сервера - думается еще есть задел на будущее.
Как это делалось на практике - в следующих статьях.
Про что хочется поведать:
  • Установка lighttpd-1.4.25(из Sid - там есть полезная фича в mod_rewrite для легкой настройки правил rewrite для Codeigniter/Kohana) на Debian 5 и его настройка.
  • Настройка виртуальных хостов.
  • Настройка php через fast-cgi. На каждом вирт. хосте php будет работать под своим uid/gid. Сначала все запустил через spawn-fcgi. Позже перешёл на использование deb-пакета php-fpm, который собрали (и планируют поддерживать) ребята из truevds.
  • Тестирование производительности сервера. Смотреть что он выдает будем с помощью siege.
  • Подключение apc/xcache/eaccelerator. Опять тестирование производительности.
  • Про тонкую настройку MySQL сервера.


вторник, 13 октября 2009 г.

Some tips for Gentoo

Несколько полезных моментов

  1. -fomit-frame-pointer Glibc has a glibc-omitfp USE flag. This makes glibc use -fomit-frame-pointer and some other optimizations for the build where it's safe.)
  2. If you are using gcc-4.2.2 or newer you can also use -march=native or -mtune=native.
  3. 64 bit profile (amd64):
CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=native -mtune=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"




Apache auth in PHP

Пример кода для реализации аутентификации в PHP средствами Apache:
(не тестировалось)
session_start();
error_reporting(2047);
$user = '112';
$pass = 'test';

$authorized = false;

if(isset($_GET['logout']) && (0!=$_SESSION['user_id'])) {
$_SESSION['auth'] = false;
unset($_SESSION['user_id']);
header("Location: ./googby.html");
// session_destroy();
echo "logging out...";
}

if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
if (($user == $_SERVER['PHP_AUTH_USER']) && ($pass == ($_SERVER['PHP_AUTH_PW'])) && $_SESSION['auth']) {
$authorized = true;
$_SESSION['user_id']=intval($_SERVER['PHP_AUTH_USER']);

}
}

if ((! $authorized)) {
header('WWW-Authenticate: Basic Realm="Login please"');
header('HTTP/1.0 401 Unauthorized');
$_SESSION['auth'] = true;
print('Login now or forever hold your clicks...');
// header("Location: ./access_denied.html");
exit;
}

?>
?logout">exit

Как выбрать повторяющиеся записи в таблице

Еще один трюк, сам до этого ни за что бы не додумался, где то подсмотрел.

Запрос, показывающий повторяющиеся записи в таблице:

SELECT subject, сount(subject) AS retry
FROM myTable
-- where ....
GROUP BY subject
HAVING ( (Count(subject))>1 );

Количество записей возвращаемых MySQL без учета limit

Иногда нужно получить полное число записей в таблице. При этом в скрипте уже есть запрос, возвращающий часть записей (limit).

Чтобы обойтись одним запросом к базе, можно использовать такой код:
$query="select SQL_CALC_FOUND_ROWS id [, ...] from table_tb limit 1,1";
....
$result=mysql_query($query);
....
$result_=mysql_query('SELECT FOUND_ROWS() as total_count');