Как стать автором
Обновить
36
0
Сергей Печенко @tnt4brain

DevOps

Отправить сообщение

Sid Meier's Civilization III от Firaxis – история создания

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров11K


Мир готовится вступить в новый век, игровая индустрия потихоньку переключает фокус внимания с приставок на компьютеры, на судебных заседаниях решается будущее Цивилизации… А что же Сид Мейер, её отец? Летит на всех парах к Альфа Центавре, строить прекрасное будущее!

Успех Sid Meier's Civilization II однозначно показал: продолжению быть. Но какому? От Microprose без Мейера или от маэстро Сида и его новой команды? Или от Activision, зашедшей с козырей и выкупившей все права у Avalon Hill – изначального правообладателя названия «Civilization»?
Читать дальше →
Всего голосов 53: ↑52 и ↓1+51
Комментарии11
Споры на тему «DevOps — это человек или методология?» уже неактуальны: всем надоело. Зато появился DevSecOps. И хотя термин не нов (первая конференция DevSecOps Summit прошла в 2016 году), его точное содержание бывает не до конца понятно и новичкам, и бывалым айтишникам.

Если за бывалых мы не волнуемся (разберутся сами), то новичкам нужен вводный курс. Поэтому я, DevOps-инженер Сергей Печенко (@tnt4brain), собрал коллекцию статей. Поговорим о том, что такое DevSecOps, какие инструменты существуют для внедрения этой методологии на уровне команды, а затем и на уровне компании.
Читать далее
Всего голосов 22: ↑21 и ↓1+20
Комментарии0

Лестница Иакова

Время на прочтение10 мин
Количество просмотров7.1K

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

Читать далее
Всего голосов 19: ↑18 и ↓1+17
Комментарии32

Self-hosted EXPLAIN: наглядно и безопасно

Время на прочтение2 мин
Количество просмотров7.5K

С момента первой же хабрапубликации о возможностях нашего сервиса визуализации планов запросов PostgreSQL explain.tensor.ru (а было это уже больше 2 лет назад) пользователи задавали резонный вопрос: "Все у вас круто, но у нас в запросах и планах есть коммерческая инфа, которую отправлять куда-то наружу низзя... Можно как-то ваш сервис развернуть на своей площадке?"

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

Читать далее
Всего голосов 32: ↑32 и ↓0+32
Комментарии9

Ajax-запросы нативными средствами Joomla

Время на прочтение4 мин
Количество просмотров4.4K

Небольшая заметка о том, как делать ajax-запросы штатными средствами без использования дополнительных js-библиотек (jQuery, etc). Joomla 3 и Joomla 4 предоставляют небольшую обёртку для конструирования XMLHttpRequest. В целом синтаксис очень похож на тот же jQuery Ajax, поэтому заменить его будет очень легко.

В <head> страницы можно увидеть core.js, в котором есть немало любопытных функций для работы с фронтом на Joomla. Об одной из них (получение данных из php в js) писалось здесь: Разработка форм обратной связи для магазинов на Joomla 3. Для создания ajax-запросов нам пригодится Joomla.request.

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии13

Янус: двуличность как симптом

Время на прочтение6 мин
Количество просмотров9K

В 19 веке была популярна одна интересная городская легенда. Интересна она, прежде всего, с медицинской точки зрения. Максимального расцвета и освещенности легенда об Эдварде Мордаке достигла 8 декабря 1895 года, когда Бостон Пост опубликовала статью "Чудеса современной науки". В этой статье, за неимением более значимых научных новостей и в погоне за сенсацией, газета подробно рассказывала о таких существах, как женщина-рыба из Линкольна и человек-краб. В подборку с фриками попал и некий Эдвард с его дьявольским близнецом. Научной статья считалась потому, что журналист вел рассказ, опираясь на более чем авторитетный источник - архив Королевского научного общества.

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Комментарии5

PyTest

Время на прочтение24 мин
Количество просмотров360K

Предисловие


По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

Юнит-тестирование Python


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

Вводная по необходимым знаниям


На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.

Преимущества и недостатки PyTest


1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

Код
import unittest

class TestUtilDate(unittest.TestCase):
    def setUp(self):
        #init_something()
        pass
        
    def tearDown(self):
        #teardown_something()
        pass
        
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
        
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        
    def test_failed_upper(self):
        self.assertEqual('foo'.upper(), 'FOo')
        
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
    unittest.TextTestRunner(verbosity=2).run(suite)


То же самое в PyTest:

Код
import pytest

def setup_module(module):
    #init_something()
    pass

def teardown_module(module):
    #teardown_something()
    pass

def test_upper():
    assert 'foo'.upper() == 'FOO'
    
def test_isupper():
    assert 'FOO'.isupper()
    
def test_failed_upper():
    assert 'foo'.upper() == 'FOo'


2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.

image

3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.

4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.

5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)

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

7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени.

8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.

9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.

Про недостатки, пусть их и не много, могу сказать следующее:

1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».

2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.

3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).

Подробное описание модуля и его возможностей под катом.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+20
Комментарии11

Исповедь docker хейтера

Время на прочтение10 мин
Количество просмотров121K

Я должен признаться. Я ненавижу docker. Всей своей душой. Это самая ужасная софтина, которую я видел за последние 10 лет.


С одной стороны, я очень уважаю одноименную компанию. Ребята из Docker Inc. реально популяризировали контейнеризацию. Теперь о ней не знает только ленивый. С другой стороны, ничего принципиально нового они не изобрели — контейнеризация на момент, когда Docker "выстрелил", уже существовала более 30 лет (начиная от chroot, вспомним еще jails и zones, ну, и наконец-то — namespaces & cgroups).


Круто, что docker реально ускоряет разработку во множество раз. Если вести ее правильно, то даже без потери в качестве. В любом случае, docker здесь, от него не деться и приходится им пользоваться.


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


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

Читать дальше →
Всего голосов 220: ↑203 и ↓17+186
Комментарии539

Как настроить Linux для входа в домен с использованием алгоритмов ГОСТ

Время на прочтение27 мин
Количество просмотров11K

Введение



Протокол Kerberos 5 сейчас активно используется для аутентификации. Особенностью данного протокола является то, что он осуществляет аутентификацию, базируясь на четырех китах:


  1. Симметричное шифрование;
  2. Хеширование;
  3. ЭЦП;
  4. Третья доверенная сторона.

Начиная с пятой версии появилась возможность использовать еще асимметричное шифрование (для электронной подписи). Более подробно на работе протокола Kerberos останавливаться не имеет смысла, ибо описание алгоритма можно посмотреть тут.


К сожалению, количество алгоритмов шифрования, хеширования и ЭЦП, которые использует данный протокол, не настолько велико, насколько хотелось бы, поэтому в данной статье я хочу показать, как добавить легко и просто собственные алгоритмы в реализацию данного протокола MIT'ом. Добавлять же мы будем наши отечественные алгоритмы: ГОСТ 28147-89 (aka Магма), ГОСТ Р 34.11-2012 (aka Стрибог) и ГОСТ Р 34.10-2012 (хотелось бы тоже иметь для него aka, но я не знаю:(). Готовое решение для данных алгоритмов можно его найти в моем репозитории. На стороне клиента мы будем использовать аппаратные реализации алгоритмов ГОСТ в Рутокене ЭЦП 2.0 и их программные реализации в engine GOST для openssl. Но самый безопасный вариант хранения ключей – когда они генерируются непосредственно на Рутокене и никогда не покидают его память во время криптографических операций. Для такого варианта работы потребуется rtengine.

Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии8

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

System Software Engineer, DevOps
Lead
DevOps
High availability
Ansible
Python
Git
Nginx