Блог пользователя Nelex

test

Подружить PulseAudio + Skype + MOCp + другие

skype
Когда у кого не было проблем с PulseAudio? Все они решабельные в основном, но их хватает. И вот после обновления скайпа сейчас без пульсаудио никак не обойтись, но возникает множество проблем. Например звук в Skype не работает когда работает MOCp. Или другие приложения которые используют звук. Решение не новое, но мало ли, может кто еще не видел.

Здесь подсказано отличное решение. Это запуск приложения с параметром к PulseAudio.
Редактируем ярлык добавив параметр PULSE_LATENCY_MSEC=30 перед самым запускаемым файлом.
[Desktop Entry]
Name=Skype
Comment=Skype Internet Telephony
Exec=PULSE_LATENCY_MSEC=30 skype %U
Icon=skype.png
Terminal=false
Type=Application
Encoding=UTF-8
Categories=Network;Application;
MimeType=x-scheme-handler/skype;
X-KDE-Protocols=skype


Ну или если с консоли запускаем то просто пишем команду:
PULSE_LATENCY_MSEC=30 skype&
Ну или тот же MOCP:
PULSE_LATENCY_MSEC=30 mocp
Все вроде. Это позволяет подружить приложения между собой.
test

Перестраиваем Nested Sets в PrestaShop SQL запросом

Добрый человек описал алгоритм и функцию перестройки левого и правого индексов для Nested Sets.
Статья на хабре
Код на SQL Fiddle

Происходит восстановление индексов для значения по id_parent

Для PrestaShop этот код выглядит так:
-- По умолчанию у индексов значение 0, сменим на NULL
alter table pref_category modify nleft int unsigned default null;
alter table pref_category modify nright int unsigned default null;

DELIMITER //

-- Создаём ту самую функцию
DROP FUNCTION IF EXISTS rebuild_nested_set_tree//
CREATE FUNCTION rebuild_nested_set_tree()
RETURNS INT DETERMINISTIC MODIFIES SQL DATA
BEGIN
-- Изначально сбрасываем все границы в NULL
UPDATE pref_category t SET nleft = NULL, nright = NULL;

-- Устанавливаем границы корневым элементам
SET @i := 0;
UPDATE pref_category t SET nleft = (@i := @i + 1), nright = (@i := @i + 1)
WHERE t.id_parent = 0;

forever: LOOP
-- Находим элемент с минимальной правой границей -- самый левый в дереве
SET @id_parent := NULL;
SELECT t.id_category, t.nright FROM pref_category t, pref_category tc
WHERE t.id_category = tc.id_parent AND tc.nleft IS NULL AND t.nright IS NOT NULL
ORDER BY t.nright LIMIT 1 INTO @id_parent, @parent_right;

-- Выходим из бесконечности, когда у нас уже нет незаполненных элементов
IF @id_parent IS NULL THEN LEAVE forever; END IF;

-- Сохраняем левую границу текущего ряда
SET @current_left := @parent_right;

-- Вычисляем максимальную правую границу текущего ряда
SELECT @current_left + COUNT(*) * 2 FROM pref_category
WHERE id_parent = @id_parent INTO @parent_right;

-- Вычисляем длину текущего ряда
SET @current_length := @parent_right - @current_left;

-- Обновляем правые границы всех элементов, которые правее
UPDATE pref_category t SET nright = nright + @current_length
WHERE nright >= @current_left ORDER BY nright;

-- Обновляем левые границы всех элементов, которые правее
UPDATE pref_category t SET nleft = nleft + @current_length
WHERE nleft > @current_left ORDER BY nleft;

-- И только сейчас обновляем границы текущего ряда
SET @i := (@current_left - 1);
UPDATE pref_category t SET nleft = (@i := @i + 1), nright = (@i := @i + 1)
WHERE id_parent = @id_parent ORDER BY id_category;
END LOOP;

-- Возвращаем самый самую правую границу для дальнейшего использования
RETURN (SELECT MAX(nright) FROM pref_category t);
END//

DELIMITER ;


Запускаем переиндексацию:
SELECT rebuild_nested_set_tree();


Вот и все, дерево переиндексировано. Вернем на место значения по умолчанию для индексов, так как с null индексы не работают, их и не должно быть:
alter table pref_category modify nleft int unsigned default 0;
alter table pref_category modify nright int unsigned default 0;
test

C++ Отправка писем через Защищенное соединение SSL SMTP Yandex с использованием libcurl

cURL
Ну вот, добрался я таки до своего любимого C++. Разное использовал: PHP, JS, JQuery, C#, Asterisk и прочее с ними взятое. Все это в большей степени под Debian GNU\Linux. Но больше всего люблю именно C++. И вот стала задача, переписать воркеры(самостоятельные демоны для сайта), которые висят в фоне в определенном количестве, получают задачу от Gearman и выполняют ее. Вот один из них просто отправляет почту. Используем для этих целей smtp Yandex.ru. Все удобно и стабильно. До этого роль воркера выполняли PHP+Swiftmailer, но PHP не язык для подобных целей. Итак, хватит введения.
Можно подключаться через 25-й порт на smtp:://smtp.yandex.ru:25, но много провайдеров которые блокируют 25 порт и тем самым вы увидите сообщение:
Immediate connect fail for ####:###::##: Network is unreachable Trying ####:###::##...

По этому же поводу я общался со своим провайдером.

Комментариев особо не будет. Все достаточно просто. Сам код я взял отсюда, попутно поправив пару моментов.
Итак, сам код:
test

Верстка под Android с помощью смартфона и Developers Tools

Всем кто занимается версткой под андроид не хватает Developer Tools в Chrome на смартфонах и планшетах Android. Но не каждый знает что можно с компьютера использовать Developer Tools для подключенного к нему планшету/смартфону. А делается все очень просто.
  1. Подключаете через USB устройство
  2. Подключаемое устройство выведет меню и в нем мы разрешаем отладку (Отладка по USB | "Enable USB debugging on your Android device")
  3. На компьютере в Chrome/Chromium в строке для URL вводим chrome://inspect и жмем Enter.
  4. На вкладке Devices Включаем Discover USB devices
  5. В списке появятся подключенные к компьютеру устройство
  6. Под нужным устройством нажимаем inspect
После этой последовательности действий Chrome/Chromium создаст новое окно в Developer Tools отображаемом для выбранного устройства. Выглядит это так:


Более подробно можно глянуть здесь.
test

Для тех кто столкнулся с невозможностью установки Adobe Flash Player под Chromium(Chrome) в Linux

Обновился до Chromium "Версия 35.0.1916.114 Debian jessie/sid (270117)".
Как итог, отсутствие Adobe Flash Player. Не долго гуглив оказалось что уже создан пакет PepperFlashPlayer который поддерживается Google-м. Достал Adobe, наверное это у него такой маркетинговый ход, заявлять о себе путем багов и отсутсвия плеера в браузерах.
В общем, пакет присутствует в Non-free, так что в /etc/apt/source.list не забудьте дописать "non-free" в строке репозитория.
После этого
# apt-get update
# apt-get install pepperflashplugin-nonfree

Перезапускаем браузер и в адресной строке браузера вводим chrome://plugins. Там должен был появиться Adobe Flash Player.

Вот и все.
test

Linux проверка S.M.A.R.T. информации диска или на сколько живой ваш винт

Собственно если вы взяли VPS состояние винта вас мало интересует. Вся ответственность полностью на хостере. Но в тоже время, если вы берете Dedicated(Выделенный) сервер, ситуация уже обратная. Но не буду плодить статьи, все и так четко и понятно в Этой статье.
test

Создаем темы для Chromium v34+(aka Google Chrome)

Бывает так что существующие темы уже попросту допекли. Хочется создать свою тему. А иногда просто хочется разгрузить мозги и сделать что-то простое и приятное. Чем и займемся. Сильно с темизацией конечно не разгонишься, но кое-что приятное сделать можно. Если что-то будет непонятным, есть официальный гайд по созданию темы для браузера хром. Немного анатомии тем для хромиума/хрома.

Картинки

Используется 5 картинок: 1) Фрейм темы – Картинка отображается как рамка для кнопок "Закрыть", "Развернуть", "Свернуть". Если вы решите их не использовать(не добавите в свою тему), браузер будет использовать картинки с дефолтной темы. Требование к картинкам: Минимальная высота: 30px. Нет ограничений по ширине. Панелька(toolbar) – Фоновая картинка для кнопок "Назад", "Вперед", "Обновить" и всего этого ряда кнопок. Требования: Минимальная высота: 120px. Нет ограничений по ширине. Бекграунд для вкладок(табов) – Картинка используется для неактивных вкладок, когда открыто несколько вкладок. Требования: Минимальная высота: 65px. Бекграунд для вкладки "Добавить новую" – Эта картинка отображается в основной части окна для вновь созданной вкладки. Минимальный рекомендуемый размер 800x600, но любая картинка будет масштабирована под разрешение. Атрибуты темы – Картинка отображаемая в правом нижнем углу любой темы для Хрома.
test

Используем Gearman(менеджер очередей) в Kohana 3 или любом другом PHP сайте

Gearman stack

Что такое Gearman?

Введение весьма неплохо описано тут
Если вкратце то Gearman это менеджер очередей состоящий из трех компонентов:
  • сервер задач — является центральной частью Gearman, именно сюда будут приходить задачи и результаты от клиентов и исполнителей, и именно отсюда будут высылаться задания и результаты, исполнителям и клиентам соответственно.
  • исполнитель — является основной частью, где необходима реализация какой-либо функциональности. Исполнитель принимает и пытается выполнить задание от сервера.
  • клиент — также имплементируется отдельно, создаёт и отсылает задачу на сервер и, в некоторых случаях (о них — позже), получает результат.
Картинка в топе поста показывает алгоритм работы с Gearman-ом.

Кратко от авторов Gearman

  • Open Source и BSD лицензия.
  • Мультиязычность - Большой список поддерживаемых языков.
  • Гибкость - Вы не ограничены какими-либо паттернами проектирования.
  • Скорость - Gearman работает на простом протоколе и с оптимизированным интерфейсом, потоками. Сервер написан на C/C++ для минимизации оверхедов.
  • Встраеваемый - быстры и легкий, удобен для любых масштабов приложений. Так же легко внедряется в существующие приложения с минимальным оверхедом.
  • Нет единой точки отказа - Gearman помогает не только в масштабировании систем, но и в повышении отказоустойчивости.
  • Нет ограничений на размер сообщения - Gearman поддерживает размер каждого сообщения до 4Гб в размере. Нужно больше? Не проблема, Gearman может делить сообщения на части.
  • Обеспокоены масштабированием? - Не стоит. Craig’s List, Tumblr, Yelp, Etsy,… откройте для себя то о чем они уже знают годами.
Пример, прекрасно иллюстрирующий для чего он нужен так же описан был на хабре весьма точно:
Пользователь закачал фотографию на сайт, и хочет показать её всем своим друзьям. Необходимо быстро подготовить различные размеры данной фотографии, для использования по всему сайту. Да, до определённого момента все работы по генерации графики можно проводить в основном коде системы, а потом придёт хабраэффект, и вся система рухнет под наплывом желающих. Теперь рассмотрим как эту задачу можно решить с использованием Gearman — при получении фотографии, мы создаём задачу для gearman сервера, в которую входит необходимая информация о фотографии (в принципе возможно включить в задачу даже саму фотографию, но, мне кажется, это будет накладно, лучше использовать адрес) и отправляем её на выполнение. Сервер задач выбирает (round robin) свободного исполнителя (как Вы наверное уже догадались, исполнителей может быть несколько) и отсылает задачу на выполнение. Исполнитель получает всю необходимую информацию, обрабатывает её как нам бы этого и хотелось — и отправляет ответ об успешно выполненной задаче и, если задача была синхронная, результат работы.
Врапперов к языкам для работы с Gearman достаточно много, так что все основные языки будут иметь возможность взаимодействовать с ним, среди них perl, php, python, java, C и другие. Сервер имеет возможность сохранять очередь задач в какое-либо хранилище, чтобы при рестарте была возможность восстановить весь процесс без потери данных. Хранилищем может выступать MySQL/drizzle, memcached, PostgreSQL или sqllite. Основной обьект над которым происходит вся работа в системе - Задача(Task), имеющая параметры. Идентифицируются задачи по ключу Название/Параметры. При полном совпадении ключей двух задач, будет выполнена только одна, остальные идентичные ей будут отброшены.

Установка

apt-get install gearman gearman-server gearman-job-server gearman-tools  php5-gearman
test

Выбор между альтернативными версиями приложений/библиотек в Debian/Ubuntu Linux

В Debian-based системах бывают по несколько версий приложений одного и того же типа. К примеру может быть установлено несколько текстовых редакторов. Если вы хотите выбрать приложение по умолчанию то команда update-alternatives вам пригодиться. Запустите команду и получите список альтернатив для выбора. Я покажу пару команд для выбора приложения по умолчанию.

test

Используем Celery+RabbitMQ на Kohana 3(да и на любом php-based сайте с подключенным composer) на Debian Linux

Celery Logo

Предисловие

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

Что такое Celery(Сельдерей)

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

И так, что же умеет Celery:

  • Выполнять задания асинхронно или синхронно
  • Выполнять периодические задания(умная замена crond)
  • Выполнять отложенные задания
  • Распределенное выполнение (может быть запущен на N серверах)
  • В пределах одного worker'а возможно конкурентное выполнение нескольких задач(одновременно)
  • Выполнять задание повторно, если вылез exception
  • Ограничивать количество заданий в единицу времени(rate limit, для задания или глобально)
  • Routing заданий(какому worker'у что делать)
  • Несложно мониторить выполнение заданий
  • Выполнять подзадания
  • Присылать отчеты об exception'ах на email
  • Проверять выполнилось ли задание(удобно для построения Ajax приложений, где юзер ждет факта завершения)

Подготовка

test

Kohana 3: используем Composer(менеджер пакетов для проекта)

Что такое Composer?

Composer (getcomposer.org) — это относительно новый и уже достаточно популярный менеджер зависимостей для PHP. Вы можете описать от каких библиотек зависит ваш проект и Composer установит нужные библиотеки за вас! Причём Composer — это не менеджер пакетов в классическом понимании. Да, он оперирует с сущностями, которые мы будем называть «пакетами» или библиотеками, но устанавливаются они внутрь каждого проекта отдельно, а не глобально (это одно из основных отличий от старого-доброго PEAR).

Кратко, как это работает:
У вас есть проект, который зависит от нескольких библиотек.
Некоторые из этих библиотек зависят от других библиотек.
Вы описываете в своём проекте те библиотеки, от которых непосредственно зависит ваш код.
Composer находит нужные версии требуемых библиотек для всего проекта, скачивает их и устанавливает в папку вашего проекта.

При создании Composer авторы черпали идеи и вдохновение из аналогичных проектов: npm для Node.js и Bundler для Ruby.
Так нам об этом говорит Хабр

Composer и Kohana 3

Composer включен в Kohana 3 по умолчанию, использовать его легко и просто.

Ищем нужный нам пакет в репозитории.
Нашли? Открыли? В описании мы видим графу require: "massivescale/celery-php": "dev-master"

Дальше в корне проекта выполняем:

php composer.phar require  massivescale/celery-php

После этого composer спросит версию репозитория с которого тянуть файлы, вписываем ему dev-master и жмем Ввод. Выглядит это так:

Please provide a version constraint for the massivescale/celery-php requirement: dev-master

Дожидаемся сообщения.

./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing videlalvaro/php-amqplib (v2.2.6)
    Downloading: 100%        

  - Installing massivescale/celery-php (dev-master df7be31)
    Cloning df7be316f47bf6f812f08e2142f40da5ef39a041

Writing lock file
Generating autoload files

Которое означает что пакет был добавлен в папку vendor. В ту же папку Composer скачает все пакеты от которых зависит скачиваемый вами пакет.

Так же может быть что Composer выдаст сообщение требующее обновление его самого:
This dev build of composer is outdated, please run "composer.phar self-update" to get the latest version.
Так и делаем:

php composer.phar self-update

Но это немного не все. Чтобы включить Autoloader в Kohana 3 и использовать библиотеки нужно добавить строку в bootstrap.php:

require(DOCROOT.'vendor/autoload.php');

Добавляем его до загрузки модулей.

Автоподгрузка классов Composer уже встроена в Kohana 3, по этому кроме добавления выше указанной строки других сложностей в использовании пакетов не возникает:

$c = new Celery('localhost', 'myuser', 'mypass', 'myvhost');
$result = $c->PostTask('tasks.add', array(2,2));

Все остальное по аналогии.

test

Переполнение корневого раздела Debian/Ubuntu

В очередной раз столкнулся с тем что корневой раздел сильно засорился. Чем, было не понятно. Оказалось что при каждом apt-get update и aptitude update полученные списки файлов сохраняются в директории /var/lib/apt/lists/partial, это легко оказалось выяснить введя команду:
du -xh /var | sort -n |grep G
Из 61Гб под рутовый раздел, 31Гб занимали файлы в этой директории. Сразу оговорюсь, система стоит давненько, обновляю достаточно часто. Сижу на миксе из experimental/testing.

Чуть погуглив нашелся и ответ. Заключается в простом удалении всех файлов из данной директории. Содержимое директории будет пересоздано при новом обновлении списка пакетов, но уже со свежими записями. Вот вам и занятость диска.

test

Хостинг который я рекомендую

Хостинг unihost.com

Нет времени распыляться на описание данного хостера, как делают многие блогеры, я лучше еще кусок какого-либо из своих проектов за это время напишу(На блог внимание не обращать, реально руки не доходят его переписать).
Скажу основное:
Повесил собственноручно около десятка сайтов на данный шаред хостинг за этот год. Из них несколько самописных на фреймворке Kohana 3, несколько на Drupal. 1000+ в день держит спокойно. Саппорт вменяем. Обращался раз 6 за год. Пару раз просто уточнить некоторые детали. Все вопросы очень быстро решаются через онлайн-чат с саппортом. ISPmanager, FTP доступ, PhpMyAdmin, прочее. Так что, со спокойной совестью рекомендую.

test

Профилирование запросов и статистика в СУБД MySQL/MariaDB

Что должен делать IT-шник постоянно? Правильно, это знает наверное каждый - учиться. И вот расширяя кругозор и углубляясь все больше и больше в использование Баз данных я сделал очередной виток в поиске полезной информации по инструментарию который использую.

test

Темы для Awesome WM

Простые темы

tree clean theme
Репозиторий тем для Aweome WM.
Качаем, скидываем в /home/username/.config/awesome/themes содержимое. Редактируем файл /home/username/.config/awesome/rc.lua
Заменяя в строке:
beautiful.init("/home/username/.config/awesome/themes/snow/theme.lua") на выбранную тему и делаем Ctrl+Mod4(у меня клавиша Windows)+r и смотрим. Сами скриншоты тем можно увидеть в папке 0-screenshots.

Темы поинтересней

Awesome темы покруче. Установка их несколько сложнее, но и вид у них гораздо интересней, достаточно глянуть пару скриншотов тем:
Тема Copland
Copland

Тема Powerarrow Darker
Powerarrow Darker

Установка внутри.

Страницы

Subscribe to RSS - Блог пользователя Nelex