Archive

Archive for the ‘Программирование’ Category

Использование NeroAAC для кодирования под Linux

February 26th, 2012 No comments

Те, кто сталкивался с кодированием видео для он-лайна на своих серверах под Linux наверняка в курсе, что средства FFMPEG для кодирования звука в AAC, а именно библиотека libfaac дает ужасное качество на низких битрейтах. Работа над ней была заброшена несколько лет назад и она не поддерживает профиль HE. Ища выход из сложившейся ситуации оказалось, что все не так плохо и для этих целей можно использовать neroAAC (само собой только для личных целей, читайте лицензию ^_^), который дает потрясающие результаты даже для битрейтов вроде 32кбпс.

1) Качаем последнюю версию отсюда: http://www.nero.com/eng/release-notes-nerodigital-nero-aac-codec.html
2) Находим в архиве linux/neroAacEnc и копируем на сервер
3) Устанавливаем: install –D –m755 linux/neroAacEnc /usr/bin/

Предположим раньше мы кодировали так:
/usr/bin/ffmpeg -i "input.mp4" -pass 1 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -an "tmp.mp4"
/usr/bin/ffmpeg -i "input.mp4" -pass 2 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -acodec libfaac -ab 128k -ac 2 -async 1 "tmp2.mp4"
/usr/bin/qt-faststart "tmp2.mp4" "out.mp4"

Теперь это будет выглядеть так:
/usr/bin/ffmpeg -i "input.mp4" -pass 1 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -an "tmp.mp4"
/usr/bin/ffmpeg -i "input.mp4" -pass 2 -vcodec libx264 –vpre hq -f mp4 -b 400k -bt 400k -an "tmp2.mp4"
/usr/bin/ffmpeg -i "input.mp4" -acodec pcm_s16le -vn "audio1.wav"
/usr/bin/neroAacEnc -br 65536 -2pass -if "audio1.wav" -of "audio1.aac"
/usr/bin/ffmpeg -i "input.mp4" -i "audio1.aac" -acodec copy -vcodec copy -f mp4 "tmp3.mp4"
/usr/bin/qt-faststart "tmp3.mp4" "out.mp4"

Пояснения построчно:
1) Первый проход кодирования видео (без звука)

2) Второй проход кодирования видео (без звука)

3) Вытаскиваем звуковую дорожку из видео в несжатом виде

4) Кодируем звуковую дорожку в AAC-формат

5) Собираем звук и видео в единый файл без перекодирования

6) Переносим метаданные в начало файла

Profit!

Решение проблемы в MediaWiki с большими категориями (Large Categories)

February 15th, 2011 No comments

На одном из проектов используется движок MediaWiki. В некоторых особенно больших категориях находится до 40000 статей. После обновления до версии 1.16 было обнаружено, что при заходе на страничку с листингом категории. SQL запрос выполняется более 30 секунд (на не самом медленном сервере).

Пришлось искать решение, но в открытых источниках оно так и не было найдено, так что я посмотрел, как это было сделано в старых версиях движка. Итак, критическое место:
Read more…

Оптимизация форума PHPBB2 под большую нагрузку (Highload)

January 6th, 2011 4 comments

Достался на поруки большой форум, построенный на базе PHPBB2. Я в курсе, что двигло старое и надо бы заменить, но предыдущий админ предупредил, что они уже пытались переехать на phpBB3 и это привело к диким тормозам и им пришлось съехать обратно. В довесок на самом форуме навешано много всяких МОДов, часть функционала которых отсутствует в 3 версии. Поэтому пока сидим на старом движке. И поскольку он больше не поддерживается и обновлений не предвидится, то я ручками ковыряюсь в исходниках.

Итак, форум, посещаемость около 30000 хостов в день и около 200К просмотров в день. В базе данных около 5 миллионов записей. БД весит около 3.5 Гбайт. Самая большая таблица с записями 3 Гбайта (не в последнюю очередь из-за индекса). В он-лайне постоянно от 300 до 700 человек. На форуме уже был установлен МОД Extreme Styles (и насколько я понял он серьезно снижает нагрузку), который кэширует шаблоны. Дополнительно на сервере были установлены ускорители eAccelerator и ZEND для PHP. Все эти действия привели к тому, что сам PHP и Apache не съедают много ресурсов. В данный момент главное узкое место – жесткие диски (обычные SATA), часть операций из-за размера БД неизбежно выполняется с использованием винчестера. В данный момент рассматриваем возможность переезда на другой сервер с SAS дисками. Текущий выделенный сервер, в общем, справляется с нагрузкой, но иногда в моменты пиковых нагрузок таблицы переходят в состояние «locked» и другие пользователи вынуждены подолгу ждать своей очереди, а то и вовсе получают сообщение об ошибке. Форум постоянно растет (за пол года +10К хостов в день) и вопрос переезда становится все актуальнее. А пока было время, я занимался оптимизацией.

Read more…

Ошибка с комментарием к другому посту в WordPress

April 12th, 2010 No comments

Словил забавный баг в WordPress. При комментировании любого поста, коммент оставлялся к рандомному посту на сайте. Исследование пациента показало, что код для генерации комментариев содержит использование глобальной переменной $id. Естественно во время правки кода шаблонов и не зная, об этой особенности, я неоднократно использовал переменную с таким же именем.

Кому пришло в голову использовать в качестве глобальной, такую часто встречаемую переменную ума не приложу. =)

Автоматическое создание Torrent’ов для раздачи файлов на вебсервере Apache + MySQL + PHP

March 1st, 2010 32 comments

Столкнулся с тем, что на одном из моих сайтов трафик по файлам серьезно вырос с ростом посещаемости ресурса. Файлов достаточно много, средний размер около 80 мб. После отключения файлового сервера за нагрузку и вынужденный переезд стал думать в сторону торрентов, что бы снизить прямую нагрузку на файловый сервер и даже иметь возможность какое-то время обходится без него в случае поломок и.т.д.

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

1) Трекер. Для моих целей не нужна регистрация пользователей и не нужен рейтинг, поэтому была взята простейшая его реализация, что бы можно было встроить в свой код. Вуаля трекер всего несколько килобайт веса с минимальным количеством кода, с которым легко разобраться и всего с одной таблицей в БД: OpenTracker. Правда пришлось его слегка переделать и сменить mysql_pconnect на mysql_connect. Что бы коннекты долго не оставались висячими и не достигался лимит подключений БД. Рекомендую ставить трекер на отдельную БД, в случае если нагрузка будет большой. Если вы установили OpenTracker В папку torrent на сервере, то ваш Announce URL для создания торрентов будет: http://yoursite.ru/torrent/announce.php

2) Когда у вас есть трекер хорошо бы автоматизировать создание торрент файлов. Мне удалось встроить это в админку с использованием свободного класса «Torrent RW». Использование класса не просто, а очень просто. Например, для создания торрента для заданного файла требуется 4 строчки:

$torrent = new Torrent( ‘./path-to-file-or-folder’, ‘ http://yoursite.ru/torrent/announce.php’ );
if ( ! $error = $torrent->error() ) // error method return the last error message
$torrent->save(‘test.torrent’); // save to disk
else
echo ‘DEBUG: ‘,$error;

3) Третий компонент это сидер который раздает первую копию файла. Третьим компонентом можете быть вы сами с домашнего компьютера. Если же хочется что бы и раздачу делал сервер, то для этого можно использовать PHP программу TorrentFlux. Ставится в несколько кликов на Web-сервер и управляется через браузер. Добавляете через веб-интерфейс торрент указываете файл и сервер сам раздает файлик. К сожалению мне не удалось сходу автоматизировать раздачу после создания торрента. Приходится делать это руками. Если вдруг кому удастся дайте знать. =)

Как работает поиск Яндекса?

September 27th, 2009 9 comments

После участия в конкурсе от Яндекса (Интернет математика) мне стал понятен алгоритм работы и ответы на всякие мелкие вопросы, вроде, почему апдейты проходили раз в несколько дней. Все очень просто.

У Яндекса есть группа асессоров – так называемых оценщиков релевантности документов. Они составляют список вида: страница – запрос – релевантность. В этом списке сотни тысяч страниц. Релевантность варьируется от значений совсем не релевантно (0), до полностью релевантно (5). Одновременно с этим у Яндекса для каждой страницы в интернете есть набор параметров (ВИЦ, и.т.д) и часть параметров которые можно рассчитать в процессе запроса (количество слов в запросе, частота запрошенных слов на странице). Всего таких параметров на конкурсе было 245 штук, что, скорее всего, недалеко от реального числа используемого Яндексом. По списку асессоров и набору параметров для каждой страницы из списка строится модель по «Методу опорных векторов». Построение модели довольно трудоемкий процесс. Например, во время конкурса, модель на сложных алгоритмах у меня дома строилась порядка суток и больше.

Read more…

Смена NS-Серверов в RU-CENTER

July 1st, 2009 1 comment

Как меня бесит следующее письмо от РУ-Центра:

Тестирование DNS-серверов для домена ‘………’ успешно
завершено. Новый список DNS-серверов для домена ‘………..’:
n1.sdfsdf.ru.
n2.sdfsdf.ru.

Изменения вступят в силу после очередного обновления информации в зоне RU.
Зона обновляется 4 раза в сутки: в 2, 10, 14, 19 часов.

В итоге переезд сайта занимает несколько часов, потомучто проходит нехилое время
от изменения до тестирования и ещё более не хилое время до одной из этих дат. Для
посещаемого сайта это немалая потеря информации.

Как-то менял NS-сервера для COM домена зарегенного на Godaddy. Весь процесс переезда
занял 3 минуты.

Доколе? =)

March 13th, 2009 No comments

Для программистов, любящих задачки:

http://company.yandex.ru/grant/2009/datasets

Ещё про Google

July 30th, 2008 2 comments

Интересная статистика.

Прошло квалификацию всего 6773 человека. Больше всего из Индии (1019), США (950) и Китая (857), Россия (373) на четвертом.

Закончился первый раунд. Во второй прошло чуть больше 2500 человек. Распределение прошедших по странам можно посмотреть здесь. Больше всего осталось в строю участников из Китая (440), США (301) и России (227). Индусов осталось 180, как и предполагалось. =))

Google CodeJam

July 28th, 2008 No comments

Прошел в следующий тур с первой попытки, но, что называется со скрипом, аж с 500 места. Двух часов мне без тренировки не хватает, идея по решению приходит быстро, но пока её закодишь уже время начинает поджимать. Единственное утешает, что судя по всему Round1B был самым сложным.

Code Jam 2008

July 18th, 2008 4 comments

Прошел в следующий тур Google Code Jam. Задачки были довольно простые. Решил две задачи из трех, хотя хватило бы и одной полностью решенной. Вторую решал для подстраховки. Третья задача хоть и была полностью понятной, могла взорвать мозг своей геометрической составляющей, так что на неё я забил. =) Кстати для неё можно было просто формулу придумать или всё-таки без циклов не обойтись?

Администрирование MySQL

May 7th, 2008 1 comment

Вопрос возможно дурацкий, но поиск в интернете не дал нужного результата. Есть MySQL БД в ней много пользователей и таблиц. У меня есть админский доступ к консоли через mysql и mysqladmin. Как можно посмотреть или сгенерировать срез (к примеру за час) кто из пользователей БД создает максимальную нагрузку? Ну и дополнительно какая таблица и какой тип запросов наиболее критичны?

Буду признателен за помощь.

Маленькое местное соревнование

April 25th, 2008 6 comments

Ходил на турнир по программированию (давал анонс о нем в профильных комьюнити) и выиграл. Проводилось всё по стандартной ACM’овской системе. Последнюю, четвертую задачу сдал на 39 минуте и сорвал интригу конкурса. Организаторы хотели объявить победителей на церемонии награждения. Что ж второе и третье место на момент моего ухода были свободны. Главная проблема отсутствия конкуренции, малое количество участников и слишком легкие задачи, без финального гроба. Если бы там был хоть кто-нибудь из реальных участников ACM, то соревнование превратилось бы в соревнование на скорость кодинга. Из плюсов мне дадут приз и грамоту, из минусов надо будет ехать на московский тур.

ZCon 2008. Заметки

March 28th, 2008 6 comments

На соревновании по программированию собрались просто монстры. =) Ломают вот эту капчу:

http://zcontest.ru/2008.02/crimage/create.php

с более чем 70%-ной вероятностью…

Турнир этого года

March 13th, 2008 No comments

Новость специально для программистов среди моих френдов.

15 марта в 2 часа ночи по МСК стартует турнир ZCon 2008. Задачи совместно с fdo_eq я готовил долго и тщательно, так что должно быть интересно. На данный момент доступна тестовая задача, что бы потренироваться: http://www.spoj.pl/ZEL08/problems/ZTEST/