• Ansible и ChatOps или как управлять 100+ серверами из чата

    • Перевод
    • Tutorial
    Обновлено: 21 февраля 2017

    Ansible и ChatOps при помощи StackStorm, Slack и Hubot

    Что такое ChatOps?


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

    Можно придумать такие вещи как деплой кода или развертывание серверов из чата, просмотр графиков мониторинга, отправку SMS, управление кластерами или просто запуск shell команд. ChatOps может быть высокоуровневым представлением вашей действительно сложной CI/CD системы, неся простоту с помощью команды в чате вроде: !deploy that thing. Такой подход делает чудеса для улучшения видимости и снижения сложности вокруг процесса развертываний.

    Читать дальше →
  • DevOps зоопарк или как 500px обслуживает более 500TB изображений

    От переводчика: Я выбрал эту статью для перевода, как яркий пример развивающегося западного стартапа с выраженными для этой группы признаками: очень много новых технологий, использование большого количества сторонних сервисов, эксперименты с архитектурой. В статье затронуты особо интересные темы связанные с построением платформы из микросервисов, DevOps и совсем мало освещенное на Хабре явление под названием ChatOps. Enjoy!


    О 500px


    500px — это онлайн сообщество, сформировавшееся вокруг фотографии. Миллионы пользователей со всего мира просматривают, делятся, продают и покупают самые красивые фотографии. Мы ценим дизайн, простоту кода и ответственность.
    Я DevOps. В 500px, работаю над платформой: бэкенд, мониторинг, управление конфигурацией, автоматизация и конечно же развертывание системы.
    Читать дальше →
  • .NET Framework скоро Open Source и на *nix


      Основное

      • Reference Source для .NET 4.6 перелицензируется под MIT;
      • В дальнейшем фреймворк будет с открытыми исходниками и поставляться по частям через NuGet, можно будет с приложением поставлять свою сборку, которая будет изолирована от всего остального;
      • Разработка переезжает на GitHub;
      • Скоро откроют исходники рантайма, включая RyuJit и сборшик мусора;
      • Для всего этого счастья планируется официальная поддержка никсов.





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

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

        • Tutorial
        "… Специально для вас, — ответил великий комбинатор. — Вы, я замечаю, все время терзаетесь муками творчества. Писать, конечно, очень трудно. Я, как старый передовик и ваш собрат по перу, могу это засвидетельствовать. Но я изобрел такую штуку, которая избавляет от необходимости ждать, покуда вас окатит потный вал вдохновения. Вот. Извольте посмотреть.

        И Остап протянул Ухудшанскому лист, на котором было написано:

        ТОРЖЕСТВЕННЫЙ КОМПЛЕКТ.
        НЕЗАМЕНИМОЕ ПОСОБИЕ ДЛЯ СОЧИНЕНИЯ ЮБИЛЕЙНЫХ СТАТЕЙ, ТАБЕЛЬНЫХ ФЕЛЬЕТОНОВ, А ТАКЖЕ ПАРАДНЫХ СТИХОТВОРЕНИЙ. ОД И ТРОПАРЕЙ"

        И. Ильф, Е. Петров, «Золотой теленок»


        Хабр — это все-таки больше СМИ, чем просто форум и тусовка «для своих». Это я к тому, что хочешь — не хочешь, а публикуя топик, ты, фактически, занимаешься журналистикой. На Хабре уже не раз упоминалась книга Александра Амзина по интернет-журналистике. Книга, на мой взгляд, удалась, и заслуживает почетного места в закладках у каждого. Тем не менее, одна ссылка хорошо, а много — лучше. Так как я не один год проработал бок о бок с журналистами, то и сам нахватался от них всякого. Под катом — джентльменский набор вкусных и полезных ссылок.
        Читать дальше →
      • Функторы, аппликативные функторы и монады в картинках

        • Перевод
        Вот некое простое значение:


        И мы знаем, как к нему можно применить функцию:


        Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:


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


        data Maybe a = Nothing | Just a
        

        Позже мы увидим разницу в поведении функции для Just a против Nothing. Но сначала поговорим о функторах!
        Читать дальше →
      • Foreman — менеджер процессов для ваших веб-приложений

        • Tutorial
        Все более популярной становится модель разработки веб-приложений, основанная на идее масштабирования с помощью процессов. Современное приложение представляет из себя набор выполняющихся процессов, не хранящих состояния, причем каждый изолирован друг от друга. Каждому такому процессу назначается свой локальный порт, что позволяет прозрачно экспортировать ваши сервисы для последующего их потребления кем-нибудь еще, возможно даже, что друг другом (например, один обслуживает http-запросы от пользователей, принимая url-адреса видео, а другой медленно, но верно, загружает их и конвертирует). Как правило, в большинстве случаев http-сервисы просто ставят за reverse proxy в nginx, но возможны варианты.

        Не секрет, что у каждого разработчика есть свой арсенал инструментов, позволяющий ему так или иначе сделать свою жизнь проще. Сегодня мы поговорим о таком инструменте, как Foreman. Используя его, вы можете объявить в одном месте все процессы, которые необходимы для запуска вашего приложения. Для этого используется так называемый Procfile, который выглядит как-то так:

        web:    mono ./awesome-app --port $PORT
        api:    node ./api.js -p $PORT
        worker: bundle exec rake resque:work QUEUE=*
        habr:   bundle exec ./bin/thin -a localhost -p $PORT

        Как видите, все довольно просто, в каждой строчке файла содержится по названию типа процесса и строка для его запуска.
        Так зачем оно нужно и что же там есть такого вкусного?
        • +37
        • 22,8k
        • 9
      • Как я перестал волноваться и стал отдавать метаданные restful API



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

          Поддержка такого ресурса (особенно в условиях, когда API активно развивается) — достаточно трудозатратное дело. При изменениях, приходится синхронизировать документацию с фактической реализацией и это напрягает. Синхронизация состоит из:
          • Проверки, что вся существующая функциональность описана в документации
          • Проверки, что всё описанное работает как заявлено в документации
          Читать дальше →
        • Учимся проектировать на основе предметной области (DDD: Domain Driven Design)

            1. Введение



            В данной статье я хотел бы рассказать об этих трёх буквах, постоянно находящихся на слуху, но для многих являющихся тайной за семью печатями, а так же привести ряд ресурсов, с которыми неплохо было бы познакомиться при желании продолжить развитие в проектировании на основе предметной области (DDD: Domain Driven Design).
            Читать дальше →
          • Что такое «асинхронная событийная модель», и почему сейчас она «в моде»

            Сейчас в тематических интернетах модно слово «Node.js». В этой небольшой статье мы попробуем понять («на пальцах»), откуда всё это взялось, и чем такая архитектура отличается от привычной нам архитектуры с «синхронным» и «блокирующим» вводом/выводом в коде приложения (обычный сайт на PHP + MySQL), запущенного на сервере приложений, работающем по схеме «по потоку (или процессу) на запрос» (классический Apache Web Server).
            Читать дальше →
          • Язык R в помощь хабра-статисту

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

            Цель: Собрать средствами языка R данные с любимого HabraHabr'а и провести, собственно то, для чего и был создан язык R, а именно: статистический анализ.

            Итак, прочтя этот топик вы узнаете:
            • Как можно использовать R для извлечения данных из Web ресурсов
            • Как преобразовывать данные для последующего анализа
            • Какие ресурсы крайне рекомендуются к прочтению всем желающим познакомиться с R поближе


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

            Приступим!
          • Золотые правила успешной кнопки

            • Перевод
            Здравствуй, дорогой хабрадруг! Сегодня существуют более тысячи способов создать кнопку; чтобы понять их сущность, вам нужно лишь потратить немного времени, просмотрев работы на сайте dribbble.com. Большинство из этих примеров очень похожи друг на друга, однако время от времени попадаются и такие кнопки, на создание которых потратили чуть больше внимания, времени и сил.



            Воспользовавшись замечательными параметрами CSS3, мы можем создать элегантые и стильные кнопки без особых усилий (учитывая старые браузеры, конечно). Создаете ли вы кнопку непосредственно в CSS или пользуетесь специальными инструментами для их создания, всегда нужно тщательно подумать о том, как ваша кнопка будет выглядеть в контексте веб-сайта.
            Читать дальше →
            • +206
            • 61,3k
            • 55
          • Готовые решения для английской локализации

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

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

              Я работаю в команде создателей технической документации Parallels Plesk Panel. Этот материал появился как обобщение нашего опыта: мы учитывали ошибки своих коллег-разработчиков и параллельно читали учебники по техническим коммуникациям. В результате у нас появились свои правила и шаблоны – они помогут писать простые сообщения даже тем, у кого английский язык находится в стадии освоения. Наш материал не претендует на исчерпывающее руководство на все случаи жизни, но это та самая печка, от которой могут плясать начинающие локализаторы.

              Под катом размещены кликабельные картинки, каждая из которых ведет на соответствующий PDF, пригодный к печати на А4.
              Читать дальше →
            • Облачная защита для .NET приложений

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

                Да, C++ был почти идеальным языком в этом плане. Но времена меняются, старые технологии уходят и на их место приходят новые более продуктивные и удобные. Так наша команда перешла на .NET. Но в обмен на простоту разработки и удобство отладки, мы в придачу получили в довесок и простоту декомпиляции нашего ПО. Теперь хакер мог не просто обойти лицензионные ограничения, но и получить почти полный исходник нашей программы просто скормив ее рефлектору.
                Разумеется, в качестве решения этой проблемы на рынке было представлено множество различных обфускаторов. Но, как ни странно, большинство из них разочаровывали меня сразу с двух сторон: и ценовой политикой (даже минимальная лицензия некоторых превосходила стоимость нашего ПО в несколько раз), и «интеллектуальностью» алгоритма. Так, после некоторых обфускаторов, умудрялись падать даже простые WinForms приложения. Что же касалось WPF, то без долгого-долгого черного шаманства над эксклудами, запустить среднего размера программу не представлялось возможным в принципе.

                Так сформировалось понимание проблемы и четкое желание создать свой продукт, сводящий озвученные выше проблемы к минимуму. И появился SaaS обфускатор и протектор .NET кода AppFuscator.com

                Обфускатор и протектор .NET кода appfuscator


                Читать дальше →
              • Обратная сторона луны

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

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

                  А еще говорят, что GC в .NET практически не настраиваемый. А еще, что нельзя посмотреть исходники как классов .NET Framework, так и CLR, GC и т.п.

                  А я скажу как бы ни так!

                  В данной статье мы рассмотрим:
                  • структура организации размещения объектов в памяти
                  • CLR 4.5 Background Server GC
                  • правильная настройка сборщика мусора
                  • эффективный апгрейд приложений до .NET 4.0+
                  • правильное ручное управление памятью

                  Читать дальше →
                • Обучаем компьютер чувствам (sentiment analysis по-русски)



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

                      Я хотел написать статью про линейную регрессию, но потом подумал, да ну её, лучше куплю квартиру. И пошёл искать, что предлагают. А предлагают, как оказалось, много чего. В подходящий мне ценовой диапозон попало больше 500 квартир. И что, мне теперь все это просматривать? Ну нееет, программист я в конце концов или не программист. Надо это дело как-то автоматизировать.
                      Читать дальше →
                    • Получение экземпляра класса запроса по сигнатуре его интерфейса

                        Не так давно на Хабре была опубликована статья (ссылка на топик) моего коллеги AlexanderByndyu, описывающая уход от использования Repository в сторону применения связки QueryFactory + классы запросов Query. При этом в комментариях разгорелся весьма интересный диспут, касающийся целесообразности приведенного в статье решения. Было достаточно много интересных отзывов, среди которых особенно выделялись высказывания о том, что, дескать, QueryFactory не нужен и является лишней обузой, мешающей безболезненному добавлению, изменению и удалению классов запросов. В данной статье я хочу показать подход, который позволяет избавиться от применения QueryFactory, через активное использование IoC контейнера. Данную организацию работы со структурой классов запросов мы использовали в одном из наших недавних проектов, где в качестве IoC использовался Castle.Windsor.
                        читать далее
                      • Используем быстрое возведение матриц в степень для написания очень быстрого интерпретатора простого языка программирования

                        Недавно на хабре появилась неплохая статья про вычисление N-ного числа фибоначи за O(log N) арифметических операций. Разумный вопрос, всплывший в комментариях, был: «зачем это может пригодиться на практике». Само по себе вычисление N-ого числа фибоначи может и не очень интересно, однако подход с матрицами, использованный в статье, на практике может применяться для гораздо более широкого круга задач.

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

                        loop 1000000000
                          loop 1000000000
                            loop 1000000000
                              a += 1
                              b += a
                            end
                          end
                        end
                        end
                        


                        Незамедлительно выведет a = 1000000000000000000000000000, b = 500000000000000000000000000500000000000000000000000000, несмотря на то, что если бы программа выполнялась наивно, интерпретатору необходимо было бы выполнить октиллион операций.
                        Читать дальше →