• Работа тимлидом в 2018-ом году

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


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


      Читать дальше →
    • Как я написал мобильное приложение на react-native

        Меня зовут Алексей Андросов, я уже много лет работаю в Яндексе фронтенд-разработчиком. Два года назад мне и моим партнерам пришла в голову идея создать мобильную социальную сеть Verb. Идея Verb в том, что пользователи могут делиться небольшими статусами — “вербами” — о том, чем они занимаются в данную минуту, простыми вещами, о которых хочется рассказать друзьям, но некуда об этом написать. И мы уже даже получили инвестиции, но сейчас не об этом. Сегодня я хочу рассказать о том, как и почему я написал мобильное приложение на react-native.
        Читать дальше →
      • На Яндекс.Картах теперь можно создавать тепловые карты

          У Яндекс.Карт давно просили сделать средство для визуализации данных с помощью тепловых карт — и мы наконец его сделали. Если вы — один из тех, кому это было очень нужно, можете переходить сразу к чтению документации на гитхабе. Если же вы ещё не знаете, нужно ли это вам, — можете потратить немного времени, чтобы почитать статью про то, что такое тепловые карты, как они генерируются на клиенте, и как мы совместили генерацию тепловой карты с картой географической.


          Отображение географических точек из Википедии

          Что такое тепловые карты, и зачем они нужны


          Итак, обо всем по порядку. Для начала давайте определимся, что такое тепловые карты и с чем их едят? Как подсказывает мне капитан очевидность википедия, тепловые карты (они же теплокарты, они же heatmap) — это графическое представление данных, где дополнительные переменные отображаются при помощи цвета. Такой вид отображения бывает очень удобным. Например, им часто пользуются веб-аналитики, чтобы увидеть наиболее активные части страниц сайта.
          Читать дальше →
        • Как протестировать наследство без боли и страха

          image

          Вы получили или пришли на проект, которому d+дцать лет? PHP код был написан в перерывах между охотой на мамонтов и поэтому слегка не читаем? Вам предстоит это как минимум сапортить, как максимум — рефакторить или переписывать?

          Если у вас после этих вопросов не участилось дыхание или пульс — проходите мимо, эта статья для тех, кто уже бывал жертвой таких издевательств или предчувствует такой поворот судьбы.
          Читать дальше →
        • 43 полезных сервиса для управления проектами. Без эпитетов

            Дано: собственные и аутсорс-проекты, некоторые участники работают удаленно.

            Требуется: необходимо быстро назначать задачи исполнителям, планировать спринты, трекать выполнение и статусы, визуализировать процессы и делиться результатами с заказчиками.

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

            Изначально сервисов было более 100, но постепенно список сокращался, и мы остановили наш выбор на трех, удовлетворяющих вместе наши нужды лучше всего: Jira, Slack и GanttPro. Но, если вдруг эти сервисы не помогут вам в планировании задач и работы с командой, делюсь с вами полным списком:

            Процесс поиска очень часто усложняется тем, что все сервисы, как один, пишут «Лучший сервис, помогающий превратить ваши идеи в реальность и реализовать ваши проекты. Сегодня.». Так, а что вы делаете-то? Поэтому в этом списке без лишних эпитетов, только что какой сервис умеет. :)




            Читать дальше →
          • Установка SuiteCRM 7.5. Интеграция с Asterisk посредством Callinize — community Edition

            Возникла у меня необходимость установки связки: Asterisk + CRM + Интеграция. С установкой Asterisk и FreePBX на Ubuntu проблем не возникло. Отличная статья с пошаговыми инструкциями и картинками, справится даже новичок.

            Но вот когда дело дошло до установки CRM и попыток дружбы оной с Астером, у меня начали клочками выпадать волосы на голове. Сначала я думал, что эта задача так же проста, как и установка Ubuntu+Asteris+FreePBX. Но уже через несколько дней понял, что нормальных мануалов, а у же тем более нормальных бесплатных моделей просто нет. Так компания у нас не большая и покупать что-либо желания нет. Пришлось купить по кускам разные мануалы, посты, статьи и методом проб и ошибок устанавливать и интегрировать CRM с Астером.

            Выбирал из 3-х (Сахар, вТигр и Сюит) и свой выбор остановил на SuiteCRM (остальные не прошли проверку на прочность и совместимость с модулями интеграции С Астером).

            В этой статье я собственно и хочу поделится опытом установки и интеграции SuiteCRM с Астериском. Тот, кто уже установил SuiteCRM, и она успешно работает, можем смело пролистывать часть с установкой и переходить к интеграции.
            Читать дальше →
          • Установка корректного времени на сайте и сервере

              Из-за постоянных изменений с переходом на зимнее-летнее время в РФ это самое время может отображаться на вашем сайте и на сервере некорректно. К тому же время PHP (если собран без опции --with-system-tzdata) и системное время — разные вещи. Поэтому нужно проводить две настройки.

              Как-то помучился с поиском решения, разрозненной информации в инете полно, вот «комплексное» решение этой проблемки, делюсь…
              Читать дальше →
            • Синхронизируем уведомления CI с Telegram

              Cегодня я хотел бы поделиться своим опытом синхронизации уведомлений Continuous Integration серверов (Bamboo, Jenkins, TeamCity и тп.) с бесплатным мессенджером от Павла Дурова — Telegram.

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

              Для организации данной синхронизации мы будем использовать BOT API от телеграмма, Gmail API от Google, а также наш ubuntu сервер на Digital Ocean.
              Читать дальше →
              • +4
              • 15,8k
              • 7
            • Yii environment. Наследования и переопределение конфигов

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

              В protected я создал environment.php c такими вот 2я классами:
              Читать дальше →
            • Интернет-радиостанция на Liquidsoap + IceCast

              liquidsoapДовольно много на хабре сказано про интернет-радиовещание изнутри. Есть даже хорошо написанные теоретические основы интернет-радиовещания, с которыми советую ознакомиться. В данной статье я бы хотел рассказать об организации ещё одной любительской интернет-радиостанции, построенной на связке незаслуженно малоизвестного Liquidsoap 1.0.1 и вездесущего IceCast 2.3.2. Статья расчитана на тех, кто хотя бы приблизительно знает, что такое аудиопоток, IceCast, линуксовская консоль и таки что он вообще хочет получить. Однако она и написана начинающим пользователем, поэтому моё решение даже не зарекается на звание оптимального.
              Читать дальше →
            • Простой PHP генератор сложных HTML таблиц

              Всем привет. Хочу поделиться свеженаписанным генератором HTML таблиц.

              Участились случаи сбора различной статистики и компоновки ее в сложные таблицы с различными групировками.

              image

              Заметив такую тенденцию решил автоматизировать рисование таблиц.

              Как итог:
              • Избавил себя от составления слоеных циклов для вывода массива;
              • Получил стандартизацию структуры массивов;
              Читать дальше →
            • Пространства имен в PHP

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

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

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


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

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

              Это еще одна попытка реализовать стабильный, полноценный шаблонизатор офисных документов, основанных на XML, пользуясь стандартными для PHP средствами DOMDocument и XSL.

              Задача состояла именно в генерации шаблона для многократного использования, который не придется править вручную или прибегать к сторонним программам для его доработки.
              Читать дальше →
            • Chrome Logger — серверсайд логи в консоли хрома



                Chrome Logger это Google Chrome расширение для отладки серверсайд приложений в консоли хрома.

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

                Инструкции по применению инсайд.
                Читать дальше →
              • О тонкостях работы foreach в PHP

                В недавнем дайджесте интересных ссылок о PHP я обнаружил ссылку на комментарий Никиты Попова на StackOverflow, где он подробно рассказывает о механизме «под капотом» управляющей конструкции foreach.
                Поскольку foreach действительно иногда работает более, чем странным образом, я счел полезным сделать перевод этого ответа.


                Внимание: этот текст подразумевает наличие базовых знаний о функциональности zval'ов в PHP, в частности вы должны знать что такое refcount и is_ref.
                foreach работает с сущностями разных типов: с массивами, с простыми объектами (где перечисляются доступные свойства) и с Traversable-объектами (вернее, объектами, у которых определен внутренний обработчик get_iterator). Здесь мы, в основном, говорим о массивах, но я скажу и об остальных в самом конце.

                Прежде чем приступить, пара слов о массивах и их обходе, важная для понимания контекста.

                Как работает обход массивов
              • Codeship.io: бесплатный CI сервер для приватного репозитория Github/Bitbucket

                • Tutorial

                Сразу заинтригую: в результате мы получим связку бесплатного приватного git репозитория на Bitbucket и бесплатный* Continious Integration сервер (SAAS), который будет собирать проект и прогонять все тесты после каждого пуша.
                * — бесплатная подписка дает возможность тестировать 5 приватных репозиториев и максимум 100 билдов в месяц.

                Мне этого для личного проекта достаточно.

                Приведу пример для PHP, проект на Symfony2, но данный сервис поддерживает ещё и Ruby, Node.js, Python.

                Читать дальше →
              • Оптимизируем VPS за 5$ (512MB RAM / 1 CPU) так, что сайт на wordpress выдерживает нагрузку в 42,735,587 хитов в день

                Когда вы приобретаете сервер VPS с 256MB или 512MB оперативной памяти на борту и лишь часть мощности процессора, то использовать для таких сервисов как MySQL/PHP/Apache настройки по умолчанию является очень плохой идеей. В настоящее время у меня запущено 3 сайта на самом дешевом тарифном плане с 512MB RAM/1 CPU. Не уверен полностью, но посещаемость составляет порядка 5-10 тысяч посетителей в день. Далее я хочу поделиться инструкцией как оптимизировать LAMP используя всего лишь 512 MB и при этом не уходя в swap. Обычно при такой настройки используется 256 – 378Mb памяти и все работает довольно быстро.

                Определяем доступную память и активность swap.

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

                $ free -m

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

                $ ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | less


                Настраиваем LAMP сервер для потребления малого количества оперативной памяти. Останавливаем, отключаем ненужные сервисы

                Первый и очевидный вопрос, который необходимо задать — это «какие сервисы мне не нужны в использовании?». Недавно, я обнаружил очень удобную утилиту для управления сервисами. Она называется "sysv-rc-conf" и управляет сервисами при помощи псевдографики и флажками. Выгдялит вот так:



                Здесь представлен список сервисов, которые я изменил.

                • Postfix. Этот сервис позволяет отправлять и получать почтовые email сообщения для домена. Я использую для этих целей Google Apps для отправки почты и mailchimp для новостных подписчиков. Таким образом я остановил и отключил этот сервис.
                • Bind9. Он нужен для управления DNS записями Вашего домена. Его можно отключить, так как все DNS записи хранятся у хостера.
                • SSHD. Имеются и другие реализации, которые используют гораздо меньше памяти, но они не поддерживают sftp, поэтому данный сервис я оставил без изменений.


                Не запускайте X-сервер, выключите все ненужные сервисы и настройте Apache, MySQL, PHP только с базовой необходимой функциональностью.
                Читать дальше →
              • Основы разработки веб-приложений

                  Всех с понедельником.
                  На прошлой неделе у нас вышел перевод книги «Learning Web App Development». Книга доступна в печатном виде и электронном (pdf+epub).


                  Аннотация:


                  Благодаря этой книге вы усвоите основы создания веб-приложений, построив простое приложение с нуля с помощью HTML, JavaScript и других свободно предоставляемых инструментов. Это практическое руководство на реальных примерах обучает неопытных веб-разработчиков тому, как создавать пользовательский интерфейс, строить серверную часть, организовывать связь клиента и сервера, а также применять облачные сервисы для развертывания приложения. Каждая глава содержит практические задачи, полноценные примеры, а также ментальные модели процесса разработки. Эта книга поможет вам сделать первые шаги в создании веб-приложений, обеспечив глубокие знания по теме.

                  • Создайте основу рабочего процесса с помощью текстового редактора, системы контроля версий и браузера.
                  • Постройте пользовательский интерфейс на HTML, а затем оформите его с помощью CSS.
                  • Используйте jQuery и JavaScript, чтобы добавить в приложение интерактивности.
                  • Создайте связь между клиентом и сервером с помощью AJAX, объектов JavaScript и JSON.
                  • Изучите основы программирования серверной стороны с помощью Node.js.
                  • Храните данные вне своего приложения с Redis и MongoDB.
                  • Разместите ваше приложение в сети, загрузив его на облако с CloudFoundry.


                  Изучите основные рекомендации по написанию обслуживаемого кода как в клиентской, так и в серверной части приложения.
                  Читать дальше →
                • Как использовать API сайта, у которого нет API?

                    У меня достаточно часто появляется задача получить данные от стороннего сайта, при этом далеко не всегда этот сайт предоставляет возможность удобно получить эти данные через API. Единственное решение в таком случае — парсить html содержимое страниц. Когда-то я писал регэкспы, потом появились библиотеки, позволяющие получить нужное содержимое по css-селектору, а сейчас и это кажется сложной задачей, которую хотелось бы упростить.

                    Сегодня я хочу рассказать вам о моей небольшой библиотеке, позволяющей описать в API-стиле http-запросы и парсить ответ сервера в нужный вам формат.
                    Читать дальше →
                  • Хороших книг пост



                      А давайте давайте соберём здесь хорошие книги, которые просто стоило собрать.
                      Суть в том, что просто давно стоило сложить хорошие книги в одном посте, чтобы было что прочитать в дороге — или просто для души.
                      Читать дальше →