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

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

test

Прикольный и удобный FileManager/ImageManager для TinyMCE 4 или другого Wisywig

Responsivefilemanager

Действительно прикольный и удобный файлменеджер для загрузки файлов и картинок. Скачать можно на самом сайте плагина.

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

test

Простая проверка на заполненность полей перед отправкой формы

Валидация
Просто еще небольшая заметка на память, чтобы не копаться по всему интернету. HTML5+CSS3 сейчас сильно упрощает жизнь. Раньше столько сложностей было в том чтобы сделать резиновые формы, а сейчас достаточно использовать условные единицы измеряемые в %% от ширины(vw) или высоты(vh) viewport-а. Как многие знают, размер шрифта используемый единицы em, %% или другие, казалось бы динамические единицы измерения на самом деле берут всего-лишь значение базового шрифта, но сейчас можно использовать все те же vw и vh для задания пропорционального всем другим элементам размера шрифта. Замечу что в хроме и хромиуме, как возможно и во всем остальном на основе webkit, есть баг, при изменении размера окна, размер шрифтов автоматически не пересчитывается. Но этот баг вроде должны поправить к новым версиям.

Ну а сейчас тема немного о другом, раньше для проверки валидации формы на заполнение важных полей, нужно было использовать JS код, сейчас же это заменяется всего одним словом required внутри инпута. Конечно это не отменяет важности проверки на стороне сервера, но на стороне фронта все же проще.

Сама форма, к примеру

test

Скрипт удаления сессий PHP от хостера

Стала задачка выяснить почему сессии хранятся на сервере не более чем пол часа. После этого естественно происходит сброс сессий и пользователь оказывается разлогиненым. Полез в куки посмотреть, там время жизни куки составляло более года. Файл php.ini тоже выглядел вполне нормально, время жизни тоже около года. Немного поискав в кроне обнаружил такой вот скрипт от хостера. Позабавило. Видать для того чтобы не накапливалось большое количество файлов сессий. Вот только зачем удалять так часто?
Сам файл находился по пути /etc/cron.hourly/fornexrmphpsess
С таким вот интересным содержимым.

#!/bin/bash

#внимание!! скрипт рассчитан на выполнение оболочкой BASH!!!!

#засыпаем на случайное время - от 0 до 20 минут
T=$(($RANDOM/27))
sleep $T

#и удаляем все старые сессии PHP
find /tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/www/*/data/*tmp/ -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/tmp/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

find /var/lib/php*/ -maxdepth 3 -nowarn -type f -name "sess_*" -amin +30 -delete

test

CKEditor 4.3 и загрузка картинок в Kohana 3 Framework

Кратко и по сути о том как включить загрузку картинок для CKEditor и прикрутить все это к контроллеру Kohana 3. Ничего сложного, руководствовался статьей

В ckeditor/config.js добавляем строчку:

CKEDITOR.editorConfig = function( config ) {
// Define changes to default configuration here. For example:
// config.language = 'fr';
// config.uiColor = '#AADC6E';
    config.filebrowserUploadUrl = '/upload/image';
};

Добавляем контроллер вида:

class Controller_Images extends Controller_Template
{

    public function action_upload(){
        $callback = $_GET['CKEditorFuncNum'];
        $error = '';
        if (!empty($_FILES['upload']['tmp_name'])) {
            $fileload = $_FILES['upload'];
//папку для картинок создаем заранее и даем права на запись
            $directory = $_SERVER["DOCUMENT_ROOT"]."/public/images/upload/";
            if ($file = Upload::save($fileload, NULL, $directory)) {
                $filename = md5(date("YmdHis").rand(5,50));
                $img = Image::factory($file);
                $img->render("jpg"); //фотки ведь желательно сохранять именно в jpg

                $img->save($directory . $filename . '.jpg');
                unlink($file);
                $http_path = '/public/images/upload/'.$filename.".jpg";
            }else {
                $error = 'Some error occured please try again later';
                $http_path = '';
            }
            echo "<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(".$callback.",  "".$http_path."", "".$error."" );</script>";
        }
    }
}

Не забываем дать доступ к роуту в bootstrap.php

Route::set('images', 'upload/image')
    ->defaults(array(
        'controller' => 'images',
        'action'     => 'upload',
    ));

Все. В "Вставить картинку" в CKEditor-е появиться вкладка Загрузить.

test

CSS: Масштабируем страницы в зависимости от разрешения экрана

CSS scale
Нужно было сохранять внешний вид страницы на разных разрешениях экрана, то есть на разных устройствах. Если для блоков можно выставить позиционирование относительно родительского блока, то с размерами шрифта все хуже, они средствами css не масштабируютья. Можно как вариант использовать JS для этих целей, но можно и css обойтись. Нынче это не так уж сложно, достаточно использовать медиа-потоки и приближение. Например:

@media screen and (min-width: 400px) and (max-width: 600px) {
  body {
    zoom: .35 !important; /* Old IE only */
    -moz-transform: scale(0.35);
    -webkit-transform: scale(0.35);
    transform: scale(0.35);
  }

}
@media screen and (min-width: 600px) and (max-width: 800px) {
  body {
    zoom: 0.45 !important; /* Old IE only */
    -moz-transform: scale(0.45);
    -webkit-transform: scale(0.45);
    transform: scale(0.45);
  }
}

И так далее. Возможно есть варианты получше, но этот работает.

test

Небольшой сниплет таймера обратного отсчета в секундах на JavaScript

Таймер обратного отсчета
Утянул со stackoverflow

var count=30;
var counter=setInterval(timer, 1000); //1000 равно 1 секунде

function timer()
{
  count=count-1;
  if (count <= 0)
  {
     clearInterval(counter);
     //Здесь делаем что-то после того как таймер достиг нуля
     return;
  }

  //здесь добавляем код, к примеру меняющий количество секунд в диве
//document.getElementById("timer").innerHTML=count + " секунд";
}

Все просто и красиво

test

Broadcom драйвер для Linux 3.12

Вот добрался до новой версии ядра, 3.12. Долгое время просто руки не доходили. Я уже несколько раз ранее собирал эти драйвера, но на более старые версии, к пример 3.10

Так вот собираем почти так же как и обычно. Качаем драйвера под свою архитектуру с сайта:

test

Выступление на конференции Олега Бунина, 2012 год. iForum. Высоконагруженные сервисы

Выступление на конференции Олега Бунина, 2012 год. iForum. Высоконагруженные сервисы. Интересно.

Для тех кто еще не видел, стоит посмотреть запись выступления Олега Бунина с конференции 2013 года. iForum.

Страницы

Subscribe to Nelex.in.ua RSS