Шпаргалки Просто Программиста

Устанавливаем composer глобально

В наше время стремительного роста веб-технологий только мёртвый не стоит на месте. Так и мой любимый язык php развивается семимильными шагами. Так три года назад появился и менеджер зависимостей composer построенный на базе symfony2.

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

Залогинимся с правами суперпользователя

sudo su

Перейдем в директорию /usr/local/bin

cd /usr/local/bin

Скачаем в нее композер

curl -sS https://getcomposer.org/installer | php

Сделаем композер запускным

chmod 0755 composer.phar

Сделаем короткий симлинк

ln -s composer.phar composer

Добавим в расписание обновление композера

crontab -e

и в открывшееся окно редактора впишем

5 1 * * 1 /usr/local/bin/composer.phar self-update > /dev/null 2>&1

чтобы композер обновлялся каждый понедельник

Профит!!

Теперь любом месте к композеру можно обратится как

composer install

или

composer update

и не думать о том, что он может устареть.

TL;DR


Создано: 01.04.2014 14:27

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

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

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

<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);
}
?>

TL;DR


Создано: 12.11.2013 13:49

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

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

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

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

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

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

(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'});

Не забудьте добавить эту цель в интерфейсе метрики. Удачи.

TL;DR


Создано: 11.11.2013 21:26

Препараты с идентичным составом, но ОЧЕНЬ разной ценой

таблетки

  • Нурофен (120руб) и Ибупрофен (10руб)
  • Мезим (300руб) и Панкреатин (30руб)
  • Но-шпа (150руб) и Дротаверина гидрохлорид (30руб)
  • Панадол(50руб) и Парацетамол (5руб)
  • Белосалик (380руб) и Акридерм СК (40руб)
  • Бепантен (250руб) и Декспантенол (100руб)
  • Бетасерк(600руб) и Бетагистин (250руб)
  • Быструмгель (180руб) и Кетопрофен (60руб)

TL;DR


Создано: 12.10.2013 22:35

Снимаем блокировку с /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.

TL;DR


Создано: 24.09.2013 20:41

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

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

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

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

TL;DR


Создано: 29.08.2013 21:07

Ищем соседа-фрилансера

Хочешь работать на фрилансе, но не хочешь сидеть дома, потому что тебе нужно общение с творческими людьми? Хочешь постоянно находится среди единомышленников в атмосфере стартапа, и не тратить свою жизнь на обогащение какого-то дяди?

Мы ищем себе соседа для работы в прекрасном месте: коворкинг-центре Зона действия на льготных условиях. Присоединяйтесь! Максимальный репост!

Зона действия

TL;DR


Создано: 16.08.2013 03:48

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

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

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

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

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

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

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

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

TL;DR


Создано: 04.08.2013 13:14

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

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

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

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

TL;DR


Создано: 04.08.2013 01:23

Настройка VDS на Hetzner с дистрибутивом Ubuntu 12.04. Памятка.

В этой памятке собраны основные этапы настройки VDS от провайдера Hetzner. Не смотря на то, что о нем принято отзываться не очень лестно, меня вполне устраивают его тарифы на VDS и качество предоставляемых услуг.

Сразу после установки получаем работающего пользователя root, из под которого управляем системой без использования su. И получаем к нему доступ сразу по ssh после ввода пароля.

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

TL;DR


Создано: 28.07.2013 23:26

Fork me on GitHub