Pull to refresh
-16
@eikhnerread⁠-⁠only

User

Send message

Game++. Juggling STL algorithms

Level of difficultyEasy
Reading time29 min
Views5K

Мы все пишем циклы, в каждом софте, в каждой игре они будут. Вы не можете обойтись без них. Скажете, что делает этот код?

stl::vector numbers = {1, 2, 3, 4, 5};
int sum = 0;
for (int num : numbers) {
sum += num;
}

Конечно, это просто: код суммирует элементы массива. Похожую задачу про суммирование или другую операцию над массивом мой лид даёт на собесах :) Люди смотрят с удивлением, а потом большинство пишут, вот то, что было выше. И тут три вещи - человек либо поленился прочитать про STL алгоритмы, либо не доверяет нам и знает про них, но думает что не поймем мы, либо знает, но не понимает зачем показываеть эти знания, почему? вопрос оставим открытым. Этот пример с циклом - простейший алгоритм.

Алгоритмы STL — это настоящий швейцарский нож для разработчика. Они не просто помогают писать код, а делают его чище, понятнее и надежнее. В проектах с большими кодовыми базами, где легаси код не всегда стабилен и удобен для поддержки, это особенно важно. Каждый, кто писал циклы вручную, сталкивался с ошибками: вылезли за границы массива, забыли обработать пустой контейнер, сделали лишнее копирование. STL-алгоритмы избавляют от многих проблем, позволяя выразить мысли кратко и четко. Вместо простыней кода с индексами — несколько строк с понятным смыслом. Так что, если вы еще не знакомы со стандартными алгоритмами, самое время это исправить. Это один из тех инструментов, которые однажды освоив, уже невозможно забыть, это как езда на велосипеде, хорошем промышленном велике, за авторством Кнута или Саттера - надежном и с серийным номером.

Читать далее

Криптоанализ шифра Виженера. Как реализовать и взломать

Level of difficultyMedium
Reading time12 min
Views17K

Сказал как-то один французский дипломат...

Что же он такого мог сказать в 16 веке ? Разберемся в этой статье.

Читать далее

Маркировка DC/DC-преобразователей в корпусе SOT-23-5 и SOT-23-6

Level of difficultyEasy
Reading time3 min
Views18K

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

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

Читать далее

Оловянные монстры и борьба с ними

Reading time8 min
Views16K

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

Читать далее

Похищаем CheatEngine на C++ с нуля. Часть 0 — Введение

Level of difficultyMedium
Reading time8 min
Views9.3K

Данной статьей я хочу продемонстрировать процесс погружения в неизвестную сферу, методы и средства для сбора информации. Чтобы раз и навсегда закрыть вопрос какие материалы “почитать”, ведь, действуя по гайду “я повторил, но ничего не понял”.

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

Читать далее

Чип, подёргай ножкой ¯\_(ツ)_/¯

Level of difficultyMedium
Reading time9 min
Views9.6K

Как быстро выяснить схему соединений, когда на плате 70 микросхем в BGA?
Как протестировать плату, начиная с проверки соединений и заканчивая функциональными испытаниями?

Что можно вытворять с помощью JTAG сканирования? Где применять?
Возьмите в свой арсенал этот действительно полезный и могучий инструмент!
Читать дальше →

STM32. CMSIS. Пять способов генерации (псевдо-)случайного сигнала на выводе микроконтроллера

Level of difficultyMedium
Reading time17 min
Views5.7K

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

Читать далее

Обвиваем YouTube змеем, или как смотреть и скачивать видео с YouTube без VPN на чистом Python-е. Часть 2

Level of difficultyEasy
Reading time8 min
Views52K

Приветствую! Эта статья является продолжением (2 частью) статьи Обвиваем YouTube змеем, или как смотреть и скачивать видео с YouTube без VPN на чистом Python-е. Часть 1 Если честно, я был приятно удивлен популярностью первой части: 115К просмотров за неделю и 137 голосов, которые принесли мне 21 место в рейтинге Хабра. Учитывая, что эта статья была из песочницы (отдельное спасибо @Ilha за приглашение), для меня это большой результат. Поэтому всем, кто поставил стрелочку вверх – авторское спасибо!)

В этой статье я покажу, как можно скачивать с YouTube каналы и плейлисты. Если кто-то не читал первую часть, настоятельно рекомендую это сделать. По крайней мере, если по мере чтения у вас возникнут какие-то вопросы, скорее всего там есть на них ответы. Напомню, что у нас уже есть средство, которое решает "проблему с устаревшим и изношенным оборудованием Google Global Cache" (к сожалению, оно не у всех работает, учтите), а также мы разобрались с тем, как скачивать с YouTube видео и аудио в любом качестве. Итак, начнём!

UPDATE: По решению Роскомнадзора в марте 2025 г. первая часть статьи была заблокирована на территории России. pdf-версию статьи вы можете скачать здесь

Читать далее

Памятка/шпаргалка по SQL

Reading time29 min
Views1.3M

Доброго времени суток, друзья!


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

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

Реверс инжиниринг в домашних условиях

Reading time4 min
Views18K

Добрый день, хочу поделиться с читателями своим практическим опытом обратной разработке электронных плат. Эта статья будет ещё интересна предметом своего исследования. На примере я покажу как разобраться в работе устройства. При необходимости можно составить принципиальную электрическую схему и повторить печатную плату. Для примера я взял плату оси YAW гиростабилизированного подвеса камеры квадрокоптера dji mavic mini.

Итак приступим! Всю работу можно поделить на несколько этапов:

Читать далее

std::chrono в C++: управляем временем

Level of difficultyEasy
Reading time6 min
Views15K

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

Помните, какие времена были? Когда-то мы всерьез возились с time_t и ctime, огребали от структур tm и, если хотели засечь время, то приходилось чудить с difftime() и писать собственный секундомер на костылях. Вспомнить страшно — в голове сразу всплывают унылые алгоритмы перевода секунд в даты и обратно, а при упоминании часовых поясов хочется плакать. Слава небесам, пришел std::chrono! С ним управлять временем в коде можно чуть ли не с шиком: точные интервалы, аккуратные преобразования, поддержка календарей и таймзон — все это теперь под рукой и без изнуряющих плясок с бубном.

В этой статье я расскажу как использовать std::chrono.

Читать далее

Используй эту копеечную советскую микросхему, и часы оживут

Level of difficultyEasy
Reading time5 min
Views23K

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

Желательно сперва прочесть её, чтобы вникнуть в тему. Но, так как яжэлектронщик, то после ознакомления решил попробовать решить эту задачу сугубо «железячными» методами без единой строчки кода. H-мост L298N, который формирует импульсы амплитудой 24 вольта нужной полярности, было решено оставить, как в указанной заметке, а вот сигналы для него получать на цифровой «рассыпухе» без применения контроллеров. Тем более, что такая реализация отлично подходит как учебная задача для слушателей недавно вышедших с моим участием бесплатных онлайн-курсов по цифровой схемотехнике для начинающих.

Часы, которые мне передал товарищ, выглядели солидно.

Читать далее

Вторичная жизнь вторичных часов. На Arduino

Level of difficultyEasy
Reading time20 min
Views20K

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

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

Пишем Android приложение для фильтрации спам-звонков

Level of difficultyMedium
Reading time10 min
Views7.9K

Всем привет! Меня зовут Иван Чечиков. В этой статье я расскажу о своем пет-проекте - Android приложении, которое может идентифицировать нежелательные входящие звонки.

Подробности – под катом.

Читать далее

OSDEV: Разработка аллокатора на С++ часть 1. Неявный список свободных блоков с граничными тегами

Level of difficultyMedium
Reading time11 min
Views2.8K

Доброго времени суток.

При разработке ОС на с++ мы сталкиваемся с рядом трудностей, таких как отсутствие стандартной библиотеки и ABI с++ и прочее в этом духе. При чем перед реализацией PageAllocator и прочих аппаратных механизмов хотелось бы иметь какую то стандартную библиотеку позволяющую делать хоть что то. Об этом и пойдет речь.

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

Речь пойдет о немного переделанном алгоритме Кнута "неявный список блоков с граничными тегами" который описан в конце третьего тома в разделе "Распределение памяти". Его идея предельно проста:

Мы берем некоторый отрезок памяти, назовем его кучей и разбиваем его на блоки такого вида:

Читать далее

STM32 — грамотно включаемся от кнопки

Level of difficultyEasy
Reading time7 min
Views21K

Наличие у контроллеров STM32, да и практически любых других, режима энергосбережения STANDBY, который фактически представляет собой полное отключение (работает только RTC и сторожевой таймер, потребление составляет первые микроамперы, а состояние не сохраняется), дает возможность простейшим способом сделать включение и выключение устройства на таком МК нажатием кнопки, в том числе и задействованной под другие функции, без каких-либо дополнительных элементов. Есть, однако, несколько подводных камней, и в этой статье я расскажу, как на них не попасть.

Читать далее

Логирование FreeRTOS через Virtual Com Port

Level of difficultyMedium
Reading time10 min
Views3.6K

Отладка встраиваемых систем с микроконтроллерами часто затруднена из-за невозможности отслеживания процессов в первые секунды после запуска прошивки. Библиотека логирования для STM32 и FreeRTOS решает эту проблему, позволяя получать детальные журналы событий с самого старта программы. Это значительно упрощает диагностику ошибок и ускоряет процесс разработки. В статье рассматриваются основные функции библиотеки, настройка интерфейсов и уровней логирования, а также её внутреннее устройство.

Тестирование stm32 в Qemu в Docker

Вентиляция  крытых бассейнов и аквапарков в холодном климате: Как избежать конденсата на окнах?

Reading time16 min
Views5.5K

 

У меня зазвонил телефон…

С этой классической фразы из стихотворения Чуковского можно начинать практически любую историю из жизни современного человека.

Так случилось и у меня в один из недавних вечеров.

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

Договориться  о сотрудничестве не удалось, но зато я нашёл тему для очередной статьи.

 

Проблемы вентиляции  крытых бассейнов

Вентиляция  крытых бассейнов- это острая тема в проектирование, так как никаких особых нормативов  и методик не существует, а проблем при эксплуатации объектов прорва.

Основной проблемой является конденсат, возникающий на стенах и окнах в зимнее время.

То есть проблема связана  не только с вентиляцией, но и с  системой отопления помещения.

 

Когда возникает конденсат?

Конденсат на стёклах возникает тогда, когда температура поверхности оказывается ниже так называемой «точки росы» для данного помещения.

«Точка росы»- эта температура, при которой возникает 100% относительная влажность воздуха при существующем количестве влаги в воздухе данного помещения.

Определяется  «точка росы» при заданном влагосодержании и температуре воздуха по I-d-диаграмме влажного воздуха (см.рис.1.)

Читать далее

Конечный Aвтомат Аппаратного I2C-Трансивера

Level of difficultyEasy
Reading time9 min
Views5.4K

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

Меня удивляет, что в оригинальном коде от вендоров микроконтроллеров программисты прошли мимо конечных автоматов при написании I2C кода внутри своих официальных uHAL. Непорядок...

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

Читать далее

Разработка служб для Windows на C++

Level of difficultyHard
Reading time48 min
Views14K

В данной статье описан пошаговый процесс разработки служб для операционной системы Windows с использованием языка программирования C++.

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

Читать далее

Information

Rating
Does not participate
Registered
Activity