C++20 в bare-metal программировании, работа с регистрами микроконтроллеров Cortex-M
Сегодня я хотел бы обсудить тему, с которой так или иначе сталкивался почти каждый программист встраиваемых устройств без использования настоящих операционных систем, а именно прямое управление периферийными узлами микроконтроллера. A конкретнее, я хотел бы обсудить повышение безопасности при управлении периферийными модулями без потери эффективности, гибкости и читаемости.
Кто-то может подумать, что данная тема уже рассказана вдоль и поперек в многочисленных мануалах по проектам для STM32 (например, хабр). Те же, кто уже понял о чем будет идти речь, может подумать что это полное повторение уже существующих подобных идей (например эта и другие статьи автора зародили во мне интерес к этой теме несколько лет назад, а вот в языке программирования Rust большинство ящиков/крейтов Cortex-M/PAC уже используют проверками безопасности при манипулировании регистрами). Однако, не нужно спешить с выводами. Я полагаю, что могу дать интересную и полезную информацию для обоих вышеперечисленных категорий читателей.
Перед началом, тему того 'Зачем вообще лезть на уровень регистров, если каждый производитель дает HAL/BSP?' я оставлю вне рамок данной статьи. Я предполагаю, что если читатель открыл статью, то ему уже интересна данная тема, и мне не столь важно почему.
https://habr.com/ru/articles/819499/
#cpp@bookflow
👉 @Bookflow
Сегодня я хотел бы обсудить тему, с которой так или иначе сталкивался почти каждый программист встраиваемых устройств без использования настоящих операционных систем, а именно прямое управление периферийными узлами микроконтроллера. A конкретнее, я хотел бы обсудить повышение безопасности при управлении периферийными модулями без потери эффективности, гибкости и читаемости.
Кто-то может подумать, что данная тема уже рассказана вдоль и поперек в многочисленных мануалах по проектам для STM32 (например, хабр). Те же, кто уже понял о чем будет идти речь, может подумать что это полное повторение уже существующих подобных идей (например эта и другие статьи автора зародили во мне интерес к этой теме несколько лет назад, а вот в языке программирования Rust большинство ящиков/крейтов Cortex-M/PAC уже используют проверками безопасности при манипулировании регистрами). Однако, не нужно спешить с выводами. Я полагаю, что могу дать интересную и полезную информацию для обоих вышеперечисленных категорий читателей.
Перед началом, тему того 'Зачем вообще лезть на уровень регистров, если каждый производитель дает HAL/BSP?' я оставлю вне рамок данной статьи. Я предполагаю, что если читатель открыл статью, то ему уже интересна данная тема, и мне не столь важно почему.
https://habr.com/ru/articles/819499/
#cpp@bookflow
👉 @Bookflow
👍5🤔2❤1🔥1
Базы данных классифицируются в первую очередь по методу организации данных, способу их поиска и хранения, производительности при доступе к данным и способности распределять данные по нескольким узлам для повышения доступности и устойчивости
#db@bookflow
👉 @Bookflow
#db@bookflow
👉 @Bookflow
👍3
RustDesk
Клиентское программное обеспечение для удаленного рабочего стола с открытым исходным кодом, написанное на Rust.
Работает "из коробки", настройка не требуется. Отличная альтернатива TeamViewer и AnyDesk! Вы полностью контролируете свои данные, не беспокоясь о безопасности.
Вы можете использовать сервер разработчика или настроить свой собственный сервер или написать свой собственный сервер для рандеву/ретрансляции
https://github.com/rustdesk/rustdesk
#github@bookflow
👉 @Bookflow
Клиентское программное обеспечение для удаленного рабочего стола с открытым исходным кодом, написанное на Rust.
Работает "из коробки", настройка не требуется. Отличная альтернатива TeamViewer и AnyDesk! Вы полностью контролируете свои данные, не беспокоясь о безопасности.
Вы можете использовать сервер разработчика или настроить свой собственный сервер или написать свой собственный сервер для рандеву/ретрансляции
https://github.com/rustdesk/rustdesk
#github@bookflow
👉 @Bookflow
👍6❤1🥰1
Оптимизация Go: как повысить скорость и эффективность кода
Меня зовут Макс, я Go-разработчик в компании SimbirSoft. Язык Go (Golang) стремительно набирает популярность, он всё чаще внедряется в существующие программные решения, а также встречается в стеке новых проектов. Высокая производительность и скорость работы – его главные преимущества, поэтому для реализации бизнес-задач он подходит как нельзя кстати. Go легко поддерживается и отлично годится для создания MVP, из-за чего востребованность в нём растёт.
Но чтобы этот язык программирования был действительно производительным, разработчикам необходимо учитывать некоторые тонкости работы с ним. Иначе ваше приложение станет таким же медленным, как айтишник без чашки кофе :) В этой статье мы с вами на примерах разберём часто возникающие ситуации при работе с Go, а также рассмотрим приёмы, которые позволят повысить производительность кода. Надеюсь, разработчики уровня джуниор и мидл смогут почерпнуть для себя что-то полезное.
https://habr.com/ru/companies/simbirsoft/articles/819015/
#golang@bookflow
👉 @Bookflow
Меня зовут Макс, я Go-разработчик в компании SimbirSoft. Язык Go (Golang) стремительно набирает популярность, он всё чаще внедряется в существующие программные решения, а также встречается в стеке новых проектов. Высокая производительность и скорость работы – его главные преимущества, поэтому для реализации бизнес-задач он подходит как нельзя кстати. Go легко поддерживается и отлично годится для создания MVP, из-за чего востребованность в нём растёт.
Но чтобы этот язык программирования был действительно производительным, разработчикам необходимо учитывать некоторые тонкости работы с ним. Иначе ваше приложение станет таким же медленным, как айтишник без чашки кофе :) В этой статье мы с вами на примерах разберём часто возникающие ситуации при работе с Go, а также рассмотрим приёмы, которые позволят повысить производительность кода. Надеюсь, разработчики уровня джуниор и мидл смогут почерпнуть для себя что-то полезное.
https://habr.com/ru/companies/simbirsoft/articles/819015/
#golang@bookflow
👉 @Bookflow
👍3🔥1🍌1
Если на каждой ноде Kubernetes кластера нужно запустить контейнер, то какой ресурс Kubernetes вам подойдет?
DaemonSet является контроллером, основным назначением которого является запуск подов на всех нодах кластера. Если нода добавляется/удаляется — DaemonSet автоматически добавит/удалит под на этой ноде.
DaemonSet подходят для запуска приложений, которые должны работать на всех нодах, например — екпортёры мониторинга, сбор логов и так далее.
#devops@bookflow
👉 @Bookflow
DaemonSet является контроллером, основным назначением которого является запуск подов на всех нодах кластера. Если нода добавляется/удаляется — DaemonSet автоматически добавит/удалит под на этой ноде.
DaemonSet подходят для запуска приложений, которые должны работать на всех нодах, например — екпортёры мониторинга, сбор логов и так далее.
#devops@bookflow
👉 @Bookflow
👍7
Joshuto
ranger-подобный терминальный файловый менеджер, написанный на Rust
https://github.com/kamiyaa/joshuto
#rust@bookflow
👉 @Bookflow
ranger-подобный терминальный файловый менеджер, написанный на Rust
https://github.com/kamiyaa/joshuto
#rust@bookflow
👉 @Bookflow
👍3❤1🥰1
9 способов обмена массивом Numpy между процессами
В Python можно передавать массивы numpy между процессами.
Существует множество способов передать массив numpy между процессами, например, как аргумент функции, как наследуемую глобальную переменную, через очередь или трубу, как ctype Array и RawArray, файл с отображением памяти, массив с поддержкой SharedMemory или через менеджер.
https://superfastpython.com/numpy-share-array-processes/
#python@bookflow
👉 @Bookflow
В Python можно передавать массивы numpy между процессами.
Существует множество способов передать массив numpy между процессами, например, как аргумент функции, как наследуемую глобальную переменную, через очередь или трубу, как ctype Array и RawArray, файл с отображением памяти, массив с поддержкой SharedMemory или через менеджер.
https://superfastpython.com/numpy-share-array-processes/
#python@bookflow
👉 @Bookflow
👍4🔥1
👍4🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Будьте осторожны при подсчете строк из outer join
Это происходит потому, что
Убедитесь, что
#db@bookflow
👉 @Bookflow
COUNT (*) => строки в группе; всегда хотя бы однаCOUNT ( inner_tab_col ) => строки из внутренней таблицы; ноль, если нет совпадений.Это происходит потому, что
COUNT ( col ) добавляет только ненулевые значения.Убедитесь, что
inner_tab_col является обязательным!#db@bookflow
👉 @Bookflow
👍5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Mapwidget
Пользовательские виджеты Jupyter для создания интерактивных 2D/3D-карт с помощью популярных библиотек JavaScript с двунаправленной связью, таких как Cesium, Mapbox, MapLibre, Leaflet и OpenLayers
https://github.com/opengeos/mapwidget
#github@bookflow
👉 @Bookflow
Пользовательские виджеты Jupyter для создания интерактивных 2D/3D-карт с помощью популярных библиотек JavaScript с двунаправленной связью, таких как Cesium, Mapbox, MapLibre, Leaflet и OpenLayers
https://github.com/opengeos/mapwidget
#github@bookflow
👉 @Bookflow
👍3
Высокоскоростная передача пакетов в Go: От net.Dial до AF_XDP
Недавно я разработал программу на Go, которая отправляет ICMP ping-сообщения на миллионы IP-адресов. Естественно, я хотел, чтобы это происходило как можно быстрее и эффективнее. Это побудило меня изучить различные методы взаимодействия с сетевым стеком и быстрой отправки пакетов! Это было увлекательное путешествие, поэтому в этой статье я поделюсь некоторыми своими наработками и задокументирую их для себя в будущем :) Вы увидите, как мы достигаем 18,8 Мбит/с, используя всего 8 ядер. На Github есть репозиторий с примерами кода, что облегчает процесс.
https://toonk.io/sending-network-packets-in-go/
#golang@bookflow
👉 @Bookflow
Недавно я разработал программу на Go, которая отправляет ICMP ping-сообщения на миллионы IP-адресов. Естественно, я хотел, чтобы это происходило как можно быстрее и эффективнее. Это побудило меня изучить различные методы взаимодействия с сетевым стеком и быстрой отправки пакетов! Это было увлекательное путешествие, поэтому в этой статье я поделюсь некоторыми своими наработками и задокументирую их для себя в будущем :) Вы увидите, как мы достигаем 18,8 Мбит/с, используя всего 8 ядер. На Github есть репозиторий с примерами кода, что облегчает процесс.
https://toonk.io/sending-network-packets-in-go/
#golang@bookflow
👉 @Bookflow
👍8🔥1
KrakenD
Это расширяемый, сверхвысокопроизводительный API-шлюз, который поможет вам без труда внедрить микросервисы и безопасные коммуникации. KrakenD прост в эксплуатации и управлении и масштабируется без единой точки отказа.
https://github.com/krakend/krakend-ce
#devops@bookflow
👉 @Bookflow
Это расширяемый, сверхвысокопроизводительный API-шлюз, который поможет вам без труда внедрить микросервисы и безопасные коммуникации. KrakenD прост в эксплуатации и управлении и масштабируется без единой точки отказа.
https://github.com/krakend/krakend-ce
#devops@bookflow
👉 @Bookflow
👍3
Пишем калькулятор на Rust с GUI
Зачем еще один калькулятор? Да не зачем, просто как тестовый проект для рассмотрения GUI-библиотеки.
Изначально я хотел попробовать такие крейты, как GPUI, Floem и Xilem, но первая, кажется, пока работает только под MacOS и Linux, вторая не позволяет установить иконку окну и кушает оперативы побольше Webview в Tauri, а до третьей я так и не добрался, узнав об Slint.
Об Slint есть всего несколько новостных постов на Хабре, поэтому, возможно, вам будет интересно посмотреть, что это такое.
https://habr.com/ru/articles/804655/
#rust@bookflow
👉 @Bookflow
Зачем еще один калькулятор? Да не зачем, просто как тестовый проект для рассмотрения GUI-библиотеки.
Изначально я хотел попробовать такие крейты, как GPUI, Floem и Xilem, но первая, кажется, пока работает только под MacOS и Linux, вторая не позволяет установить иконку окну и кушает оперативы побольше Webview в Tauri, а до третьей я так и не добрался, узнав об Slint.
Об Slint есть всего несколько новостных постов на Хабре, поэтому, возможно, вам будет интересно посмотреть, что это такое.
https://habr.com/ru/articles/804655/
#rust@bookflow
👉 @Bookflow
👍4❤2🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
View Transitions — это подарок 🎁
Один набор CSS keyframes и одна локальная пользовательская переменная для
#frontend@bookflow
👉 @Bookflow
Один набор CSS keyframes и одна локальная пользовательская переменная для
::view-transition-old/new(body) 🚀#frontend@bookflow
👉 @Bookflow
👍2
Совет по чистому коду в Python
Избегайте использования слишком большого количества атрибутов для одного объекта. Старайтесь объединять их в группы, чтобы повысить связность, уменьшить количество связей и улучшить читаемость.
#python@bookflow
👉 @Bookflow
Избегайте использования слишком большого количества атрибутов для одного объекта. Старайтесь объединять их в группы, чтобы повысить связность, уменьшить количество связей и улучшить читаемость.
#python@bookflow
👉 @Bookflow
❤6🔥1🤨1
Авторизация в React - базовые сведения
Вэтой статье я хочу рассказать об архитектуре приложения, реализующего функцию аутентификации и авторизации. Статья построена на минималистичном примере. Тут главное понять концепцию. Сделав это, приложение можно дополнить новым функционалом и включить в любое своё приложение.
https://danshin.ms/simple-login-react-app/
#react@bookflow
👉 @Bookflow
Вэтой статье я хочу рассказать об архитектуре приложения, реализующего функцию аутентификации и авторизации. Статья построена на минималистичном примере. Тут главное понять концепцию. Сделав это, приложение можно дополнить новым функционалом и включить в любое своё приложение.
https://danshin.ms/simple-login-react-app/
#react@bookflow
👉 @Bookflow
👍1🎉1