test

Рекурсивно задать права доступа для всех папок и для всех файлов

В очередной раз копируя шаблон админ-панели в новый проект, получил неправильные права доступа. Чтобы все махом поправить, нужно всем директориям дать доступ на чтение и открытие, а всем файлам права на чтение для всех.
Выполнить это можно всего-лишь двумя командами:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)


Найдено на superuser.com
test

AwesomeWM: виджет индикатор раскладки своими руками

Надоело без виджета раскладки клавиатуры, да и хотелось сделать свой виджет для Awesome WM. Версия Awesome WM 3.5.

Немного о самом виджете

Виджет использует только доступные в системе команды. Специально не делал завязку на другие программы типа kbdd и skb, так как их может не быть в системе по умолчанию. Весь код ниже идет с комментариями почти каждой строки, объясняющей что к чему и почему.

Создаем виджет

Качаем иконки
Распаковываем сами картинки(размером 48 пикселей), нужные для наших раскладок в ~/.config/awesome/keyboard/flags, предварительно создав нужные папки keyboard/flags.

В общем, если в двух словах, нам нужно создать виджет до добавления всех виджетов на панель, а потом разместить в нужном месте вместе с другими виджетами.
Код размещения виджетов выглядит приблизительно так:
test

MySQL: 985-NULL=NULL

Там где обычная логика не действует, действует какая-то сказочная. Вот так и в этом случае, неожиданно, в сложном запросе с подзапросом нужно выбрать сумму товаров всех, и отнять сумму товаров с определенной категории.
select (sum(total_price)-(select sum(z_sum) from user_orders where user_id=4  and zennobox=1 and status=2)) as sum from user_orders where user_id=4;


И тут так получилось что все время на тестовый запрос я получал NULL. Начал проверять и оказалось что число-NULL = NULL. Печально, когда даже не догадываешься о таком. Но решение тут простое, добавляем функцию ifnull(value,default):
select (sum(total_price)-ifnull((select sum(z_sum) from user_orders where user_id=4  and zennobox=1 and status=2),0)) as sum from user_orders where user_id=4;


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

Установка PhantomJS и CasperJS на Debian GNU\Linux

Собственно для тех кто не знает что такое PhantomJS, вещает хабр:
PhantomJS это все плюшки WebKit из консоли с управлением на JS и поддержкой различных стандартов и технологий: DOM, CSS, JSON, Canvas и SVG.

Прикручивают его для разных целей, для тестирования, парсинга и для любой другой автоматизации связанной с загрузкой страниц, особенно с поддержкой JavaScript.

CasperJS - это надстройка над PhantomJS позволяющая более удобно его использовать. Добавляется сохранение скриншота части страниц, более удобная работа со страницей и другие плюшки.

test

Ошибка при импорте дампа базы в MariaDB

При импорте дампа базы через консоль получил следующую ошибку:
# mysql -pmypass mydm < mydb.sql
ERROR 1064 (42000) at line 3597: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*/' at line 1


Вся беда начиная со строки 3597 оказалась из-за комментариев разделенной символом новой строки на несколько строк.
К слову сказать, комментарии вида:
/*!50003 */
Представляют из себя инструкцию MySQL и MariaDB произвести некоторые действия. Но такой вот перенос разрывает по всей видимости такую инструкцию.
Так как файл достаточно большой, открыть его удобнее всего vim-ом. Можно конечно составить регулярку для sed, но у меня всего пару комментариев, по этому проще и удобнее удалить вручную
#vim mydb.sql

Переходим на нужную строку:
:3597

Совмещаем текущую строку со следующей зажав Shift+j Когда отредактировали переносы, сохраняем и выходим.
:wq

Ну и дальше у нас импорт проходит все достаточно просто
mysql -pmypass mydm < mydb.sql

P.S. Может есть варианты получше, поудобнее, если знаете напишите.
test

Ошибка при обновлении Debian GNU\Linux dpkg: error processing procps (--configure)

Возникла проблема при апгрейде, выглядит так:
dpkg: error processing procps (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
procps
E: Sub-process /usr/bin/dpkg returned an error code (1)


Моя версия Debian GNU\Linux:
# lsb_release -rd
Description: Debian GNU/Linux 8.0 (jessie)
Release: 8.0


Вся беда оказалась всего-лишь в измененном вручную /etc/sysctl.conf. Я добавлял туда две строчки для выгрузки драйвера который мешает другим драйверам.
Делаем бекап
cp /etc/sysctl.conf /etc/sysctl.conf_bkp


И удаляю те строки что сам добавлял. После чего апгрейд проходит успешно.
test

Перенос VK Комментариев на другой домен

Стала задача для сайта все-таки подключить свой домен и перенести комментарии на него. Решается все просто. В контакте, внизу страницы, переходим по ссылке "Разработчикам", переключаемся на "Мои приложения", напротив нужного нам нажимаем "Редактировать"->"Настройки".
Смотрим поле "Базовый домен" и добавляем новый.

Вот и вся проблема.
test

Сравнение производительности: XMLHttpRequest с jQuery get и post,

На любопытную страничку наткнулся на просторах интернета. А искал я сравнение производительности XMLHttpRequest с jQuery get и post. И в общем-то на страничке можно провести сразу тест для конкретной своего браузера и посмотреть результаты других.

И получилось у меня что xhr3 всех быстрее, ну и раза в два быстрее jQuery методов. Оно в принципе и не удивило бы ни кого, скорее удивило бы обратное. Но все же интереснее смотреть на цифры.

P.S. К сожалению время от времени сайт не доступен, хотел картинку сюда вставить, но увы. Пробуйте, время от времени он все же работает.
test

Сниппет SizeOf для JavaScript( получение размера переменной)

Функции SizeOf для JavaScript нету, но зная типы данных и их размер, можно такую написать самостоятельно. А так как мы люди ленивые, то просто посмотрим гугл и найдем подходящий:

function roughSizeOfObject( object ) {
    var objectList = [];
    var recurse = function( value ) {
        var bytes = 0;

        if ( typeof value === 'boolean' ) {
            bytes = 4;
        } else if ( typeof value === 'string' ) {
            bytes = value.length * 2;
        } else if ( typeof value === 'number' ) {
            bytes = 8;
        } else if (typeof value === 'object'
                 && objectList.indexOf( value ) === -1) {
            objectList[ objectList.length ] = value;
            for( i in value ) {
                bytes+= 8; // assumed existence overhead
                bytes+= recurse( value[i] )
            }
        }
        return bytes;
    }
    return recurse( object );
}
test

Оптимизация InnoDB таблиц



Проработавшая база данных, некоторый период времени, не исключая, а по некоторым данным и утверждая что InnoDB тем более, фрагментируется, и начинает работать медленно. Требуется оптимизация. Скрипт найденный на stackoverflow.com, проверен на личном опыте.
Делайте Backup, не надейтесь на то что повезет, 1 раз если не повезет, будет хуже чем если 100 раз повезет

Создаем файлик optimizedb.sql
set @a=null,@c=null,@b=concat("show tables where",ifnull(concat(" `Tables_in_",database(),"` like '",@c,"' and"),'')," (@a:=concat_ws(',',@a,`Tables_in_",database(),"`))");

Prepare `bd` from @b;
EXECUTE `bd`;
DEALLOCATE PREPARE `bd`;

set @a:=concat('optimize table ',@a);
PREPARE `sql` FROM @a;
EXECUTE `sql`;
DEALLOCATE PREPARE `sql`;

set @a=null,@b=null,@c=null;


Ну и скармливаем его нужной базе данных:
mysql -p mydb < ./optimizedb.sql


Дальше ждем результат. После окончания скрипт выведет результаты и завершиться.
test

Yandex Карта на сайте

Наверное на текущий момент, карты Yandex являются одними из самых удобных и функциональных. Прикрутить их не сложно, не хватает только нормальных материалов с примерами. Понятно что есть официальная документация, которая позволяет сделать почти все что хочешь и много того что не хочешь, но в кипе информации, для разных версий API найти то нужное понимание не легко. Иногда проще по примеру разбираться что и аз что отвечает.

Так вот, Яндекс.карты это не сложно. Есть два вида геокодирования, прямое и обратное. В одном случае мы получаем по текстовому адресу координаты на карте, во втором - по координатам получаем текстовый адрес. Вариантов размещения точек на карте API карт тоже имеет не один.

Небольшое отступление: Для себя я использую фреймворк Kohana 3, но в общем, это не вносит практически никаких корректив в код. Использую ORM, но не думаю что для кого-то будет сложность заменить $object->title на $row['title']. Главная же цель, показать что все не так сложно как кажется. Еще что следует учесть, что мы используем координаты заранее сохраненные в базе. Для этого в конце статьи есть ссылка к Yandex API, по которой можно получать координаты. Лучше всего один раз спросить API карт и сохранить результат у себя, чем лишними запросами дергать их API

Остальное внутри

test

Работа над ошибками 2 или неприятности линуксоидов

Pre: Тем кто столкнется с подобным...


Внутри:
  • Загрузка в частично слетевший Grub2 и его восстановление
  • wicd не подключается к Wi-Fi роутеру
  • W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168h-1.fw for module r8169
  • Нет Awesome в GDM
  • Awesome WM не применяются настройки из ~/.config/awesome/
test

Gearman + PHP = после обновления не подключается воркеры к серверу

После обновления перестали подключаться воркеры к Gearman. Долго не мог понять в чем причина, ведь и в логах чисто, и в настройках сервера все в порядке. Но в англоязычном сегменте интернета с этим уже сталкивались. Вся проблема заключалась в том что теперь нужно указывать хост и порт для подключения.
То есть было:
$client->addServer();
А стало:
$client->addServer('127.0.0.1',4730);


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

Модификация заголовков(HTTP Headers) в Chrome/Chromium

Заметка в этот раз будет очень короткая.

Иногда стоит задача, как например замена и/или добавление заголовков в передаваемый запрос. К примеру стоит задача написать парсер, который парсит картинку, но картинка отдается сервером только после проверки заголовка Referer.

В этом классно помогает расширение для Chrome/Chromium: Modify Headers for Google Chrome

Работать очень просто, нажимаем плюсик справа вверху. Заполняем появившуюся строчку. Нажимаем стрелочку запуска слева вверху. И теперь во все открываемые страницы.

Вот собственно и все.
test

Debian GNU\Linux: работа над ошибками

В здоровом теле, здоровый дух. Как-то так и с компьютерами и софтом.

Итак, решил я прошерстить свою систему на предмет возникающих ошибок и разобраться хотя бы с частью из них. Для того чтобы увидеть какие ошибки сыпятся можно смотреть логи, а можно в дополнение ко всему запускать софт из терминала, как то делаю я:
#chromium&


При этом весь поток всякой чепухи будет литься в консоль. Можно сделать перенаправление вывода в файл в виде:
#chromium >/tmp/chomium.log&


Смотрим.

Ошибка 1.

Fontconfig error: Cannot load default config file


Страницы

Subscribe to Nelex.in.ua RSS