Pull to refresh
5
0.1
Send message

База про юнит-тесты в C# на xUnit v3

Level of difficultyEasy
Reading time6 min
Views1.4K

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

Сегодня разберёмся с юнит‑тестами в C# на основе xUnit v3 — библиотеки, которая стала практически стандартом де‑факто в.NET‑среде.

Почему именно xUnit? Всё просто: его создали Джим Ньюкирк и Брэд Уилсон — разработчики NUnit. Они решили выкинуть всю архаику вроде [SetUp], [TearDown] и прочих рудиментов и построили фреймворк с нуля, строго под TDD. Весной вышла xUnit v3 2.0.2, в которой завезли Assert.MultipleAsync, полностью обновили сериализацию. А в.NET 9 уже штатно продвигается Microsoft.Testing.Platform (MTP) — сверхлёгкий тестовый рантайм, с которым xUnit v3 работает прямо из коробки. Короче говоря, это самый нативный выбор под.NET 9 на сегодня.

Читать далее

Агрессивный автовакуум —  ужасный to prevent wraparound, зачем он нужен и как держать его в узде

Level of difficultyEasy
Reading time17 min
Views1.5K

Привет! На связи Дмитрий Руденко из команды Databases Т-Банка.

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

Один из таких аспектов  —  процесс уборки мусора, — autovacuum, вычищающий мертвые версии строк таблиц. В статье рассмотрим причины возникновения одного из самых неприятных подвидов —  autovacuum: to prevent wraparound.

Читать далее

Автоматизация тестов в .NET: мой опыт со Storm Petrel

Reading time20 min
Views1.2K

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

В этой статье мы рассмотрим Scand Storm Petrel — инструмент для .NET-разработчиков, который автоматизирует однотипную работу по формированию и обновлению ожидаемых значений в тестах. Это особенно актуально при большом количестве тестовых сценариев или сложной структуре тестируемых объектов, что является неотъемлемой частью разработки современных приложений.

Читать далее

Minimal API: Избавляемся от устаревающих контроллеров в ASP.NET Core

Level of difficultyMedium
Reading time14 min
Views7.2K

Я, думаю, многие уже слышали о появившихся в .NET 6 Minimal API - легковесной замене контроллеров/MVC. Кто-то уже успел ознакомиться и задался вопросом: "Ваше API в 3 строчки, это, конечно, здорово, но как это будет работать в реальном проекте с сотнями эндпоинтов, кучей фильтров, аттрибутов, расширениями OpenAPI/Swagger и прочих радостях?"

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

А забегая чуть вперед: если думаете, стоит ли переводить проект на Mini API, вот вам сразу полезная информация: они могут жить в проекте вместе, причем даже без дублирования инфраструктуры: не обязательно переводить все разом - подробнее под катом.

Бонусом, заменим SwaggerGen на реализацию OpenAPI от Microsoft.

Читать далее

Какие есть альтернативы Prometheus, если для метрик его стало недостаточно

Level of difficultyMedium
Reading time17 min
Views7.4K

Prometheus прекрасно подходит для краткосрочного мониторинга, но у этого решения есть свои ограничения по масштабу, и если вы столкнулись с высоким потреблением памяти/CPU, снижением скорости запросов или вам требуются уникальные лейблы вида user ID, то стоит подумать над внедрением альтернатив. На наш взгляд следующими после Prometheus в линейке стоят Thanos, Cortex, Mimir или VictoriaMetrics. Объективное, насколько это возможно, сравнение характеристик этих решений мы и проведем ниже.


СОДЕРЖАНИЕ


0. В каких случаях нужно задуматься о замене Prometheus
1. Обзор решений для долгосрочного хранения метрик
2. Сравнение решений: Thanos, Cortex, Mimir и VictoriaMetrics
3. Как выбрать подходящее решение
4. Миграция с Prometheus на долгосрочное хранилище
5. Сохранение алертов и дашбордов
6. Как избежать потери данных при миграции
7. Лучшие практики эксплуатации долгосрочного хранилища метрик
8. Высокая доступность и избыточность
9. Мониторинг состояния хранилища метрик
10. Обработка долгосрочных запросов и типовые ошибки

11. Обслуживание и обновления (Maintenance & Upgrades)
12. Итого. Как жить с продакшн-наблюдением

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

Переезд с Nginx на Angie. Пошаговая инструкция

Level of difficultyEasy
Reading time4 min
Views8.9K

Итак, вы решили использовать Angie как замену Nginx. С чего начать процесс? Какие аспекты нужно учитывать при переходе? Разберёмся со всем по порядку.

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

Начнём с подготовки системы к миграции.

Читать далее

Работа с длинными строками в PostgreSQL

Level of difficultyMedium
Reading time9 min
Views5.3K

Если в таблицах БД PostgreSQL есть поля большого размера, при выгрузке часть строк таких таблиц может не выгружаться с выдачей ошибки ERROR: out of memory. Столкнуться с подобной ситуацией можно, например, при выгрузке утилитой pg_dump таблиц, в которых хранятся XML-документы, или при выгрузке таблицы public.config системы «1C:Предприятие». В статье рассматриваются причины возникновения подобных ошибок и способы решения проблемы.

Читать далее

Nerdlog: быстрый TUI-просмотрщик логов с удаленных хостов, с таймлайном, без сервера

Level of difficultyEasy
Reading time17 min
Views2.4K

(Или как я написал радикально простую альтернативу Graylog)

В 2022 году я и моя команда работали над сервисом, который выводил довольно большой объём логов с распределённого кластера из 20+ хостов — всего около 2–3 миллионов сообщений в час. Мы тогда использовали Graylog, и запрос логов за последний час выполнялся за 1–3 секунды — довольно быстро. Однако, инженеры по инфраструктуре хотели избавиться от Graylog — он требовал от них утомительного обслуживания, и в итоге было принято решение перейти на Splunk. Когда Splunk наконец внедрили, мне пришлось с удивлением обнаружить, что он работает невероятно, возмутительно медленно. Тот же запрос выполнялся не за секунды, а за минуты. В чем там было дело, и можно ли это улучшить - никто разбираться не хотел.

Мне это показалось абсурдным. 2–3 миллиона логов в час — это не так уж и много, и мне казалось, что с помощью старых добрых GNU утилит и обычных лог-файлов, без какого-либо централизованного сервера для логов, можно добиться примерно такой же скорости, как у Graylog (и по крайней мере, гораздо быстрее, чем Splunk), и этого было бы достаточно для большинства наших задач.

Так и начался проект: я не мог перестать об этом думать, взял отпуск на неделю и устроил себе личный хакатон, чтобы написать прототип: просмотрщик логов с простым но удобным TUI интерфейсом, включающим таймлайн-гистограмму. Он подключался к хостам по SSH и анализировал обычные лог-файлы с помощью GNU-утилит bash + tail + head + awk.

Читать далее

Ортодоксальный косплеер решает задачу Перельмана про демографию, проезжая мимо Вудстока

Level of difficultyHard
Reading time8 min
Views3.6K

В мире существует множество фундаментальных дискуссионных вопросов с двумя непримиримыми группами сторонников. Кто лучше: коты или собаки, Windows или Linux, физики или лирики?

Одним из таких вопросов является спор консерваторов и прогрессистов.
У консерваторов к прогрессистам есть стереотипная и связанная со временем претензия: «Ваше ”прекрасное” всегда далёко. А если и когда оно всё‑таки становится актуальной реальностью, то оказывается не таким уж прекрасным». Далее может идти заход с козырей в виде Чернобыля. Или наоборот, что‑нибудь для утончённых ценителей, вроде талидомидовой катастрофы.

Однако и к основному консервативному тезису — «раньше было лучше» — можно также сформулировать универсальную претензию, связанную со временем.
Очевидно, что «раньше» Земля была раскалённым шаром. На ней определённо не было «лучше». Всё то, что консерваторами считается «лучшим» появилось сравнительно недавно. Но в консервативной парадигме история делится на её бо́льшую часть, когда некой защищаемой консерваторами сущности ещё не было, и меньшую часть, когда эта сущность уже начала разлагаться и деградировать. А между этими временными отрезками есть бесконечно малый интервал времени, взятый исключительно по вкусу конкретного консерватора, который как раз и «был лучше».

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

«Сделать как было раньше»

Визуальное представление структуры btree индекса PostgreSQL

Level of difficultyMedium
Reading time17 min
Views9.7K

В статье визуализируется структура индекса и показывается, как меняется структура индекса типа btree в PostgreSQL. Это полезно для понимания, как выглядят индексы btree. Также рассматривается FILLFACTOR и пример исследования структуры индекса в целях определения, как перераспределяются индексные записи при включении в структуру индекса новых блоков (страниц). Создадим простую таблицу, индекс, вставим три строки:

Читать далее

Как переопределить кнопки на клавиатуре в Linux

Level of difficultyMedium
Reading time2 min
Views7.2K

Мне было неудобно, что расположение клавиш End, Page Up и PageDown на моей клавиатуре A4Tech FS не совпадало с их расположением на ноутбуке. Решил переставить, но не нашел толковой инструкции на этот счет в интернете, решил написать тут, вдруг кому пригодится. На самом деле всё просто, доступно каждому.

Читать далее

ChatGPT и все-все-все. Недорого

Level of difficultyMedium
Reading time8 min
Views12K

Я довольно долго с большим скепсисом смотрел на все эти новомодные нейросети.

Во-первых, меня основательно напрягало то, что они умеют фантазировать, если чего-то не знают.
Во-вторых, я попробовал из любопытства, но не понял зачем это мне.

Но, поскольку тема регулярно всплывает на Хабре и несколько хороших знакомых рекомендовали всё же разобраться и попробовать — я разобрался и попробовал.
И теперь хочу рассказать, как пользоваться с удобством и недорого (бесплатно тоже можно).

TL;DR: ставим OpenWebUI, подключаем к openrouter.ai, опционально — заносим openrouter.ai денег, пользуемся.

Читать далее

Создание красивых градиентов на CSS

Reading time5 min
Views23K
Вот линейный градиент на CSS, идущий от чисто жёлтого до чисто синего цвета:


Заметили, что в центре он становится бледным и грязным?

Это явление Эрик Кеннеди назвал «мёртвой зоной серого». Если вы тщательно не выбираете цвета для своих градиентов, то в ваших градиентах на CSS часто возникает такая обесцвеченная часть посередине.

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

Как работает интернет

Level of difficultyEasy
Reading time30 min
Views129K

Если вы полный ноль в интернет-технологиях, и хотите получить общее понимание Интернета, прочитав всего одну статью, то эта статья - для вас.

Здесь вы узнаете о 4 уровнях модели TCP/IP. О том, что такое MAC-адрес и IP-адрес, и зачем нам 2 типа цифровых адресов. Как работает DNS. Зачем нужны коммутаторы и роутеры. Как работает NAT. Как устанавливается защищённое соединение. Что такое инфраструктура открытых ключей, и зачем нужны TLS-сертификаты. Чем отличаются три версии протокола HTTP. Как происходит HTTP-аутентификация. И в конце будет несколько слов о VPN.

Читать далее

Как настроить веб-приложение под высокие нагрузки

Level of difficultyMedium
Reading time8 min
Views7.5K

Привет, меня зовут Александр Ададуров. Я — руководитель проектов ФГБУ «Центр информационно-технического обеспечения». В этой статье я опишу опыт настройки сайта с образовательным контентом под нагрузку в пиках до 15 000 запросов в секунду или до нескольких миллионов пользователей в день. 

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

Читать далее

«Я стал тимлидом и боюсь». Что почитать и зачем

Level of difficultyEasy
Reading time8 min
Views34K
Стресс, связанный с переходом на менеджерскую роль, способен пошатнуть любые, даже самые крепкие нервы. А если ваше решение стать руководителем желанное и осознанное, то вы легко можете загнать себя в ловушку из двух стен: тревожности и перфекционизма.

Меня зовут Александр Шиндин, я — технический менеджер мобильных продуктов Kaspersky Password Manager и Kaspersky Who Calls. Я так сильно хотел проявить себя в роли руководителя, что внутренних обучающих курсов, которые дает в таких случаях компания, мне не хватало, — и лучшим дополнением к теории стали книги. Они ускорили мое погружение в мир менеджмента, помогли быть готовым к еще большему числу нестандартных ситуаций и придали уверенности в принимаемых решениях.

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


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

Древовидные структуры в SQL в одну таблицу

Level of difficultyMedium
Reading time11 min
Views16K

Как реализовать хранение и работу каталога папок в PostgreSQL? Есть большое количество вариантов. Но хочется, чтобы реализация выглядела лаконично, не нарушала прозрачность выполняемых операций, не вызывала блокировок, не требовала большого вовлечения клиента в специфику работы и т.д. Потому сегодня попробуем реализовать хранение древовидных структур и работу с ними без использования триггеров, блокировок, дополнительных таблиц (представлений) и внешних инструментов в SQL.

Читать далее

Основные настройки для управления ресурсами в PostgreSQL: настройка памяти, CPU и I/O

Level of difficultyEasy
Reading time6 min
Views18K

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

При работе с PostgreSQL (да и в целом с любой БД) важно правильно настраивать и управлять ресурсами, такими как память, процессорное время и дисковые операции, и так далее для обеспечения лучшей производительности и стабильности работы БД.

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

Читать далее

Разбираем TLS по байтам. Кто такой этот HTTPS?

Level of difficultyMedium
Reading time32 min
Views44K


Подключение к сайту бывает защищённым, а бывает нет — это надо знать всем детям. Только мало детей знают, что это значит и как работает.

Я, изучая веб-разработку, узнал об HTTP. Разобраться в нём несложно: в каждой статье о протоколе множество наглядных примеров запросов и ответов. Затем узнал о схеме HTTPS, с которой всё не так наглядно. В ней используется то ли SSL, то ли TLS, и что-то где-то шифруется, и зачем-то нужны какие-то сертификаты. Короче, всё расплывалось в тумане: где пример ответа, запроса, сертификата, как его создать, зачем он нужен и почему гайд по созданию http-сервера уже написал каждый школьник, а https-сервер — недоступная для начинающих разработчиков роскошь?

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

Во второй обсудим, как это дело реализуется в протоколе TLS и разберём формат TLS-пакетов по байтам. Статьи рассчитаны в первую очередь на изучающих веб-разработку, знакомых с HTTP и жаждущих осознать, кто такое https. Но материал актуален для любых применений TLS, будь то веб или не веб.
Читать дальше →

Information

Rating
3,074-th
Registered
Activity