Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode

Пластилиновый мультик

Сделали с дочей мультик из пластилина.

Делается так:

convert -delay 20 -loop 0 *.jpg mygif.gif

Вот результат:

Пластилиновый мультик

Еще полезное:

Сделать из кадров ролик:

convert -delay 20 -loop 0 *.jpg mympg.mpg

MOV из gif:

convert mygif.gif mymov.mov

Видео на YouTube:

Смотреть на YouTube

Топ 7 ботов за сутки

По результатам выборки из логов сервера за 1 сутки.

  1. Googlebot — 43 229 запросов
  2. YandexDirect — 21 260
  3. Mediapartners-Google — 14 386
  4. Mail.RU_Bot — 13 715
  5. YandexBot — 13 079
  6. AhrefsBot — 11 997
  7. openstat ru/Bot — 2 709

Выводы:
Гугл предсказуемо обошёл всех и вся. Честь и хвала ему.
Удивил Mail.RU, который обошёл Яндекс.
Что касается Яндекса, то очевидно, что приоритет Яндекса — их рекламная сеть. И уже потом поисковые технологии.

Read full post gblog_arrow_right

Google Chrome и "-" 400 0 "-" "-"

Еще раз к вопросу откуда в логах берутся строки вида:

1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"

При медленном соединении удалось отловить эффект появления таких записей в браузере и увидеть все вживую.

Вот тут видно, как Chrome отправил два запроса, держит соединение открытым, а потом закрывает:

chrome-400

А секундой позже уже загружает то, что его просили.

chrome-400-1

Успел сделать снимки экрана.

Повторить эксперимент можно либо подключившись к медленному каналу, либо намеренно ограничив скорость соединения на стороне веб-сервера.

Баним ботов. Часть 2

Небольшой анализ логов сервера. Какие странные сущности обитают в Интернете. И как с ними бороться.

Открытые подключения

В логах nginx’а обнаружил десятки тысяч записей вида:

1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"

Судя по количеству и частоте запросов, достаточно большое число таких запросов сделано именно ботами.

Read full post gblog_arrow_right

Баним ботов. Часть 1

В один прекрасный день мне надоело видеть у себя в логах такое вот безобразие:

113.204.67.51 - - [19/Jan/2013:07:22:08 +0400] "GET /phpmyadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:12 +0400] "GET /PMA/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:17 +0400] "GET /pma/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:17 +0400] "GET /admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:18 +0400] "GET /dbadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:19 +0400] "GET /sql/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:20 +0400] "GET /mysql/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:20 +0400] "GET /myadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:21 +0400] "GET /phpmyadmin2/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:22 +0400] "GET /phpMyAdmin2/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:23 +0400] "GET /phpMyAdmin-2/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:23 +0400] "GET /php-my-admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:24 +0400] "GET /sqlmanager/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:25 +0400] "GET /mysqlmanager/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:26 +0400] "GET /p/m/a/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:26 +0400] "GET /php-myadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:27 +0400] "GET /phpmy-admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:28 +0400] "GET /webadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:29 +0400] "GET /sqlweb/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:30 +0400] "GET /websql/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:31 +0400] "GET /webdb/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:31 +0400] "GET /mysqladmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:32 +0400] "GET /mysql-admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"

и решил я всех этих мерзких ботов забанить.

Read full post gblog_arrow_right

Как в PHP узнать протокол (https)

Оказывается, узнать, что сайт использует SSL и страница открыта по протоколу https — не настолько тривиальная задача, чтобы решить её с наскока.
Однако, решение оказалось достаточно простое.

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

$_SERVER['HTTPS']
$_SERVER['HTTP_SCHEME']
$_SERVER['HTTP_X_FORWARDED_PROTO']

И косвенно:

$_SERVER['SERVER_PORT']

Но все эти переменные, кроме номера порта, почти наверняка будут отсутствовать.
Определять http-схему, основываясь только на номере порта — приемлемое, но не очень гибкое решение.

Read full post gblog_arrow_right

Мозаика из фотографий с помощью convert (ImageMagick)

Из фотографий или картинок одинакового размера можно сделать мозаику. Получается интересный эффект.

Для этого я написал два bash-скрипта.

Первый уменьшает размеры фотографий, второй делает из миниатюр мозаику.

Скрипт для уменьшения фотографий

#!/bin/bash

SW=150
SH=150
FROMDIR="fromdir"
TODIR="todir"

for name in $(ls $FROMDIR); do
  convert -resize ${SW}x${SH} -strip $FROMDIR/$name $TODIR/$name
done

Здесь:

  • SW — ограничение ширины миниатюры;
  • SH — ограничение высоты миниатюры;
  • FROMDIR — каталог, в котором находятся фотографии;
  • TODIR — каталог, в который будут сложены миниатюры.

Скрипт для создания мозаики из миниатюр

#!/bin/bash

SW=150
SH=112
COLS=15
REZFILE="mosaic-`date "+%Y-%m-%d_%H_%M_%S"`.jpg"
FDIR="small"

(
echo "convert $(i=0 && for name in $(ls $FDIR | sort -R); do echo -n " -page +$[($i%$COLS)*$SW]+$[(($i-$i%$COLS)/$COLS)*$SH] $FDIR/$name"; i=$[$i+1]; done) -mosaic $REZFILE"
)

Здесь:

Read full post gblog_arrow_right

Установка Redis via unix.socket

О том, как установить Redis в качестве сервера на Linux и обращаться к нему через Unix.socket

По мотивам куцей доки: http://redis.io/topics/quickstart и http://redis.io/download

От рута делаем:

mkdir /usr/src/redis
cd /usr/src/redis
wget http://redis.googlecode.com/files/redis-2.4.4.tar.gz
tar xzf redis-2.4.4.tar.gz
cd redis-2.4.4
make && make test

Если тесты прошли нормально (должно быть написано что-то вроде этого: “\o/ All tests passed without errors!”), то двигаемся дальше.

Read full post gblog_arrow_right

Библиотека для загрузки фотографий на сайт

transImage — это PHP библиотека для простой загрузки фотографий на сайт.

Она умеет:

  • Получать изображение из файла, автоматически нормализовать его размер для экономии памяти
  • Автоматически поворачивать исходное изображение по данным Exif
  • Создавать копии себя с изменёнными размерами, изменять свой размер
  • Наносить водяные знаки. Поддерживает любые водяные знаки, соответствующие интерфейсу waterMark (см. код)
  • Выводить результат клиенту или сохранять его в файловую систему
  • Подкладывать белый фон, если исходное изображение поддерживает прозрачность
  • Быстро создавать миниатюру для предпросмотра, используя миниатюру из Exif
  • Преобразовывать изображения в строку для использования их с data:URI. В этом случае небольшие изображения можно передавать с другими параметрами в формате JSON (при использовании Ajax)

Для более подробной информации смотрите комментарии в коде.

Read full post gblog_arrow_right

Замена салонного фильтра на Fiat Albea

Для замены салонного фильтра понадобятся:

  • фильтр
  • крестовая отвертка
  • фонарик
  • тряпка под коленки
  • хорошая погода

Операция занимает 15 минут. Перед входом со стороны переднего пассажира лучше бросить тряпку, потому что, чтобы добраться до фильтра, придётся встать на колени и залезть под бардачок.

Салон Fiat Albea, вид на место установки фильтра

Вид под бардачком, где расположен салонный фильтр

Фильтр находится под бардачком.

Расположение фильтра крупным планом

Крышка фильтра

Read full post gblog_arrow_right