Некоторое количество оборудования в домашнем хозяйстве имеет довольно похожую структуру. В нем есть мотор, пользовательский интерфейс в виде кнопок и дисплея, управление подсветкой и местным освещением, электромеханические элементы в виде замков, соленоидов, клапанов, реле и множество защитных датчиков и выключателей. Рынок полон предложений для реализации системы управления для всего этого. Но дело в том, что меняются возможности индустрии разработки электроники, ценовые балансы и запросы потребителей. Сделать свой универсальный ПЛК иной раз проще чем приобрести и освоить экосистему стороннего производителя.
Пользователь
Value: библиотека реактивного программирования для Dart
Статья посвящена моей реализации идей реактивного программирования в Dart и Flutter. Рассказываю про разработанную мною библиотеку Value, которая в ряде случаев хорошо подходит для замены Stream, ValueNotifier и rxdart.
Tarantool: как избавиться от «зоопарка технологий» с помощью потоков событий
Каждый проект рано или поздно обрастает разными технологиями, часть из которых может выполнять схожие или даже одинаковые функции. Наряду с развитием продукта это несет и скрытые трудности, в первую очередь для команды, которая должна поддерживать и развивать весь «зоопарк».
Меня зовут Иван Банников, я ведущий разработчик VK Tech. В этом материале я расскажу об основных предпосылках разрастания используемого стека, а также на примере IoT-платформы, которую мы поддерживали, поделюсь опытом избавления от «зоопарка технологий» в области обработки сообщений.
Исправление прикуса и имплантация зубов, в чём связь?
Приветствую, дорогие друзья и недруги! Я написал много статей на тему зубов мудрости, имплантации и костных пластик. Рассказывал про комплексный подход в стоматологии и раскрывал голую правду. Сегодня же, я расскажу вам про важность ортодонтического лечения до протезирования отсутствующих зубов с использованием дентальных имплантатов.
Разработка мультиплеерной игры на Dart+Flutter
Разработка простой мультиплеерной игры с использованием языка программирования dart на сервере и flutter+flame на клиенте. Небольшой гайд от любителя игростроя.
Пишем свою мини-СУБД на Golang (Часть 1)
В этой статье, мы начнем подготовку к созданию своей небольшой базы данных, используя Go и его стандартную библиотеку.
Зоопарк трансформеров: большой обзор моделей от BERT до Alpaca
Авторский обзор 90+ нейросетевых моделей на основе Transformer для тех, кто не успевает читать статьи, но хочет быть в курсе ситуации и понимать технические детали идущей революции ИИ.
Простая чистая архитектура
Привет, Хабр! Зачем нужна архитектура и какие цели она должна выполнять?
Архитектура должна помогать нам писать максимально гибкий код, который мы сможем расширять с приходом новых функций, а не переписывать с нуля.
FaceNet: Универсальный эмбеддинг для распознавания и кластеризации лиц
Несмотря на значительные достижения в области распознавания лиц, эффективная реализация проверки и распознавания лиц в масштабе представляет серьезные трудности для существующих подходов. В данной работе представляется система под названием FaceNet, которая непосредственно обучается отображению изображений лиц в компактное евклидово пространство, где расстояния напрямую соответствуют мере сходства лиц.
Генерируем X509 сертификат с OpenSSL C++
В данной статья я хочу рассказать, как работать с X509 сертификатом используя OpenSSL 3.0.0 в С++, начиная от генерации своего сертификата и заканчивая его валидацией.
Так как информации в интернете по этой теме почти нет, то все, что я вам расскажу, я узнал исходя из своего печального опыта работы с этой библиотекой. Я очень надеюсь, что эта статья окажется вам полезной и сможет сохранить ваше время.
В данной статье, я не буду рассказывать вам, что такое X509 сертификат, надеюсь, что это вы уже знаете, а если нет, то ссылка на статью вот тут.
Репликация в PostgreSQL: Write-Ahead Logging (WAL) и Logical Replication
Репликация PostgreSQL с опережающей записью (WAL) — ключевая концепция в высоконагруженных архитектурах, поскольку она позволяет создавать высокодоступные и отказоустойчивые системы баз данных.
Электронный конструктор, не бьющий током
Дайте угадаю: вы в детстве заворожённо рассматривали печатные платы? Вам было любопытно узнать, как работает этот мини-город из разноцветных деталек? Возможно, у вас был опыт сборки электронных схем по книгам Борисова и Свореня? Советский сорокаваттный паяльник, кусочек канифоли в спичечном коробке? А ещё штаны с намертво влипшей в ткань каплей припоя?
Современные программные средства иллюстрируют процессы, происходящие в электрических цепях, с недосягаемыми для радиолюбителей недавнего прошлого наглядностью и интерактивностью. Они визуализируют протекающие по схеме токи и показывают напряжения в её различных частях. Это снижает порог понимания для людей, которым сложно даются абстрактные знания и язык формул.
Делаем новый контроллер сервоприводов
Каждый год мы приступаем к созданию нового контроллера взамен какого-либо старого. Пришла очередь контроллера сервопривода. Нужно больше универсальности, технологичности, удобства эксплуатации и инсталляции, больше новых программных технологий, протоколов и готовность к ИИ.
Разбираемся что MySQL пишет на диск и зачем [часть 2]
Это вторая часть моих копаний во внутренностях MySQL. В первой части [habr] были затронуты запись страниц данных на диск (с промежуточной записью в DoubleWrite buffer) и запись бинлогов (с батчингом в виде group commit). В этой части я расскажу про redo log и как все части MySQL координируются для достижения надежной работы.
Есть ли жизнь без RTTI: пишем свой dynamic_cast
В современном С++ осталось не так много вещей, которые не подходят под парадигму "Не плати за то, что не используешь". Одна из них – dynamic_cast. В рамках данной статьи мы разберёмся, что с ним не так, а когда поймём – попробуем предложить альтернативу.
Пробую российский софт для умного дома. Он правда работает?
Всем привет! С вами снова Дмитрий, не программист. В прошлый раз я установил на Wiren Board 7 визуальную среду Node-RED, не умерев в консоли. И даже проверил четыре популярных сценария: ноду Debug, мастер-выключателя, включения вытяжки при превышении концентрации CO₂, приборной панели (dashboard). Позднее я рассмотрел еще три сценария: темной комнаты, дневного/ночного освещения, термостата для теплого пола и батарей.
Но умный дом можно собрать не только на визуальной среде Node-RED. Российские разработчики давно предлагают программный пакет Sprut.hub для домашней автоматизации. Сценарии можно задавать как через фирменную визуальную среду, так и скриптами js. В Sprut.hub поддерживается большое число различных устройств, а некоторые пользователи считают его даже удобнее и проще Node-RED. Значит, настало время его попробовать! Более подробную информацию о Sprut.hub можно почерпнуть здесь.
Книга «Искусственный интеллект и компьютерное зрение. Реальные проекты на Python, Keras и TensorFlow»
Кем бы вы ни были — инженером-программистом, стремящимся войти в мир глубокого обучения, опытным специалистом по обработке данных или любителем, мечтающим создать «вирусное» приложение с использованием ИИ, — наверняка задавались вопросом: с чего начать? Практические примеры из этой книги научат вас создавать приложения глубокого обучения для облачных, мобильных и краевых (edge) систем. Если вы хотите создать что-то необычное, полезное, масштабируемое или просто классное — эта книга для вас.
Многолетний опыт исследований в области глубокого обучения и разработки приложений позволяют авторам научить каждого воплощать идеи в нечто невероятное и необходимое людям в реальном мире.
В этой книге вы:
• Узнаете, как обучать, настраивать и развертывать модели компьютерного зрения с помощью Keras, TensorFlow, Core ML и TensorFlow Lite.
• Изучите интересные проекты, в том числе Not Hotdog из сериала Silicon Valley и еще более 40 примеров.
• Смоделируете беспилотный автомобиль в видеоигровом окружении и создадите миниатюрную версию, использовав технологию обучения с подкреплением.
• Научитесь использовать перенос обучения для быстрого обучения моделей.
• Найдете более 50 практических советов по повышению точности и скорости модели, отладке и масштабированию до многомиллионной аудитории.
Пять лет страха врачей: как мы это разбирали и сколько это стоило пациентке
Вводная: пациентка 32 лет, с сильным страхом перед стоматологами. Развился он всего пять лет назад, потому что некие моральные уроды лечили её без седации и анестезии. И не обращали внимания на крики и попытки выбраться из кресла, продолжая упорно лечить сверлом. Ну вот бывают иногда и такие врачи, да. У неё развилась серьёзная психологическая травма и панический страх врачей. Заодно слегка перекосило лицо, потому что там лечили удалением, а без зубов ровной улыбки не будет. Зубов осталось 20 штук, причём некоторые она потеряла при получении травмы, а некоторые сами отвалились за эти пять лет.
Она нам так и сказала: «Я хочу полностью восстановить зубы. Но я очень боюсь». Мой бесконечно добрый коллега Антон восхитился её смелостью и предложил нам решить прикладную задачу, как не пугать пациентку. Я сразу предложил лишить её сознания. Проверенный метод. Рекомендую. Нам, хирургам, очень нравится. Серьёзно мог напугать только счёт, по современным ценам там работы минимум на 4–5 миллионов российских рублей. Так что просто знайте, что бояться терапевта дорого. Бояться хирурга ещё дороже.
Фото для затравки — так наша пациентка стала выглядеть после лечения. Сможете найти новые зубы?
Особого мяса и крови в этом посте не будет, но, если вам неприятно смотреть на фото ротовой полости, сейчас будет немного неприятно.
Обзор всего доступного в С++ type erasure
Техника стирания типов - type erasure - известна довольно давно, хоть её и долго не замечали. Тем не менее кажется только в последнюю декаду она стала из игрушки и костылей превращаться в мощный инструмент, использующийся каждый день в разработке.
Если спросить современного С++ разработчика какие примеры type erasure он видел / использовал, то вероятно он ответит что то про std::function и возможно про std::any, но это лишь малая часть всех применений этого замечательного инструмента!
В статье я постараюсь описать все возможные виды type erasure в современном С++, но начать стоит с определения.
Стирание типов - потеря части информации о типе так, чтобы получившийся после "стирания всего ненужного" тип был общим для всех стираемых, а значит его можно будет использовать в рамках системы типов, опираясь только на оставшуюся после стирания информацию.
Начнём с того, что было уже в С и о чём часто забывают говоря об erasure
void* - мы стёрли всю информацию о типе под указателем, не можем ничего прочитать, но с другой стороны доступ к данным у нас абсолютно без оверхеда! Достаточно угадать тип. Часто внутри именно на этом и построены другие более сложные стирания. Ну и конечно примерно в эту труху из байтов компилятор перетирает всю нашу систему типов в процессе работы.
Кстати, насчёт байтов:
std::byte (since C++17) / unsigned char / char так исторически сложилось, что в С все использовали чары для работы с сырыми байтами, поэтому для них в языке С++ исключение и указатель на них можно приводить к указателю на любой другой тип. Это не обходится без последствий и иногда из-за этого строки теряют некоторые оптимизации, поэтому сначала добавили std::byte, а потом начали потихоньку заменять чары (char8_t since C++20), но это уже совсем другая история. В контексте стирания типов нам важно, что мы получили способность читать данные из стёртого типа, а составив массив мы получим ещё и верхнюю границу размера типа, что конечно немного, но с void и так нельзя.
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность