Обновить

Разработка

Сначала показывать
Порог рейтинга

Работаем из Java с устройствами с serial-интерфейсом (COM и USB) без JNI — по TCP.

Раньше пользовались rxtx, затем jssc. После очередных крэшей JVM в коде нативных библиотек решил не выбирать замену, а отказаться от них полностью.

В качестве прокси serial-TCP можно взять ser2net или поэкспериментировать с socat, но я запилил свое простое (Rust, mio), под конкретную задачу:

  1. Запускается из основного приложения, свой процесс для каждого устройства

  2. Конфигурация через аргументы запуска и переменные окружения

  3. Завершает работу при отсутствии или отключении устройства (для USB), отключении или отсутствия подключения TCP-клиента

В качестве TCP-клиента Netty. Для интеграции с легаси данные читаются в кольцевой буфер ( OneToOneRingBuffer из agrona), а оттуда уже используются по месту в удобное время.

За счет неблокирующего чтения и использования epoll в mio и Netty минимальные задержки, моментальное оповещение о наличии данных (без Thread.sleep) и об отключении USB-устройства.

Задержки настолько меньше, что пришлось адаптировать кривой код, который не был готов к тому, что драйвер железного serial-порта в Linux отдает данные порциями по 8 байт. Решилось реализацией ByteToMessageDecoder, где возможно, а где нет — буферизацией на стороне прокси и отправкой по таймеру.

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

Бонус: можно работать с устройством, подключенным к другому системному блоку (например, для разработки) и использовать TCP-эмуляторы вместо реальных устройств без изменения кода интеграции.

Теги:
+2
Комментарии0

Достойный внимания proof-of-concept с GitHub: превращаем обычный ноутбук в устройство с сенсорным экраном без какой-либо электроники.

Что понадобится: маленькое зеркало, картон, клей. Бюджет — около 100 рублей

Как это работает:

  1. Зеркало крепится перед веб-камерой под углом так, чтобы камера смотрела вниз на экран

  2. Под острым углом обзора дисплей становится частично отражающим — камера видит палец и его отражение в стекле экрана

  3. Алгоритм анализирует расстояние между пальцем и отражением: если они соприкоснулись — регистрируется клик, есть зазор — курсор следует за пальцем без нажатия

Ограничения очевидны: зависимость от освещения, калибровка, точность. Но как демонстрация принципа — отлично

Репозиторий проекта: github.com/bijection/sistine

Ещё больше интересного и полезного из мира IT — в моём Telegram-канале

Теги:
+10
Комментарии2

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

Теги:
-1
Комментарии6

Представлена мойка для обуви с искусственным интеллектом. Модель Brolan ClearX использует «датчики» (хотя производитель не пояснил, какие именно) и ИИ для определения материала, из которого сделана ваша обувь, и выбора соответствующего цикла очистки и сушки, а также «технологию микро- и нанопузырьков» для дополнительной очистки. В ClearX планируют начать продажи мойки в середине 2026 года по цене от $500 до $800.

Теги:
-4
Комментарии2

💀 Когда диаграмма - источник истины, архитектура умирает первой.

📝 Аналитики, использующие PlantUML, Miro, Draw.io, Visio, Structurizer и прочее, забывают что знания в диаграммах - всё равно что код в скриншотах.

Знания должны храниться в виде взаимосвязанных элементов Модели, а диаграммы должны быть лишь их Проекциями. Разработчики ArchiVision.org это прекрасно понимают. Именно это делает систему ArchiVision значительно более эффективным инструментом для хранения знаний об ИТ системах чем все вышеназванные сервисы. При этом, генерируемые ею диаграммы живые, интерактивные и редактируемые. Система также поддерживает горячие клавиши для эффективной работы с моделью и диаграммами. Горячие клавиши позволяют рисовать быстрее, чем большинство перечисленных сервисов, тем более чем писать в PlantUML, Structurizer и аналогичных.

⚡ Ключевое отличия:
- 👎 в названных выше инструментах вы редактируете диаграммы;
- 👍 в ArchiVision вы работаете с моделью, а диаграммы - это её визуальная проекция, через которую тоже можно развивать модель.

🔄 За счет этого:
- 🧠 модель становится единственным источником истины;
- 🧱 диаграммы перестают быть хрупким артефактом;
- 🧩 структура модели позволяет устранять разночтения, дублирование и рассинхронизацию;
- ✅ система способна контролировать ввод и проверять полноту данных;
- 🧼 архитектура перестаёт расползаться по версиям и интерпретациям;
- ⌨️ навигация и горячие клавиши — это часть работы с моделью, а не удобство интерфейса.

🎥 Это видео - пример того, как сочетание модели, интерактивных диаграмм и горячих клавиш меняет процесс проектирования.

Ну а вот сам канал с видеоинструкциями находится здесь.

Теги:
-1
Комментарии2

Как я пошел на курсы ALT Linux и что из этого вышло.

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

Часть 1: Выбор пути. ALT против Astra и шок от цен.

Всё началось с желания проверить и структурировать знания по отечественным Linux-системам, с которыми приходится работать. Изначально смотрел в сторону Astra Linux, но глазам сразу бросилась разница в цене. ALT Linux предлагал обучение на более доступных условиях, а поскольку в работе я касаюсь обеих ОС, выбор стал очевидным. Начал изучать предложения на официальном сайте. И вот тут — первый удар. Стоимость курсов в некоторых учебных центрах заставила меня серьезно задуматься: «А нужна ли мне эта подготовка, если вроде бы и так всё знаю?» Но любопытство победило. Я решил тестировать, попробовать .

Часть 2: Организация. Поиск курсов и «неспешные» менеджеры.

Проскролив штук пять страниц с предложениями, я нашел несколько учебных центров с адекватными ценами. Начал переписку с менеджерами.

Совет №1: настройтесь на ожидание. Ответ пришел далеко не сразу, прошло несколько дней. Видимо, такова специфика. Но как только контакт состоялся, всё пошло быстро: договор, оплата, зачисление — и вот я уже студент.

Часть 3: Учёба.

Проверенный университетский формат. Мне прислали ссылку и дату старта. Формат напомнил университет: · Лекции — в записи. Смотрел в свободное время, очень удобно. Практика — раз в неделю, онлайн с преподавателем. На ней разбирали лабораторные и отвечали на вопросы. Первая ступень — это два курса: «Альтадмин 1» и «Альтадмин 2». Каждый длится около 4 недель и включает лекции, 4 лабы и итоговый тест. Всё прозрачно и понятно. Обратная связь и преподаватель: Здесь мне повезло. Преподаватель отвечал на вопросы на учебной платформе молниеносно. Чувство юмора у него было своеобразное, но это мелочь. Главное — экспертиза и готовность помочь были на высоте.

Часть 4: Впечатления и нюансы. Кому стоит идти?

В целом курсы «зашли», и я их рекомендую, но с важными оговорками.

Плюсы:

1. Структурированный, практический материал.

2. Быстрая обратная связь.

3. Гибкий формат (запись + живая практика).

Нюансы (о которых стоит знать):

1. Для полного новичка может быть мало теории. Если никогда не работали с Linux, придется активно гуглить. Но все ключевые задачи на практиках разбираются.

2. В лабах встречаются «подводные камни». Иногда в условиях всплывают неочевидные ошибки или недоговоренности. Но иногда о них предупреждают. Если у вас есть даже небольшой опыт, вы с ними справитесь. Для меня это даже стало плюсом — пришлось глубже копать.Иногда версии virtual box показывали сюрпризы,то версии дистрибутивов Linux. Воооообщем разбирался.

Часть 5: Разочарование в сертификации.

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

Итоги и выводы

1. Качество обучения — на хорошем уровне. Если нужны структура и практика, курсы отличные.

2. Целевая аудитория — не абсолютные новички, а те, кто хочет систематизировать опыт и разобрать задачи с экспертом.

3. Главный минус — невозможность для физлица получить полноценный вендорный сертификат после обучения. Уточняйте этот момент ДО оплаты курсов. Мой опыт получился познавательным, но с послевкусием. Надеюсь, мой рассказ поможет вам сделать выбор.

Теги:
+5
Комментарии8

Представлен открытый сервис SmartImage, который проверяет ресурсы в сети и ищет первоисточник картинки на базе нескольких алгоритмов поиска: SauceNao, IQDB, Ascii2D, trаce.mоe и других. Можно искать через перетаскивание и загрузку изображений, в текстовом поле, через буфер обмена, а также через командную строку.

Теги:
0
Комментарии0

Представлен открытый бесплатный сервис Maltrail для анализа входящего и исходящего трафика и вредоносов в нём. Проект умеет:

  • обнаруживать опасные домены, URL и IP;

  • распознавать вредительские HTTP User‑Agent‑строки;

  • выявлять актуальные инструменты атак на ПК;

  • высокий уровень сетевой безопасности без сложного развёртывания — сервис ставится за один клик;

  • может помочь найти вирусы, майнеры и прочий мусор, который обращается в сети.

Теги:
+4
Комментарии0

polluSensWeb теперь поддерживает 26 датчиков и веб-хуки

polluSensWeb
polluSensWeb

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

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

При включенных веб-хуках данные датчиков могут автоматически отправляться на внешний конечный пункт в режиме реального времени.
Это позволяет:

  • Пересылать измерения в базы данных.

  • Запускать оповещения или автоматизацию.

  • Отсылать данные в панели мониторинга, такие как Grafana.

  • Интегрироваться с платформами сообществ или пользовательскими API.

Открытый деплоймент
Проект на GitHub

Теги:
-1
Комментарии0

Клиент YouTube для Android под названием Download YT PRO весит всего 60 кБ (48 кБ в архиве). Приложение не требует Root-прав, убирает рекламу, даже спонсорскую. Видео не ставится на паузу, если свернуть приложение или заблокировать экран. Есть встроенный загрузчик видео и шортсов. Добавлен ИИ Gemini, который сразу сделает саммари даже часовых лекций и выдаст факты и советы по контенту.

Теги:
+3
Комментарии2

Podman, OCI и HEALTHCHECK.

Восстанавливал работоспособность одной репы и столкнулся с забавной особенностью.

Compose файлы, которые там есть — предельно простые. Есть цепочка сервисов, которые запускаются друг за другом. Первым стартует БД, никаких проблем. Вторым — сервис с API для загрузки данных в БД. Опять никаких проблем. Третьим — контейнер с wrk для нагрузочного тестирования. И вот тут загвоздка. Контейнер зависал в бесконечном состоянии "Created".

Подебажил. Оказалось, что при сборке образа API никак не фиксировался HEALTHCHECK! Podman по-умолчанию использует именно OCI спеку контейнеров, а не Docker, и там нет поддержки HEALTHCHECK. Из-за этого не срабатывал condition: service_healthy в Compose-файле, подвешивая контейнер с wrk.

Чтобы решить эту проблему, нужно явно указать формат спеки как Docker при сборке Dockerfile/Containerfile. У Podman это выглядит так:

podman build --format docker .

А вот так для Podman Compose:

podman-compose --podman-build-args='--format docker' build

Альтернативный вариант, если не хочется передавать аргумент каждый раз — установить переменную окружения:

export BUILDAH_FORMAT=docker

Вот такие пироги :)

Теги:
+9
Комментарии2

Почему стоит использовать protected в Angular компонентах?

Если вы используете в своих компонентах только public и private, вы упускаете возможность сделать архитектуру чище. Я предлагаю четко разделять ответственность членов класса.

Часто мы по инерции делаем public любые методы и свойства, которые нужны в шаблоне (HTML). Но public в TypeScript означает, что это публичный API компонента - к этим методам может получить доступ любой родительский компонент через @ViewChild.

Почему стоит использовать protected:

1. Явное намерение: protected сигнализирует, что метод предназначен для использования внутри класса или в его шаблоне, но не должен вызываться извне.

2. Защита от регрессии: Если другой разработчик попытается вызвать такой метод через @ViewChild, TypeScript выдаст ошибку. Это заставит его задуматься: «Действительно ли мне нужно делать этот метод публичным?» или «Может, стоит создать отдельный метод для API?».

3. Читаемость: Открывая код, вы сразу видите: public - для внешнего мира, protected - для шаблона, private - для внутренней логики сервисов и подписок.

Разделяйте Public API и внутреннюю логику шаблона - ваш код станет надежнее и понятнее.

@Component({
  selector: 'app-user-profile',
  template: `
    <!-- В шаблоне мы без проблем обращаемся к protected свойствам -->
    <div class="card">
      <h3>{{ userName() }}</h3>
      <button (click)="onUpdateClick()">Обновить</button>
        @if(isLoading()) {
          <div>Загрузка...</div>
        }
    </div>
  `
})
export class UserProfileComponent {
  // PRIVATE: Внутренняя логика. 
  // Не доступно ни в шаблоне, ни родительскому компоненту.
  private _userId = 123;

  // PROTECTED: Доступно только внутри класса и в ШАБЛОНЕ.
  // Идеально для переменных состояния UI и обработчиков событий.
  protected userName = signal('Алексей');
  protected isLoading = signal(false);

  protected onUpdateClick(): void {
    this.logAction();
    console.log('Кнопку нажали в шаблоне');
  }

  // PUBLIC: Публичный API компонента.
  // Только эти методы мы разрешаем вызывать родительскому компоненту.
  public resetState(): void {
    this.userName.set('Гость');
    this.isLoading.set(false);
  }

  private logAction(): void {
    console.log(`Action logged for userId: ${this._userId}`);
  }
}
Теги:
+2
Комментарии1

ChatGPT запускает Health сервис. 2 года, 260+ врачей. На базе того, что 230+М человек в неделю задают вопросы связанные со здоровьем. 

В начале прошлого года уже публиковали исследование сравнения GPT-4+ prompt engineering (без fine-tuning) и лицензированных терапевтов на 18 терапевтических виньетках (коротких кейсах) - Hatch et al. PLOS Mental Health. Оценивали не клинический эффект, а поддерживающие ответы. Ответы терапевтов писали 13 специалистов и 9 из них с PhD/PsyD. Далее 830 участников (широкая выборка, не только клиницисты) оценивали тексты вслепую.

В тесте Тьюринга на Угадай Кто Ответил различимость почти на уровне случайного выбора: 56,1% терапевта vs 51,2% ChatGPT

В post-hoc анализах модель чаще выглядела более “connecting”, более эмпатичной. И в целом по шкале общих факторов терапии (эмпатия, поддержка и т.д..) средняя оценка модели была немного выше (27,72 vs 26,12). Понятно, что тест на виньетках и это оставляет большие риски при обобщении модели и переводе в практику

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

Также любопытно будет влияние на статистику в ранней диагностике, запущенных случаях и ложных обращениях. AI-Health не новость, но ChatGPT имеет тот охват и соотвенно потенциальное влияние, которые могут влиять на крупные цифры

Теги:
-2
Комментарии0

Ближайшие события

Получаем доступ к нейросетям Google бесплатно на один месяц, включая Gemini 3, Nano Banana и Veo 3.1:

  • Заходим на сайт Google по этой ссылке.

  • Выбираем опцию «Choose your edition».

  • Выбираем «Start 30-day trial».

  • Заходим на сайт через свой Gmail.

Теги:
+3
Комментарии0

Учим Python — представлен интерактивный учебник, который работает прямо в браузере. Он поможет освоить базу буквально за пару месяцев:

  • Больше 100 заданий — основы для понимания основных концепций языка, беглого кодинга программ и выстраивания логики сервисов.

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

  • Есть текстовые материалы, вшитые YouTube-уроки, задачи, дополнительные лекции и контрольные вопросы.

Теги:
+2
Комментарии2

Энтузиаст добавил ИИ в умную камеру безопасности с помощью Raspberry Pi и протестировал её работу, переодевшись в вора.

Теги:
-2
Комментарии2

Нативный драйвер OLED-дисплеев для RP2040

Только что в один из своих проектов на микроконтроллере RP2040 понадобилось интегрировать графический дисплей для отображения погодной информации. Выбор пал на распространенные монохромные OLED-дисплеи разрешением 128х64 точки.

Из плюсов этих дисплеев для меня: высокая яркость и контрастность, простота интерфейса, дешевизна и высокая плотность информации в небольшом размере.

Контроллер у всех этих дисплеев стандартный - SH1106.

Свои проекты я пишу на С с использованием нативной Pico SDK. Поиск библиотеки для нужной платформы на С результатов не дал. Все, что на данный момент есть, - различные ардуино-библиотеки и микропитон.

В итоге было принято решение портировать на RP2040 одну из реализаций для STM32. Эта библиотека умеет рисовать графические примитивы в виде вертикальных и горизонтальных линий, прямоугольников пустых и заполненных, растровых изображений а также есть различные функции вывода текста и числовой информации.

Библиотека позволяет задать разрешение экрана а разворачивать экран на 90/180/270 градусов.

Изначально библиотека включала в 2 шрифта с размерами знакомест 5х7 и 7х10 точек.

Для своих целей я самостоятельно разработал большой шрифт 12х16 точек (на фото он).

Репозиторий проекта: https://gitflic.ru/project/svperchenko/sh1106_for_rp2040. Всем, кому надо, можно пользоваться.

Теги:
+8
Комментарии0

Пришлось недавно серьёзно повозиться со сложным обновлением, давно такое интересное не попадалось.

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

В семействе ЕРП регулярно случаются длинные обработчики обновления. Например, при переходе с 17 на 22 в регистр сведений "Реестр документов" добавили измерение с уникальным идентификатором, которое обработчик и заполняет - для всех записей. В моём случае записей было 9 млн, и выполнение обработчика занимало больше суток.

Если нужно сделать 1 шаг обновления, то не страшно - в течение этих суток пользователи могут работать. Но, во-первых, бывают обработчики, которые "отключают" отдельные виды документов или целые контуры учёта, вроде взаиморасчётов или резервов. Во-вторых, мне надо в одно технологическое окно обновить на 4 версии, поэтому ждать было нельзя.

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

И случилось чудо - обработчик выполнился часа за 4-5 (вместо 24+). Попробовал с другими обработчиками, которые столь же изолированные - результат по ускорению тот же.

Я думал, проблема в типовом распараллеливании, которое как-то не очень эффективно распределяет задания между потоками. Пошёл смотреть чужой опыт на партнёрке, нашёл относительно свежую тему (https://partners.v8.1c.ru/forum/t/2259464/m/2259464), где автор нашёл больше меня - дело и в распараллеливании, и в записи статистики. Правда, гарантированного и надёжного решения там найти не получилось - ребята из 1С сказали, что могут быть последствия, если просто отключить статистику. Но обещали что-нибудь придумать со скоростью обновлений.

А пока можете пользоваться тем же способом, что и я, коли возникнет схожая проблема.

https://t.me/ywhite

Теги:
+3
Комментарии1

Открытый проект SpotX позволяет бесплатно слушать Spotify без рекламы и со всеми Premium-опциями. Всё, что нужно — актуальная версия Spotify и запустить на ПК одну команду.

Для Windows пишем в Powershell: iex "& { $(iwr -useb 'https://raw.githubusercontent.com/SpotX-Official/SpotX/refs/heads/main/run.ps1') } -new_theme".

Для MacOS, пишем в Терминале: bash <(curl -sSL https://spotx-official.github.io/run.sh).

Теги:
-1
Комментарии1

У ВК, по всей видимости, не работает сброс сессии при заполнении сообщения о взломе. По ссылке https://id.vk.com/account/#/security-reset-sessions кнопка сброса просто не нажимается.

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

Если что-то попутал в формате и месте поста, то заранее извиняюсь.

Теги:
+3
Комментарии0