Содержание

Безопасность CI/CD

Обычно, когда начинается разговор о DevSecOps, все сразу вспоминают о необходимости встраивать в конвейер SAST, DAST, SCA инструменты, проводить различные тесты на безопасность приложения и регулярно сканировать работающее в продуктивной среде решение.

Но при этом не стоит забывать и о необходимости обеспечивать безопасность самого конвейера CI/CD. В сегодняшней статье мы рассмотрим обеспечение безопасности конвейера, построенного на основе Jenkins. Но сначала рассмотрим краткое описание этого решения, что Jenkins из себя представляет и для чего используется. 

Читать далее


Как организовать продуктивную четырёхдневную рабочую неделю?

Сто лет назад экономисты и философы предполагали, что к 2000 году в промышленно развитых странах продолжительность рабочего дня будет составлять всего 4 часа. И, хотя мы прошли долгий путь от длинного 12-14-часового рабочего дня в первой половинк XIX века, мы всё ещё даже не приблизились к этому прогнозу.

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

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

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

Читать далее


Теория, практика и личный опыт в обучении IT-управленцев

В этой статье Сергей Фегон (ex-CТО, руководитель нескольких групп разработки финтех-продуктов экосистемы компаний ВБЦ и TenChat, а также преподаватель в OTUS) сформировал несколько основных столпов подготовки IT-менеджеров:

  • Системная теоретическая подготовка
  • Практика менеджмента и реактивное управление
  • Личный опты

Подробнее о каждом пункте — в статье.


Основы тестирования React-приложений через Cypress

В этой статье рассмотрим, как автоматизировать тестирование React-приложений с инструментом Cypress.

Читать далее


Введение в Weight & Biases

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

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

В этой статье я кратко расскажу о таком инструменте компании Weight & Biases, незаслуженно обойденным вниманием на просторах рускоязычного пространства.

Читать далее


От текста к краткому изложению: библиотека Sumy

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

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

Читать далее


Полезные фичи в Java для новичков: мой список

В Java никогда не бывает скучно, особенно когда речь заходит о вещах, которые делают нашу жизнь проще и код — чище.

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

И знаете, что самое приятное? Когда коллеги начинают говорить: «А почему я об этом не знал раньше?» И первая фича — секционные классы.

Читать далее


Настраиваем дампы ядра в Linux

Core Dump (Дамп ядра) — это файл, который автоматически генерируется ядром Linux после сбоя программы. Этот файл содержит данные о памяти, значениях регистров и стеке вызовов приложения на момент сбоя. Да, обычно появление сообщения о создании Core Dump является не слишком приятным сюрпризом, которых лучше бы было поменьше. Но если уж Core Dump был создан, то лучше, чтобы он содержал максимум полезной информации, которая поможет разработчикам и администраторам разобраться в причинах возникшего сбоя.

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

Читать далее


Как использовать defer в Go

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

В этой статье мы и рассмотрим как использовать defer в Golang.

Читать далее


Сказ о слонах: Как я развивал инструмент, повлиявший на работу тысяч инженеров в Amazon

Меня недавно впечатлила книга «Switch: Как изменить ситуацию, когда перемены трудны» Чипа Хита. В ней изложена концепция изменения поведения. Дело в том, что мы склонны думать, будто в нашем распоряжении всего два инструмента: пряник и кнут — то есть замотивировать человека что-то сделать или прибегнуть к какой-то форме наказания, если он этого не сделает. Фреймворк Switch же гораздо сложнее. Что удивительно: я, ранее не слышав об этой книге, следовал данной формуле, причём органично и в основном интуитивно. И она отлично работала для меня.

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

Читать далее


Полезные фичи в Rust

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

Читать далее


Три фичи PostgreSQL, которые будут полезны каждому новичку

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

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

Эти фичи уже не раз выручали меня в сложных проектах, и я уверен, что они станут надежными помощниками и в вашей разработке.

Читать далее


Демистифицируем парсинг PDF: конвейерная обработка

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

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

Читать далее


Чистая архитектура для начинающих

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

Читать далее


Распределенные вычисления на Elixir: основные варианты реализации

Сегодня поговорим с вами на тему распределённых вычислений на Elixir. Мы больше не можем позволить себе писать приложения, которые работают только на одной машине. Пришло время создавать системы, которые могут выдержать любую нагрузку и работать бесперебойно даже в случае выхода из строя отдельных компонентов.

Elixir — это язык программирования, который вырос на основе мощной виртуальной машины BEAM, используемой в Erlang. Это сразу даёт нам ряд фич: хорошую масштабируемость, встроенную поддержку конкурентности и возможность строить распределённые системы.

В этой статье мы рассмотри основные инструменты для реализации распределённых вычислений Elxir.

Читать далее


Управление киберграмотностью сотрудников

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

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

Читать далее


Архитектура на основе событий в Rust

Сегодня мы рассмотрим, как реализовать так называемую event-driven архитектуру с использованием Rust.

Архитектура на основе событий (event-driven architecture, EDA) — это подход к созданию систем, где взаимодействие между компонентами системы происходит с помощью событий. Все это позволяет развязывать компоненты друг от друга и повышать их независимость, что, в свою очередь, увеличивает масштабируемость и гибкость системы.

Читать далее


Три столпа функционального программирования в Rust: map, filter и fold

Представьте себе вот такую картину: вы сидите дома, и вокруг вас мирно мурлыкают котики. Но вдруг, что-то пошло не по плану: один начал ловить лазерный указатель, другой карабкается на шторы, третий — нагло укладывается на вашу клавиатуру. Ну, вы поняли, полный хаос. И тут возникает вопрос: как навести порядок в этом котячьем хаосе? Как упорядочить этот бесконечный поток пушистых данных?

Вот тут-то и приходит на помощь наш добрый друг — Rust, а точнее его функции mapfilter и fold. Они помогают не только приручить самых неугомонных data-котиков, но и сделать это без компромиссов по производительности.

Читать далее


Reflection в Go

Сегодня мы рассмотрим в одну из интересных особенностей Golang — reflection. Мы рассмотрим, что такое reflection, как он работает, и когда его стоит использовать. Reflection позволяет программам инспектировать свои структуры и модифицировать поведение в runtime.

Читать далее


Паттерн Unit of Work в Python с SQLAlchemy

Unit of Work отслеживает все объекты, которые были загружены в память и изменены в ходе выполнения программы. Он управляет их состояниями и сохраняет изменения в базе данных в конце транзакции. Это делается с использованием сессий, которые действуют как контейнеры для всех изменений.

Когда работа завершена, Unit of Work выполняет commit для всех изменений, сохраняя их в базе данных. Если что-то пошло не так, выполняется rollback, и база данных возвращается в состояние до начала транзакции.

В данной статье рассмотрим, как реализовать паттерн Unit of Work с использованием SQLAlchemy.

Читать далее


Astra Linux и HAproxy

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

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

Читать далее

OTUS на Хабр: лучшие статьи за август