Search
Write a publication
Pull to refresh
0
0
Дмитрий @ex_ineris

QA Engineer

Send message

Практическое руководство по Rust. Бонус

Level of difficultyMedium
Reading time34 min
Views10K



Hello world!


Представляю вашему вниманию бонусную часть практического руководства по Rust.



Другой формат, который может показаться вам более удобным.


Руководство основано на Comprehensive Rust — руководстве по Rust от команды Android в Google и рассчитано на людей, которые уверенно владеют любым современным языком программирования. Еще раз: это руководство не рассчитано на тех, кто только начинает кодить 😉

Читать дальше →

Умная квартира айтишника: хотел всё на Wi-Fi, но передумал

Level of difficultyEasy
Reading time7 min
Views66K

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

Как тогда казалось Артуру, беспроводные технологии — самое передовое и удобное решение для инженерных систем умного дома. Тем более многие кондиционеры, пылесосы, приводы штор, лампы, регуляторы теплых полов и другая бытовая техника поддерживают Wi-Fi «из коробки».

Однако появились аргументы против. В итоге Артур выбрал гибридное решение, сочетающее как проводные технологии, так и Wi-Fi с Zigbee.

В статье мы расскажем о выборе Артура и инженерных системах, которые работают в его умной квартире. Интересно? Ныряйте под кат.

Читать далее

TOTP без смартфона

Level of difficultyEasy
Reading time5 min
Views23K

Когда я решил избавиться от необходимости постоянно носить с собой смартфон, одной из проблем оказалась двухфакторная аутентификация (2FA, приложение Google Authenticator). Остаться без возможности авторизации на множестве сервисов было неприемлемо, нужна была альтернатива.

Беглый поиск вывел меня на утилиту oathtool: командная строка, POSIX, OSS — всё, как я люблю, проблема в принципе решена. Но, как и большинство CLI утилит, её удобно использовать в сочетании с другими утилитами, а для этого полезно написать скриптовую обвязку. Собственно этой обвязкой, а также опытом использования, я и решил поделиться.

Читать далее

Темная сторона Open Source

Reading time7 min
Views17K

"Вносите вклад в открытый исходный код, это лучшее, что со мной случилось!" - все чаще и чаще слышу я в Twitter в последнее время. Хотя я не возражаю против самого высказывания, мне кажется, что в нем непреднамеренно (или намеренно) упускается приличная часть правды о вкладе и авторстве открытого кода. Это похоже на то, как если бы вы рекомендовали туристический маршрут, с которого в конце концов открывается незабываемый вид, но при этом вы не упоминаете о том, сколько трудностей и подготовки требует этот поход.

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

Читать далее

Домашняя виртуальная лаборатория. Готовим собственный сервер виртуализации для обучения. 2. Выбираем сервер

Level of difficultyEasy
Reading time5 min
Views18K

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

Читать далее

Уроки для основателей стартапа на ранних стадиях

Level of difficultyEasy
Reading time12 min
Views3.1K

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

Но по мере того как я работал со все большим количеством стартапов, я понял, насколько я ошибался.

В этом посте я расскажу о нескольких главных уроках, которые пригодятся сегодняшним основателям стартапов ранних стадий. Это список вещей, которые я хотел бы узнать раньше в Segment!

Читать далее

Как DDoS-атаки стали для нас рутиной и как ML помогает их отражать

Reading time10 min
Views7.9K

Несколько лет назад увидеть DDoS-атаку было целым событием. Если такое и случалось, то инцидент тщательно анализировала целая команда специалистов, а каждая извлечённая крупица информации использовалась для обучения моделей, формирования новых факторов и улучшения подходов для защиты от новых потенциальных атак. 

Но постепенно число атак увеличивалось, и в какой-то момент отбить очередной DDoS стало обычным делом. Только за прошедший 2023 год мы в Яндексе отразили 1002 атаки. В этом нам помогло инхаус-решение — Антиробот, который работает на уровне L7 сетевой модели OSI.

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

Читать далее

Знакомство с SSH

Level of difficultyEasy
Reading time10 min
Views51K

Как гласит википедия, «SSH — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Схож по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы доступны для большинства сетевых операционных систем». Когда в первый раз знакомишься с ним, то, скорее всего, он представляется как средство для доступа к удалённому серверу. В первую очередь, так оно и есть. Однако его возможности намного шире.

Читать далее

Broadcom ESXi для самых маленьких. Часть 1. Выдача процессоров виртуальным машинам

Level of difficultyHard
Reading time5 min
Views14K

В очередной раз столкнулся в интернете с отсутствием понимания «что такое виртуализация и как она работает с ядрами и процессором». Вспомнил себя тупого* и решил написать статью «как оно там в ESXi». Чтобы было на что ссылаться.

Читать далее

Автоматическое тестирование ускорило разработку в 50 раз. Сказка от создателей FoundationDB

Level of difficultyMedium
Reading time10 min
Views9.2K
Автоматическое тестирование по сравнению с обычным, источник

Стартап Antithesis Operations LLC создан разработчиками известной системы FoundationDB. Они говорят, что между двумя продуктами много общего: «Когда в 2010 году мы взялись за создание масштабируемой, отказоустойчивой распределённой базы данных с ACID-транзакциями, большинство людей не думали, что такое возможно. Вот и сейчас многие не верят в полную автоматизацию тестирования».

Сейчас они уверены, что произвели революцию в разработке программного обеспечения. Они сделали полностью автономную и детерминированную систему автоматического тестирования. Внедрение системы в их собственной компании ускорило разработку в 50 раз, потому что программисты теперь думают только о коде и не боятся ошибок. 100% багов выявляется автоматически. Вручную писать тесты не надо, никаких тестировщиков, SDET и QA. Двое-трое программистов выполняют работу за 100−150 человек. Настоящая сказка!
Читать дальше →

Наивный байесовский классификатор. Основная идея, модификации и реализация с нуля на Python

Level of difficultyHard
Reading time8 min
Views36K

Наивный байесовский классификатор (Naive Bayes classifier) — вероятностный классификатор на основе формулы Байеса со строгим (наивным) предположением о независимости признаков между собой при заданном классе, что сильно упрощает задачу классификации из-за оценки одномерных вероятностных плотностей вместо одной многомерной.

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

Читать далее

Что внутри компактного неттопа GoLite 11? Разборка тихого мини-компьютера для офисных задач

Level of difficultyEasy
Reading time4 min
Views2.8K
Маленькие компьютеры тоже бывают полезными — обзор на простой и доступный неттоп GoLite 11 от бренда Netsung. Этот недорогой мини-ПК для офисных задач позволяет без тормозов работать с Windows 11 Pro, создавать и редактировать документы и таблицы. Словом, эта «коробочка» — полноценный офисный компьютер.


Читать дальше →

Пишем асинхронный парсер и скрапер картинок на Python с графическим интерфейсом

Reading time6 min
Views20K

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

Читать далее

PyTest

Reading time24 min
Views394K

Предисловие


По историческому призванию я 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 (см. «Вводная по необходимым знаниям»).

Подробное описание модуля и его возможностей под катом.
Читать дальше →

Практическое руководство по Rust. 4/4

Level of difficultyMedium
Reading time34 min
Views5.6K



Hello world!


Представляю вашему вниманию четвертую и последнюю часть практического руководства по Rust.



Другой формат, который может показаться вам более удобным.


Руководство основано на Comprehensive Rust — руководстве по Rust от команды Android в Google и рассчитано на людей, которые уверенно владеют любым современным языком программирования. Еще раз: это руководство не рассчитано на тех, кто только начинает кодить ?

Читать дальше →

Как ИИ помогает программисту — и почему это случается не всегда

Reading time4 min
Views8.1K

Нейросети уже давно перестали быть игрушкой и превратились в инструмент. Да, пока не универсальный и не лишенный недостатков, но тем не менее довольно мощный и продуктивный. В разработке тоже используют ИИ. Github доказывает: нейронка может стать для программиста «третьей рукой»: ускоряя работу и помогая доводить задачи до конца. Однако в этом деле пока всё не сладко. Причина — галлюцинации ИИ.

Читать далее

Как использовать ChatGPT для разработки и учебы. Четыре сценария

Level of difficultyEasy
Reading time4 min
Views15K

Привет, Хабр! В 2023 году искусственный интеллект (далее ИИ)  вышел на тот уровень популярности, когда о нем не говорил только ленивый. Все больше компаний активно начали обсуждать свои разработки в этой области, а такие модели как Midjourney, ChatGPT, Gemini (ex-Bard), Bixby и другие стали общедоступными.

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

Читать далее

Резервное копирование на дешёвом VPS-сервере

Level of difficultyMedium
Reading time6 min
Views13K


Мы уже рассказывали, как можно использовать ультрадешёвый VPS за 130 рублей в месяц. На самом деле 512 МБ оперативной памяти вполне достаточно для нормальной работы Linux (без GUI) и множества приложений, таких как VPN, веб-хостинг, некоторые игровые серверы, а также для резервного копирования файлов.

Конечно, в интернете куча облачных хостингов, но всё-таки приватные файлы спокойнее хранить на личном сервере, который полностью под нашим контролем.
Читать дальше →

Кратко про Nameko Python

Level of difficultyEasy
Reading time5 min
Views7.4K

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

Nameko, как фреймворк для Python, предлагает удобные абстракции и инструменты для создания микросервисов, ориентированных на сообщения и события.

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

Читать далее

Замыкания и декораторы в Python: часть 2 — декораторы

Level of difficultyEasy
Reading time11 min
Views12K

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

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

Читать далее

Information

Rating
8,313-th
Location
Днепр, Днепропетровская обл., Украина
Date of birth
Registered
Activity