• Введение в PHP 7: Что добавлено, что убрано

    • Перевод
    Одним из самых значительных событий, произошедших в мире PHP в 2015 году, стал выпуск PHP 7. Целых 10 лет отделяют его от выпуска первого релиза PHP с номером 5. С увеличением первой цифры в номере версии, в PHP 7 появилась масса новшеств, увеличилась и скорость работы.
    Однако в седьмой версии была убрана устаревшая функциональность, что привело к некоторым проблемам с обратной совместимостью, затруднив перевод старых приложений на новую версию. Эта статья может послужить вам кратким руководством, если вы планируете написание новых или перевод своих существующих приложений на PHP 7.
    Читать дальше →
  • Traits в php 5.4. Разбираем детали реализации

    • Tutorial
    Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

    Простой пример типажа, чтобы не заглядывать в Википедею:
    //определение типажа
    trait Pprint 
    {
        public function whoAmI()
        {
            return get_class($this) . ': ' . (string) $this;
        }
    }
    
    class Human 
    {
        use Pprint; //подключаем типаж, ключевое слово use
    
        protected $_name = 'unknown';
        
        public function __construct($name)
        {
            $this->_name = $name;
        }
    
        public function __toString()
        {
            return (string) $this->_name;
        }   
    }
    
    $a = new Human('Nikita');
    echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita
    

    Как видно, к классу Human было добавлено поведение из типажа Pprint.

    Но во всём есть свои детали.
    О них далее
  • Что такое полиморфизм на самом деле. В PHP он тоже существует.

      Написать этот пост побудила недавняя статья о полиморфизме. Она вызвала много споров, но знающие люди понимают, что автор написал скорее о наследовании и о переопределении методов, чем о полиморфизме. Не буду говорить ни хорошее ни плохое о той статье, а просто расскажу, что такое полиморфизм на самом деле. Дабы начинающие php-программисты не остались в заблуждении.
      Читать дальше →
    • Полиморфизм для начинающих

        Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. Для тех, кто не особо сведущ в ООП, это, наверно, звучит сложно. Поэтому рассмотрим применение полиморфизма на примере.
        Читать дальше →
      • Достоинства и фатальные недостатки типизации в php

          Язык php часто ругают, обычно необоснованно. Особенно удивляет, что javascript ругают меньше. Зачастую это делают люди, которые писали на нем 10+ лет назад, когда язык был действительно чертовски плох, да и разработчики в те времена не задумывались над качеством кода. Посмотрите хотя бы на код wordpress, который до сих пор вызывает шок.


          Ругают необоснованно, но проблемы у языка, конечно же, есть, и они серьёзные. Разуметеся, если сравнить последние релизы php7 (с нормальным ООП и строгим тайпхинтингом) и php4, то разница будет колоссальная. Однако и в последних версиях языка не всё гладко, и до java/c# пока что очень далеко. Более того, берусь утверждать, что будущее php тоже довольно сомнительно (с точки зрения типов).


          Другими словами, давайте рассмотрим предметно, что хорошо и что плохо в php с точки зрения типизации.

          Читать дальше →
        • REST API Best Practices

          Привет, Хабр! Представляю вашему вниманию перевод статьи "REST API Best Practices" автора Krishna Srinivasan.

          REST становится общим подходом для представления сервисов окружающему миру. Причина его популярности заключается в его простоте, легкости использования, доступе через HTTP и другие. Существует неправильное представление о том, что все данные, доступные через сеть, считаются REST, но это не так. В этой статье я собираюсь объяснить вам некоторые best practices, которые вы должны всегда помнить при реализации собственного REST приложения. Я бы хотел услышать ваш опыт в REST приложениях, поэтому если вы знаете best practies, которые не упомянуты в этой статье, пожалуйста, поделитесь с нами в комментариях.

          Disclamer: все best practies основаны на моем личном опыте. Если вы имеете другое мнение, не стесняйтесь отправлять его мне на email, и мы обсудим его.

          Здесь представлен список best practices, которые будут обсуждаться в этой статье:

          1. Конечные точки в URL – имя существительное, не глагол
          2. Множественное число
          3. Документация
          4. Версия вашего приложения
          5. Пагинация
          6. Использование SSL
          7. HTTP методы
          8. Эффективное использование кодов ответов HTTP
          Читать далее
        • Более чем 80 средств мониторинга системы Linux

            Ниже будет приведен список инструментов мониторинга. Есть как минимум 80 способов, с помощью которых ваша машинка будет под контролем.



            1. первый инструмент — top

            Консольная команда top- удобный системный монитор, простой в использовании, с помощью которой выводится список работающих в системе процессов, информации о этих процессах. Данная команда в реальном времени сортирует их по нагрузке на процессор, инструмент предустановлен во многих системах UNIX.
            читать дальше
          • DIY. Подглядываем за посетителями

            Задача


            Иногда у владельцев сервисов, менеджеров проекта и SEO-специалистов возникает желание подглядеть за пользователем, как он нажимает кнопочки и обо что разбивает лоб. Случается, что подобное желание подглядывать позволяет выявить интерфейсные проблемы, что может косвенно влиять на эффективность работы сервиса, а то и прибыль.


            Мне известно несколько способов решения этой проблемы:


            1. набрать группу подопытных для usability-тестирования;
            2. интегрировать на сайт сторонний сервис, записывающий действия пользователей;
            3. написать свое решение.
            Читать дальше →
          • Оперативная реакция на DDoS-атаки

            Один из ресурсов, за которым я присматриваю, вдруг стал неожиданно популярным как у хороших пользователей, так и у плохих. Мощное, в общем-то, железо перестало справляться с нагрузкой. Софт на сервере самый обычный — Linux,Nginx,PHP-FPM(+APC),MySQL, версии — самые последние. На сайтах крутится Drupal и phpBB. Оптимизация на уровне софта (memcached, индексы в базе, где их не хватало) чуть помогла, но кардинально проблему не решила. А проблема — большое количество запросов, к статике, динамике и особенно базе. Поставил следующие лимиты в Nginx:

            на соединения
            limit_conn_zone $binary_remote_addr zone=perip:10m;
            limit_conn perip 100;
            

            и скорость запросов на динамику (fastcgi_pass на php-fpm)
            limit_req_zone $binary_remote_addr zone=dynamic:10m rate=2r/s;
            limit_req zone=dynamic burst=10 nodelay;
            

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

            Но плохиши продолжали долбить, и захотелось их отбрасывать раньше — на уровне фаервола, и надолго.

            Сначала сам парсил логи, и особо настырных добавлял через iptables в баню. Потом парсил уже по крону каждые 5 минут. Пробовал fail2ban. Когда понял, что плохишей стало очень много, перенёс их в ipset ip hash.

            Почти всё хорошо стало, но есть неприятные моменты:
            — парсинг/сортировка логов тоже приличное (процессорное) время отнимает
            — сервер тупит, если началась новая волна между соседними разборками (логов)

            Нужно было придумать как быстро добавлять нарушителей в черный список. Сначала была идея написать/дописать модуль к Nginx + демон, который будет ipset-ы обновлять. Можно и без демона, но тогда придётся запускать Nginx от рута, что не есть красиво. Написать это реально, но понял, что нет столько времени. Ничего похожего не нашёл (может плохо искал?), и придумал вот такой алгоритм.

            При привышении лимита, Nginx выбрасывает 503-юю ошибку Service Temporarily Unavailable. Вот я решил на неё и прицепиться!

            Для каждого location создаём свою страничку с ошибкой
            error_page 503 =429 @blacklist;
            

            И соответствующий именованный location
            location @blacklist {
                fastcgi_pass    localhost:1234;
                fastcgi_param   SCRIPT_FILENAME    /data/web/cgi/blacklist.sh;
                include         fastcgi_params;
            }
            

            Дальше интересней.
            Нам нужна поддержка CGI-скриптов. Ставим, настраиваем, запускаем spawn-fcgi и fcgiwrap. У меня уже было готовое для collectd.

            Сам CGI-скрипт
            Читать дальше →
          • Увеличиваем производительность с помощью SO_REUSEPORT в NGINX 1.9.1

            • Перевод
            В NGINX версии 1.9.1 появилась новая возможность, позволяющая использовать сокетную опцию SO_REUSEPORT, которая доступна в современных версиях операционных систем, таких как DragonFly BSD и Linux (ядра 3.9 и новее). Данная опция разрешает открывать сразу несколько слушающих сокетов на одном и том же адресе и порту. При этом, ядро будет распределять входящие соединения между ними.
            Читать дальше →
          • Согласно техническому заданию

              Добрый вечер, созидающая часть Хабра!

              Будучи разработчиком, я постоянно работаю с техническими спецификациями клиентов и мой первый пост — это небольшой очерк, анализ такой вещи, как «техническое задание».

              Итак, когда компания-заказчик приходит к исполнителю и заказывает «неосязаемое нечто», последний делает постный вид и просит предоставить техническое задание (бриф, описание, спецификация). Заказчик, полный энтузиазма, начинает выплескивать его на бумагу и это правильное начало, ведь техническое задание – замечательная штука!



              Оно позволяет выразить свои идеи, сделать их понятными для окружающих и получить в итоге именно то, что нужно! С помощью тех. задания мы можем упорядочить мысли, правильно поставить задачу и увидеть противоречия на самых ранних этапах. Несмотря на то, что сам термин чаще применяется в бизнесе, суть его распространяется почти на все аспекты нашей жизни. Сформулированное в том или ином приближении, тех. задание испокон веков служит людям для передачи информации о своих потребностях.
              Читать дальше →
            • А зачем мне ТЗ? Я и так знаю!

                Проблема _непрочтения_ ТЗ встает практически каждый раз, когда "написатели" ТЗ и разработчики — люди из разных контор.

                Этот пост — о Техническом Задании на разработку интерфейсов [для пользователей].

                Разработчики – такие же люди, как и все. Читать талмуд об интерфейсе, написанный канцелярским языком – наверняка не очень приятное времяпровождение. Специалисты по интерфейсам разрабатывают ТЗ и передают их Заказчикам. И просят прочитать техническое задание (или спецификацию) – о том, как разрабатывать и изменять спроектированный интерфейс.

                Что включает в себя техническое задание для разработки спроектированного интерфейса?


                Читать дальше →
              • Техническое задание на сайт. Практика



                  В комментариях к статье Техническое задание на сайт зашел разговор о шаблоне для техзадания и, собственно, примере ТЗ, составленного по описанным в статье принципам. Там я пообещал показать, и шаблон, и само ТЗ.

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

                  Много текста и картинок
                • Ограничение скорости обработки запросов в nginx

                  • Перевод

                  Фотография пользователя Wonderlane, Flickr


                  NGINX великолепен! Вот только его документация по ограничению скорости обработки запросов показалась мне, как бы это сказать, несколько ограниченной. Поэтому я решил написать это руководство по ограничению скорости обработки запросов (rate-liming) и шейпингу трафика (traffic shaping) в NGINX.

                  Читать дальше →
                • Несколько популярных мифов о HTML5

                    Решил собрать в одну небольшую статью наиболее популярные заблуждения о HTML5, встречающиеся в обсуждениях на Хабре, на форуме htmlbook.ru и в др. местах. Если вы считаете, что для HTML5 обязательно нужен доктайп <!DOCTYPE html>, что HTML5 будет (или не будет) готов к 2022 году, что HTML5 поддерживается (или не поддерживается) какими-то браузерами, что на HTML5 можно перейти (а можно не переходить) в любое время — возможно, вам окажется интересно и полезно
                    узнать больше...
                  • TOP'ай сюда

                      Обзор практически всех *top утилит под linux (atop, iotop, htop, foobartop и т.д.).

                      top

                      Все мы знаем top — самую простую и самую распространённую утилиту из этого списка. Показывает примерно то же, что утилита vmstat, плюс рейтинг процессов по потреблению памяти или процессора. Совсем ничего не знает про загрузку сети или дисков. Позволяет минимальный набор операций с процессом: renice, kill (в смысле отправки сигнала, убийство — частный случай). По имени top суффикс "-top" получили и все остальные подобные утилиты в этом обзоре.

                      atop


                      Atop имеет два режима работы — сбор статистики и наблюдение за системой в реальном времени. В режиме сбора статистики atop запускается как демон и раз в N времени (обычно 10 мин) скидывает состояние в двоичный журнал. Потом по этому журналу atop'ом же (ключ -r и имя лог-файла) можно бегать вперёд-назад кнопками T и t, наблюдая показания atop'а с усреднением за 10 минут в любой интересный момент времени.

                      В отличие от top отлично знает про существование блочных устройств и сетевых интерфейса, способен показывать их загрузку в процентах (на 10G, правда, процентов не получается, но хотя бы показывается количество мегабит).

                      Незаменимое средство для поиска источников лагов на сервере, так как сохраняет не только статистику загрузки системы, но и показатели каждого процесса — то есть «долистав» до нужного момента времени можно увидеть, кто этот счастливый момент с LA > 30 создал. И что именно было причиной — IO программ, своп (нехватка памяти), процесор или что-то ещё. Помимо большего количества информации ещё способен двумя цветами подсказывать, какие параметры выходят за разумные пределы.
                      Читать дальше →
                    • Режимы наложения слоёв в Web

                        Привет, Хабр!
                        Одна из главных причин тяжёлых увечий дизайнеров претензий к неопытным дизайнерам от верстальщиков, при получении от них PSD-макетов — это наличие слоёв с заданными режимами смешивания, отличными от normal. Вполне возможно, что скоро это уйдёт в прошлое!
                        Читать дальше →
                      • Интерактивный прототип в Axure за 20 минут

                        • Tutorial
                        Пока я писал о проектировщиках и прототипах, внезапно выяснилось, что многие читатели не представляют, о чём идёт речь. Поэтому сегодня я решил рассказать о том, что такое интерактивный прототип, сделанный в Axure (произносится как «Экшер», а я привык говорить «Акшура»). И не только рассказать, но и показать.

                        Если совсем грубо, то интерактивный прототип — это набор связанных друг с другом html-макетов. Только работали над этими макетами не дизайнер с верстальщиком, а проектировщик в специализированной программе, позволяющей сделать эту работу в разы быстрее. В чём будет различие в результате? Прототип, подготовленный проектировщиком, в отличие от макетов, подготовленных верстальщиком, не предназначен для разработки. Он призван очень быстро и наглядно продемонстрировать то, что исполнитель будет воплощать в жизнь на следующих этапах. Это всё равно, что трёхмерная модель готовящегося к строительству здания. На её создание уйдёт гораздо меньше времени, чем на постройку, и она позволит виртуально побродить по будущему проекту.
                        Читать дальше →
                        • +13
                        • 125k
                        • 9
                      • RESTful API для сервера – делаем правильно (Часть 1)

                        • Перевод
                        В 2007-м Стив Джобс представил iPhone, который произвел революцию в высокотехнологичной индустрии и изменил наш подход к работе и ведению бизнеса. Сейчас 2012-й и все больше и больше сайтов предлагают нативные iOS и Android клиенты для своих сервисов. Между тем не все стартапы обладают финансами для разработки приложений в дополнение к основному продукту. Для увеличения популярности своего продукта эти компании предлагают открытые API, которыми могут воспользоваться сторонние разработчики. Пожалуй Twitter был первым в этой сфере и теперь число компаний, последовавших этой стратегии, растет стремительно. Это действительно отличный способ создать привлекательную экосистему вокруг своего продукта.

                        Читать дальше →
                      • Сравнение сервисов приема интернет-платежей для ИП

                          Ранее я опубликовал две статьи (1, 2) о способах приема платежей на сайте. В предыдущих статьях было одно условие — подключение к платежным системам производилось как физическое лицо. Теперь я решил выйти из сумрака делать все максимально честно, и хочу рассказать о способах подключения к платежным системам в качестве ИП и легального вывода заработанного на расчетный счет в банке.

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

                          В общем случае, чтобы подключить прием платежей, нужно обменяться договором с платежной системой, так что на быстрое подключение рассчитывать не приходиться. Плюс — этот договор должны вручную обработать, так что если не учитывать время, затраченное на пересылку документов Почтой России, то подключение занимает от трех дней. Пакет документов у всех примерно одинаковый, но иногда может потребоваться заверенная у нотариуса копия какого-то документа или, например, свежая выписка из ЕГРИПа.

                          Итак, герои сегодняшнего обзора: WebMoney, Яндекс.Касса, PayPal, Единая Касса (Wallet One), RBKMoney, PayMaster, РобоКасса, QIWI
                          Читать дальше →