<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>UniLecs</title><subtitle>🤘🏻Задачи, головоломки, книги и другие радости программиста!</subtitle><author><name>UniLecs</name></author><id>https://teletype.in/atom/unilecs</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/unilecs?offset=0"></link><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/unilecs?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-18T00:47:04.773Z</updated><entry><id>unilecs:single-sign-On</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/single-sign-On?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Объединение сервисов через SSO (Single Sign-On)</title><published>2025-12-15T02:39:14.629Z</published><updated>2025-12-15T02:39:14.629Z</updated><category term="articles" label="Статьи"></category><summary type="html">Протоколы аутентификации</summary><content type="html">
  &lt;p id=&quot;OFX4&quot;&gt;&lt;strong&gt;Протоколы аутентификации&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;0wF6&quot;&gt;
    &lt;li id=&quot;f1Jt&quot;&gt;&lt;a href=&quot;https://www.cloudflare.com/ru-ru/learning/access-management/what-is-saml/&quot; target=&quot;_blank&quot;&gt;Clowdflare — один из провайдеров, предоставляющих SAML-аутентификацию&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;WcLO&quot;&gt;&lt;a href=&quot;https://developer.okta.com/docs/concepts/saml/&quot; target=&quot;_blank&quot;&gt;Описание флоу работы SAML&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;gcny&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/803163/&quot; target=&quot;_blank&quot;&gt;Kerberos простыми словами на Хабре&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;3AVE&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sCybe9FAGOc&quot; target=&quot;_blank&quot;&gt;Beyond Passwords: How WebAuthn Actually Works — видео с описанием работы WebAuthn&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;RV2M&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API&quot; target=&quot;_blank&quot;&gt;Web Authentication API — документация, поддерживаемая сообществом Mozilla&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2lii&quot;&gt;&lt;strong&gt;LDAP (Lightweight Directory Access Protocol)&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;IVpg&quot;&gt;
    &lt;li id=&quot;6zli&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/538662/&quot; target=&quot;_blank&quot;&gt;Обзорная статья про LDAP на Хабре&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;10rW&quot;&gt;&lt;a href=&quot;https://habr.com/en/companies/otus/articles/738394/&quot; target=&quot;_blank&quot;&gt;Статья на Хабре о том, как развернуть LDAP в операционной системе Linux&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;SWJ1&quot;&gt;&lt;strong&gt;Системы управления аутентификацией и авторизацией&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;kG3P&quot;&gt;
    &lt;li id=&quot;PBK8&quot;&gt;&lt;a href=&quot;https://www.keycloak.org/docs/latest/server_admin/index.html#_configuring-realms&quot; target=&quot;_blank&quot;&gt;Официальная документация Keyclock&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;PCbp&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/720490/&quot; target=&quot;_blank&quot;&gt;Статья на Хабре об альтернативах системы Keycloak&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>unilecs:security-audit</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/security-audit?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Аудит безопасности и его требования</title><published>2025-10-27T01:45:25.798Z</published><updated>2025-10-27T01:45:25.798Z</updated><category term="articles" label="Статьи"></category><summary type="html">Шаблоны атак</summary><content type="html">
  &lt;p id=&quot;sXtH&quot;&gt;&lt;strong&gt;Шаблоны атак&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;AT5p&quot;&gt;
    &lt;li id=&quot;wHCc&quot;&gt;&lt;a href=&quot;https://attack.mitre.org/matrices/enterprise/&quot; target=&quot;_blank&quot;&gt;MITRE ATT&amp;amp;CK — база знаний тактик и техник кибератак, полезная для анализа и защиты корпоративных систем&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;5f7X&quot;&gt;&lt;a href=&quot;https://owasp.org/www-project-top-ten/&quot; target=&quot;_blank&quot;&gt;OWASP Top Ten — топ-10 уязвимостей веб-приложений для безопасной разработки.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;2RR0&quot;&gt;&lt;a href=&quot;https://www.scanforsecurity.com/standards-methodologies/wasc.html&quot; target=&quot;_blank&quot;&gt;Web Application Security Consortium (WASC) — методология для оценки уязвимостей веб-приложений.&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3cza&quot;&gt;&lt;strong&gt;Анализ рисков&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;sfMp&quot;&gt;
    &lt;li id=&quot;TVjs&quot;&gt;&lt;a href=&quot;https://www.iso.org/standard/80585.html&quot; target=&quot;_blank&quot;&gt;Статья об ISO/IEC 27005 на официальном сайте ISO. Здесь описаны рекомендации, которые помогут выполнять требования стандарта и мероприятия по управлению рисками в сфере информационной безопасности.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;S7w3&quot;&gt;&lt;a href=&quot;https://www.garant.ru/actual/persona/otvetstvennost/&quot; target=&quot;_blank&quot;&gt;Ответственность за нарушение закона о персональных данных в России&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;UnYJ&quot;&gt;&lt;strong&gt;Инструменты, паттерны и фреймворки&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;iriy&quot;&gt;
    &lt;li id=&quot;CsPz&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/purview/information-protection&quot; target=&quot;_blank&quot;&gt;Статья о Microsoft Purview Information Protection на Microsoft Learn — всё о работе Purview&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;53jb&quot;&gt;&lt;a href=&quot;https://www.splunk.com/&quot; target=&quot;_blank&quot;&gt;Сайт Splunk&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;MQKo&quot;&gt;&lt;a href=&quot;https://rt-solar.ru/products/solar_dozor/&quot; target=&quot;_blank&quot;&gt;Сайт Solar Dozor&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;4kNo&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ru/security-hub/&quot; target=&quot;_blank&quot;&gt;AWS Security Hub — централизованное решение для анализа безопасности в облачной инфраструктуре AWS.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;BOlC&quot;&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/security/business/cloud-security/microsoft-defender-cloud/&quot; target=&quot;_blank&quot;&gt;Microsoft Defender for Cloud — решение, которое предлагает комплексную защиту облачных и гибридных ресурсов.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;4u8M&quot;&gt;&lt;a href=&quot;https://cloud.google.com/security/products/security-command-center&quot; target=&quot;_blank&quot;&gt;Google Cloud Security Command Center — интегрированное решение безопасности для ресурсов Google Cloud.&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>unilecs:realtime-architecture</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/realtime-architecture?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Построение realtime-архитектуры с нуля</title><published>2025-09-21T00:52:04.553Z</published><updated>2025-09-21T00:52:04.553Z</updated><category term="articles" label="Статьи"></category><summary type="html">Rate Limiter</summary><content type="html">
  &lt;p id=&quot;kN6l&quot;&gt;&lt;strong&gt;Rate Limiter&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;tOlc&quot;&gt;
    &lt;li id=&quot;pdJq&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/waf/rate-limiting-rules/best-practices/&quot; target=&quot;_blank&quot;&gt;Лучшие практики для Rate Limiting&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;rWdI&quot;&gt;&lt;strong&gt;Кейсы по разработке высоконагруженных приложений&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;umx7&quot;&gt;
    &lt;li id=&quot;dc3i&quot;&gt;&lt;a href=&quot;https://instagram-engineering.com/instagration-pt-2-scaling-our-infrastructure-to-multiple-data-centers-5745cbad7834&quot; target=&quot;_blank&quot;&gt;Как Instagram развёртывал функционал в разных ЦОД&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;nG6a&quot;&gt;&lt;a href=&quot;https://medium.com/@tarunannapareddy1997/scaling-up-why-did-amazon-move-from-distributed-microservices-to-monolith-376254f2d772&quot; target=&quot;_blank&quot;&gt;Как команда Amazon Prime Video отказалась от микросервисов в пользу монолита&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;pUC1&quot;&gt;&lt;strong&gt;Про реактивное программирование&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;wkDS&quot;&gt;
    &lt;li id=&quot;GcTG&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/oleg-bunin/articles/543386/&quot; target=&quot;_blank&quot;&gt;Реактивное программирование на Java&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;LdqH&quot;&gt;&lt;strong&gt;Про front-to-back интеграции&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;9Vb4&quot;&gt;
    &lt;li id=&quot;acov&quot;&gt;&lt;a href=&quot;https://practicum.yandex.ru/blog/customer-journey-map/&quot; target=&quot;_blank&quot;&gt;Зачем нужна customer journey map и как её правильно построить&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2Ote&quot;&gt;&lt;strong&gt;Инструменты, паттерны и фреймворки&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;PJUX&quot;&gt;
    &lt;li id=&quot;cA6c&quot;&gt;&lt;a href=&quot;https://www.ibm.com/think/topics/global-server-load-balancing&quot; target=&quot;_blank&quot;&gt;Разбор балансировщика нагрузки GSLB&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;IUQH&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/what-is/restful-api/&quot; target=&quot;_blank&quot;&gt;Amazon Web Services, Что такое API RESTful?&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>unilecs:ai-assistant</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/ai-assistant?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Создание AI-ассистента</title><published>2025-07-27T20:34:44.825Z</published><updated>2025-07-27T20:34:44.825Z</updated><category term="articles" label="Статьи"></category><summary type="html">Искусственный интеллект</summary><content type="html">
  &lt;p id=&quot;85X2&quot;&gt;&lt;strong&gt;Искусственный интеллект&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;SXWe&quot;&gt;
    &lt;li id=&quot;z8mR&quot;&gt;&lt;a href=&quot;https://www.oreilly.com/radar/software-architecture-in-an-ai-world/&quot; target=&quot;_blank&quot;&gt;Software Architecture in an AI World&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;CNkI&quot;&gt;&lt;a href=&quot;https://thecode.media/machine-loving/&quot; target=&quot;_blank&quot;&gt;4 проекта, где Machine Learning приносит пользу&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4R1n&quot;&gt;&lt;strong&gt;Нейросети и машинное обучение&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;o2cx&quot;&gt;
    &lt;li id=&quot;03x4&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/oleg-bunin/articles/340184/&quot; target=&quot;_blank&quot;&gt;Статья для углубления знаний по нейросетевым структурам&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;uyo2&quot;&gt;&lt;a href=&quot;https://education.yandex.ru/handbook/ml&quot; target=&quot;_blank&quot;&gt;Электронный учебник от ШАД&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3qPR&quot;&gt;&lt;strong&gt;ModelOps&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;E0b8&quot;&gt;
    &lt;li id=&quot;pjDF&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/sas/articles/596655/&quot; target=&quot;_blank&quot;&gt;Отличная статья на кейсе SAS&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;REvM&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PrbqQdROpgk&quot; target=&quot;_blank&quot;&gt;Полезный вебинар от GlowByte в Яндекс Облаке&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;aBDe&quot;&gt;&lt;a href=&quot;https://neptune.ai/blog/modelops&quot; target=&quot;_blank&quot;&gt;Разбор понятий ModelOps на конкретных инструментах&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;sTWc&quot;&gt;&lt;strong&gt;Модульные диалоговые системы&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;s11F&quot;&gt;
    &lt;li id=&quot;8H67&quot;&gt;&lt;a href=&quot;https://www.ibm.com/topics/ai-ethics&quot; target=&quot;_blank&quot;&gt;Статья от IBM про этичность AI-решений&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;7fBa&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/inferit/articles/745230/&quot; target=&quot;_blank&quot;&gt;Этика и безопасность искусственного интеллекта&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;zNmg&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/yandex/articles/349372/&quot; target=&quot;_blank&quot;&gt;Как устроена Алиса. Лекция Яндекса&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;uFTn&quot;&gt;&lt;a href=&quot;https://youtu.be/fHQAT6rYO7c&quot; target=&quot;_blank&quot;&gt;Создание QA-ассистента для чат-бота с Yandex DataSphere&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>unilecs:migration-services-to-cloud</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/migration-services-to-cloud?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Миграция сервисов в облако</title><published>2025-07-12T22:20:52.851Z</published><updated>2025-07-12T22:20:52.851Z</updated><category term="articles" label="Статьи"></category><summary type="html">Инструменты, паттерны и фреймворки</summary><content type="html">
  &lt;ul id=&quot;ZWS4&quot;&gt;
    &lt;li id=&quot;V1zK&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/837514/&quot; target=&quot;_blank&quot;&gt;Серия постов на тему архитектуры облачных вычислений&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;jZJR&quot;&gt;&lt;a href=&quot;https://yandex.cloud/ru/blog/posts/2022/04/cloud-computing&quot; target=&quot;_blank&quot;&gt;Примеры продуктов по моделям развёртывания и услуг&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;5gkl&quot;&gt;&lt;a href=&quot;https://scale.yandex.cloud/&quot; target=&quot;_blank&quot;&gt;Конференция по облачным технологиям от Яндекса&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;o1sO&quot;&gt;&lt;a href=&quot;https://www.litres.ru/book/michael-kavis-j/architecting-the-cloud-design-decisions-for-cloud-computin-28300569/&quot; target=&quot;_blank&quot;&gt;Книга Architecting the Cloud: Design Decisions for Cloud Computing Service Models (SaaS, PaaS, and IaaS)&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dL2j&quot;&gt;&lt;strong&gt;Инструменты, паттерны и фреймворки&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;uPJ4&quot;&gt;
    &lt;li id=&quot;8tSW&quot;&gt;&lt;a href=&quot;https://habr.com/ru/specials/539502/&quot; target=&quot;_blank&quot;&gt;Исследование рынка облачных провайдеров и мнение экспертов&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ds3n&quot;&gt;&lt;a href=&quot;https://yandex.cloud/ru/solutions/migration&quot; target=&quot;_blank&quot;&gt;Статья и сервис по планированию миграции на Yandex Cloud&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;4oxg&quot;&gt;&lt;a href=&quot;https://yandex.cloud/ru/docs/application-load-balancer/&quot; target=&quot;_blank&quot;&gt;Аpplication Load Balancer от Yandex Cloud&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;IX3N&quot;&gt;&lt;strong&gt;IaC-инструменты&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;xE5x&quot;&gt;
    &lt;li id=&quot;ZkGN&quot;&gt;&lt;a href=&quot;https://developer.hashicorp.com/terraform?product_intent=terraform&quot; target=&quot;_blank&quot;&gt;Terrform&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;DveJ&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ru/cloudformation/&quot; target=&quot;_blank&quot;&gt;AWS CloudFormation&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;uAuM&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ru-ru/azure/azure-resource-manager/management/overview&quot; target=&quot;_blank&quot;&gt;Общие сведения об Azure Resource Manager&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;nuoD&quot;&gt;&lt;a href=&quot;https://cloud.google.com/deployment-manager/docs&quot; target=&quot;_blank&quot;&gt;Google Cloud Deployment Manager documentation&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;XGRY&quot;&gt;&lt;a href=&quot;https://yandex.cloud/ru/docs/tutorials/infrastructure-management/terraform-quickstart?utm_referrer=https%253A%252F%252Fyandex.ru%252Fsearch%253Fclid%253D1906725%2526text%253Dterraform%252Byandex%252Bcloud%2526lr%253D21621&quot; target=&quot;_blank&quot;&gt;Начало работы с Terrafom &lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>unilecs:observability-monitoring</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/observability-monitoring?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Повышение отказоустойчивости и наблюдаемости приложения</title><published>2025-06-27T04:05:35.709Z</published><updated>2025-06-27T04:05:35.709Z</updated><category term="articles" label="Статьи"></category><summary type="html">Подходы к мониторингу</summary><content type="html">
  &lt;ul id=&quot;Skku&quot;&gt;
    &lt;li id=&quot;qPv5&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ru/docs/Web/HTTP/Caching&quot; target=&quot;_blank&quot;&gt;Документация по HTTP-кешированию от MDN&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;cz0C&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=YlXJMCdssAI&quot; target=&quot;_blank&quot;&gt;Запись доклада Паттерны отказоустойчивой архитектуры&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;r5Tv&quot;&gt;&lt;strong&gt;Подходы к мониторингу&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;4Mgl&quot;&gt;
    &lt;li id=&quot;Oj4A&quot;&gt;&lt;a href=&quot;https://brendangregg.com/usemethod.html&quot; target=&quot;_blank&quot;&gt;Обзор метода USE в блоге Брендана Грегга&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;RdG1&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/trace-context/?ref=traefik.io&quot; target=&quot;_blank&quot;&gt;Рекомендации W3C о trace context&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;saiB&quot;&gt;&lt;a href=&quot;https://ivan-kurchenko.medium.com/building-decoupled-monitoring-with-opentelemetry-5d2755e15922&quot; target=&quot;_blank&quot;&gt;Статья о создании раздельного мониторинга с помощью OpenTelemetry&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;A6u3&quot;&gt;&lt;strong&gt;Про Prometheus и Grafana&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;QDsd&quot;&gt;
    &lt;li id=&quot;wQ4B&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?app=desktop&amp;v=XToKHYXSUyc&quot; target=&quot;_blank&quot;&gt;Google Cloud Tech Custom Metrics with Prometheus&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;Diek&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/slurm/articles/715762/&quot; target=&quot;_blank&quot;&gt;Cоветы для начинающих SRE-инженеров&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;RfDw&quot;&gt;&lt;a href=&quot;https://blog.kvv213.com/2023/12/grafana-alerting-ponyat-i-prostit/&quot; target=&quot;_blank&quot;&gt;Подробная и интересная настройка алёртов в Grafana&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vtVV&quot;&gt;&lt;strong&gt;Elasticsearch, Logstash и Kibana&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;2vtT&quot;&gt;
    &lt;li id=&quot;ldQ5&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/165059/&quot; target=&quot;_blank&quot;&gt;Статья на Хабре про настройку Logstash&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;FTtL&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/citymobil/articles/521802/&quot; target=&quot;_blank&quot;&gt;Статья на Хабре с примером настройки дашборда в Kibana&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;P4Ih&quot;&gt;&lt;a href=&quot;https://github.com/db-exp/elka&quot; target=&quot;_blank&quot;&gt;Файлы конфигурации ELK на GitHub&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;M7xs&quot;&gt;&lt;a href=&quot;https://www.elastic.co/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management&quot; target=&quot;_blank&quot;&gt;Статья в блоге Elastic о том, как настроить Hot-Warm-Cold архитектуру для индекса с помощью ILM&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;kC4G&quot;&gt;&lt;a href=&quot;https://yandex.cloud/ru/blog/posts/2023/04/managed-opensearch-overview&quot; target=&quot;_blank&quot;&gt;Обзор OpenSearch от Yandex Cloud&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;cDdb&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/662527/&quot; target=&quot;_blank&quot;&gt;Статья на Хабре про то, как установить и настроить стек OpenSearch&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;HULb&quot;&gt;&lt;a href=&quot;https://programmersought.com/article/92224903019/&quot; target=&quot;_blank&quot;&gt;Статья про географические типы данных Elasticsearch&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JmvN&quot;&gt;&lt;a href=&quot;https://ezyforanykey.blogspot.com/2021/01/elk-master-nodesetup-high-availability.html&quot; target=&quot;_blank&quot;&gt;Статья о том, как настроить отказоустойчивый ELK&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;laaH&quot;&gt;&lt;strong&gt;Инструменты для трейсинга&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;yFlA&quot;&gt;
    &lt;li id=&quot;IN7D&quot;&gt;&lt;a href=&quot;https://habr.com/ru/companies/ru_mts/articles/537892/&quot; target=&quot;_blank&quot;&gt;Статья на Хабре от разработчиков МТС о том, как применять OpenTelemetry&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;29yU&quot;&gt;&lt;a href=&quot;https://dzone.com/articles/distributed-tracing-with-zipkin-and-elk&quot; target=&quot;_blank&quot;&gt;Статья о распределённом трейсинге с применением Zipkin и ELK&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;pUIi&quot;&gt;&lt;a href=&quot;https://grafana.com/blog/2023/12/18/opentelemetry-best-practices-a-users-guide-to-getting-started-with-opentelemetry/&quot; target=&quot;_blank&quot;&gt;Гайд по лучшим практикам для использования OpenTelemetry&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;3c0A&quot;&gt;&lt;a href=&quot;https://signoz.io/blog/opentelemetry-vs-prometheus/&quot; target=&quot;_blank&quot;&gt;Сравнение OpenTelemetry и Prometheus&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>unilecs:avg-math-points</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/avg-math-points?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Средний балл по математике</title><published>2025-04-20T23:59:14.085Z</published><updated>2025-04-20T23:59:14.085Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/bb/07/bb07ea80-b463-4a4a-8c82-fb4b00b631fa.png"></media:thumbnail><category term="puzzles" label="Головоломки"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/ac/36/ac369ad8-f42f-4e43-811b-1f49adead5a1.jpeg&quot;&gt;Может ли средний балл всего класса по математике быть больше 4?</summary><content type="html">
  &lt;figure id=&quot;oieg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/36/ac369ad8-f42f-4e43-811b-1f49adead5a1.jpeg&quot; width=&quot;1500&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Z4jh&quot;&gt;&lt;em&gt;Может ли средний балл всего класса по математике быть больше 4?&lt;/em&gt;&lt;/p&gt;
  &lt;h2 id=&quot;1Q82&quot;&gt;Разбор&lt;/h2&gt;
  &lt;p id=&quot;3Rp4&quot;&gt;Пусть есть &lt;/p&gt;
  &lt;ol id=&quot;bMwo&quot;&gt;
    &lt;li id=&quot;ZGqG&quot;&gt;2 человека, которые имеют по математике 5&lt;br /&gt;и смотрят только мультфильм;&lt;/li&gt;
    &lt;li id=&quot;NWu5&quot;&gt;3 человека, у которых по математике 3, а смотрят они и то, и другое;&lt;/li&gt;
    &lt;li id=&quot;vsIG&quot;&gt;ещё 2 человека, у которых по математике тоже 5, но смотрят они только футбол.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;Qoz0&quot;&gt;Тогда средний балл любой из двух групп равен:&lt;/p&gt;
  &lt;p id=&quot;FDlF&quot;&gt;(5 * 2 + 3 * 3) / 5 = 19 / 5 &amp;lt; 4&lt;/p&gt;
  &lt;p id=&quot;cHS7&quot;&gt;Однако общий средний балл равен:&lt;/p&gt;
  &lt;p id=&quot;O1u0&quot;&gt;(5 * 4 + 3 * 3) / 7 = 29 / 7 &amp;gt; 4&lt;/p&gt;
  &lt;p id=&quot;lOiV&quot;&gt;&lt;strong&gt;Ответ&lt;/strong&gt;: может&lt;/p&gt;

</content></entry><entry><id>unilecs:max-bugs-solution</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/max-bugs-solution?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Задача. Оптимальное заполнение мешков</title><published>2025-03-17T01:54:47.682Z</published><updated>2025-03-17T01:54:47.682Z</updated><category term="tasks" label="Задачи"></category><summary type="html">Даны n мешков и два целочисленных массива capacity и rocks.</summary><content type="html">
  &lt;p id=&quot;Z61v&quot;&gt;Даны n мешков и два целочисленных массива capacity и rocks.&lt;/p&gt;
  &lt;ul id=&quot;c7UW&quot;&gt;
    &lt;li id=&quot;dhQP&quot;&gt;i-й мешок может вмещать максимум камней вместимостью capacity[i] и содержит rocks[i] камней.&lt;/li&gt;
    &lt;li id=&quot;S56a&quot;&gt;Также дано целое число additionalRocks - количество дополнительных камней, которые можно поместить в любой из мешков.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;zS4U&quot;&gt;&lt;em&gt;Необходимо вернить МАКСИМАЛЬНОЕ количество мешков, которые могут иметь полную вместимость после размещения дополнительных камней в некоторых мешках.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;60sa&quot;&gt;&lt;strong&gt;Пример&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;fWFj&quot;&gt;
    &lt;li id=&quot;eXeG&quot;&gt;capacity = [2,3,4,5]&lt;/li&gt;
    &lt;li id=&quot;2uGe&quot;&gt;rocks = [1,2,4,4]&lt;/li&gt;
    &lt;li id=&quot;xxTa&quot;&gt;additionalRocks = 2&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8MxK&quot;&gt;&lt;em&gt;Output&lt;/em&gt;: 3&lt;/p&gt;
  &lt;p id=&quot;oie4&quot;&gt;&lt;em&gt;Пояснение: п&lt;/em&gt;о одному камню кладем в 1й и 2й мешок. Тогда количество камней в каждом мешке равно [2,3,4,4]. И первые 3 мешка полностью заполнены.&lt;/p&gt;
  &lt;h2 id=&quot;4du7&quot;&gt;Разбор&lt;/h2&gt;
  &lt;p id=&quot;bUZM&quot;&gt;Классический жадный алгоритм. &lt;/p&gt;
  &lt;ol id=&quot;xbHd&quot;&gt;
    &lt;li id=&quot;e9Y6&quot;&gt;На 1м этапе найдем размер свободного места в мешках. &lt;/li&gt;
    &lt;li id=&quot;Xqam&quot;&gt;На 2м этапе отсортируем массив по возрастанию свободных мест в мешках.&lt;/li&gt;
    &lt;li id=&quot;PUeO&quot;&gt;На 3м этапе будем использовать дополнительные камни для заполнения мешков пока это возможно.&lt;/li&gt;
    &lt;li id=&quot;PlZp&quot;&gt;Вернем количество полностью заполненных мешков.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2 id=&quot;rUgX&quot;&gt;Реализация&lt;/h2&gt;
  &lt;pre id=&quot;cxtE&quot;&gt;static int MaxBags(int[] capacity, int[] rocks, int additionalRocks) {
	for (int i = 0; i &amp;lt; capacity.Length; i++)
	{
		capacity[i] -= rocks[i];
	}

	Array.Sort(capacity);

	int result = 0;
	for (int i = 0; i &amp;lt; capacity.Length; i++)
	{
		if (capacity[i] &amp;gt; 0 &amp;amp;&amp;amp; additionalRocks == 0)
			return result;

		if (capacity[i] == 0)
		{
			result++;    
		}
		else if (capacity[i] &amp;lt;= additionalRocks)
		{
			additionalRocks -= capacity[i];
			result++;
		}
	}

	return result;
}&lt;/pre&gt;
  &lt;p id=&quot;AXAv&quot;&gt;&lt;a href=&quot;https://gist.github.com/unilecs/8ab18a06ecff6e47d48402499c90ec75&quot; target=&quot;_blank&quot;&gt;https://gist.github.com/unilecs/8ab18a06ecff6e47d48402499c90ec75&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Python&lt;/strong&gt;:&lt;br /&gt;&lt;a href=&quot;https://gist.github.com/unilecs/ebf505863c07ff797cf3c59a0b9aa014&quot; target=&quot;_blank&quot;&gt;https://gist.github.com/unilecs/ebf505863c07ff797cf3c59a0b9aa014&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Play-test (C#):&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;https://dotnetfiddle.net/kaLbf9&quot; target=&quot;_blank&quot;&gt;https://dotnetfiddle.net/kaLbf9&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>unilecs:max-bugs</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/max-bugs?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Анонс. Оптимальное заполнение мешков</title><published>2025-02-24T05:59:15.173Z</published><updated>2025-02-24T05:59:15.173Z</updated><category term="tasks" label="Задачи"></category><summary type="html">Даны n мешков и два целочисленных массива capacity и rocks.</summary><content type="html">
  &lt;p id=&quot;Z61v&quot;&gt;Даны n мешков и два целочисленных массива capacity и rocks. &lt;/p&gt;
  &lt;ul id=&quot;c7UW&quot;&gt;
    &lt;li id=&quot;dhQP&quot;&gt;i-й мешок может вмещать максимум камней вместимостью capacity[i] и содержит rocks[i] камней. &lt;/li&gt;
    &lt;li id=&quot;S56a&quot;&gt;Также дано целое число additionalRocks - количество дополнительных камней, которые можно поместить в любой из мешков.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;zS4U&quot;&gt;&lt;em&gt;Необходимо вернить МАКСИМАЛЬНОЕ количество мешков, которые могут иметь полную вместимость после размещения дополнительных камней в некоторых мешках.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;60sa&quot;&gt;&lt;strong&gt;Пример&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;fWFj&quot;&gt;
    &lt;li id=&quot;eXeG&quot;&gt;capacity = [2,3,4,5]&lt;/li&gt;
    &lt;li id=&quot;2uGe&quot;&gt;rocks = [1,2,4,4]&lt;/li&gt;
    &lt;li id=&quot;xxTa&quot;&gt;additionalRocks = 2&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8MxK&quot;&gt;&lt;em&gt;Output&lt;/em&gt;: 3&lt;/p&gt;
  &lt;p id=&quot;oie4&quot;&gt;&lt;em&gt;Пояснение: п&lt;/em&gt;о одному камню кладем в 1й и 2й мешок. Тогда количество камней в каждом мешке равно [2,3,4,4]. И первые 3 мешка полностью заполнены.&lt;/p&gt;

</content></entry><entry><id>unilecs:defuse-bomb-solution</id><link rel="alternate" type="text/html" href="https://blog.unilecs.ru/defuse-bomb-solution?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=unilecs"></link><title>Task. Разминировать бомбу</title><published>2025-01-24T05:38:20.558Z</published><updated>2025-01-24T05:38:20.558Z</updated><category term="tasks" label="Задачи"></category><summary type="html">Задача. Необходимо разминировать бомбу. У вас есть код в виде кругового массива длиной N и ключ k. Чтобы расшифровать код, нужно заменить каждое число. Все числа заменяются одновременно.</summary><content type="html">
  &lt;p id=&quot;nWZn&quot;&gt;&lt;strong&gt;Задача.&lt;/strong&gt; Необходимо разминировать бомбу. У вас есть код в виде кругового массива длиной N и ключ k. Чтобы расшифровать код, нужно заменить каждое число. Все числа заменяются одновременно.&lt;/p&gt;
  &lt;ul id=&quot;xQCo&quot;&gt;
    &lt;li id=&quot;i6Ra&quot;&gt;Если k &amp;gt; 0, замените i-е число суммой следующих k чисел.&lt;/li&gt;
    &lt;li id=&quot;90mv&quot;&gt;Если k &amp;lt; 0, замените i-е число суммой предыдущих k чисел.&lt;/li&gt;
    &lt;li id=&quot;N1WJ&quot;&gt;Если k == 0, замените i-е число на 0.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ELjQ&quot;&gt;&lt;strong&gt;&lt;em&gt;Необходимо вернуть расшифрованный код.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;SSvc&quot;&gt;&lt;strong&gt;Пояснение&lt;/strong&gt;: в циклическом массиве следующий элемент после arr[N - 1] - это arr[0]. Соответственно, предыдущий элемент для arr[0] - это arr[N - 1].&lt;/p&gt;
  &lt;p id=&quot;SkVD&quot;&gt;Входные данные: размер массива, а также элементы массива - значения от 0 до 100.&lt;/p&gt;
  &lt;p id=&quot;RFjO&quot;&gt;&lt;strong&gt;Примеры&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;1bfl&quot;&gt;
    &lt;li id=&quot;kmek&quot;&gt;arr [5,7,1,4], k = 3&lt;br /&gt;&lt;em&gt;Output&lt;/em&gt;: [12,10,16,13] &lt;br /&gt;&lt;em&gt;Пояснение&lt;/em&gt;: [7+1+4, 1+4+5, 4+5+7, 5+7+1]&lt;/li&gt;
    &lt;li id=&quot;7CJC&quot;&gt;arr = [2,4,9,3], k = -2 &lt;br /&gt;&lt;em&gt;Output&lt;/em&gt;: [12,5,6,13] &lt;br /&gt;&lt;em&gt;Пояснение&lt;/em&gt;: [3+9, 2+3, 4+2, 9+4]&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2 id=&quot;sj4O&quot;&gt;Разбор&lt;/h2&gt;
  &lt;p id=&quot;nIlj&quot;&gt;Рассмотрим различные случаи:&lt;/p&gt;
  &lt;ol id=&quot;nxhR&quot;&gt;
    &lt;li id=&quot;sbb2&quot;&gt;k == 0. Если ключ равен нулю, то по условию все элементы заменяются на 0.&lt;/li&gt;
    &lt;li id=&quot;sSYp&quot;&gt;k &amp;gt; 0. Для каждого элемента массива суммируем k последующих элементов, учитывая круговой характер массива. При выходе за пределы индекса массива, используем модуль % для перехода к началу.&lt;/li&gt;
    &lt;li id=&quot;2oPO&quot;&gt;k &amp;lt; 0. Для каждого элемента массива суммируем |k| предыдущих элементов. Переход к началу массива также выполняется с помощью индексации %.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;lMrI&quot;&gt;Детали смотрите ниже.&lt;/p&gt;
  &lt;h2 id=&quot;y0kw&quot;&gt;Реализация&lt;/h2&gt;
  &lt;pre id=&quot;7Cmp&quot;&gt;static int[] DefuseBomb(int[] arr, int k) {
	int N = arr.Length;
    var res = new int[N];
    if (k == 0) {
        return res;
    }

    for (int i = 0; i &amp;lt; N; i++)
    {
        if (k &amp;gt; 0) {
            for (int j = i + 1; j &amp;lt; i + k + 1; j++) {
                res[i] += arr[j % N];
            }
        }
        else 
        {
            for (int j = i - Math.Abs(k); j &amp;lt; i; j++) {
                res[i] += arr[(j + N) % N];
            }
        }
    }

    return res;
}&lt;/pre&gt;
  &lt;p id=&quot;gvzs&quot;&gt;&lt;a href=&quot;https://gist.github.com/unilecs/69dff66f69bf3b70780ad4291b1b66bc&quot; target=&quot;_blank&quot;&gt;https://gist.github.com/unilecs/69dff66f69bf3b70780ad4291b1b66bc&lt;/a&gt;&lt;/p&gt;
  &lt;h3 id=&quot;GlGU&quot;&gt;Play-test&lt;/h3&gt;
  &lt;p id=&quot;ZbEq&quot;&gt;&lt;a href=&quot;https://dotnetfiddle.net/i8HSnp&quot; target=&quot;_blank&quot;&gt;https://dotnetfiddle.net/i8HSnp&lt;/a&gt;&lt;/p&gt;

</content></entry></feed>