Pull to refresh
1
0

Software engineer

Send message

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

Level of difficultyMedium
Reading time21 min
Views17K



Hello world!


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



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


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

Читать дальше →
Total votes 35: ↑30 and ↓5+25
Comments12

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

Level of difficultyHard
Reading time15 min
Views6.4K

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

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

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments6

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

Reading time6 min
Views19K

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

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

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments9

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

Reading time4 min
Views14K

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

Нам понадобится:
Total votes 33: ↑33 and ↓0+33
Comments6

Дзен Nim

Reading time21 min
Views8.7K

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

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

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

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

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

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

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

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

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

Читать далее
Total votes 18: ↑15 and ↓3+12
Comments29

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

Reading time5 min
Views63K

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

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

Научиться!
Total votes 22: ↑22 and ↓0+22
Comments23

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

Reading time11 min
Views29K

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

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments16

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

Reading time12 min
Views118K

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

Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments6

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

Reading time20 min
Views4.5K

Введение


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


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

Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments12

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

Reading time4 min
Views25K

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

Читать далее
Total votes 31: ↑31 and ↓0+31
Comments71

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

Reading time51 min
Views27K

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


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


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

Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments5

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

Reading time4 min
Views13K

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

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments4

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

Reading time54 min
Views124K

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

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

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

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

Читать далее
Total votes 127: ↑123 and ↓4+119
Comments210

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

Reading time9 min
Views36K

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


Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments23

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

Reading time28 min
Views9.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, которые (спойлер!) не всегда так хороши, как пишут в маркетинговых материалах.
Читать дальше →
Total votes 36: ↑36 and ↓0+36
Comments8

Введение в VxLAN

Reading time44 min
Views203K


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

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

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

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

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

Reading time15 min
Views24K
template<class T>
static inline thread_local constexpr const volatile T x = {};

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

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

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

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

Information

Rating
Does not participate
Registered
Activity

Specialization

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