Pull to refresh
34
ionicman@ionicman

User

11
Subscribers
Send message

Пишу алгоритм FFT на Си для процессора Эльбрус

Level of difficultyHard
Reading time347 min
Reach and readers18K

Примерно полгода назад я познакомился с VLIW‑процессором Эльбрус-8СВ. На тот момент у меня уже был опыт написания кода на ассемблере для VLIW‑процессора TMS320C66. Поэтому я захотел сделать нечто похожее для Эльбруса, а именно, написать алгоритм FFT на ассемблере. Но из‑за нехватки документации на инструкции процессора мне пришлось начать с реализации какого‑нибудь простого алгоритма на Си, чтобы изучать его ассемблерный вывод.
По результатам этой работы была опубликована предыдущая статья на Хабре.

После завершения той статьи я решил попробовать написать алгоритм FFT на Си для Эльбруса. Работа ещё не завершена, но определённые успехи уже есть (сравнение с EML присутствует). В этой статье я хочу поделиться полученными на данный момент результатами.

Читать далее

Лучшие российские VPS/VDS-хостинги в 2026 году: сравниваем популярные конфиги

Level of difficultyEasy
Reading time7 min
Reach and readers26K

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

На рынке сейчас великое множество предложений VPS/VDS, но все они продают примерно одно и то же. Схожие конфигурации, обилие доступных образов ОС, возможность выбора ЦОДа — всё это есть у большинства современных хостингов. А вот стоимость за одинаковые услуги может значительно отличаться.

Под катом я постарался выяснить, насколько разница в цене оправдана на практике. Для этого я протестировал несколько серверов у популярных хостингов (Timeweb, RUVDS, CLO, AEZA, VDSina и Selectel) в средней ценовой категории, с максимально схожими конфигурациями (CPU 2, RAM 4 и SSD / NVMe).

Читать далее

C++101

Reading time179 min
Reach and readers32K

Про C++ часто шутят, что любую вещь можно сделать пятью разными путями, четыре из которых компилируются, три работают, а два правильные, но один зависит от фазы луны. Часто такие шутки и идиомы откладываются в коллективной памяти сообщества какой именно из этих путей правильный в каждой конкретной ситуации.

Большинство этих примеров родилось в эпоху до C++11, когда у языка ещё не было ни умных указателей в стандарте, ни move-семантики, ни constexpr, ни концептов, и приходилось руками собирать из шаблонов и перегрузок некоторые конструкции, которые в более поздних стандартах язык даёт почти бесплатно. Многие идиомы, примеры и идеи стоит читать в двух смыслах сразу, как исторический артефакт, объясняющий «почему старый код выглядит вот так», и как живой приём, который всё ещё применяется в движках и играх.

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

Когда я собирал оглавление Game++, раздел про идиомы, идеи, паттерны и механизмы C++ планировался шестым и завершающим, и должен был занять страниц сто, по одной на каждый пункт, но чем дальше я собирал материал, тем яснее становилось, что каждая секция тянет за собой историю, а каждая история требует контекста, а каждый контекст в игрострое никогда не бывает простым. В итоге текст разросся до размеров, при которых он просто сломал бы структуру книги, и мне пришлось выбирать между «урезать до неузнаваемости» и «отпустить жить отдельно». Пришлось выбрать второе.

Перед вами то, что могло бы стать половиной Game++, но стало самостоятельным материалом. Здесь собраны идиомы, идеи, паттерны и механизмы C++, которые сложились в сообществе за несколько десятилетий и продолжают жить в кодовых базах игровых движков, иногда под своими именами, иногда под другими, иногда вообще без имён, потому что их давно перестали объяснять. У большинства имена все же есть, есть и история с ответом почему именно так, а не иначе.

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

Читать далее

Обзор SPI Flash памяти MX25L6433F

Level of difficultyEasy
Reading time9 min
Reach and readers13K

В этом тексте я произвел обзор микросхемы SPI-NOR FLASH памяти MX25L6433F.
Показан код, который позволит запустить на микросхеме файловую систему LittleFS.

Читать далее

Оживляем дешевый Smart TV: обход вырезанного ADB, деблоат Яндекс.ТВ и сборка легкого медиацентра

Reading time6 min
Reach and readers38K

Купил я тут по дешевке 43-дюймовый телевизор Hartens (модель HTY-43FHD06B‑HK22, панель BOE HV430FHB‑F91) под проект умного гостевого дома. Железо внутри скромное: чипсет MediaTek MT5867, 32-битная архитектура (armeabi‑v7a), 1.5 ГБ оперативной памяти и вишенка на торте — фирменная оболочка Яндекс.ТВ на базе AOSP Android 11.

Из коробки это чудо техники работает «не очень». Интерфейс задумчивый, повсюду рекомендации, Алиса, Кинопоиск, Яндекс.Музыка и куча другого софта, который постоянно висит в памяти и кушает и без того дефицитные ресурсы.

План по исправлению созрел быстро, но на первом же шаге я уперся в стену: производитель полностью вырезал пункт «Отладка по USB» (USB Debugging) из меню разработчика. USB‑порты у телевизора работают только в режиме хоста (подключить ПК напрямую кабелем нельзя), а сетевой ADB по умолчанию закрыт.

Ниже я расскажу, как удалось обойти это ограничение, залезть «под капот» телевизора и превратить тормозящий яндекс‑комбайн в чистый и шустрый Android TV.

Читать далее

Инструменты, которые должен знать каждый, кто арендует первый VDS

Level of difficultyEasy
Reading time6 min
Reach and readers26K

Продолжаю серию подборок. Недавно рассказывал про онлайн-сервисы для сетевиков, а сегодня статья для тех, кто арендовал первый виртуальный сервер. Если нужен мониторинг, защита и резервное копирование, но ставить тяжёлый софт ради одной машины не хочется (или не «можется») — эти опенсорсные инструменты вам точно пригодятся. 

Читать

Загрузка утилит Windows в обход Store и без лишних гигабайт: используем Microsoft Symbol Server

Level of difficultyEasy
Reading time4 min
Reach and readers7.6K

В данной статье я покажу Вам, как вместо загрузки тяжелых ADK и SDK от Microsoft, скачивать легкие .exe утилиты при помощи Microsoft Symbol Server

Читать далее

Idempotency keys: 5 граблей, которые мы поймали на проде

Level of difficultyHard
Reading time11 min
Reach and readers18K

Пятница, 23:47. PagerDuty: “Платёж AmEx, провайдер вернул 5xx три раза подряд, билеты не зарезервированы.” Открываю логи – действительно три ответа провайдера 5xx, ни одной успешной транзакции по нашей базе. Закрываю как временный сбой на стороне провайдера, пишу короткую сводку в дежурный чат и иду досматривать. Через 40 минут второй алерт – уже от ночной поддержки: клиент прислал скрин выписки, 3 списания подряд за одну бронь. У клиента рейс через 6 часов, ему нужна действующая бронь и подтверждение, что он завтра нормально улетит, а не тикет в поддержку.

Мы делали B2B-платформу для деловых поездок: бронь авиа, отели, трансфер, страховка, в финале – оплата корпоративной картой через платежный шлюз. С этой ночи началась история, которая закончилась переписыванием всего платёжного слоя нашего booking-сервиса. По дороге мы поймали 5 граблей.

Читать далее

Реверс-инжиниринг Xiaomi Smart Band 10

Level of difficultyHard
Reading time16 min
Reach and readers33K

У носимых устройств есть парадокс: браслет измеряет ваши пульс, сон и активность, но готового открытого API для интеграции этих данных в сторонние системы (например, домашний мониторинг или локальную БД) производитель не предоставляет. Официальное приложение Xiaomi Mi Fitness показывает красивые графики, но данные остаются «запертыми» внутри мобильной экосистемы.

Изначальная задача была чисто прикладной: настроить автоматический сбор данных о здоровье в локальную SQLite-базу и выводить отчеты в семейный Telegram-бот. Поскольку браслет синхронизируется с приложением, а то в свою очередь с облаком Xiaomi, данные гарантированно передаются по сети. Нужно было понять, в каком формате они передаются и как их забрать.

Эта статья - технический разбор пути от анализа сетевого трафика и настройки доверия к собственному CA до реверс-инжиниринга RC4-протокола Xiaomi, расшифровки AES/CBC-объектов из хранилища FDS и парсинга проприетарного бинарного формата сна.

Читать далее

Вам не нужен OpenClaw — напишите свой

Level of difficultyEasy
Reading time14 min
Reach and readers57K

Привет, Хабр! Меня зовут Никита Пастухов — автор FastStream, Principal Engineer и мейнтейнер AG2 (фреймворк для разработки агентов). Я уже 8 лет в разработке, последний год - по уши в агентах.

И я хочу доказать вам, что написать своего агента не сложнее, чем написать CRUD

Почему это вообще нужно доказывать? Потому что есть заметный разрыв между тем, что происходит с AI в мире, и тем, что происходит в среднестатистической российской компании. В мире — в каждой компании подписка на OpenAI, миллиард стартапов с AI-продуктами, агенты глубоко интегрированы в бэкофис. В России — «опасно, хостим свои модели», «непонятно» и чат-боты поддержки. В мире инженеры уже умеют разрабатывать агентов. В России — «что это вообще такое?»

Поэтому давайте разберём устройство агентов на примере OpenClaw — самого хайпового “личного AI-агента” прямо сейчас. Он живёт в вашем мессенджере, разбирает почту, ведёт соцсети, пишет код, деплоит сервисы. Его популярность — свидетельство того, насколько мало люди пока используют агентов в быту. Для тех, кто в теме, OpenClaw не привнёс ничего нового.

Давайте разбираться

Превращаем сканер в тачскрин монитора

Level of difficultyMedium
Reading time7 min
Reach and readers20K

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

Как же я пришёл к такой безумной идее? Источником вдохновения может быть что угодно. Ко мне оно пришло, когда я убирал стол, который использую для хакинга. Как обычно, на нём валялась куча деталей и поломанных устройств и среди прочего многофункциональный принтер Epson Stylus SX125. Я купил его, чтобы задействовать детали принтера в каком-то другом эксперименте, и хотя оборудование сканера было в порядке, плата контроллера, управлявшая и принтером, и сканером, вероятно, уже ни на что не была способна.

Читать далее

Ultimate guide по веб-компонентам

Level of difficultyMedium
Reading time21 min
Reach and readers9.3K

Синхронизация атрибутов элемента с DOM-свойствами

Очевидно, что нашему компоненту потребуются атрибуты, через которые пользователь сможет контролировать его поведение. Наш компонент должен вести себя как стандартный элемент ввода типа «input», поэтому обязательно должен поддерживать такие атрибуты как disabled и required – и это самый минимум. Поэтому важно разобраться (ну или вспомнить) что такое «content vs IDL attributes», и как с этим работать.

Документация по веб-компонентам мало говорит об атрибутах, разве что рекомендует использовать attributeChangedCallback() для наблюдения за ними, но этого недостаточно. Хотя это полезное API, нам оно не подходит, потому что оно уведомляет нас о уже совершенном действии (изменении атрибута), а нам нужно контролировать этот процесс, то есть – синхронизировать атрибуты и свойства с нормализацией значений.

Так как наш компонент наследует базовый класс HTMLElement, а в нем уже реализовано большое количество разных методов, то мы можем переопределить некоторые из них чтобы получить нужный нам результат. Для начала определим наши свойства в виде пар get/set и значения в приватном поле:

Читать далее

ПИД-регулятор — это весело

Reading time12 min
Reach and readers20K

Давайте исследуем ПИД-регулятор через пень-колоду: FDTD, численное интегрирование, ракету и самобалансирующегося робота! Ворох нечитаемого кода! Мало не покажется

Читать далее

Ускоряем вставку данных в PostgreSQL

Reading time20 min
Reach and readers11K

Это текстовая версия доклада с Java Rock Star Meetup, с которым выступал Дмитрий Фатов (@FatOFF ) — руководитель разработки Газпромбанка с опытом разработки приложений более 13 лет. Дмитрий работал как backend-, так и fullstack-разработчиком на языках Java, Kotlin, JS, TS, 1С и имеет большой опыт работы с SQL-базами данных.

Читать далее

Как отменить или откатить коммит в Git командами reset, revert и restore

Level of difficultyHard
Reading time6 min
Reach and readers20K

Всем привет!

Если вы работаете с Git относительно недавно, почти наверняка у вас возникала потребность в отмене коммита. И, что печально, вы быстро поняли, что простого "откатить все назад" нет.

Где-то советуют git reset, где-то - git revert, а в третьих и вовсе пишется про checkout. По тому же правилу летят restore, amend, reflog и куча технологических формулировок, требующих знания git и после которых становится только сложнее, нежели понятнее.

На самом деле все это объясняется: под словами "отменить commit" можно иметь в виду совершенно разные действия, и мы разберем, для каких случаев, какая команда подходит.

Читать далее

«Хранилище Google переполнено»: Как очистить Gmail от мусора и обойти покупку подписки

Level of difficultyEasy
Reading time3 min
Reach and readers55K

Рано или поздно каждый пользователь экосистемы Google сталкивается с уведомлением о том, что бесплатные 15 ГБ пространства закончились. Письма перестают приходить, файлы на Диск не загружаются, а Google настойчиво предлагает оформить ежемесячную подписку.

Но прежде чем доставать карту (а с определенного момента оплатить подписку в целом стало весьма нелегкой задачей), стоит разобраться, чем именно занято место.

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

Читать далее

Одна формула, позволяющая понять 3D-графику

Level of difficultyEasy
Reading time9 min
Reach and readers31K

Учась в школе, я обнаружил очень простую математическую формулу, о которой не перестаю думать и сегодня. Смысл её в следующем: представьте, что у вас есть 3D-точка в воображаемом 3D-пространстве за экраном. Для проецирования этой 3D-точки на экран нужно взять её координату X, поделённую на Z, и аналогично её Y / Z. И в результате вы получите проекцию точки на экран: x'=\frac{x}{z} и y'=\frac{y}{z}. А если у вас есть множество точек в этом 3D-пространстве за экраном, и вы начнёте их анимировать и вращать их, а потом воспользуетесь этой формулой для рендеринга всех точек на экране, то это будет выглядеть, как 3D-сцена или 3D-объект. Давайте попробуем эту формулу в деле.

Читать далее

Ротозумер: разбор классического демо-эффекта

Level of difficultyMedium
Reading time33 min
Reach and readers12K

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

Никаких ИИ при создании данного материала не использовалось! Продукт ассемблеро-содержащий, с натуральными картинками и витаминами!

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

Возможно, самый гениальный код на python на сегодня: разбираем 200-строчный microgpt от Андрея Карпаты

Level of difficultyMedium
Reading time27 min
Reach and readers55K

Буквально на днях Андрей Карпаты, один из ранних сооснователей OpenAI, покинувший компанию, исследователь нейросетей, опубликовал на Гитхаб фантастическую вещь: чистый (без специализированных библиотек) 200-строчный python-код трансформера, аналога GPT-2, для изучения всеми желающими. И написал в блоге статью для понимания этого кода (и работы трансформеров). Я перевёл статью и комментарии к коду — ведь этот код (я уверен!) войдёт в ИТ-историю...

Присоединяйтесь к этому завораживающему сеансу разоблачения gpt-магии, за считанные годы овладевшей миром!..

Читать далее

Передача JPEG-видео по RTP/UDP на ESP32 (RFC 2435)

Level of difficultyMedium
Reading time9 min
Reach and readers21K

В этой статье я разберу, как реализовать передачу JPEG-видео по RTP поверх UDP напрямую с ESP32 - так, чтобы поток открывался в VLC и ffplay, без RTSP, FFmpeg и промежуточных серверов.

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

Information

Rating
Does not participate
Registered
Activity