Как стать автором
Обновить
1
0

Software engineer

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

Практическое руководство по Rust. 1/4

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



Hello world!


Представляю вашему вниманию первую часть практического руководства по Rust.



Другой формат, который может показаться вам более удобным.


Руководство основано на Comprehensive Rust — руководстве по Rust от команды Android в Google и рассчитано на людей, которые уверенно владеют любым современным языком программирования. Еще раз: это руководство не рассчитано на тех, кто только начинает кодить 😉

Читать дальше →
Всего голосов 35: ↑30 и ↓5+25
Комментарии12

Соединяем Flutter, Firebase и ESP32 в единую систему

Уровень сложностиСложный
Время на прочтение15 мин
Количество просмотров6.4K

Всем привет! Это Мурат Насиров, Flutter-разработчик в Friflex. Мы разрабатываем высоконагруженные мобильные приложения для бизнеса и специализируемся на Flutter. 

Сегодня расскажу, как использовать микроконтроллер ESP32 в связке с Flutter-приложением. В качестве примера покажу, как снимать показания температуры и влажности с помощью датчика DHT11 и передавать эти данные через Firebase Realtime Database в приложение.

Читать далее
Всего голосов 7: ↑6 и ↓1+5
Комментарии6

Цифровой стандарт радиосвязи Волновая сеть — от локальной группы до региональной сети оперативной связи

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

Алгоритм «Волновая сеть» организует пакетную передачу с помощью принципа множественного доступа с контролем несущей (CSMA). Отличительная особенность - алгоритм не выстраивает маршрута до получателя, а распространяет информацию через множество узлов (абонентов). Оптимизирован под голосовую радиосвязь и совместную передачу данных. Программа, реализующая алгоритм зарегистрирована в едином реестре российских программ для электронных вычислительных машин и баз данных под номером №5892 «Программа управления контроллера радиостанции цифровой широкополосной адаптивной равнодоступной радиосети»

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

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

Детекция машин на мобилке в 2023. С какими проблемами мы столкнулись и как решали

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

Как мы распознавали машины с камеры мобильного телефона с помощью TensorFlow-lite, C++, Qt и что из этого вышло.

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

Поговорим с мышами? Или Soft USB HOST на Esp32

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

Esp32 весьма мощный контроллер, подходящий для эмуляции различных ретро систем, таких как Spectrum, Commodore, NES, IBM PC-XT и т.д. Есть возможность сгенегировать VGA или AV - TV композитный сигнал, подключить различные компактные LCD дисплеи. Он умеет разговаривать с SD картами по SPI & SD протоколу. Вот только с USB клавиатурами, мышами и джойстиками - не умеет. Попробуем научить его говорить с ними. Есть конечно новый вариант ESP32-S3 с одним USB host контроллером, а мне нужно подключить хотя бы 3 девайса и без хаба...

Нам понадобится:
Всего голосов 33: ↑33 и ↓0+33
Комментарии6

Дзен Nim

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

1. Копирование плохого дизайна — плохой дизайн.

2. Если компилятор не может рассуждать о коде, то и программист не может.

3. Не стой на пути у программиста.

4. Перенеси работу на этап компиляции: программы запускаются гораздо чаще, чем компилируются.

5. Настраиваемое управление памятью.

6. Лаконичный код не мешает читабельности, он ей способствует.

7. (Задействовать метапрограммирование, чтобы оставить язык компактным).

8. Оптимизация это специализация: если вам нужно больше скорости, пишите кастомный код.

9. Должен быть только один язык программирования для всего. Этот язык — Nim.

Читать далее
Всего голосов 18: ↑15 и ↓3+12
Комментарии29

Простой GUI калькулятор на Python #1. Дизайн приложения

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

Штош. Наверное, каждый начинающий программист после "Hello, world!" хочет написать какой-нибудь простенький проект. Почти всегда в голову приходит идея создания калькулятора. Но консольный калькулятор - это как-то скучно и просто. Хочется сделать приложение прямо как в системе. Ну или хотя бы что-то похожее.

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

Научиться!
Всего голосов 22: ↑22 и ↓0+22
Комментарии23

NVMe-накопители: чем они хороши и как на них переходить. Часть первая

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

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

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

Resolve IP адресов в Linux: понятное и детальное описание

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

Настройка сетевого взаимодействия сервисов не самая простая задача и часто осуществляется без глубокого понимания как требуется настраивать систему и какие настройки на что влияют. После миграции сервисов в docker контейнерах с centos 6 на centos 7 я столкнулся со странным поведением вебсервера: он пытался присоединиться к сервису по IPv6, а сервис же слушал только IPv4 адрес. Стандартный совет в такой ситуации — отключить поддержку IPv6. Но это не поможет в ряде случаев. Каких? В этой статье я задался целью собрать и детально объяснить как приложения resolve'ят адреса.

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

Использование библиотеки LLVM для генерации кода регулярных выражений

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

Введение


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


Возникает вопрос — как можно ускорить построение конечных автоматов по регулярным выражениям? У меня как-то раз возникла идея, как это можно сделать — для этого можно применить настоящий компилятор, который может генерировать максимально эффективный машинный код. Эту идею я решил опробовать на практике, используя библиотеку LLVM как компилятор/оптимизатор для регулярных выражений. Что из этого вышло, будет изложено ниже в данной статье.

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

Опыт использования автомобильных АКБ с UPS

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

Мысли использовать автомобильные АКБ с UPS бродят по просторам интернета очень давно. Плюсы очевидны - стоимость ампер*часа автомобильных АКБ на порядок ниже, чем у родных АКБ для UPS. Многие даже успешно подключили. Я же только обобщил опыт из разных источников.

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

BPF для самых маленьких, часть первая: extended BPF

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

В начале была технология и называлась она BPF. Мы посмотрели на нее в предыдущей, ветхозаветной, статье этого цикла. В 2013 году усилиями Алексея Старовойтова (Alexei Starovoitov) и Даниэля Боркмана (Daniel Borkman) была разработана и включена в ядро Linux ее усовершенствованная версия, оптимизированная под современные 64-битные машины. Эта новая технология недолгое время носила название Internal BPF, затем была переименована в Extended BPF, а теперь, по прошествии нескольких лет, все ее называют просто BPF.


Грубо говоря, BPF позволяет запускать произвольный код, предоставляемый пользователем, в пространстве ядра Linux и новая архитектура оказалась настолько удачной, что нам потребуется еще с десяток статей, чтобы описать все ее применения. (Единственное с чем не справились разработчики, как вы можете видеть на кпдв ниже, это с созданием приличного логотипа.)


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

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

Бенчмарк Prometheus vs VictoriaMetrics на метриках node_exporter

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

Недавно в VictoriaMetrics появилась возможность скрейпинга целевых объектов Prometheus. И теперь мы можем сравнивать яблоки с яблоками: сколько ресурсов используют Prometheus и VictoriaMetrics при скрейпинге большого количества node_exporter.

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

Как root-права и альтернативные прошивки делают ваш android смартфон уязвимым

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

Если вы являетесь регулярным читателем Хабра, то должно быть заметили что за последние несколько лет вышло немало статей о сборе персональных данных с мобильных устройств, и о попытках противодействия этому, было несколько отличных статей с детальными инструкциями по превращению своего смартфона на базе ОС Android в настоящую цитадель приватности и безопасности. 

Часто для этого рекомендуется получение прав суперпользователя в системе (root-права), удаление системных приложений от Google и от производителя устройства, или даже полная замена стандартной ОС на альтернативные сборки, чаще всего LineageOS (бывший CyanogenMod). При этом первым шагом в этом процессе всегда будет так называемая "разблокировка загрузчика". Во время её выполнения устройство несколько раз покажет нам страшные предупреждения о том, что теперь оно станет более уязвимо для злоумышленников, но мы смело нажимаем "подтвердить" и шьём root или самую свежую сборку кастомной прошивки, не задумываясь о том какие проблемы создаёт нам незаблокированный загрузчик. 

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

Интересующихся приглашаю под кат.

Читать далее
Всего голосов 127: ↑123 и ↓4+119
Комментарии210

Красивый листинг файлов и директорий в nginx

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

Для web-сервера Apache существует множество инструкций, в том числе и на Хабре, как стилизовать стандартный листинг файлов и директорий. Однако, как сделать также для сервера nginx, в русскоязычном интернете не найти. Порывшись на просторах интернета я нашел один репозитарий, где как раз и решается этот вопрос. Но для кириллических наименований файлов и папок потребовалась небольшая работа "напильником".


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

Head-of-Line Blocking в QUIC и HTTP/3: Подробности

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

Как вы могли слышать, после четырех лет разработки протоколы HTTP/3 и QUIC приблизились к официальной стандартизации. Предварительные версии уже доступны для тестирования на серверах и браузерах.

HTTP/3 обещает значительный прирост производительности по сравнению с HTTP/2, в основном благодаря смене транспортного протокола с TCP на QUIC over UDP. В этой статье мы подробно рассмотрим только одно улучшение, а именно — устранение проблемы блокировки начала очереди (Head-of-Line blocking, HOL blocking). Это будет полезно, так как я прочитал много заблуждений о том, насколько это решение полезно и как оно помогает на практике. Решение HOL blocking было основным мотивом не только HTTP/3 и QUIC, но и HTTP/2, и это дает фантастическое представление о причинах эволюции протокола.

Я расскажу о проблеме и ее формах на фоне истории протокола HTTP. Рассмотрим, как эта проблема влияет на системы приоритизации и контроля перегрузки сети. Цель данной статьи — помочь людям сделать правильные выводы об улучшении производительности в HTTP/3, которые (спойлер!) не всегда так хороши, как пишут в маркетинговых материалах.
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии8

Введение в VxLAN

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


Сегодня мы поговорим об очередной интересной технологии — VxLAN — что это за зверь и с чем его едят, да и вообще нужен ли он вам. Мое знакомство с данной технологией началось с изучения гипервизоров — я постоянно натыкался на термин VxLAN, но что это и как работает не знал. В один прекрасный день я решил все-таки прочитать, что это за зверь. Прочитав пару-тройку статей, я усвоил для себя основные аспекты работы технологии и облегченно выдохнул, прочитав, что данная технология — удел гипервизоров и к транспорту имеет косвенное отношение (хотя, как оказалось позже отношение VxLAN к транспорту имеет самое, что ни на есть прямое). После чего про технологию благополучно забыл и вернулся я к ней снова только через год, когда начал погружаться в EVPN — большинство статей и мануалов были именно о симбиозе EVPN и VxLAN. Литературы по данной технологии много, особенно если вы владеете английским. Я же попробую в данной статье рассказать об основах работы данной технологии и показать на практике — как это настраивается и работает. Но начнем с MPLS…
Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии7

Работающий трансформатор с деревянным сердечником, или простая грозозащита для компьютеров и телевизоров

Время на прочтение10 мин
Количество просмотров97K
У великого русского поэта Тютчева не было компьютера и сети, иначе он бы не писал: «Люблю грозу в начале мая». В последние годы актуальность грозозащит стала поменьше — оптика, беспроводные технологии, но все же все же.
Если к вам в квартиру заходит кабель, и этот кабель — не оптический, гроза представляет угрозу для вашего оборудования.

Если у вас есть телевизор и он подключен к общей сети — кабельное ТВ, коллективная антенна (вдруг) — к чему угодно, что находится за пределами квартиры, гроза представляет угрозу для телевизора, (причем даже бОльшую, чем для компьютера).
Будем защищаться
Всего голосов 129: ↑125 и ↓4+121
Комментарии78

Спецификаторы, квалификаторы и шаблоны

Время на прочтение15 мин
Количество просмотров24K
template<class T>
static inline thread_local constexpr const volatile T x = {};

Такое количество ключевых слов введет в ступор любого неподготовленного разработчика. Но на C++ Russia 2019 Piter Михаил Матросов (mmatrosov) разложил по полочкам квалификаторы и спецификаторы при объявлении переменных и функций.

Мы подготовили для вас текстовую версию доклада, чтобы вы могли в любой момент вернуться и изучить шпаргалки Михаила.
Всего голосов 31: ↑29 и ↓2+27
Комментарии9

Быстрый роутинг и NAT в Linux

Время на прочтение6 мин
Количество просмотров47K
По мере исчерпания адресов IPv4, многие операторы связи столкнулись с необходимостью организовывать доступ своих клиентов в сеть с помощью трансляции адресов. В этой статье я расскажу, как можно получить производительность уровня Carrier Grade NAT на commodity серверах.
Читать дальше →
Всего голосов 47: ↑47 и ↓0+47
Комментарии33
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Backend Developer, System Software Engineer
Lead
От 8 192 $
Git
C++ Boost
Multiple thread
Http
Linux
High-loaded systems
OOP
TCP
Network technologies
Linux administration