Search
Write a publication
Pull to refresh
3
0
Send message

Создание wildcard сертификата от Let`s Encrypt

Level of difficultyEasy
Reading time4 min
Views5.2K

Данный туториал является компиляцией информации по выпуску wildcart сертификата от let`s encrypt, с полезными дополнениями, без которых выпуск сертификата оказывается затруднительным. В статье используется bind9 - dns сервер и предполагается что вы уже делегировали ваш домен на свои DNS сервера.

Читать далее

Как Kubernetes управляет жизненным циклом подов

Level of difficultyMedium
Reading time25 min
Views4.9K

Работая DevOps-инженером, я не раз сталкивался с необходимостью тонко управлять поведением подов в Kubernetes. Эти минимальные единицы развёртывания — на первый взгляд, простые объекты — на самом деле являются ключевым элементом всей архитектуры. Они создаются, масштабируются, перезапускаются и удаляются в ответ на изменения состояния кластера и заданные политики.

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

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

Читать далее

Исследуем игру «5 букв» от Т-Банка и разные алгоритмы решения

Level of difficultyEasy
Reading time24 min
Views20K

Многие знакомы с играми "Wordle" или с российским аналогом "5 букв" от Т-Банка, суть которых в том, чтобы отгадывать пятибуквенные слова. Словарного запаса среднестатистического человека вполне хватает для успешного прохождения этих игр, но иногда человеку тяжело подобрать загаданное слово, хотя он точно его знает.

Кажется, что компьютер справлялся бы с этой игрой очень хорошо, но насколько именно хорошо?

В рамках этой статьи мы подробно исследуем российскую версию игры "5 букв":
• Придумаем различные алгоритмы прохождения игры
• Посмотрим, как различные алгоритмы проходят игру на разных словарях
• Сравним результаты и сделаем выводы

В статье будут рассмотрены как теоретические расчеты, так и вполне применимые для человека на практике советы и подходы.

Читать далее

Делаем собственный анализатор C++ кода в виде плагина для Clang

Level of difficultyMedium
Reading time11 min
Views4.9K


Есть много проектов, целью которых является превратить С++ более "безопасный" язык программирования. Но внесение изменений в синтаксис языка обычно нарушает обратную совместимость со старым кодом, который был написан до этого.


Недавно вышла новая версия библиотеки memsafe для языка С++, которая превращает его в Rust с помощью плагина Clang добавляет в С++ безопасное управление динамической памятью и контроль инвалидации ссылочных типов данных во время компиляции приложения.


Но данная статья не о библиотеке, а об особенностях разработки анализатора программы на С++ в виде плагина для Clang.


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

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

Управление голосом и наклоном «пульта» для робота CrowBot BOLT: разбор изменений в заводскую прошивку

Level of difficultyEasy
Reading time12 min
Views1.6K
Прошлым летом мы познакомились с модулем голосового управления для ардуино-роботов и использовали его для организации соревнований в детском лагере. С тех пор мы следили за обновлениями продукта и дождались новой интересной функциональности: не только голосовое управление, но и управление наклоном платы.


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

Что будет, если не использовать TCP или UDP?

Level of difficultyMedium
Reading time16 min
Views52K

Однажды мне стало интересно: а что будет, если отправить пакет с несуществующим транспортным протоколом? Не TCP, не UDP, не ICMP — вообще что-то выдуманное. Пропустит ли его ОС? Дойдет ли он хотя бы до сетевого интерфейса? Не зарежет ли его какой-нибудь промежуточный маршрутизатор? А вдруг он еще и быстрее обычного дойдет, потому что никто не знает, что с ним делать?

Ответа у меня не было. Так что я решил проверить.

Эксперимент и его результаты

Концепты в современном C ++

Reading time5 min
Views6.7K

C++ шаблоны — мощный инструмент, но работать с ними бывает больно: многословные ошибки, путаница с типами и enable_if, который все усложняет. Concepts в C++20 появились, чтобы упростить жизнь разработчикам и сделать шаблонный код понятнее. В этой статье — разбор конкретного кейса: как с помощью концептов задать корректные ограничения на контейнеры, избежать ловушек с массивами и получить внятные ошибки от компилятора.

Читать далее

Как читать сообщения, если никто из брокеров не предоставил удобный интерфейс

Level of difficultyEasy
Reading time16 min
Views4K

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

Как правило, брокер сообщений между сервисами – черная коробка, которая работает, что называется «As Is». Разработчики подключают зависимости, вешают аннотации консюмеров и продюсеров, оно заводится и все рады. Но что они там подключили и как это работает никто не видит.

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

Читать далее

Необычный интерфейс

Level of difficultyMedium
Reading time10 min
Views15K

Собрал для вас подборку редких, необычных и малоизвестных UI-библиотек — для построения интерфейсов в играх, на устройствах и десктопном ПО.

Читать далее

Как правильно писать код с Cursor? Смотрим, как тот устроен внутри

Level of difficultyEasy
Reading time6 min
Views42K

Главная цель исследования — выяснить, как же писать промпт для получения наилучших результатов, а также понять, как правильно выстроить сам рабочий процесс. Чтобы найти ответы на эти вопросы, пришлось глубоко погрузился в то, что Cursor делает за кулисами, по ту сторону. Оказывается, сама структура промпта Cursor многое говорит и о том, как он работает, и о том, как настроить его для максимальной отдачи.

Ниже — шаги, которые я предпринял для перехвата запросов и изучения их структуры. В конце — основные выводы о правильном составлении промпта.
Читать дальше →

Пишем простую виртуальную машину (1я часть. Минимально работоспособный код эмулятора)

Reading time10 min
Views6.5K

Всем привет! Я решил попробовать написать собственный эмулятор (минимально рабочий код), чтобы систематизировать свои знания в архитектуре компьютера. Мы сделаем эмуляцию CPU, опкодов, памяти, а также возможность подключать внешние устройства. Уровень - кто недавно начал изучать архитектуру компьютера. В перспективе можно будет сделать графику, звук и постоянную память.

Читать далее

Создание видеокарты Бена Итера на FPGA чипе

Level of difficultyEasy
Reading time127 min
Views7.5K

Здравствуйте. Меня зовут Дмитрий. Данная статья является продолжением статьи Сборка компьютера sap-1 (компьютер Бена Итера) в игре Turing Complete (если вы её не читали то очень советую). Сегодня мы продолжим исследовать блог Бена Итера, но вместо компьютерной игры мы соберем простейшую видеокарту на FPGA чипе.

Итак почему я выбрал FPGA? Конечно в игре Turing Complete можно собрать видеокарту, но её нельзя подключить к монитору что-бы проверить работу, поэтому мне пришлось перейти на что-то более осязаемое. Поэтому сегодня мы изучим язык Verilog предназначенный для описания микросхем.

Читать далее

Tasmota + Алиса = любовь. Протокол Matter в самодельных и перепрошитых устройствах умного дома

Level of difficultyEasy
Reading time11 min
Views19K

Не секрет, что многие пользователи умного дома используют облачные сервисы для управления устройствами и интеграции их в другие экосистемы умного дома (далее - УД). Так, например, для того чтобы использовать устройства разных брендов в Умном Доме Яндекса (далее - УДЯ), необходимо привязать учетную запись приложения бренда (SmartLife, Sibling, Tuya Smart и т.д.), и далее УДЯ будет работать с этими устройствами через облачные сервера. Пара нажатий и готово.

И зачастую это выглядит абсолютно оправданно - минимум телодвижений и гарантированный результат. Но есть и существенные минусы, один из которых - зависимость работы УД от наличия интернета. Да и скорость работы через облачные сервисы оставляет иногда желать лучшего. Сам иногда наблюдаю такую картину - с момента произнесения фразы "Алиса, включи свет" до непосредственно включения света может пройти пара секунд. Да и лампочки в люстре включиться могут не все. Одна бывает совсем не слушается. Редко, но бывает.

Поэтому многие продвинутые пользователи УД держат у себя сервер HomeAssistant, который благодаря наличию множества интеграций позволяет управлять умным домом с помощью локальных протоколов, что качественно влияет на работу всевозможных автоматизаций - для них больше не нужен интернет и китайские облака. А некоторые пользователи отвязывают от облаков свои устройства и вовсе кардинальными методами - прошивая их на альтернативные прошивки типа esphome или Tasmota. Естественно, управление перепрошитыми на альтернативные прошивки устройствами через интернет с помощью родных приложений перестает работать, да и добавить такое устройство в Умный Дом Яндекса без дополнительных танцев с бубнами не представляется возможным. Точнее не представлялось, пока не появился Matter!

Тем кому интересно как без использования сторонних "навыков", локальных серверов УД и интеграций добавить практически любое устройство, прошитое Tasmota и openBeken, добро пожаловать под кат.

Читать далее

Эта статья опоздала лет на двадцать: музыкальный центр с CD-караоке, радио и блютусом на ESP32 своими руками

Level of difficultyMedium
Reading time29 min
Views22K

Пожалуй, самый любимый мой аудиоформат — это CD Audio. Он либо читается идеально, либо не читается совсем — в отличие от кассет и катушек, кинематику проигрывателей которых нужно то и дело обслуживать. При этом компакт-диск обладает такой же тактильностью, как и винил, но существенно меньшими размерами — внушительная коллекция займёт от силы пару небольших книжных шкафов. Ретрофутуризма, как в минидиске, в нём нет, но за отсутствие артефактов ATRAC'а это мы ему простим :-)

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

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

Поэтому — погнали! Делаем свой CD-player с караоке и CD TEXT'ом!

Push «PLAY»

Пришествие Интернета в Россию. Часть 2: УНАС, ДЕМОС, МНОС и ИНМОС, или как «советизировали» UNIX

Level of difficultyEasy
Reading time12 min
Views11K

Итак, в начале 1984 года исходный код BSD-UNIX был выкачан советскими программистами и незамедлительно оказался в руках специалистов из Курчатовского института, которые занялись его изучением и адаптацией для работы на советских ЭВМ. Это стало отправной точкой для создания отечественной UNIX-подобной операционной системы ДЕМОС, адаптированной к «железу» производства СССР и стран СЭВ, а также к русскому языку. Параллельно с этим ещё несколько команд пытались реализовать те же идеи самостоятельно — по разным причинам и с разными успехами. Как это происходило, как об этом вспоминали участники, и почему в соревновании победил именно ДЕМОС?
Читать дальше →

Использование неполных объявлений в C++

Level of difficultyMedium
Reading time15 min
Views5.3K


Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специальных. Это восьмая статья из серии, список предыдущих статей приведен в разделе 6.


C++ относится к языкам со статической типизацией, то есть тип переменных определяется на стадии компиляции, но в ряде случаев компилятору для компиляции без ошибок достаточно знать, что то или иное имя является именем какого-то пользовательского типа (класса, структуры, объединения, перечисления), а полное объявление типа не нужно. В этом случае можно использовать неполное объявление (incomplete declaration), называемое еще упреждающим или предваряющим (forward declaration). Типы с неполным объявлением называются неполными.


Использование неполных объявлений позволяет решить ряд проблем, традиционно свойственных коду, написанному на С++. Отметим следующие:


  1. Можно уменьшить количество включений заголовочных файлов в другие файлы проекта, что сокращает время компиляции, снижает замусоривание пространств имен неиспользуемыми именами, предупреждает потенциальные конфликты имен;
  2. Можно реализовать решения, полностью разделяющие интерфейс и реализацию (непрозрачные указатели);
  3. Можно разрывать циклические зависимости;
  4. Можно снизить использование нетипизированных указателей void*, что повышает надежность и читаемость кода.

Грамотное использование неполных объявлений — один из признаков профессионального кода.

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

C++26 — встреча ISO в Хагенберге

Level of difficultyMedium
Reading time8 min
Views21K
В середине февраля в Хагенберге состоялась встреча международного комитета по стандартизации языка программирования C++.



В этот раз прорабатывались следующие большие темы:
  • std::hive
  • Constexpr, ещё больше constexpr
  • Безопасность, контракты, hardening, профили, UB и std::launder
  • Relocate
  • #embed

Об этом и других новинках расскажу в посте

Сложно о простом. Как работает интернет. Часть 4. Что такое LAN, MAN, WAN, сети Clos и иерархия операторов

Level of difficultyMedium
Reading time20 min
Views34K

Приветствую, коллеги! Меня зовут зовут @ProstoKirReal. Мне бы хотелось с вами обсудить как работает интернет от кабелей на витой паре, соединяющие простые локальные сети до подводных коммуникационных кабелей соединяющие между собой континенты и основные операторские сети.

В предыдущей статье я рассказывал о маршрутизации в локальных сетях, а также рассматривал некоторые узконаправленные «фичи», связанные с маршрутизацией – Proxy ARP и super VLAN.

В этом цикле статей я не стану учить вас настраивать оборудование и проектировать сети. Я расскажу об основных (и не только) принципах построения сети, а также о функционировании сети и сетевых протоколов в стеке TCP/IP.

Читать далее

Датчик расстояния в умном доме

Level of difficultyEasy
Reading time21 min
Views9.1K

О применении датчика расстояния в автоматизации дома. Что если отличать домашних животных от людей по росту?

Как? Просто измеряем расстояние от потолка путем ловли фотонов. Датчик способный это сделать — есть практически в каждом современном смартфоне. Возьмем его старшего брата, добавим проводков, соединим с ардуинкой. Можно пользоваться.

Читать далее

BLE показометр

Level of difficultyMedium
Reading time14 min
Views12K

Здравствуй Хабр! Случилось так, что совпали три события. Коллега подарил красивый винтажный миллиамперметр, по почте пришла платка с CH592F на борту и возникло желание изучать BLE. А изучение интересно совместно с решением какой-либо прикладной задачи. В статье хочу поделиться опытом создания индикатора на основе микроконтроллера CH592. Рассмотрим что такое TMOS, настроим инструменты для создания прошивки. Напишем программу для микроконтроллера. Она будет читать характеристику и управлять стрелкой миллиамперметра. Создадим "верхнее" программное обеспечение для компьютера. Оно будет принимать загрузку процессора и отправлять это значение на индикатор.

Читать далее
1
23 ...

Information

Rating
Does not participate
Registered
Activity