Не знаю почему, но по умолчанию настройки MySQL рассчитаны на десктопы 90-х годов. Например, 8Mb памяти под индексы InnoDB. Помните, как Билл Гейтс заявил, что «640 Кб памяти должно хватать каждому». Дефолтные настройки MySQL из этой серии.

Для начала моя выжимка из конфига (4G RAM, AMD Athlon 64 X2 Dual 5600+)

# ТОЛЬКО UTF! ТОЛЬКО ХАРДКОР!
collation_server=utf8_general_ci
character_set_server=utf8
default-character-set = utf8

# по умолчанию пускай будет InnoDB
default-storage-engine = InnoDB

key_buffer_size = 512M
innodb_buffer_pool_size = 512M
innodb_additional_mem_pool_size = 16M
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8

join_buffer_size = 8M
sort_buffer_size = 8M
read_rnd_buffer_size = 8M
tmp_table_size = 64M
max_heap_table_size = 32M
table_cache = 256

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1

query_cache_type       = 2
query_cache_limit        = 1M
query_cache_size        = 32M

(далее...)

Как известно, PHP — интерпретируемый язык, т.е. каждый раз при обращении к скрипту, этот скрипт компилируется. Если у вас 1 скрипт, то ничего страшного нет, так как время компиляции не большое. Но в современных CMS и фрэймворках при отображении страницы используется 10-300 отдельных php-файлов (проще говоря, инклуды). Чем больше инклудов и чем они тяжелее, тем дольше выполняется процесс компиляции. (далее...)

Статья для новичков. В MySQL есть встроенное средство для отслеживания медленных запросов.

В конфиге нужно просписать

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1

(далее...)

Хорошая статья про собеседование с программистами.

LiveStreet LiveStreet — открытый блоговый движок по функционалу напоминающий Хабр. Особенно рекомендую новичкам для изучения внутренностей в плане правильной архитектуры. Все слышали про MVC, видели красивые схемы в книжках, но для практики нужно посмотреть LiveStreet. И ни в коем случае нельзя изучать архитектуру движков по WordPress — там полнейший ад из сотен инклудов, функций и PHP, перемешанного с HTML и SQL-запросами.

В Nginx есть простая конструкция для кэширования статических файлов на клиенте. Тем самым страницы загружаются быстрее, а сервер не нагружается повторными запросами. Картинки, стили практически не меняются, поэтому ставим 10 лет и не паримся. Даже если файл стилей изменился, то надежней всего добавить какой-нибудь мусор в GET-параметры (например, /style.css?version=23)

server {
     ...

     location ~* ^.+\.(jpg|jpeg|gif|sfw|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
	 root /.../www/ekimoff.ru;
	 access_log   off;
	 expires  10y;
	 add_header  Last-Modified: $date_gmt;
	 error_page 404 = @fallback;
     }

     ...
}

Результат в FireBug

внешний hdd

Вот прикупил внешний HDD Transcend TS500GSJ25M3 500Gb 2.5' USB 3.0 специально для бэкапов. На ноуте всего 80 Гб, да и жалко будет просрать все бэкапы при потере ноута, а вот хард лежит всегда дома. Единстенный минус - на ноуте всего 2 USB, а передача данных и питание HDD идет по двум USB, поэтому приходится отключать мышку и пользоваться тачпадом.

Статья для новичков. Memcached – это такая штука для кэширования данных в оперативной памяти сервера. (далее...)

Оказывается номер пластиковой карты вовсе не случаен. Для нумерации используется алгоритм Луна (Luhn algorithm). Нужен он для проверки правильности номера. (далее...)

На работе пользуемся Мегапланом для управления проектами. Сама система довольно неплоха. Мегаплан существует в двух версиях: онлайн-версия на официальном сайте (или как это сейчас модно называть SaaS) и коробочная версия, когда движок устанавливается на ваш сервер. Плюсы, минусы, подводные камни расписаны здесь.

Около года пользовались онлайн-версией, а потом решили купить коробочную версию. (далее...)

Недавно Вконтакте запустил список популярных групп. Что-то подобное было и раньше, но тогда была сортировка по кол-ву пользователей. Соответственно группа легко накручивалась ботами. Помните наверно группы по продаже часов, в которых было по 500 000 — 1 000 000 пользователей.

Сейчас ранжирование учитывает много факторов. Сердечки, кол-во тем, комментариев, фотоальбомы и многое другое. Алгоритм держится в секрете во избежание накрутки (привет, Яндекс!).
Сейчас топ выглядит так:

группы вконтакте накрутка
(далее...)