• Docker-compose. Как дождаться готовности контейнера

      Введение


      Существует много статей про запуск контейнеров и написание docker-compose.yml. Но для меня долгое время оставался не ясным вопрос, как правильно поступить, если какой-то контейнер не должен запускаться до тех пор, пока другой контейнер не будет готов обрабатывать его запросы или не выполнит какой-то объём работ.
      Читать дальше →
    • Как сбросить вес, не занимаясь спортом? Личный опыт

      • Tutorial
      Привет, Хабр!

      По моим наблюдениям, всех людей можно разделить на три категории: счастливчиков с нормальным телосложением, худых, кто не знает как бы поправиться, и полных, кто не знает как бы похудеть. Мне угораздило попасть в третью категорию, и всю взрослую жизнь мой вес колебался в районе 95кг при росте 1.74м, что соответствует BMI=31.4 или ожирению. И хотя в принципе, это ничуть не мешало, но все же лишний вес накладывает определенные ограничения, как в перспективе состояния здоровья, так и в плане личной жизни. Наконец, в один прекрасный день я решил что «пора», и занялся этим вопросом более серьезно.



      Думаю, среди IT-шников, работающих в офисе, немало людей с похожими проблемами, и надеюсь, мой опыт будет им полезен.
      Читать дальше →
    • Что нужно знать об архитектуре ClickHouse, чтобы его эффективно использовать. Алексей Зателепин (2018г)

        ClickHouse — высокопроизводительная аналитическая база данных с открытыми исходниками, разработанная в Яндексе. Изначально ClickHouse создавался для задач Яндекс.Метрики, но постепенно нашёл множество применений как внутри Яндекса, так и в других компаниях. Я расскажу, как ClickHouse устроен внутри с акцентом на то, какие у выбранной архитектуры следствия с точки зрения прикладного разработчика.


        Будут затронуты следующие темы:


        • Как ClickHouse хранит данные на диске и выполняет запрос, почему такой способ хранения позволяет на несколько порядков ускорить аналитические запросы, но плохо подходит для OLTP и key-value нагрузки.
        • Как устроена репликация и шардирование, как добиться линейного масштабирования и что делать с eventual consistency.
        • Как диагностировать проблемы на production-кластере ClickHouse.

        Читать дальше →
        • +23
        • 3.8k
        • 8
      • PostgreSQL Antipatterns: накручиваем себе проблемы

          Некоторые ситуации в работе PostgreSQL кажутся неочевидными, пока не попытаешься детально понять, «почему это работает так». Из-за незнания таких особенностей иногда разработчик сам провоцирует проблемы для нормальной работы своего приложения в будущем.

          Сегодня разберем пару примеров, как неудачная организация БД и кода могут превратить наше приложение в клубок проблем:

          • накрутка serial при ON CONFLICT
          • накрутка счетчика транзакций

          Читать дальше →
        • Как Тильда убивает рынок веб-фриланса

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


            TLDR: Тильда — это рак, постепенно поглощающий здоровый рунет (и в гораздо меньших масштабах весь остальной интернет). Тильда забирает работу у разработчиков и дизайнеров и даёт её людям, которые справляются гораздо хуже. Она поспособствовала появлению целого пласта «специалистов», которые ничего не умеют, кроме визуальной верстки, но позиционируют и продают себя как крутых дизайнеров/разработчиков. Она генерирует более тяжелые страницы, чем вордпресс!

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

            • Tutorial

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


            2.1. Получение уравнений динамики системы. Статическая характеристика. Уравнение динамики САУ (САР) в отклонениях
            2.2. Линеаризация уравнений динамики САУ (САР)
            2.3. Классический способ решения уравнений динамики


            Лекции по курсу «Управление Техническими Системами», читает Козлов Олег Степанович на кафедре «Ядерные реакторы и энергетические установки», факультета «Энергомашиностроения» МГТУ им. Н.Э. Баумана. За что ему огромная благодарность.


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


            Первая часть: «Введение в теорию автоматического управления. Основные понятия теории управления техническим системами»



            Читать дальше →
          • Понятнее о S.O.L.I.D

            Большинство разработчиков с разговорами о принципах архитектурного дизайна, да и принципах чистой архитектуры вообще, обычно сталкивается разве что на очередном собеседовании. А зря. Мне приходилось работать с командами, которые ничего не слышали о S.O.L.I.D, и команды эти пролетали по срокам разработки на многие месяцы. Другие же команды, которые следовали принципам дизайна и тратили очень много времени на буквоедство, соблюдение принципов чистой архитектуры, код-ревью и написание тестов, в результате значительно экономили время Заказчика, писали лёгкий, чистый, удобочитаемый код, и, самое главное, получали от этого кайф.

            Сегодня мы поговорим о том, как следовать принципам S.O.L.I.D и получать от этого удовольствие.



            Что такое S.O.L.I.D? Погуглите — и получите 5 принципов, которые в 90% случаев описываются очень скупо. Скупость эта потом выливается в непонимание и долгие споры. Я же предлагаю вернуться к одному из признанных источников и хотя бы на время закрыть этот вопрос.

            Источником принципов S.O.L.I.D принято считать книгу Роберта Мартина «Чистая архитектура». Если у Вас есть время прочесть книгу, лучше отложите эту статью и почитайте книгу. Если времени у Вас нет, а завтра собес — велком.
            Читать дальше →
          • Введение в Traefik 2.0

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


            Обратный прокси-сервер (reverse proxy, реверс-прокси) служит для ретрансляции запросов из внешней сети к каким-либо серверам/сервисам внутренней сети (например веб-сервера, БД или файловые хранилища) и позволяет:


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

            В статье будет описываться использование Traefik в Docker в качестве реверс-прокси для других контейнеров Docker, а также не контейнеризированных сервисов.


            image

            Читать дальше →
          • Удаляем устаревшую feature branch в Kubernetes кластере


              Привет! Feature branch (aka deploy preview, review app) — это когда деплоится не только master ветка, но и каждый pull request на уникальный URL. Можно проверить работает ли код в production-окружении, фичу можно показать другим программистам или продуктологам. Пока вы работаете в pull request'е, каждый новый commit текущий deploy для старого кода удаляется, а новый deploy для нового кода выкатывается. Вопросы могут возникнуть тогда, когда вы смерджили pull request в master ветку. Feature branch вам больше не нужна, но ресурсы Kubernetes все еще находятся в кластере.

              Читать дальше →
            • Как GitLab помогает делать бэкапы больших хранилищ NextCloud

              Привет, Хабр!


              Сегодня я хочу рассказать о нашем опыте автоматизации резервного копирования больших данных хранилищ Nextcloud в разных конфигурациях. Я работаю СТО в «Молния АК», где мы занимаемся конфигурационным управлением IT систем, для хранения данных используется Nextcloud. В том числе, с распределенной структурой, с резервированием.


              Проблемы вытекающие из особенностей инсталляций в том, что данных много. Версионирование которое дает Nextcloud, резервирование, субъективные причины, и другое создает много дублей.


              Предыстория


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


              Мы предлагаем варианты хранения бэкапа у нас или у заказчика на его отдельных от Nextcloud машинах, что требует гибкого автоматизированного подхода к администрированию.


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


              Для начала посмотрим на вводные данные. Нам нужно:


              • Масштабируемость в плане одна нода или несколько. Для крупных исталляций мы используем в качестве хранилища minio.
              • Узнавать о проблемах с выполнением бэкапа.
              • Нужно хранить бэкап у клиентов и/или у нас.
              • Быстро и легко разбираться с проблемами.
              • Клиенты и установки сильно отличаются один от другого — единообразия добиться не получается.
              • Скорость восстановления должна быть минимальна по двум сценариям: полное восстановление (дизастер), одна папка — стерто по ошибке.
              • Обязательна функция дедупликации.


              Для решения задачи управления бекапами мы прикрутили GitLab. Подробнее подкатом.

              Читать дальше →
              • +12
              • 2.1k
              • 6
            • GitHub ведет работу по замене термина master на нейтральное название



                Генеральный директор GitHub Нат Фридман (Nat Friedman) заявил на прошлой неделе в Twitter, что в компании уже начаты определенные действия по поводу замены термина master, обозначающего на платформе основную версию программного кода, на более нейтральное название, например, main.
                Читать дальше →
              • Принципы SOLID в картинках

                • Translation


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

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

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

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

                Ну, приступим.
                Читать дальше →
              • Введение в Puppet

                  Puppet — это система управления конфигурацией. Он используется для приведения хостов к нужному состоянию и поддержания этого состояния.


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


                  Читать дальше →
                • Фармакокинетическое моделирование в Julia: практическое использование DiffEquations.jl и Optim.jl

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

                  Читать дальше →
                • Генерируем странные кулинарные рецепты с помощью TensorFlow и рекуррентной нейронной сети (пошаговая инструкция)

                  • Tutorial

                  TL;DR


                  Я натренировал LSTM (Long short-term memory) рекуррентную нейронную сеть (RNN) на наборе данных, состоящих из ~100k рецептов, используя TensorFlow. В итоге нейронная сеть предложила мне приготовить "Сливочную соду с луком", "Клубничный суп из слоеного теста", "Чай со вкусом цукини" и "Лососевый мусс из говядины" ‍.


                  Используя следующие ссылки вы сможете генерировать новые рецепты самостоятельно и найти детали тренировки модели:



                  В этой статье описаны детали тренировки LSTM модели на Python с использованием TensorFlow 2 и Keras API.


                  Cooking recipes generator demo

                  Читать дальше →
                  • +12
                  • 2.2k
                  • 5
                • Если вы используете моки, то вы хоть что-то тестируете?

                  • Translation

                  Было ли у вас ощущение, что ради тестирования вы делаете код труднее для чтения? Допустим, у вас есть код, который ещё не тестировался. У него есть ряд побочных эффектов, и вас просят сначала прогнать тесты. Вы начинаете следовать советам вроде передачи глобальных переменных в виде параметров или извлечения проблемных побочных эффектов, чтобы сделать вместо них заглушки в тестах.

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

                  Вы останавливаетесь и задумываетесь: «Допустимо ли менять сигнатуры кода ради тестирования? Тестирую ли я реальный код или совершенно другой класс, в котором не происходит то, что нужно?» Перед вами может возникнуть дилемма. Вы уверены, что стоит и дальше придерживаться этого подхода? Или это потеря времени?

                  Вопрос на миллион: для устаревшего кода нужно писать модульные тесты или интеграционные?
                  Читать дальше →
                • Линтер на все случаи жизни — GitHub Super Linter


                    Команда DevOps инженеров из GitHub поделились своим универсальным решением для проверки качества кода. С ним можно настроить линтер для 17 языков всего в 11 строк:


                    name: Lint Code Base
                    on:
                      push:
                        branches-ignore:
                          - 'master'
                    jobs:
                      linter:
                        runs-on: ubuntu-latest
                        steps:
                            - uses: actions/checkout@v2
                            - uses: docker://github/super-linter:v2.1.0

                    Код выше является YAML конфигурацией для GitHub Actions (бесплатный CI/CD от GitHub) и далее мы разберемся с его содержимым и принципом работы.

                    Читать дальше →
                  • Сколько инструкций процессора использует компилятор?

                      Месяц назад я попытался сосчитать, сколько разных инструкций поддерживается современными процессорами, и насчитал 945 в Ice Lake. Комментаторы затронули интересный вопрос: какая часть всего этого разнообразия реально используется компиляторами? Например, некто Pepijn de Vos в 2016 подсчитал, сколько разных инструкций задействовано в бинарниках у него в /usr/bin, и насчитал 411 — т.е. примерно треть всех инструкций x86_64, существовавших на тот момент, не использовались ни в одной из стандартных программ в его ОС. Другая любопытная его находка — что код для x86_64 на треть состоит из инструкций mov. (В общем-то известно, что одних инструкций mov достаточно, чтобы написать любую программу.)

                      Я решил развить исследование de Vos, взяв в качестве «эталонного кода» компилятор LLVM/Clang. У него сразу несколько преимуществ перед содержимым /usr/bin неназванной версии неназванной ОС:

                      1. С ним удобно работать: это один огромный бинарник, по размеру сопоставимый со всем содержимым /usr/bin среднестатистического линукса;
                      2. Он позволяет сравнить разные ISA: на releases.llvm.org/download.html доступны официальные бинарники для x86, ARM, SPARC, MIPS и PowerPC;
                      3. Он позволяет отследить исторические тренды: официальные бинарники доступны для всех релизов начиная с 2003;
                      4. Наконец, в исследовании компиляторов логично использовать компилятор и в качестве подопытного объекта :-)

                      Начну со статистики по мартовскому релизу LLVM 10.0:
                      ISA Размер бинарника Размер секции .text Общее число инструкций Число разных инструкций
                      AArch64   97 МБ 74 МБ 13,814,975 195
                      ARMv7A 101 МБ 80 МБ 15,621,010 308
                      i386 106 МБ 88 МБ 20,138,657 122
                      PowerPC64LE 108 МБ 89 МБ 17,208,502 288
                      SPARCv9 129 МБ 105 МБ 19,993,362 122
                      x86_64 107 МБ 87 МБ 15,281,299 203
                      В прошлом топике комментаторы упомянули, что самый компактный код у них получается для SPARC. Здесь же видим, что бинарник для AArch64 оказывается на треть меньше что по размеру, что по общему числу инструкций.

                      А вот распределение по числу инструкций:
                      Читать дальше →
                    • Зачем инженеру soft skills

                        Навыки, которые IT-специалисты применяют в работе, делятся на два типа – hard skills («жёсткие навыки») и soft skills («гибкие навыки»). Первые – это профессиональные умения, которыми инженеры пользуются, решая технические задачи. Это, например, владение Java или знание Big Data-стека.

                        А что насчет вторых? Soft skills – это комплекс неспециализированных навыков, которые не менее важны в работе. Что это за умения, зачем они нужны айтишнику, как их развивать, почему инженеры с прокаченными «гибкими навыками» становятся все более востребованными, объясняет тимлид одной из команд тестировщиков EPAM и тренер в области soft skills Сергей Атрощенков.


                        Читать дальше →
                      • Как синхронизация времени стала безопасной


                          Как сделать так, чтобы время per se не врало, если у вас есть миллион больших и малых устройств, взаимодействующих по TCP/IP? Ведь на каждом из них есть часы, а время должно быть верным на всех. Эту проблему без ntp невозможно обойти.

                          Представим себе на одну минуту, что в одном сегменте промышленной ИТ инфраструктуры возникли трудности с синхронизацией сервисов по времени. Немедленно начинает сбоить кластерный стек Enterprise ПО, распадаются домены, мастера и Standby узлы безуспешно стремятся восстановить status quo.

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

                          • истечет срок действия паролей учетных записей пользователей;
                          • истечет срок действия X.509 сертификатов;
                          • двухфакторная аутентификация TOTP перестанет работать;
                          • бэкапы «устареют» и система удалит их;
                          • сломается DNSSec.

                          Понятно, что каждый первый департамент ИТ заинтересован в надежной работе служб синхронизации времени, и хорошо бы они были надежны и безопасны в промышленной эксплуатации.
                          Читать дальше →
                          • +33
                          • 6.9k
                          • 4