Pull to refresh
273
0
Георгий Шуклин @amarao

Забанен за упоминание войны. Больше не на хабре.

Send message

Подтесты в Python

Reading time 13 min
Views 9.1K

Недавно я сделал опрометчивый твит, в котором намекнул на то, что у меня имеется глубоко продуманное мнение по одному важному вопросу. Я написал, что пакет pytest-subtests достоин того, чтобы им пользовалось бы больше программистов. Я даже дошёл до того, что, говоря о подтестах (subtests), сказал, что они были единственным, что мне по-настоящему нравилось в unittest до появления их поддержки в pytest. И, как на грех, Брайан Оккен предложил мне поучаствовать в подкасте Test and Code, чтобы подробнее обсудить подтесты. Я могу лишь догадываться о том, что он это сделал, дабы преподнести мне урок, показать мне, что я не должен, накачавшись продуктами Splenda и травяным чаем, выдавать скороспелые мнения о тестировании кода.Но, тем не менее, когда Брайан взглянет на меня со своей хитрой улыбкой и скажет: «Итак, ты готов поговорить о подтестах?», я планировал ответить: «Да, я готов — сделал обширные заметки и набрал справочных материалов». А когда мы вместе будем стоять на сцене, получая Дневную премию «Эмми» за лучший подкаст о тестировании, я шепну ему: «Я раскрыл твою хитрость, и хотя я тебя обыграл, ты реально показал мне — что такое скромность», а по его щеке скатится одинокая слеза.

Или, что скорее всего так и есть, ему просто хотелось пригласить кого-то, с кем можно поговорить об этом конкретном аспекте Python-тестирования, а я оказался одним из тех немногих, встретившихся ему, кто высказывал по этому поводу своё мнение. В любом случае, этот пост будет играть роль моих заметок по механизму подтестов из unittest, который появился в Python 3.4. Здесь же пойдёт речь о сильных и слабых сторонах подтестов, о сценариях их использования. Этот материал можно считать дополнением к подкасту Test and Code Episode 111.

Читать далее
Total votes 24: ↑23 and ↓1 +22
Comments 6

Совершенный алгоритм. Графовые алгоритмы и структуры данных

Reading time 2 min
Views 6.1K

Вторая книга (Графовые алгоритмы и структуры данных) из серии Совершенный алгоритм Тима Рафгардена является продолжением, по сути, единого цикла лекций. Автор не только сохранил стиль первой книги, но и часто ссылается на материал, который был в ней преподнесён. Стиль обоих книг я считаю очень удачным. А именно, детальное и всестороннее изложение небольшого количества тем доступным языком.

Снова, это не каталог решений, а именно лекции. Поэтому автор далеко не сразу дает готовые алгоритмы. По сути, автор рассказывает как к этим алгоритмам можно прийти. Либо пробуя разные варианты, либо постепенно улучшая решения. Так например, поиск кратчайшего пути:

Читать далее
Total votes 11: ↑11 and ↓0 +11
Comments 0

Со скрипта на «верфь»

Reading time 11 min
Views 5.4K

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

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

Читать далее
Total votes 32: ↑30 and ↓2 +28
Comments 0

Как я разогнал fail2ban* в тысячу раз с помощью SIMD

Reading time 15 min
Views 20K

Fail2ban — утилита чрезвычайно полезная во многих случаях. Думаю, многие используют её для того, чтобы в автоматическом режиме блокировать особенно назойливых «посетителей». К сожалению, если входящий поток становится слишком большим, fail2ban теряет все свои полезные свойства, потому что разбор лога безнадёжно отстаёт от реальности.

Лог nginx из 100 тысяч строчек fail2ban при самых простых настройках разбирает порядка 45 секунд. Нехитрыми манипуляциями его можно ускорить раз в 6, но этого оказалось недостаточно. Наивная реализация на аналогичного фильтра на Rust уже обеспечила требуемую производительность, но если уж взялся за оптимизацию, то остановиться трудно.

* только необходимую часть функционала

Читать далее
Total votes 121: ↑119 and ↓2 +117
Comments 76

АДСМ6. Интерфейсы взаимодействия с сетевыми устройствами

Reading time 81 min
Views 13K

Это вторая статья - техническо-практический разбор протоколов и интерфейсов автоматизации сети.

Если хочется исторической справки, я отсылаю читателя к статье-спутнику, в которой мы двигаемся от начала времён в будущее человечества. Какую роль сыграли в нашем настоящем IETF, ISO, олдовые и современные вендоры и даже просто люди.
В этой же мы раскрываем дерево XML, пробуем на вкус капабилити NETCONF, шлём первые RPC и наконец уже расставим в правильном порядке буквы YANG, OpenConfig, gNMI.

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

Читать далее
Total votes 18: ↑18 and ↓0 +18
Comments 9

Общего между фракталами и голографией

Reading time 7 min
Views 6.9K
Продолжим тему бильярдных фракталов.



В статье присутствуют Gif (трафик!) и контрастные картинки. У эпилептиков может случиться эпилептический припадок.
Читать дальше →
Total votes 37: ↑36 and ↓1 +35
Comments 15

Используем клиентский процессор по максимуму. Часть 1: Rust + WebAssembly

Reading time 19 min
Views 10K

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

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

Прирост производительности при использовании всех техник оптимизации по сравнению с реализацией на чистом JS может составлять ~1000%: от 8–9 до 100–110 фпс. Это можно проверить на интерактивном онлайн-демо, позволяющем также поиграться с числом потоков, способом вычислений и формой фрактала.
Читать дальше →
Total votes 64: ↑64 and ↓0 +64
Comments 9

Еще один вьювер сообщений (логов) для Dwarf Fortress

Reading time 2 min
Views 3.1K

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

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

Читать далее
Total votes 8: ↑8 and ↓0 +8
Comments 7

Броуновское движение простых чисел

Reading time 3 min
Views 4.5K

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

Но что, если мы будем прыгать не на одну клетку, а на очередную разницу между простыми числами - вначале 1 (3-2), потом 2 (5-3), снова 2 (7-5), потом 4 (11-7) итд. А вот направление мы будем 'вращать', например, для плоскости это будет вверх-вправо-вниз-влево? Сразу скажу, будет очень красиво.

Читать далее
Total votes 29: ↑29 and ↓0 +29
Comments 15

Как я разрабатывал интеграцию для Home Assistant

Reading time 8 min
Views 16K

Так сложилось что недавно я поставил себе Home Assistant (далее HA) для управления всем моим зоопарком устройств из одного места, что оказалось довольно удобно. Но без ложки дегтя никуда и нашлось все таки одно устройство, интеграции для которого в HA не было, а привязать его хотелось. Было решено написать собственную интеграцию. Если интересно, что из этого вышло, добро пожаловать под кат.

Читать далее
Total votes 12: ↑12 and ↓0 +12
Comments 14

Ирина — опенсорс русский голосовой помощник. Offline-ready

Reading time 9 min
Views 47K

- Ирина, таймер...
- Ставлю таймер на пять минут.

Вполне себе обыденная история из моего быта. Я таки сделал собственного автономного голосового помощника.

TL;DR> Ирина вполне неплохо работает дома 24x7.

Потребуется установить Python 3.5+ и зависимости через pip (немного знаний Python).

Скиллы "из коробки": таймер, погода, контроль медиа (громче/тише/дальше), контроль плеера MPC-HC, запуск медиа из папки, расписание ближайших электричек, "подбрось кубик/монетку".

Плагинами добавляются: другие скиллы, Text-to-Speech и Speech-to-Text движки.

Интересно? Поехали >
Total votes 110: ↑108 and ↓2 +106
Comments 88

Компания SUSE открыла код NeuVector

Reading time 2 min
Views 3.1K

Компания SUSE объявила о выпуске NeuVector - платформы, обеспечивающей комплексную безопасность контейнеров. Это решение предназначено для выполнения   контейнеризированных приложений в среде нулевого доверия (zero trust). База кода NeuVector уже доступна сообществу на GitHub.

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

Образы контейнеров NeuVector стали открытым ПО и могут быть развернуты на любом кластере Kubernetes. Пользователи SUSE Rancher могут установить их из каталога приложений. В следующих версиях интеграция этих двух продуктов станет еще более плотной. Разработчики NeuVector придерживаются той же стратегии, что и SUSE, и предлагают решение для всех популярных решений для управления контейнерами – SUSE Rancher, Red Hat OpenShift, VMware Tanzu, Google GKE, Amazon EKS, Microsoft Azure AKS и других.

Проект NeuVector позволяет пользователям SUSE Rancher обеспечить требуемый уровень безопасности на протяжении всего жизненного цикла приложения и решать все необходимые для этого задачи: сегментирование сети, мониторинг и анализ трафика, сканирование уязвимостей в контейнерах, управление их конфигурацией и проверка на соответствие требованиям регуляторов, профилирование рисков, обнаружение угроз и реагирование на инциденты ИБ.

Исходный код предварительного релиза SUSE NeuVector опубликован на GitHub:

Для Controller, Enforcer и Scanner

Для Manager

Документация для всех компонентов

Читать далее
Total votes 6: ↑6 and ↓0 +6
Comments 0

Кратко, но по делу про энергонезависимую память Intel Optane

Reading time 9 min
Views 17K

Поймал себя на ощущении, что хочется поделиться своим опытом работы с интеловской энергонезависимой памятью (Intel Optane memory или Intel PMem). Я буду для краткости называть ее ПМем. Думаю, что несмотря на объем продаж в сотни миллионов долларов, пока мало кто с ней сталкивался и знает ее специфику. Я же по долгу службы занимаюсь ей уже довольно продолжительное время и гонял на ней различные приложения и микро-бенчмарки. А также добивался ее эффективного использования модифицируя под нее клиентские коды.

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

Читать далее
Total votes 50: ↑49 and ↓1 +48
Comments 37

Как ускорить игру «Жизнь» в сто раз

Reading time 17 min
Views 49K
image

Сложно найти человека, не знакомого с игрой "Жизнь", придуманной английским математиком Джоном Конвеем еще в 1970 году, и до сих пор не теряющей своей популярности. Многие программисты писали свою реализацию этой игры, и еще одна вряд ли кого-то удивит. Однако эта игра является отличным примером, показывающим, насколько полезной может оказаться оптимизация вычислений, даже не меняющая асимтотическую сложность алгоритма. Мы начнем с простейшей реализации на c# и будем последовательно применять различные оптимизации, ускоряя работу программы.

Мы также улучшим алгоритм на JavaScript, ускорив его в 10 раз по сравнению с неоптимизированной версией.

В конце статьи дана ссылка на код, а также на online-реализацию игры с оптимизированным алгоритмом на JavaScript, выполняющим до двухсот итераций в секунду на поле размера 1920x1080 (Full HD), где вы можете убить время поиграть в эту замечательную игру.
Читать дальше →
Total votes 83: ↑82 and ↓1 +81
Comments 124

Постигаем WebAssembly, рисуя кривую дракона

Reading time 23 min
Views 10K

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

На момент написания статьи WebAssembly в ходу уже три года. Она работает во всех современных браузерах, а некоторые компании уже даже решились использовать ее в продакшене  (Figma, наше почтение). За этим продуктом стоит мощная интеллектуальная поддержка: Mozilla, Microsoft, Google, Apple, Intel, Red Hat — в разработке участвовал инженерный цвет этих и других компаний. Web Assembly повсеместно считается Следующим Большим Прпорывом в веб-технологиях, но широкая аудитория фронтенд-разработчиков не спешит на нее переходить. Все мы знаем HTML, CSS и JavaScript, тех трех китов, на которых зиждется Веб, и для пересмотра такой парадигмы трех лет мало. Особенно, если краткий поиск в Google дает нечто подобное:

Читать далее
Total votes 15: ↑15 and ↓0 +15
Comments 9

Neovim для full stack программиста

Reading time 7 min
Views 74K

Я немного расскажу, как использую vim в работе full stack программиста, со своей колокольни, но для начала отвечу на некоторые вопросы, которые задают мне, когда узнают, что я использую vim при разработке проектов:

Зачем?

Хороший вопрос. Стоит для себя лично на него ответить. Зачем валандаться с vim, изучать кучу комбинаций клавиш и плагинов? Какой смысл, если есть vscode или pycharm или phpstorm? Жизнь коротка, стоит ли ее тратить на все это? Чтобы впечатлить кого-то, как на картинке в начале статьи? Да кого этим удивишь?

Читать далее
Total votes 58: ↑56 and ↓2 +54
Comments 179

Фонетическая раскладка на основе анализов частотности

Level of difficulty Easy
Reading time 16 min
Views 11K

Предыстория и предпосылки


Пару лет назад я, будучи стандартным пользователем «qwerty-йцукен», стал всё больше замечать, что процесс набора на этой паре раскладок имеет ряд неудобств, и чем больше я об этом думал, тем более раздражающими они казались.

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

Тогда я стал искать, что же предлагают альтернативные раскладки. Как оказалось, они все пытаются решить только последнюю проблему. Бесспорно, весьма успешно, но только одну-единственную проблему. И только для английского языка. Для русского найденные раскладки выглядели крайне сомнительно и, как мы убедимся позже, едва ли были лучше стандартной. Также многие английские раскладки, очевидно, разрабатывались с оглядкой на «qwerty», не создавая альтернативу, а попросту немного изменяя стандартный вариант позиционирования.

И это всего две раскладки, для двух популярнейших в интернете языков, хотя многие пользуются и тремя, а то и более.
Читать дальше →
Total votes 38: ↑38 and ↓0 +38
Comments 38

Введение в программирование: заготовка игры-платформера на SDL в 300 строк C++

Reading time 12 min
Views 26K

Этот текст предназначен для тех, кто только осваивает программирование. Я читаю лекции по C++ на первом курсе местного университета, и в качестве практикума предлагаю запрограммировать любую игру (не выношу проектов типа "софт бронирования книг в местной библиотеке"). Соответственно, чтобы помочь начинающим, я сделал некоторое количество заготовок, с которых можно стартовать свой проект. Например, заготовку олдскульного 3д шутера в 486 строк C++ я уже описывал, а вот тут можно посмотреть, что из неё сделали первокурсники.


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



На данный момент проект содержит менее трёхсот строчек цпп:


ssloy@khronos:~/sdl2-demo/src$ cat *.cpp *.h | wc -l
296

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


Итак, поехали!

Читать дальше →
Total votes 58: ↑57 and ↓1 +56
Comments 128

Делаем сервер из Android-телефона

Reading time 8 min
Views 115K

Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.


image


На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера.


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


TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём.

За длинной версией под кат
Total votes 130: ↑129 and ↓1 +128
Comments 97

BGPexplorer – машина времени для IP/MPLS сетей

Reading time 5 min
Views 4.5K

Современные сети, основанные на маршрутизации IP-пакетов, а точнее сервисы, которые они предоставляют, по факту управляются протоколом BGP. Этот протокол был спроектирован в конце 80-хх на трех салфетках. Да, с тех пор в этот протокол добавили массу возможностей, в том числе обмен маршрутной информацией VPN, правилами фильтрации трафика и всяким прочим полезным, но основа там осталась все той же, описанной на трех салфетках. И в этом есть свой плюс, потому что этот протокол в своей сути очень прост.

Но я хотел поговорить не о его простоте, а о "махании кулаками после драки", с которой частенько приходится сталкивать любой службе эксплуатации сети. Поступает жалоба на то что вот недавно что-то не работало. Или же что что-то сломалось и не очень ячно как же оно работало раньше. А узнать историю без дополнительного инструментария (или машины времени) нет возможности. Предлагаю рассмотреть такой инструмент.

Читать далее
Total votes 8: ↑8 and ↓0 +8
Comments 7

Information

Rating
Does not participate
Registered
Activity