Обновить
16K+
Дмитрий Бойко@DmitryNBoykoread⁠-⁠only

Full Stack Developer

-42
Рейтинг
4
Подписчики
Отправить сообщение

Как быстро встроить MAX в свои системы

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели19K

MAX в России постепенно превращается не просто в «ещё один мессенджер», а в канал, который всё чаще рассматривают как рабочую точку контакта с пользователем: для уведомлений, сервисных сообщений, внутренних ботов и групповых сценариев. И как только компания доходит до реальной интеграции, почти всегда начинается знакомая история: сначала один скрипт на отправку уведомлений, потом второй на обработку входящих сообщений, потом отдельная логика для групп, потом ещё пара «временных» костылей. Через месяц это уже не интеграция, а набор хрупких связок, которые страшно трогать.

Именно эту проблему и решает max.botservice: один сервис, который закрывает сразу несколько задач. Он принимает события из MAX, умеет работать как бот в личных сообщениях и группах, хранит контакты, отдает HTTP API для внешних систем и позволяет использовать MAX как полноценный канал уведомлений без необходимости плодить десяток вспомогательных утилит.

Исходный код:https://github.com/DmitryBoyko/max-bot/tree/main

Читать далее

Детекция рейсов карьерных самосвалов методом шаблонной векторизации: архитектура, алгоритмы и инженерный анализ

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели6.9K

В горнодобывающей промышленности точный учёт рейсов карьерных самосвалов — ключевой фактор управления производительностью. Традиционные системы диспетчеризации (DISPATCH от Modular Mining, Wenco, российская «Карьер») опираются на GPS-зоны: система фиксирует въезд самосвала в зону экскаватора или пункта разгрузки и по факту пересечения геозон формирует рейс. Однако этот подход не улавливает аномалии внутри цикла — простои, заторы, сбои датчиков, затянувшиеся обеды — и не позволяет классифицировать тип рейса по его «форме».

Альтернативный подход реализован в системе «Симуляция и детекция рейсов» — серверно-клиентском приложении (Go + React + PostgreSQL), которое распознаёт рейсы в реальном времени путём шаблонной векторизации телеметрических данных скорости и веса. Вместо привязки к координатам система строит вектор из скользящего окна телеметрии и сравнивает его с заранее сохранёнными эталонными шаблонами через меру сходства (косинусное сходство или нормы L1/L2). Когда степень совпадения превышает порог — рейс считается обнаруженным.

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

Читать далее

АРХИТЕКТУРА ТЕРМОЯДЕРНОЙ УСТАНОВКИ НА ИЗОТОПЕ Гелий-3 С ПРЯМОЙ КОНВЕРСИЕЙ ЭНЕРГИИ И РЕЗЕРВИРОВАНИЕМ МОДУЛЕЙ (КОНЦЕПТ)

Уровень сложностиСложный
Время на прочтение13 мин
Охват и читатели6.2K

В статье рассматривается концепция безнейтронного термоядерного реактора (Aneutronic Fusion), использующего топливный цикл дейтерий–гелий-3 (D-3 He). Основное внимание уделено решению проблемы деградации материалов первой стенки и электростатических коллекторов через внедрение системы модульного горячего резервирования (схема 1+2), механизмов адаптивной ориентации защитных сегментов (Flip-Flop) и иерархической системы управления с распределенной автономностью узлов.

Читать далее

Расчет веса перевозимого груза самосвала

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели5.1K

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

Три основных типа карьерных самосвалов в России

В российской добывающей отрасли применяются три доминирующих класса машин, каждый из которых имеет собственные особенности измерения веса:

Классические карьерные самосвалы с жёсткой рамой, такие как БелАЗ 7555–7513 и CAT 777–793, оснащаются гидропневматической подвеской с датчиками давления. Эти датчики служат для оценки веса полезной нагрузки через измерение давления в подвеске. Однако их данные сильно зависят от темпа движения и амплитуды раскачки кузова, что создает шумы и неточности при динамическом движении. В качестве инженерного дополнения к измерению веса для таких моделей важно применять алгоритмы фильтрации и компенсации динамических колебаний, а также дополнять данные от датчиков давления весовыми сенсорами, установленными на шасси, для повышения точности оценки нагрузки и снижения влияния факторов движения. Для БелАЗ и CAT, реализованы высокоточные системы взвешивания с погрешностью в диапазоне до ±0,1–1%. Однако, из-за сильных вибраций и динамических пиков в процессе работы, количество данных с аномальными колебаниями составляет примерно 20–35%. Благодаря строгой конструкции и стабильной гидравлической и электронной схемам, такие системы обеспечивают относительно меньшую дисперсию и более предсказуемую точность, особенно при использовании фильтров и компенсационных алгоритмов.

Читать далее

Сравнение двух функций в Go с указателями и без

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели3.5K

Меня часто спрашивают, почему указатели лучше? Шёрт побери, вот почему!

Описание функций меняющих местами значения переменных:

1. Функция с указателями:

Читать далее

Функция скользящего среднего для регенерации на графике

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели2.8K

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

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

Ниже я привожу код для C# который можно copy/paste для вашего использования.

Особенностями подхода является два момента:

Читать далее

10 практических применений языка Go

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели5.8K

Go — это современный язык программирования, разработанный Google. Он обладает высокой производительностью, простотой использования и подходит для широкого спектра задач, от веб-разработки до системного программирования.

Ключевые особенности Go:

Высокая производительность: Go компилируется в машинный код, обеспечивая высокую скорость выполнения.

Простота использования: Синтаксис Go ясный и лаконичный, что упрощает процесс обучения и разработки.

Конкурентность: Go предоставляет встроенные средства для эффективного выполнения параллельных задач.

Статическая типизация: Статическая типизация помогает предотвращать ошибки во время компиляции.

Стандартная библиотека: Богатая стандартная библиотека Go предоставляет инструменты для различных задач, включая сетевое программирование, обработку данных и многое другое.

Читать далее

10 самых необычных вопросов на собеседовании по C#

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

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

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

Читать далее

10 сложных вопросов по C# для собеседования и подробные ответы на них

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели31K

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

Читать далее

Как сбежать из Симуляции

Уровень сложностиСложный
Время на прочтение55 мин
Охват и читатели34K

Многие исследователи предполагают, что человечество смоделировано вместе с остальной частью физической вселенной - эта идея является Гипотезой Симуляции ( Simulation Hypothesis). В этой статье мы не оцениваем доказательства за или против такого утверждения, а вместо этого задаем научный вопрос по информатике, а именно: можем ли мы взломать такую симуляцию? Более формально вопрос можно было бы сформулировать так: могут ли обычно разумные агенты (люди), помещенные в виртуальные среды, найти способ побега из них? Учитывая, что современная литература по сдерживанию ИИ дает утвердительный ответ (хотя ИИ не может быть сдержан в долгосрочной перспективе), мы приходим к выводу, что должно быть возможно вырваться из симуляции, по крайней мере, с помощью сверхразумного ИИ (AGI). Напротив, если побег из симуляции невозможен, сдерживание ИИ должно быть возможным. Наконец, в статье рассматриваются и предлагаются идеи для взлома симуляции и анализируются этические и философские вопросы такого начинания.

Побег >>>

Конвертация скрипта Bash в код С# для отправки СМС через usb модем HUAWEI E3372

Время на прочтение6 мин
Охват и читатели32K
Несколько моих проектов отправляют СМС и в последнее время после обновлений сервера, а может и ряда других причин, отправка СМС стала почти невозможной.

Старенький USB модем HUAWEI (марку не буду разглашать) перестал стабильно висеть на одном COM порту и временами переподключался на другие порты, совсем отключался и терял антенну.

Да и ситуация с библиотекой GSMComm была непонятной и болезненной.
GSMComm — это пакет для телефонов GSM, в основном для выполнения задач, связанных с SMS.
www.nuget.org/packages/GSMComm последня версия 1.21.1 от 10.10.2015 года.
Поиск по интерент показал, что есть возможность использовать встроенный функционал WEB API новых модемов HUAWEI, более эффективно, чем старый подход с AT командами реализованный в GSMComm.

Выяснилось, что есть прекрасный usb модем HUAWEI E3372, который почти хакерским способом способен отправлять СМС как из скрипта (Curl + Bash), так и из кода (Python, Perl), и, как я предположил, из C#.

Самое печальное, что компания HUAWEI не предоставляет никакой документации как это сделать и все найденные методы имели экспериментальный харктер и зависели от семейства устройств.

В общем, опираясь на найденный материал, не гарантирующий работу кода с момедом, был приобретен HUAWEI E3372.
Читать дальше →

Распределенные транзакции для разнородных баз данных в MS .NET

Время на прочтение6 мин
Охват и читатели19K
Недавно, на одном интервью меня спросили, а работал ли я с распределенными транзакциями, в том смысле, что нужно было делать вставку/обновление таких записей при условии:

  1. Одной транзакции.
  2. Это могут быть несколько разнообразных баз данных таких как Oracle, MS SQL Server и PostgreSQL.
  3. Отклик на CRUD операцию может быть значительным.
  4. Последовательность вставки не важна.

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

Самые популярные структуры данных

Время на прочтение9 мин
Охват и читатели33K
Что такое структура данных?
Проще говоря, структура данных — это контейнер, в котором хранятся данные в определенной компоновке (формате, или способе организации их в памяти). Эта «компоновка» позволяет структуре данных быть эффективной в одних операциях и неэффективной в других. Ваша цель — понять структуры данных, чтобы вы могли выбрать структуру данных, наиболее оптимальную для рассматриваемой проблемы.

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

Читать дальше →

Практическое использование шаблона Стратегия

Время на прочтение7 мин
Охват и читатели29K
Применение шаблонов (или паттернов) в объектно-ориентированном программировании проистекает из желания делать код проще, надежнее и не изобретать велосипед, а также позволить эффективно организовать совместную работу программистов с разным уровнем подготовки давая им единую основу для понимания исходного кода в концептуальных рамках бизнес-логики приложения. Это означает, что изучение шаблонов проектирования является ключевым этапом в профессиональном росте программиста.

Как же правильно изучать шаблоны проектирования? Есть два подхода: скучный и доходчивый (Нравится моя классификация?). Скучный подход подразумевает академическое изучение списка паттернов с использованием абстрактных примеров. Лично я предпочитаю, противоположный – доходчивый подход, когда постановка задачи на относительно высоком уровне формулировки позволяет выбрать шаблоны проектирования. Хотя вы можете комбинировать оба подхода.

Итак, поехали?
Читать дальше →

Ускоряемся в Entity Framework Core

Время на прочтение15 мин
Охват и читатели79K

Не будь жадиной!


При выборке данных выбирать нужно ровно столько сколько нужно за один раз. Никогда не извлекайте все данные из таблицы!

Неправильно:

using var ctx = new EFCoreTestContext(optionsBuilder.Options);                
// Мы возвращаем колонку ID с сервера, но никогда не используем и это неправильно!
ctx.FederalDistricts.Select(x=> new { x.ID, x.Name, x.ShortName }).ToList();

Правильно:

using var ctx = new EFCoreTestContext(optionsBuilder.Options);  
// Мы не возвращаем колонку ID с сервера и это правильно!
ctx.FederalDistricts.Select(x=> new { x.Name, x.ShortName }).ToList();
ctx.FederalDistricts.Select(x => new MyClass { Name = x.Name, ShortName = x.ShortName }).ToList();

Читать дальше →

Информация

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