• Как генерировать осмысленные коммиты. Применяем стандарт Conventional Commits



      Привычный хаос в названиях коммитов. Знакомая картина?

      Наверняка вы знаете git-flow. Это отличный набор соглашений по упорядочиванию работы с ветками в Git. Он хорошо документирован и широко распространен. Обычно мы знакомы с правильным ветвлением и много говорим об этом, но, к сожалению, уделяем слишком мало внимания вопросу наименования коммитов, поэтому часто сообщения в Git пишутся бессистемно.

      Меня зовут Ержан Ташбенбетов, я работаю в одной из команд Яндекс.Маркета. И сегодня я расскажу читателям Хабра, какие инструменты для создания осмысленных коммитов мы используем в команде. Приглашаю присоединиться к обсуждению этой темы.

      Читать дальше →
    • Миллион видеозвонков в сутки или «Позвони маме!»

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



        Далее текстовая версия доклада на HighLoad++ Siberia, из которой вы узнаете:

        • как работают сервисы видеозвонков под капотом;
        • как красиво пробить NAT — это будет интересно и специалистам из игровой сферы, которым необходимо peer-to-peer соединение;
        • как устроен WebRTC, какие протоколы в него входят;
        • как можно тюнить WebRTC через BigData.


        О спикере: Александр Тоболь руководит разработкой платформ Видео и Ленты в ok.ru.
        Читать дальше →
      • Коммуникации как performance-зона работы тимлида

          Участники Saint TeamLead Conf назвали доклад Александра Зизы одним из лучших вероятно потому, что от навыков коммуникации тимлида зависит многое, а развиты они, как правило, не очень хорошо.

          Рассказ будет состоять из четырех смысловых блоков:

          1. Про коммуникацию. Коснемся того, что такое коммуникация, в чем основная проблема с коммуникацией, почему о ней так много говорят и пишут. Все ученые философы мира, начиная с Аристотеля пытаются решить эту задачу, но окончательного решения «взять и сделать» до сих пор нет.

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

          1. Мастерство: 4 уровня развития компетентности. Здесь поговорим про личное мастерство руководителя, который осуществляет свое управленческое воздействие через коммуникацию.

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




          Ниже вы найдете видео и текстовую версию этого выступления, но просто так посмотреть или прочитать его недостаточно. Надо постараться тут же начать применить подходы на практике, и Александр вас в этом убедит. Фактически это часть программы по развитию управленческих компетенций, по прокачке навыков тимлида с подробным руководством к действию и заготовкой для домашнего задания.
          Читать дальше →
          • +25
          • 11.4k
          • 7
        • Интерполяция данных: соединяем точки так, чтобы было красиво

            Как построить график по n точкам? Самое простое — отметить их маркерами на координатной сетке. Однако для наглядности их хочется соединить, чтобы получить легко читаемую линию. Соединять точки проще всего отрезками прямых. Но график-ломаная читается довольно тяжело: взгляд цепляется за углы, а не скользит вдоль линии. Да и выглядят изломы не очень красиво. Получается, что кроме ломаных нужно уметь строить и кривые. Однако тут нужно быть осторожным, чтобы не получилось вот такого:

            Читать дальше →
          • Vim по полной: Менеджер плагинов без фатальных недостатков

              Оглавление


              1. Введение (vim_lib)
              2. Менеджер плагинов без фатальных недостатков (vim_lib, vim_plugmanager)
              3. Уровень проекта и файловая система (vim_prj, nerdtree)
              4. Snippets и шаблоны файлов (UltiSnips, vim_template)
              5. Компиляция и выполнение чего угодно (vim-quickrun)
              6. Работа с Git (vim_git)
              7. Деплой (vim_deploy)
              8. Тестирование с помощью xUnit (vim_unittest)
              9. Библиотека, на которой все держится (vim_lib)
              10. Другие полезные плагины

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

              Интересно? Беги скорей под кат!
            • Несколько интересностей и полезностей для веб-разработчика #33

                Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

                Walkway.js и Vivus.js




                Вы видели этот великолепный лэндинг посвященный анонсу Sony PlayStation 4? Обратите внимание на анимацию SVG объектов состоящих из контуров. Они словно рисуются художником в режиме реального времени. Отныне этот эффект можно легко повторить с помощью Walkway и Vivus. Обе библиотеки максимально просты в использовании и применимы только для path элементов, поскольку принцип их работы основывается на взаимодействии с CSS свойством strokeDashoffset. Хоть и у Walkway значительно больше звезд на Гитхабе, зато Vivus предоставляет несколько вариантов отрисовки: Delayed, Async и OneByOne.

                //Walkway
                var svg = new Walkway('#test');
                
                svg.draw(function() {
                  console.log('Animation finished');
                });
                
                //Vivus
                new Vivus('my-svg-id', {type: 'delayed', duration: 200}, myCallback);
                

                Читать дальше →
                • +38
                • 52.1k
                • 5
              • Как в Яндексе используют PyTest и другие фреймворки для функционального тестирования

                  Всем привет! Меня зовут Сергей, и в Яндексе я работаю в команде автоматизации тестирования сервисов монетизации. Перед каждой командой, которая занимается задачами автоматизации тестирования, встает вопрос: «Какой [фреймворк|инструмент] выбрать для написания своих тестов?» В этом посте я хочу помочь вам на него ответить. Если быть конкретнее, речь пойдет об инструментах тестирования на языке Python, но многие из идей и выводов можно распространить на другие языки программирования, поскольку подходы часто не зависят от конкретной технологии.



                  В Python существует множество инструментов для написания тестов и выбор между ними неочевиден. Я опишу интересные варианты использования PyTest и расскажу о его [плюсах|минусах|неявных возможностях]. В статье вы найдёте развёрнутый пример использования Allure, который служит для создания простых и понятных отчётов автотестов. Также в примерах будет применяться фреймворк для написания матчеров — Hamcrest для Python. Надеюсь, что в итоге, те, кто сейчас в поиске инструментов для тестирования, смогут на основе изложенных примеров быстро внедрить функциональное тестирование в своем окружении. Те же, кто уже использует какой-то инструмент, смогут узнать новые подходы, варианты использования и концепции.
                  Читать дальше →
                • Запустился онлайн сервис печати 3d-моделей из нержавеющей стали

                    3d-печать из нержавеющей стали 3d-моделей
                    Компания Shapeways запустила новый онлайн сервис по 3d-печати из нержавеющей стали любых Ваших 3d-моделей. До этого события выбор материалов для 3d-печати был небольшим, в основном разнообразные полимеры. Но теперь, Shapeways стала первой компанией в мире, которая предлагает он-лайн сервис 3d-печати из нержавеющей стали.

                    Стоимость такой печати составляет 10$ за 1 см3 материала. Объем материала берется тот, который конкретно потратился при печати модели. К примеру, та фигурка, что изображена на картинке стоит меньше 20$ при ее размерах 4х4х2.5 см.
                    Читать дальше →
                  • Пишем Facebook приложение

                      Facebook — популярная социальная сеть где можно написать своё приложение. Не люблю толочь воду в ступе, поэтому сразу к делу. Встраивать можно двумя направлениями: внешнее приложение в Facebook или Facebook-данные во внешнее приложение (aka Facebook Connect). Тут я буду говорить о первом, что в принципе более трудоёмко и интересно. Как правило смысл facebook-приложение несёт две функциональности — взаимодействие с друзьями и информативное интегрирование в профиль пользователя.

                      Основы


                      Встраивать приложение можно в следующие места..
                      • Canvas — собственно страница с приложением. Доступна по ссылке apps.facebook.com/НАЗВАНИЕ_ПРОГРАММЫ
                      • Profile box — маленький бокс внутри самого профиля пользователя
                      • Profile tab — новый таб в профиле
                      • Boxes tab — небольшой блок в табе boxes
                      • News feed — доступ к потоку обновлений
                      • Requests box — интерактивные сообщения другим пользователям

                      Интеграция производится смешанными возможностями..
                      • REST API (http://api.new.facebook.com/restserver.php) который даёт «тяжёлый» доступ для backend-а с возможностями загрузки фото, видео, получении списков друзей, событий, комментариев и тп.
                      • FQL — способ запрашивать данные по REST не просто через параметры метода, а уже через SQL-подобный синтаксис
                      • FBML — урезанный HTML + свои тэги которые Facebook интерпретирует в окне в своём стиле и дизайне и кэширует при инлайновом показе. Куча заморочек с встроенным валидатором тэгов
                      • xFBML — FBML-тэги используемые в своём приложении
                      • FBJS — урезанный JS

                      Два пути


                      Теперь когда основные термины понятны перейдём к самому приложению которое размещается в Canvas. После создания нового приложения через developer app, скачивания REST-библиотеки для php, выкладывании приложения на свой сайт и установки в настройках URL для Canvas становится видно что доступно два способа запуска — через iframe (+XFBML) либо чистый FBML который будет храниться на facebook. Понятное дело первый вариант самый простой. После создания программы и добавления/подтверждения в своём профиле, показ Canvas'а будет сопровождаться обычным iframe + GET-параметрами с префиксом fb_sig_, из которых самый важный это fb_sig_canvas_user. Второй вариант более муторный, но более тесно связан с FB.



                      Читать дальше →
                    • ejabberd+AD+Shared Roster

                        Доброго времени суток.

                        Для начала что мы имеем: небольшую сеть на ~150 машин, в основном с ОС Windows XP, домен, поднятый естественно на Windows 2k3 и нормальную машинку(или сервер) на которой установлен gentoo linux (опционально MySQL).

                        Задача: Установить jabber сервер, сделать общий ростер, с группами из AD, прикрепить к нему icq гейт и поставить jabber клиенты на рабочие машины.
                        Читать дальше
                        • +12
                        • 1.9k
                        • 6
                      • Кластерный сервис на Эрланге: от идеи до deb-пакета

                        • Tutorial

                        Задача


                        Нужно написать настоящий сервис на эрланге, который будет работать в кластере. Кроме того, нужно максимально упростить жизнь тем, кто будет обслуживать сервис.
                        Требования:
                        • У сервиса будет RESTful интерфейс (это модно и современно)
                        • основные настройки сервиса должны быть вынесены в маленький файл с понятным синтаксисом
                        • сервис должен писать опциональный access-лог
                        • сервис должен запускаться через upstart

                        Для простоты сервис будет представлять собой счетчик, который каждому клиенту выдает увеличивающееся с каждым запросом на 1 целое число (уникальное до перезапуска счетчика).

                        Технологии


                        Выберем все самое модное и современное:

                        Читать дальше →
                      • Mootools плагин для анимации AJAX-запросов без gif'ов

                        Захотелось как-то сделать анимацию выполнения ajax-запросов на чистом html+css и совсем без gif'ов. И сделал плагин для Mootools, который позволяет при добавлении одного файла Javascript получить различные по размеру, фону и типу анимированные иконки.

                        Плюсы:
                        • Легкие. Отдельно взятый элемент весит не больше gif'а, а использовать его можно многократно стилизируя под разные фрагменты сайта/приложения.
                        • Легко подключаются (см. пример ниже)
                        • Кроссбраузерные. В отличие от суперкрасивых но CSS3 подобных элементов эти тестировались на IE 7+, Firefos 3+, Opera 11, Safari, Chrome, Mobile Safari 4+ и Android 2.2. Скорее всего будут работать и на IE6, Opera 10 и старших версиях Safari и Chrome, но не тестировалось.
                        • Один файл для всех анимированных иконок сайта, а не отдельный gif на каждую ситуацию.
                        • Базовый класс можно расширять дописывая свои анимации.
                        • Это не связанно непосредственно с технологией, но тоже редко встречал, поэтому добавлю — некоторые анимации имеют режим in и out, что удобно для визуализации POST и GET запросов соответственно.
                        • Я почему-то с детства не люблю анимированные gif'ы

                        И минусы:
                        • В IE 9 элементы все равно оставлены квадратными. Хоть border-radius в нем и поддерживается, но имеет место баг (или фича) связанный с заливкой, который сходу обойти не удалось. Может кто подскажет как это можно сделать.
                        • Теоретически может притормаживать на слабых машинах на старом браузере под нагрузкой. В тестах это не проявилось, но жизнь, как известно, от тестов отличается. Тестировалось на слабеньком нетбуке в IE 8 в режиме IE 7 и на моей виртуальной машине — слабее ничего не нашлось для тестов.
                        • Наверняка в комментариях еще наберется...

                        А все остальное, как говорится, лучше один раз увидеть.
                        Смотреть
                      • Шифрование важных файлов в Git

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

                          Я не буду обсуждать согласование описываемого ниже метода с политикой и лицензионным соглашением бесплатных Git-репозиториев (а ля GitHub) — это дело частностей и вашей совести.

                          В реализации мы всопользуемся .gitattributes, staging, filters (фильтрами) и главой 7.2 Pro Git Book.

                          Читать дальше →
                        • От создателей Ролика чиновников. Ролик Деда Мороза

                            Еще вчера я говорил о делах прошедших. Спасибо всем пользователям Хабра за поддержку и обсуждение.

                            Но сегодня будет совсем другой разговор. Мы запускали «Ролик чиновников» тихо, тайно, боясь правительства, боясь пошевелиться лишний раз. Нам никто не гарантировал, что после создания ролика, с нами все будет хорошо, чаще говорили обратное.

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

                            Сейчас ролик закончен, и вы можете его увидеть. Техническая составляющая, как и в первом случае, заняла совсем немного времени. Наоборот идеологическая, тянулось достаточно долго. Как сделать, чтобы было интересно, как сделать, чтобы цепляло?

                            Спустя 20 разнообразных сценариев, решения было найдено. И на свет появилась концепция «Обращение страны к Деду Морозу».
                            Читать дальше →
                          • Загрузка браузером нескольких файлов

                              Если нужно дать пользователю возможность загрузки нескольких файлов, традиционное решение на данный момент — использовать для этой цели Flash (реже — Java applet или ActiveX). В случае, если соответствующий плагин недоступен, пользователю, как правило, показывают стандартный HTML-элемент для загрузки файла.

                              Последнюю ситуацию можно улучшить, если использовать встроенную в браузеры возможность множественной загрузки файлов. Из всех браузеров сейчас данную возможность не поддерживает только Internet Explorer (впрочем, мы ещё не видели девятую версию, может там что-то изменится), остальные браузеры — Opera 9 и выше (а так же версии 3.5—6.05), Firefox 3.6+, Chrome 3.0.191.0+ и Safari 4.0.1+ такую возможность предоставляют.

                              Достаточно написать что-то вроде
                              Copy Source | Copy HTML
                              1. <form enctype="multipart/form-data" method="post">
                              2.    <input type="file" min="1" max="9999" name="file[]" multiple="true" />
                              3.    <input type="submit" name="submit" />
                              4. </form>
                              PHP оказался готов к такой конструкции (именно для него в параметре «name» стоят квадратные скобки), он просто разложит загружаемые файлы по элементам массива $_FILES, если только мы не используем «Оперу».

                              К сожалению, «Опера» (ещё с версии 3.5) отправляет, при использовании мультизагрузки, файлы в контейнере «multipart/mixed», который PHP не понимает.

                              Я попробовал исправить эту ситуацию.
                              Читать дальше →
                            • Попытка классификации и анализа существующих подходов к наследованию в Javascript


                                Некоторое время назад у меня дошли руки до темы, которая давно уже меня нервирует интересует. Эта тема — наследование в JavaScript.

                                В сети есть много статей по данному вопросу, но мне не удалось найти обобщающего анализа, который бы удовлетворил меня своей полнотой и логикой. Почему хотелось найти именно обобщающий анализ? Дело в том, что особая, я бы сказал, уникальная сложность объектно ориентированного программирования в JS состоит в шокирующем (во всяком случае, меня) разнообразии его возможных реализаций. После довольно продолжительных неудачных поисков я решил попробовать разобраться в этом вопросе самостоятельно.

                                Хочу сразу сказать, что я не претендую на глубокое понимание ООП в JavaScript, и даже не претендую на глубокое понимание ООП вообще. Я буду рад, если моя попытка анализа окажется кому-нибудь полезной, но основная цель публикации, в некотором смысле, противоположная — мне бы хотелось самому воспользоваться замечаниями людей, которые лучше меня ориентируются в теме, чтобы прояснить ее для себя.
                                Читать дальше →
                              • Getters & Setters в Javascript

                                  Много людей знают, что такое getter'ы и setter'ы во многих языках программирования. Есть эти чудесные штуки и в JavaScript, хоть узнал я об этом совсем недавно (темень я необразованная). Речь пойдёт не только и не столько про методы getSomeProperty()/setSomeProperty(...), а про более интересную реализацию — псевдо-аттрибуты, при изменении которых будут вызываться функции-обработчики.

                                  Дальше...
                                • Канбан в IT (Kanban Development)

                                    Я собираюсь написать несколько статей про новую методологию гибкой разработки Канбан (Kanban Development) в целях подготовки к Scandinavian Agile Conference 2009, где я буду делать один из докладов (кстати, заодно приглашаю всех на конференцию).
                                    Сегодня публикую первую из статей.
                                    Основная задача первой статьи — это как можно проще описать основы Канбан: что это такое, в чем отличие от других гибких методологий и зачем это нужно.
                                    Также я хотел бы собрать как можно больше вопросов и сомнений в комментариях, чтобы ответить на них в следующих статьях, так что пишите всё, что вам непонятно, или что ещё вы хотели бы узнать про Канбан.
                                    Я не то, чтобы большой специалист по этой новой методологии, но мы внутри команды пришли к Канбану самостоятельно и последовательно прошли все этапы мутации от SCRUM до Канбан, так что практический опыт есть.

                                    Читать дальше →
                                  • Google App Engine и High load

                                      Гаджет «Евровидение 2009», который мы, Sterno.ru, сделали для компании Google, оказался отличным опытом в тестировании App Engine и проверки того, на что способна эта технология. Теперь мы гораздо лучше понимаем, как работает «Движок приложений» при высоких нагрузках. Эта статья описывает сильные и слабые стороны Google App Engine, а также подводные камни, с которыми разработчики могут столкнуться в ходе ее использования.
                                      Читать дальше →