• Давайте жить дружно

      Начало набора на наш курс "Администратор Linux" привлёк в наше дружное сообщество новых людей и в итоге поднял снова извечный вопрос: слон или кит… Кто же правее правых: разработчик или администратор? В результате решили резюмировать вот такой заметочкой.


      Админы vs разработчики


      Это давнишний holywar. В этом споре есть много правд. Но ведь разработчики не работают сами по себе и админы сами по себе тоже не работают. Они зверьки хитрые и любят деньги, и разработчики и админы. А деньги платят за дело, даже не так… а так — за Дело, с большой буквы.

      Читать дальше →
    • Что нужно знать руководителю IT подразделения?

        Мы тут потихоньку строим наш образовательный маршрут по brand new для нас местам в виде нового курса: "Руководитель IT подразделения". В отличие от обычных программерских курсов, тут мы решили затронуть достаточно широкий спектр задач связанных не столько с софтом и прочим, сколько управлением, финансами и прочим. Данные заметки-вопросы являются, скорее, кратким изложением программы курса, чем ответом на вопрос в топик, но нам было бы интересно охватывают ли они, а точнее сама программа, в каком-либо приближении такую штуку как руководство IT: всё ли нужно и всего ли хватает?

        Читать дальше →
      • Обзор фреймворка Luigi для построения последовательностей выполнения задач

          Доброго времени суток! У нас открылось совершенно новое направление обучения — BigData, а это значит, что немного расширяется горизонт материалов, которыми мы будем делиться с вами. Сегодня рассмотрим Luigi, как часть того, что раскрывается на нашем курсе.

          Luigi — фреймворк на языке Python для построения сложных последовательностей по выполнению зависимых задач. Довольно большая часть фреймворка направлена на преобразования данных из различных источников (MySql, Mongo, redis, hdfs) и с помощью различных инструментов (от запуска процесса до выполнения задач разных типов на кластере Hadoop). Разработан в компании Spotify и открыт в виде open source инструмента в 2012 году.

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

          Для выполнения всех этих задач существуют и другие инструменты. Это Oozie, Pinball, Airflow (находится в статусе инкубации в Apache — проходит различные проверки, недавно вышел обзор на хабре). В данной статье рассмотрим только Luigi.


          Читать дальше →
        • Stream API & ForkJoinPool

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

            Если вы уже знакомы со Stream API и использовали его, то знаете, что это удобный способ обработки данных. С помощью различных встроенных операций, таких как map, filter, sort и других можно преобразовать входящие данные и получить результат. До появления стримов разработчик был вынужден императивно описывать процесс обработки, то есть создавать цикл for по элементам, затем сравнивать, анализировать и сортировать при необходимости. Stream API позволяет декларативно описать, что требуется получить без необходимости описывать, как это делать. Чем-то это напоминает SQL при работе с базами данных.



            Стримы сделали Java-код компактнее и читаемее. Еще одной идеей при создании Stream API было предоставить разработчику простой способ распараллеливания задач, чтобы можно было получить выигрыш в производительности на многоядерных машинах. При этом нужно было избежать сложности, присущей многопоточному программированию. И это удалось сделать, в Stream API есть методы BaseStream::parallel и Collection.parallelStream(), которые возвращают параллельный стрим.
            Читать дальше →
          • Продвинутое конфигурирование Docker Compose (перевод)

              Docker Compose обладает целым рядом нетривиальных способов применения, которые мы рассмотрим в этой заметке. Это очередной перевод статьи, которую мы разбирали при подготовке материалов нашего курса Python для Web-разработки.



              Контроль порядка запуска


              Docker Compose запускает контейнеры в порядке зависимостей, используя опцию depends_on, чтобы указывать, когда запускается сервис. Для определения порядка запуска Compose применяет depends_on, links, volumes_from и network_mode: «service: ...».

              Если контейнер должен дождаться состояния “ready” другого контейнера, можно использовать инструменты wait-for-it или dockerize. Они будут проверять хосты и порты до тех пор, пока TCP соединение не будет подтверждено. Для включения принудительного ожидания в композицию необходимо добавить entrypoint:

              version: '2'
              
              services:
                  web:
                      build: .
                      ports:
                          - "80:8000"
                      depends_on:
                          - db
                      entrypoint: "./wait-for-it.sh db:5432"
                  db:
                      image: postgres

              Вы всегда можете самостоятельно написать скрипт-обёртку, если возникнет необходимость в усилении контроля.
              Читать дальше →
              • +17
              • 8,7k
              • 6
            • Реклама помогает поддерживать и развивать наши сервисы

              Подробнее
              Реклама
            • Тестируем асинхронный код с помощью PyTest (перевод)

                При подготовке материала для курса, нам периодически попадаются интересные статьи, которыми хотелось бы поделиться с вами!

                Автор Stefan Scherfke “Testing (asyncio) coroutines with pytest”



                PyTest — отличный пакет для тестирования на Python, и с давних пор один из моих любимых пакетов в целом. Он значительно облегчает написание тестов и обладает широкими возможностями по составлению отчетов о непройденных тестах.

                Тем не менее, на момент версии 2.7, он менее эффективен в тестировании (asyncio) подпрограмм. Поэтому не стоит пытаться их тестировать таким способом:

                # tests/test_coros.py
                
                import asyncio
                
                def test_coro():
                    loop = asyncio.get_event_loop()
                
                    @asyncio.coroutine
                    def do_test():
                        yield from asyncio.sleep(0.1, loop=loop)
                        assert 0  # onoes!
                
                    loop.run_until_complete(do_test())
                

                В таком методе много недостатков и излишеств. Единственные интересные строки — те, что содержат операторы yield from и assert.
                Читать дальше →
                • +11
                • 3,7k
                • 2
              • DevOps не проблема технологий. DevOps — это проблема бизнеса. (перевод)

                  Дэймон Эдвардс / 8 ноября, 2010

                  С того момента как Патрик Дебуа организовал первую конференцию DevOps Days и явил миру термин “DevOps” не может быть сомнений, что DevOps развился до уровня глобального движения.

                  Безусловно, DevOps движение имеет своих хулителей. Негативные мнения варьируются от ошибочных («DevOps — это новое название для сисадминов») и пренебрежительных («DevOps — это просто какие-то безумные разработчики (Devs), которые пытаются избавиться от админов (Ops)» или «DevOps — это какие-то безумные админы, которые хотят казаться разработчиками, чтобы их больше любили») до выражений обиды (как правило, с аргументами, не поддающимися логике).

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

                  DevOps это не проблема технологий.

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

                  Какое отношение бизнес имеет к DevOps?
                  Основополагающий бизнес-процесс в любой компании — взять идею от момента ее рождения в голове и донести ее туда, где она будет приносить деньги.


                  Читать дальше →
                • Левенштейн и подсознательная любовь к DevOps

                    Нас тут частенько обвиняют в том, что мы пишем рекламные статьи, цель которых “опять пропиарить свои курсы”. Поэтому сегодня мы не будем говорить о том, что скоро стартанет курс “DevOps практики и инструменты” — нет.

                    Сегодня мы хотим поделиться с вами методом розыгрыша, который придумали наши преподаватели — инженеры компании Экспресс 42. Статьи про методы розыгрыша, как показывает статистика, тоже не все любят читать, но ирония судьбы (на последнем розыгрыше мест на курсе “WEB разработчик” оба победителя — читатели Хабра) просто требует, чтобы мы продолжали писать :)

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



                    Читать дальше →
                  • Что необходимо для качественной Web разработки?

                      Какие знания необходимы современному, а главное востребованному веб-разработчику?

                      За скобками остается базовое умение писать код и всё что связано с умением работать в команде и иные очевидные вещи. Для нашей программы курса «Web-Разработчик», который стартует 5 августа, мы очертили именно следующий круг знаний и скилов, считая их основополагающими в специальности:

                      Во-первых, код ревью: стоит писать такой код, чтобы он был повторно используем, понятен и прост, сюда относятся DRY, KISS, цикломатическая сложность, читаемость, преждевременная оптимизация, чистые функции, статический анализ, соблюдение style guide и инструменты для отслеживания всего этого. Это как дизайн или психология: каждый считает себя экспертом, но далеко не каждый таковым является на деле — тут важны чёткие принципы, системный подход конечно же практика.

                      Во-вторых, разработчику неплохо было бы быть знакомым со спецификой Python, синтаксическим сахаром и подкапотной жизнью. Как правильно использовать генераторы, итераторы, декораторы и контекстные менеджеры, как на практике применять MRO и бороться с утечками памяти – все это полезные практические навыки, которые делают код лаконичнее, понятнее и «поддерживаемее», а продукт – более стабильным и приспосабливаемым.
                      Читать дальше →
                      • –22
                      • 5,9k
                      • 5
                    • Что такое DevOps: подход, который может изменить всё

                        Официальной датой рождения термина DevOps принято считать 2009 год, когда в Бельгии впервые прошла конференция “Devopsdays”. Год спустя желающих наберется уже на 4 подобных события. В 2017 году — 47 конференций по всему миру, в том числе в Москве. Так что такое DevOps?

                        DevOps это не профессия, а культура, философия, метод — набор практик, объединяющий вместе разработчиков программного обеспечения, тестировщиков и людей, отвечающих за его обслуживание. Отсюда название — акроним от “development” и “operations”. Основная цель — уменьшение разрыва между работой всех IT- подразделений компании, оптимизация ответственности за задачи «на стыке» разработки и эксплуатации, повышение производительности, снижение количества ошибок, и, как следствие, удовлетворение потребностей бизнеса и клиента.
                        Читать дальше →
                      Самое читаемое