Как стать автором
Обновить
13
0
Дмитрий @zloiia

Пользователь

Отправить сообщение

Обфускация трафика своими руками. Часть первая — OBFS4

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров25K

Гайд о том, как на практике применить обфускацию, используемую в TOR для обхода DPI или непрозрачных прокси-серверов (причем, не только на уровне провайдера/государства, но и корпоративного уровня) без сильного замедления трафика засчет self-hosted.

Читать далее
Всего голосов 13: ↑12 и ↓1+12
Комментарии21

Проектирование кластеров Kubernetes: как выбрать оптимальную стратегию автомасштабирования

Время на прочтение16 мин
Количество просмотров6.9K

Pyramids of Egypt by acrosstars22

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

Команда Kubernetes aaS VK Cloud Solutions перевела статью о том, как задавать размеры узлов кластера, настраивать горизонтальное и кластерное автомасштабирование и выполнять избыточное резервирование ресурсов под кластер для ускорения масштабирования.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+25
Комментарии3

Сравнение производительности инструментов нагрузочного тестирования

Время на прочтение8 мин
Количество просмотров12K

Всем привет, меня зовут Сергей, я занимаюсь тестированием производительности. Недавно поднялся вопрос в выборе инструмента для воспроизведения довольно интенсивной нагрузки, в основном по HTTP. Инструментов для тестирования производительности сейчас представлено довольно много, в том числе многие из них являются Open Source — проектами и доступны бесплатно. Стало интересно, какой же инструмент справится с подобной задачей лучше, сможет воспроизвести большую нагрузку затратив меньше ресурсов.

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

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии16

7 логических и математических задачек про разумных бегемотов

Время на прочтение4 мин
Количество просмотров39K

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

Читать далее
Всего голосов 16: ↑14 и ↓2+16
Комментарии34

Вычитываем прошивку STM32

Время на прочтение7 мин
Количество просмотров43K

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

Flash Readout Protection (RDP) ключевой компонент в защите, включенный во все линейки микроконтроллеров. Он защищает системную прошивку, сохраненную во внутренней флэш памяти от вычитывания. В зависимости от линейки, могут быть включены дополнительные механизмы, такие как Memory Protection Unit (MPU) и привилегированные / непривилегированные режимы исполнения. Вместе, эти системы призваны повысить защищенность.

Авторы статьи пришли к выводу, что серия мк STM32F0 содержит ряд уязвимостей позволяющих в лаборатории с базовым оборудованием создать установку для вычитывания прошивки. Методы могут комбинироваться для достижения наилучшего результата или позволить работать в RDP level 2.

Узнать подробнее
Всего голосов 52: ↑52 и ↓0+52
Комментарии28

О реализации индикатора батареи в устройствах на МК

Время на прочтение5 мин
Количество просмотров14K

В портативном устройстве, работающем от аккумулятора, почти обязательным «удобством» является индикатор уровня его заряда. Казалось бы, если оно собрано на основе любого современного микроконтроллера и имеет графический дисплей, ничего сложного в этом нет: измерять напряжение батарейки с помощью встроенного АЦП и выводить его в виде традиционной батарейки с прямоугольничком внутри, длина которого зависит от напряжения.  Но если так сделать в лоб, есть риск, что индикатор будет вести себя, как в известном перле «она металась, как стрелка осциллографа». В лучшем случае, он будет все время раздражающе подергиваться туда-сюда на один-два пикселя.

В статье описывается простая реализация индикатора разряда, лишенного этого недостатка.

Читать далее
Всего голосов 35: ↑34 и ↓1+43
Комментарии22

DIY-фермы из смартфонов Android снова в строю

Время на прочтение4 мин
Количество просмотров46K


Многие задают вопрос, как использовать старые смартфоны. В самом деле, не выбрасывать же на свалку устройство с двумя-четырьмя CPU, гигабайтами оперативки, рабочими чипами NAND, модемом 4G и другой полезной электроникой. И действительно, старые гаджеты вполне могут ещё поработать и принести пользу. Например, на домашней ферме для автоматического тестирования приложений, скрапинга публично доступной информации и др.
Читать дальше →
Всего голосов 57: ↑54 и ↓3+64
Комментарии32

Второе чувство: разработка ИИ-носа

Время на прочтение10 мин
Количество просмотров3.7K
Шли долгие майские выходные 2020 года. Я, как и многие другие представители рода людского, сидел дома. Из-за пандемии у меня было свободное время, которое я тратил на улучшение моего рецепта хлеба. А несколькими днями ранее я заказал газоанализатор (Рис. A, под катом). Я полагал, что он идеально подойдёт для того, чтобы помочь мне наблюдать за хлебной закваской. У меня была надежда на то, что эта штука позволит мне идеально рассчитать время начала выпечки хлеба.


Читать дальше →
Всего голосов 26: ↑25 и ↓1+31
Комментарии1

Пишем драйвер виртуального EEPROM для STM32F030

Время на прочтение15 мин
Количество просмотров13K

Кто хотел сохранять какие-либо данные в FLASH микроконтроллера во время работы устройства сталкивались с особенностями работы с этим видом памяти. Из-за необходимости стирания страницы большого объёма для перезаписи ячейки FLASH памяти, возникает угроза потери данных из-за отключения питания во время процесса обновления (один из вариантов). В этой статье я расскажу как можно упростить работу с FLASH, да и ещё с гарантией сохранения данных при прерывании процедуры обновления на любом этапе. Реализуем это на STM32F030.
Читать дальше →
Всего голосов 43: ↑40 и ↓3+56
Комментарии29

Асинхронность в С++20. Доклад в Яндексе

Время на прочтение14 мин
Количество просмотров24K
Привет, это Григорий Демченко из WhatsApp. Мой доклад посвящён использованию сопрограмм в C++20. Я не стал говорить про низкоуровневые примитивы и то, как компилятор поддерживает сопрограммы и преобразовывает соответствующий код. Вместо этого акцент сделан на практическом применении сопрограмм для решения конкретных задач высокопроизводительных масштабируемых систем. Это именно то, ради чего создавались сопрограммы в новом стандарте, и то, с чем разработчик будет иметь дело в процессе проектирования и программирования. Я постарался рассмотреть конкретные примеры и проблемы, с которыми можно столкнуться при использовании полностью асинхронного подхода.

— О чём я сегодня расскажу? Первое — введение в асинхронность. Далее мы рассмотрим примитивы, которые можно использовать в новом стандарте, и интеграцию с планировщиками. Также немаловажным аспектом будет являться работа со старым кодом, если мы пишем новый код с использованием нового подхода. Затем я покажу бонус, достаточно интересный и необычный. И подведём итоги того, что у нас получилось.
Читать дальше →
Всего голосов 21: ↑20 и ↓1+26
Комментарии6

Записки архитектора. Чек-лист

Время на прочтение11 мин
Количество просмотров16K

- Составь, пожалуйста, руководство по тому, как делать архитектуру.

С такой просьбой ко мне однажды обратились менеджеры по разработке софта в компании, где я работаю или работал (не хочу раскрывать время и место). И надо сказать, что сначала эта просьба меня здорово озадачила. На тему архитектуры софта написано много книг, и не самых тонких. Мне предлагается написать еще одну? Чем она будет отличаться от существующих? И зачем вообще им это?

Что касается "зачем", то здесь все было понятно. Цель у менеджеров была благая. Проектов в компании обычно больше, чем могут осилить штатные архитекторы. Идея была в том, чтобы архитектуру для небольших проектов делали либо сами менеджеры по разработке, либо старшие разработчики, а архитектор только проверял, направлял и помогал где нужно.

Цель хорошая, запрос хороший. Оставалось только понять, как оказать им конструктивную помощь, а не отправить читать книжки или не засесть писать свою.

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

Собственно, этот список я здесь и публикую.

Далее...
Всего голосов 22: ↑21 и ↓1+30
Комментарии10

WebUSB. Прошейся из браузера

Время на прочтение3 мин
Количество просмотров18K


Разработчики хромиума постоянно пилят огромное количество классных API для разных технологий и железяк. Тут и Web Share, и работа со звуком, Bluetooth, NFC, WebOTP и много чего ещё, более-менее полный список со статусами реализации можно посмотреть здесь. Но больше всего среди них впечатляет WebUSB API, о настоящих возможностях которого я узнал совсем недавно. Оказывается, с его помощью можно не только открывать странички с подключенных устройств, но и прошивать их. Это открывает новый крутейший сценарий работы со всякой мелкой электроникой.
Читать дальше →
Всего голосов 33: ↑29 и ↓4+38
Комментарии34

Новая функциональность в RESTinio и опять с помощью C++ных шаблонов

Время на прочтение10 мин
Количество просмотров2.7K

Увидело свет очередное обновление небольшой библиотеки для встраивания асинхронного HTTP-сервера в C++ приложения: RESTinio-0.6.12. Хороший повод рассказать о том, как в этой версии с помощью C++ных шаблонов был реализован принцип "не платишь за то, что не используешь".



Заодно в очередной раз можно напомнить о RESTinio, т.к. временами складывается ощущение, что многие C++ники думают, что для встраивания HTTP-сервера в современном C++ есть только Boost.Beast. Что несколько не так, а список существующих и заслуживающих внимания альтернатив приведен в конце статьи.


О чем речь пойдет сегодня?


Изначально библиотека RESTinio никак не ограничивала количество подключений к серверу. Поэтому RESTinio, приняв очередное новое входящее подключение, сразу же делала новый вызов accept() для принятия следующего. Так что если вдруг на какой-то RESTinio-сервер придет сразу 100500 подключений, то RESTinio не заморачиваясь постарается принять их все.


На такое поведение до сих пор никто не жаловался. Но в wish-list-е фича по ограничению принимаемых подключений маячила. Вот дошли руки и до нее.


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

Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии9

Сверхсовременные иммутабельные структуры данных

Время на прочтение22 мин
Количество просмотров30K
Годами эксперты в С++ рассуждают о семантике значений, иммутабельности и разделении ресурсов за счет коммуникации. О новом мире без мьютексов и гонок, без паттернов Command и Observer. На деле все не так просто. Главная проблема по-прежнему в наших структурах данных.



Иммутабельные структуры данных не меняют своих значений. Чтобы что-то с ними сделать, нужно создавать новые значения. Старые же значения остаются на прежнем месте, поэтому их можно без проблем и блокировок читать из разных потоков. В итоге ресурсы можно совместно использовать более рационально и упорядоченно, ведь старые и новые значения могут использовать общие данные. Благодаря этому их куда быстрей сравнить между собой и компактно хранить историю операций с возможностью отмены. Все это отлично ложится на многопоточные и интерактивные системы: такие структуры данных упрощают архитектуру десктопных приложений и позволяют сервисам лучше масштабироваться. Иммутабельные структуры — секрет успеха Clojure и Scala, и даже сообщество JavaScript теперь пользуется их преимуществами, ведь у них есть библиотека Immutable.js, написанная в недрах компании Facebook.

Под катом — видео и перевод доклада Juan Puente с конференции C++ Russia 2019 Moscow. Хуан рассказывает про Immer — библиотеку иммутабельных структур для C++. В посте:

  • архитектурные преимущества иммутабельности;
  • создание эффективного персистентного векторного типа на основе RRB-деревьев;
  • разбор архитектуры на примере простого текстового редактора.

Всего голосов 84: ↑84 и ↓0+84
Комментарии57

Как уязвимость в Яндекс.Станции вдохновила меня на проект: Музыкальная передача данных

Время на прочтение3 мин
Количество просмотров25K
На прошлой неделе я рассказал, как устроена активация Яндекс.Станции через звук. Оказалось, что пароль от WiFi передаётся в открытом виде. Я размышлял, зачем вообще нужно было делать активацию так, а не каким-то отлаженным способом.

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



Под катом я расскажу, как сделан прототип, и дам ссылку на демку. Вы сможете сами послушать, как звучит любое сообщение :)
Читать дальше →
Всего голосов 118: ↑117 и ↓1+116
Комментарии56

Генерация звука на микроконтроллерах AVR методом волновых таблиц с поддержкой полифонии

Время на прочтение12 мин
Количество просмотров32K
Микроконтроллеры AVR довольно дешевы и широко распространены. Наверно, с них начинает почти любой embedded разработчик. А среди любителей правит балом Arduino, сердцем которого обычно является ATmega328p. Наверняка многие задумывались: как можно заставить их звучать?

Если посмотреть на существующие проекты, то они бывают нескольких типов:

  1. Генераторы квадратных импульсов. Генерация с помощью ШИМ или дергать пины в прерываниях. В любом случае, получается очень характерный пищащий звук.
  2. Использование внешнего оборудования типа MP3 декодера.
  3. Использование ШИМ для вывода 8 битного (иногда 16 битного) звука в формате PCM или ADPCM. Поскольку памяти в микроконтроллерах для этого явно не достаточно, то обычно используют SD карту.
  4. Использование ШИМ для генерации звука на основе волновых таблиц, подобных MIDI.

Последний тип для меня был особенно интересен, т.к. почти не требует дополнительного оборудования. Представляю сообществу свой вариант. Для начала небольшое демо:



Заинтересовавшихся прошу под кат.
Читать дальше →
Всего голосов 60: ↑59 и ↓1+58
Комментарии71

Автоматизация ответов на часто задаваемые вопросы в навыке для «Алисы» с помощью библиотеки DeepPavlov

Время на прочтение5 мин
Количество просмотров12K
Лаборатория нейронных систем и глубокого обучения МФТИ вот уже больше года делает DeepPavlov — открытую библиотеку для создания диалоговых систем. Она содержит набор претренированных компонент для анализа языка, с помощью которых можно эффективно решать задачи бизнеса.

Например, организовать ответы на часто задаваемые вопросы клиентов. Сделать это через колл-центр, виджет на сайте или соцсети, наняв сотрудников — дело нехитрое. Актуальная задача — оптимизировать процесс, чтобы он осуществлялся автоматически, с минимальными погрешностями, и еще и в удобном пользовательском интерфейсе. Например, в голосовом помощнике «Алиса» от «Яндекса».

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


Читать дальше →
Всего голосов 20: ↑17 и ↓3+14
Комментарии9

Ни минуты оффлайн — Выбираем промышленный LTE-роутер

Время на прочтение22 мин
Количество просмотров70K
промышленный LTE роутер Termit CR41P, с антеннами Триада MA-2697

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

Мне надоело самостоятельно изобретать failover на USB модемах, и захотелось делегировать это отдельной умной железке. Я решил сравнить несколько промышленных роутеров, чтобы выяснить, оправдывают ли они свое название, и насколько они лучше моих костылей. В статье будут сравниваться роутеры производителей iRZ, Termit, Robustel.

Основные требования к роутерам:

  • 2 SIM-карты и автоматическое переключение между операторами — роутер должен автоматически определять потерю связи на одном операторе и переключаться на резервного. Это особенно важно для подвижных систем, когда покрытие сотовой сети не идеально.
  • Подключение по Ethernet — основная система должна видеть только шлюз по умолчанию, и не должна знать о модемной подсистеме на стороне роутера и переключениях каналов, поэтому никаких USB.
  • Поддержка современных протоколов VPN: IKEv2 и OpenVPN — для удобства администрирования, и чтобы не зависеть от реальных IP-адресов, роутеры должны уметь VPN. При этом поддерживать не только устаревшие PPTP и L2TP, но и современные протоколы.
  • (Опционально) поддержка GPS, наличие GPIO, serial интерфейсов RS-232/485 — эти функции не обязательны для наших задач, но мы рассмотрим их тоже, как бонус, который, возможно, будет кому-то полезен.
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии114

Как браузер помогает товарищу майору

Время на прочтение6 мин
Количество просмотров147K
Знаете, когда я почти нечаянно обнаружил, читая прекрасную книгу Дмитрия Кетова «Внутреннее устройство Linux» (и это не реклама), что каждый скачанный нами файл из Интернета с легкой руки браузера оставляет в расширенных атрибутах файла (в inode файла, не в самом файле) как минимум полную ссылку на то откуда он был скачан, я пришел в легкое возбуждение и хотел тут же броситься спасать мир. Позже, немного изучив этот вопрос, почитав «коммиты» и «комменты», говорившие, что этой возможности, встроенной в ядро GNU/Linux, как минимум уже около 10 лет, что ею пользуется не только браузеры, но и, к примеру, популярная утилита wget (curl нет), и что эта вещь считается чуть ли не нормой в Linux (и, как выяснилось позже, в MacOS), то я немного подуспокоился. Одно не давало мне покоя: поиск ключевого слова getfattr в google по сайту «Хабра»: site:https://habr.com getfattr, равно как и по ЛОРУ: site:https://linux.org.ru getfattr ничего толком не дал. «Значит» — подумал я — «эта тема еще особенно не обсуждалась». — Что же, тогда пришло время ее обсудить, но для начала пришлось немного по-исследовать. И вот что я обнаружил:

image
Читать дальше →
Всего голосов 265: ↑246 и ↓19+227
Комментарии322

SObjectizer: что это, для чего это и почему это выглядит именно так?

Время на прочтение15 мин
Количество просмотров19K
Разработка многопоточных программ на C++ — это не просто. Разработка больших многопоточных программ на C++ — это очень не просто. Но, как это обычно бывает в C++, жизнь сильно упрощается, если удается подобрать или сделать «заточенный» под конкретную задачу инструмент. Четырнадцать лет назад выбирать было особенно не из чего, поэтому мы сами для себя сделали такой «заточенный» инструмент и назвали его SObjectizer. Опыт повседневного использования SObjectizer-а в коммерческом софтостроении пока не позволяет жалеть о содеянном. А раз так, то почему бы не попробовать рассказать о том, что это, для чего это и почему у нас получилось именно так, а не иначе…
Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии10
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Архангельск, Архангельская обл., Россия
Дата рождения
Зарегистрирован
Активность