Блог


27 May 2014

Переименовать файлы в нижний регистр

Переименовать все файлы в текущей и во всех вложенных директориях в нижний регистр:

find ./ -type f | awk '{ print $1 " " tolower($1) }' | xargs -L 1 mv

Харитон Мизгирь пишет: Чтобы обрабатывались пути с пробелами и проч. непечатностями надо использовать конструкцию типа:

find -print0 | xargs -0

Объяснение по поводу параметра -print0 (find'а) и -0 (xargs'а)

В имени файла может попасться символ, который требует экранирования при обработке (single or double quotes, spaces or newlines). print0 заставляет выводить список найденных файлов разделяя их через нуль-символ (\0, в духе языка C, где он используется для декларации конца строки). xargs тоже должен быть готов к такому разделителю, для этого служит -0.

find и xargs по разному себя ведет когда ищут из текущей директории или когда ищут из родительской (в родительской прекрасно обрабатывал директории с пробелами и любыми кавычками, которые находились в дочерней директории). newlines не обрабатывается нигде.

16 May 2014

Обновление Nginx 1.1 на 1.6 в Ubuntu 12.04

Решил обновить Nginx на последнюю стабильную версию, т.к. по умолчанию в Ubuntu 12.04 все еще лежит старьё Nginx 1.1, а на и 1.7

Казалось бы, всё просто, как рекомендует официальный сайт:

Скачиваем сертификат и устанавливаем в систему:

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Потом открываем /etc/apt/sources.list

sudo nano /etc/apt/sources.list

и вставляем в конец файла

deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx

Далее выполняем обновление и получаем готовый свеженький Nginx:

sudo apt-get update
sudo apt-get dist-upgrade

Но, не тут-то было. Вместо профита получаем ошибку

28 Apr 2014

Введение в фреймворк Kriswallsmith Assetic

Пожалуй, одной из самых мощных библиотек для управления статическими файлами (стилями, джава-скриптами, изображениями) через PHP-скрипты является . Тем не менее, начать с ходу использовать Assetic под силу далеко не каждому профессионалу. Не говоря уже о новичках, для которых серьезным барьером является и английский язык.

Библиотека решает такие задачи, как:

  • Публикация статических фалов, находящихся в модулях за пределами директории веб-сервера
  • Объединение мелких файлов скриптов или стилей в один для ускорения загрузки
  • Встраивание мелких изображений в файлы стилей в кодировке base64 для ускорения загрузки
  • Обработка и компиляция стилей и скриптов из различных языков, таких как less или coffeescript в нативные css и javascript
  • Сжатие стилей и скриптов средствами различных оптимайзеров по вкусу
  • Оптимизация изображений PNG и Jpeg без потери качества

Данный перевод из официальной документации является введением в

Assetic

Assetic - это фреймворк для управления статическими активами для PHP-приложений.

<?php

use Assetic\Asset\AssetCollection;
use Assetic\Asset\FileAsset;
use Assetic\Asset\GlobAsset;

$js = new AssetCollection(array(
    new GlobAsset('/path/to/js/*'),
    new FileAsset('/path/to/another.js'),
));

// код объединяет файлы при выгрузке
echo $js->dump();
21 Apr 2014

Перегрев процессора из-за 100% загрузки gvfsd-metadata

На улице наконец установились теплые деньки... так же, как и у моего ноутбука vaio. При чем до такой степени, что печатать что-либо стало не возможно, т.к. руки постоянно потели.

Запустив в консоли команду top, увидел, что почти все ресурсы процессора съедает программа gvfsd-metadata:

~$ top

top - 19:10:37 up  1:22,  2 users,  load average: 1,83, 1,89, 1,91
Tasks: 234 total,   2 running, 232 sleeping,   0 stopped,   0 zombie
%Cpu(s): 29,6 us,  4,0 sy,  0,0 ni, 61,6 id,  4,3 wa,  0,0 hi,  0,5 si,  0,0 st
КиБ Mem:   8157760 total,  5089708 used,  3068052 free,   328028 buffers
КиБ Swap:  8368124 total,        0 used,  8368124 free,  1725240 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 3299 username  20   0  120m 5032 2856 R  77,1  0,1  32:44.84 gvfsd-metadata
 3681 username  20   0 1858m 734m  54m S  17,0  9,2  14:10.69 firefox
 1715 root      20   0  207m  74m  40m S   7,0  0,9   4:04.32 Xorg
 3310 username  20   0  738m  21m  13m S   6,3  0,3   3:53.82 unity-panel-ser
 3312 username  20   0  342m 5448 3588 S   4,7  0,1   2:59.51 hud-service
 3107 username  20   0 1607m 128m  56m S   4,3  1,6   1:46.43 compiz

Загуглив этот процесс, увидел, что проблема достаточно распространенная. Нашел решение на . Предлагается всего лишь почистить директорию с данными этого процесса:

~$ rm -rf ~/.local/share/gvfs-metadata

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

12 Nov 2013

Отслеживаем реферальные ссылки

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

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

<form method="POST">
    <input type="text" name="name" placeholder="Ваше имя"><br>
    <input type="text" name="phone" placeholder="Ваш телефон"><br>
    <button type="submit">Отправить</button>
</form>

А обрабатывается форма скриптом на языке PHP:

<?php
if (isset($_POST['name']) && isset($_POST['phone'])) {
    $to      = 'nobody@example.com';
    $subject = 'Запрос с сайта';
    $message = "Имя: {$_POST['name']}\nТелефон: {$_POST['phone']}";
    $headers = "From: {$to}\r\n" . "Reply-To: {$to}\r\n" . 'X-Mailer: PHP' . phpversion();

    mail($to, $subject, $message, $headers);
}
?>
11 Nov 2013

Отслеживаем конверсию без перезагрузки страницы

Обычно, при отправки формы советуют редиректить пользователя на некий целевой URL, переход по которому будет означать конверсию цели.

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

Как же тогда отметить в Метрике достижение цели? Оказывается, разработчики метрики уже подумали об этом и предоставляют нам через клиентский код.

А также показывают пример кода, который позволяет достигать целей конверсии без перезагрузки страницы:

А чтобы сделать наше приложение максимально гибким, я разработал следующий код:

(function($, w, d){
    $(w).on('load', function(){
        $(d).on('yandex.reachGoal', function (e, params) {
            var target = params.target;
            params = params.params || null;
            target && w.yaCounterXXXXXX && w.yaCounterXXXXXX.reachGoal(target, params);
        });
    });
})(jQuery, window, document);

Коду для работы требуется установленный на странице код Я.Метрики и jQuery. Здесь мы подвешиваем на документ обработчики событий, которые будут отправлять данные в Яндекс. Это нужно прежде всего для того, чтобы не передавать идентификатор счетчика в метрике по всему коду. Чтобы воспользоваться этим кодом, достаточно в коде обработки формы при успешной отправке возбуждать соответствующее событие.

$(document).trigger('yandex.reachGoal', {target:'REQUEST_SENT'});

Не забудьте добавить эту цель в . Удачи.

24 Sep 2013

Снимаем блокировку с /var/lib/dpkg/

Если во время установки или обновления программ через apt-get процесс был прерван нажатием Ctrl+Z, то при следующей попытке запуска apt-get получим ошибку:

E: Не удалось получить доступ к файлу блокировки /var/lib/dpkg/lock - open (11: Ресурс временно недоступен)
E: Не удалось выполнить блокировку управляющего каталога (/var/lib/dpkg/); он уже используется другим процессом?

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

sudo fuser -vki /var/lib/dpkg/lock

Должно получиться примерно так:

                     ПОЛЬЗ-ЛЬ    PID ДОСТУП КОМАНДА
/var/lib/dpkg/lock:  root       4581 F.... dpkg
Завершить процесс 4581? (y/N) Y

Нажимаем «Y» и наслаждаемся нормальной работой apt-get. Я думаю многие пользователи знали об этой команде, но некоторые новички единственным выходом считали — sudo reboot.

29 Aug 2013

Конвертация сертификата cer в pem

Бывает, что предоставляют разработчику ssl-сертификат в виде *.cer файла, а использовать его надо в виде *.pem файла.

Сконвертировать файл в ubuntu поможет команда:

openssl x509 -in certnewb.cer -inform DER -out certnewb.pem -outform PEM
04 Aug 2013

Записки миллионера. Туалетная мотивация.

Самый целеустремлённый человек — это тот, который очень хочет в туалет. Все препятствия кажутся для тебя несущественными. Ведь ты готов сделать все что угодно, лишь бы достичь своей цели! Твой мозг незамедлительно генерит миллион идей, а к действиям ты приступаешь немедленно.

Я описался, потому что:

  • не было времени сходить в туалет..

  • я был слишком уставший…

  • потерял надежду… Я не верил, что смогу добежать.

  • ну конечно. Он то – добежал. У него ноги вон какие длинные…

  • я слишком глуп, чтобы это сделать…

04 Aug 2013

Файл запуска в SiteForeverCMS

Запуск системы стартует при обращении к скрипту index.php.

По умолчанию скрипт работает с маршрутом index, который указывает на страницу по-умолчанию.

Для того, чтобы послать запрос на работу с другим маршрутом, нужно необходимый маршрут после index.php. Т.е., чтобы обратиться к странице about, нужно выполнить запрос index.php/about. Для страницы about/contacts необходимо выполнить запрос index.php/about/contacts. Чтобы сделать запросы более понятными человеку, можно воспользоваться настройками mod_rewrite, входящего в состав сервера apache, либо другим механизмом, выполняющим аналогичные действия у других веб-серверов.


Готовы начать проект?

Я всегда открыт для обсуждения новых возможностей и интересных задач.