• Виртуализация с использованием Ubuntu Server 16.04 и pHpVirtualBox 5.0.5

    Недавно столкнулся с задачей быстрого и простого развертывания серверов на основе связки Ubuntu Server 16.04 и pHpVirtualBox 5.0.5 для дальнейшей виртуализации всяческих OS.
    Задача тривиальная, но быстрого, простого и самое главное — пошагового рецепта не нашел, поэтому по итогам успешной инсталляции решил выложить примитивный FAQ для всех интересующихся.
    Читать дальше →
  • Настройка окружения для PHP разработчиков

    В данной статье мы рассмотрим настройку окружения для PHP разработчиков с использованием Vagrant, Docker, Xdebug, PHPUnit, и интеграцию с IDE PHPStorm.

    +

    Требования


    • Окружение должно развертываться на Windows, MacOS, Linux
    • Установка должна быть максимально простой
    • Быстрая работа с файловой системой
    • Интеграция с IDE PHPStorm
    • Несколько версии PHP интерпретаторов (5.6, 7.0)

    Читать дальше →
  • Как в Badoo генерируются изображения для «шаринга» в соцсетях

      Социальные сети — важный источник трафика. Нам выгодно, когда пользователи делятся контентом, и мы даем им такую возможность — у нас есть несколько видов контента, которым можно поделиться:

      • свой профиль;
      • чужой профиль (если его владелец это разрешил);
      • свой рейтинг, отражающий популярность пользователя на сайте;
      • награды, полученные пользователем за свои действия или действия других пользователей.

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



      Особенность бейджей состоит в том, что на них присутствуют фото самих пользователей, поэтому каждый видит и делится уникальными изображениями. В этой статье я расскажу, как мы генерируем такие изображения, с какими проблемами сталкивались и как их решали.
      Читать дальше →
    • Мифы и рецепты Docker

      Вокруг постоянно говорят про Docker. Я знаю что вы отвечаете: «Это что-то про контейнеры, виртуализацию, облака», «У нас все и так работает», «Это все баловство», «Он не запустится на нашем старом ядре линукса», «Точно так же можно подготовить образ для облака и запустить его», «Можно просто настроить LXC, chroot или AppArmor». Вы знаете, что он вам не нужен. Очередная модная штука. В конце концов, просто лень разбираться. Но любопытно! Тогда, читайте. Это серия из шести заметок.

      Если вы не слышали о контейнерах в Линуксе, вот список страниц, которые надо прочитать, чтобы понимать о чем речь:


      Поставьте Docker, он небольшой. Для Windows и Mac можно просто поставить Toolbox: www.docker.com/toolbox. Создавать виртуальную машину и настраивать лучше из командной строки, а не через графическую обертку. Прочитайте несколько уроков из мануала. Здесь я пишу о том, чего в документации нет.

      Docker — это не виртуализация.


      Вот какой у меня линукс:

      Welcome to Ubuntu 15.04 (GNU/Linux 3.19.0-15-generic x86_64)
      
      Last login: Tue Aug 18 00:43:50 2015 from 192.168.48.1
      gri@ubuntu:~$ uname -a
      Linux ubuntu 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/                                       Linux
      gri@ubuntu:~$ free -h
                   total       used       free     shared    buffers     cached
      Mem:          976M       866M       109M        11M       110M       514M
      -/+ buffers/cache:       241M       735M
      Swap:         1.0G       1.0M       1.0G
      

      Запускаю CentOS:

      gri@ubuntu:~$ docker run -ti centos
      [root@301fc721eeb9 /]# uname -a
      Linux 301fc721eeb9 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
      [root@301fc721eeb9 /]# cat /etc/redhat-release
      CentOS Linux release 7.1.1503 (Core)
      [root@301fc721eeb9 /]# free -h
                    total        used        free      shared  buff/cache   available
      Mem:           976M         85M        100M         12M        790M        677M
      Swap:          1.0G        1.0M        1.0G
      

      Docker — это не chroot, их функционал частично совпадает. Это не система безопасности вроде AppArmor. Docker использует те же контейнеры, что и LXC, но интересен он не контейнерами. Docker — это ничего из того, что я думал о нем до того, как прочитал документацию.

      То же ядро, память, файловая система, а дистрибутивы, библиотеки и пользователи — разные.

      Docker — это инструмент объекто-ориентированного проектирования


      Регулярно возникает вопрос, является ли конфигурация nginx частью веб-приложения. Системные администраторы спорят с разработчиками. Но недавно в мире появились devops и захотели вместо последовательно-процедурного вызова команд из bash думать привычным OOP. Docker дает инкапсуляцию, наследование и полиморфизм компонентам системы, таким как база данных и данные. Это значит, что можно провести декомпозицию всей информационной системы, выделить приложение, web-сервер, базу данных, системные библиотеки, рабочие данные в независимые компоненты, внедрять зависимости из конфигов, и заставить все это работать одной группой, одинаково на разных компьютерах.

      Такой подход можно использовать, чтобы снизить потери рабочего времени дорогих front-end разработчиков на настройку базы данных и Nginx. Чтобы уйти от vendor lock-in. Не обломаться когда openssl на сервере не поддерживает cipher, используемый в API госучреждения. Чтобы приложение работало независимо от версии PHP или Python на сервере заказчика. Создавать open source не только в виде кода, но и настройкой пакетов из нескольких приложений, написанных на разных языках, работающих на разных слоях OSI.
      Читать дальше →
    • Атрибуты свойств в Objective-C. Инструкция для начинающих

        image

        Есть множество разных мест, где описано значение атрибутов, используемых при объявлении свойств, но, как правило, все такие источники либо описывают применение только одного из атрибутов, либо содержат еще кучу ссылок на другие документы, переходя по которым со временем начинаешь терять нить рассуждений. Безусловно, нужно стремиться познать все тонкости, для чего нужно прочитать горы литературы. Но для начала вполне достаточно разобраться в основах. Ниже я постарался максимально просто изложить основные используемые при объявлении свойств атрибуты, их значение и основные случаи, когда стоит использовать то или иное значение атрибута.
        Читать дальше →
      • HTML Purifier. Расширяем возможности


          Буквально пару абзацев я уделю внимание особенностям взаимодействия этой библиотеки с фреймворком Yii, остальное же в полной мере универсально и будет интересно всем, кто использует или планирует использовать эту библиотеку.

          Если вы уже хорошо знакомы с Purifier, то можете смело начинать читать отсюда

          Немного о HTML Purifier

          Если вы не слышали о такой прекрасной библиотеке (а поиск на Хабре говорит о не такой уж большой популярности) как HTML Purifier, то советую обязательно к ней присмотреться, особенно если ваши пользователи генерируют контент в html формате. Это может быть рядовой пользователь, модератор или даже администратор.
          Что же делает эта библиотека?
          Согласно конфигурации она очищает любой html код от всех вредоносных, невалидных, запрещенных (вашей конфигурацией) частей кода, в том числе отдельные атрибуты.
          Читать далее
        • Искусство командной строки



            Вот уже как неделю английская версия the art of command line висит в секции trending на Github. Для себя я нашел этот материал невероятно полезным и решил помочь сообществу его переводом на русский язык. В переводе наверняка есть несколько недоработок, поэтому милости прошу слать пулл-реквесты мне сюда или автору оригинальной работы Joshua Levy вот сюда. (Если PR отправите мне, то я после того, как пересмотрю изменения отправлю их в мастер-бранч Джоша). Отдельное спасибо jtraub за помощь и исправление опечаток.

            Enjoy!
          • Почему я не преподаю SOLID и «принцип устранения зависимостей»

            • Translation

            Статья 1. Почему я не преподаю SOLID


            Если вы разговариваете с кем-то, кому небезразлично качество кода, уже достаточно скоро в разговоре всплывёт SOLID — аббревиатура, помогающая разработчикам запомнить пять важных принципов объектно-ориентированного программирования:

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

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

            Сегодня SOLID остается для меня важным, но я больше не пытаюсь сделать мой код SOLID. Я редко упоминаю его, когда говорю про дизайн. И тем более я не учу пользоваться им разработчиков, которым хочется почерпнуть хорошие дизайнерские методы проектирования. Он больше не находится у меня под рукой в моем «ящике для инструментов». Он лежит в пыльной коробке на чердаке. Я храню его, потому что он важен, но редко им пользуюсь.
            Читать дальше →
          • Upgrade до Middle PHP-разработчика за 3 месяца

              В очередной раз на меня свалилась задача найти хорошего PHP-программиста.
              По результатам прозвона потенциальных кандидатов, 90% тех, кто мнит себя Middle, на самом деле Junior и годы опыта не спасают, потому что клепают однотипный код в пределах заданий, посланных свыше.
              Прописал минимальный план желающим сделать рывок и перейти на следующий уровень без отрыва от производства.


              Читать дальше →
            • Чеклист по оптимизации VPS на PHP/Mysql/Nginx

              Как обеспечить более высокую производительность VPS сервера, который работает на Nginx + PHP + Mysql? В этой статье приведен чеклист основных настроек, которые позволят существенно оптимизировать работу сервера. Настройка займет не более 10 минут и не требует ничего, кроме редактирования конфигурационных файлов.
              Читать дальше →
            • 11 крутых сайтов для iOS разработчиков

              • Translation


              Чтобы оставаться профессионалом в разработке iOS приложений, нужно постоянно учиться у других и узнавать о новейших инструментах и приемах. Кроме сайта Apple с документацией, существуют несколько ресурсов с ценными статьями и уроками, которые помогут нам стабильно развиваться. О них и пойдет речь в этой статье.
              Читать дальше →
              • +12
              • 37.9k
              • 9
            • Как отобразить количество оповещений в названии вкладки браузера

              • Translation
              • Tutorial


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

              Существует пара наиболее распространенных способов оповещения пользователя. С одной стороны, социальные сети Facebook, Twitter и LinkedIn указывают определенное число, которое соответствует количеству обновлений. С другой стороны, Trello отображает небольшой красный кружок поверх favicon.

              Trello Facebook and Twitter notifications
              Оповещения Trello, Facebook и Twitter

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

              Посмотреть на GitHub
              Демо (рус.)
              Читать дальше →
            • Zend Certification. Не так страшен черт

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

              Ни для кого не секрет, что к многочисленным сертификациям, и к ZCPE (Zend Certified PHP Engineer) в частности, все относятся по-разному: кто-то коллекционирует их и развешивает на стенках для самолюбования, кто-то считает пустой тратой времени и денег.
              Читать дальше →
              • +12
              • 20.3k
              • 5
            • Если вы решили перейти с PHP на Python, то к чему следует подготовиться

                Думали ли вы когда-нибудь о том, что однажды слишком быстро втянулись в веб-программирование на PHP? И вот уже прошло много лет, у вас хороший опыт, и вы не думаете ни о каких других способах „делать“ веб, кроме как на PHP. Может быть, у вас возникают сомнения в правильности выбора, однако непонятно, как найти способ быстро его проверить. А хочется примеров, хочется знать, как изменятся конкретные аспекты деятельности.

                Сегодня я попробую ответить на вопрос: «А что если вместо PHP писать на Python?».

                Сам я долгое время задавался этим вопросом. Я писал на PHP 11 лет и даже являюсь сертифицированным специалистом. Я научился его «готовить» так, чтобы он работал в точности, как мне надо. И когда я в очередной раз читал на Хабре перевод статьи о том, как всё в PHP плохо, я просто недоумевал. Однако подвернулся случай пересесть на Ruby, а потом и на Python. На последнем я и остановился, и теперь попробую рассказать вам PHP-шникам, как нам питонистам живётся.


                Python с точки зрения PHP-программиста...
              • Экспорт Избранного на Хабре в PDF. Версия 2.0

                  Доброго времени суток, хабражители!



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

                  Представляю вам новую версию программы закачки статей с Хабра, Гиктаймс и Мегамозг в формате PDF.

                  Новый проект называется HabraParse.

                  Проект состоит из библиотечки, которая парсит сайты, и скрипта, использующего лишь часть возможностей этой библиотеки. Скрипт написан на python3, для его работы потребуются модули docopt, requests и weasyprint (все их легко можно установить командой pip install name).

                  На текущий момент в скрипте имеются следующие возможности:
                  • скачать статью по её ID;
                  • скачать список URL избранного для заданного пользователя;
                  • скачать статьи из избранного в папку в формате PDF или HTML (пока реализация HTML не на высоте, поэтому по умолчанию используется формат PDF, но он работает значительно дольше).


                  Использование опций --gt/--mm позволяет сохранять статьи с GeekTimes.ru и Megamozg.ru.

                  Краткое описание параметров скрипта
                  Usage:
                    ./habraparse.py save_favs_list [--gt|--mm] <username> <out_file>
                    ./habraparse.py save_favs [--gt|--mm] [-cn --save-html --limit=N] <username> <out_dir>
                    ./habraparse.py save_post [--gt|--mm] [-c --save-html] <topic_id> <out_file>
                  

                  По умолчанию все команды работают с проектом HabraHabr.ru.
                  При задании опций --gt/--mm скрипт будет работать с GeekTimes.ru/Megamozg.ru.

                  Команды:
                    save_favs_list - сохранение в файл <out_file> списка URL избранного для пользователя <username>
                    save_favs - сохранение в папку <out_dir> статей из избранного для пользователя <username>
                    save_post - сохранение в файл <out_file> статьи с заданным ID
                  



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

                  Читать дальше →
                • Удачная модель ветвления для Git

                  • Translation
                  Перевод статьи Vincent Driessen: A successful Git branching model

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



                  В качестве инструмента управления версиями всего исходного кода она использует Git.

                  Читать дальше →
                • 15 лучших JavaScript-библиотек для построения диаграмм и сводных таблиц

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

                  В этой статье я покажу вам некоторые из лучших JavaScript библиотек для построения диаграмм/схем (и сводных таблиц). Эти библиотеки помогут вам в создании красивых и настраиваемых графиков для ваших будущих проектов.

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

                  Читать дальше →
                • Пространства имен в PHP

                  На хабре можно найти немало статей о пространствах имен в PHP, но мне помогла именно эта, и именно ей я хочу поделится. Наверняка найдутся те, кому этот перевод поможет.

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

                  Что такое пространства имен?


                  «Не забывайте обратный слеш, когда Вы храните имя пространства имен в виде строки!»

                  Представьте себе пространство имен, как ящик, в который Вы можете положить все что угодно: карандаш, линейку, кусок бумаги и так далее. Это Ваши вещи. Прямо под вашим ящиком, располагается еще чей-то ящик, и его хозяин хранит те же вещи в нем. Чтобы избежать использования предметов друг друга, Вы решили маркировать ящики так чтобы стало ясно, что кому принадлежит.
                  Читать дальше →
                  • +22
                  • 34.7k
                  • 9
                • jQuery для мобильных устройств, все за и против

                  image

                  Это довольно вольный перевод статьи, которая попалась мне на просторах интернета. Её автор — TJ VanToll. Он уже много лет занимает веб-разработкой и, в частности, оптимизацией сайтов для большей производительности на мобильных телефонах. Под катом рассмотрены несколько способов оптимизации, а так же приведены результаты тестирования на различных устройствах.
                  Читать дальше →