LINUX.ORG.RU

Сообщения shkolnick-kun

 

Мне просто спросить...

Привет, ЛОР!

Хочу завтра установить что-то актуальное на компы дома, пока выходные не кончились.

Соответственно, сегодня скачал и протестировал:

  • q4os 5.4 с trinity
  • Mint 21.3 c cinnamon
  • Debian 12.5 c cinnamon

Дома есть принтер Pantum P2207 дрова для него есть под Ubuntu и его производные.

Mint и q4os подхватили его нормально, а вот Debian - нет. Парадокс в том, что q4os 5.4 сделан на базе Debian 12.2…

Вот мне и интересно: в чём отличия q4os от ванильного Debian, которые позволили поставить и корректно запустить пакет с дровами, предназначенный для дистрибутивов на базе Ubuntu? Может знаете?

Алсо, если есть те, что сталкивался с q4os, подскажите, насколько им можно пользоваться?

Мне дистрибутив понравился, работает шустро, завелся на всём парке 64 разрядных компов дома, но смущает что оно не «мэйнстрим»…

 , ,

shkolnick-kun
()

Rust is not safe!

https://youtu.be/vfMpIsJwpjU

Для Ъ: в этом вашем Rust с 2015 года существует уязвимость, позволяющая неограниченно расширить время жизни любой переменной и воспроизвести любые уязвимости, связанные с памятью.

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

А Linux тут при том, что и на нём эти уязвимости прекрасно воспроизведутся.

 ,

shkolnick-kun
()

Трибьют по моему научному руководителю

Привет ЛОР!

Был у меня прототип софтины для управления проектами, который я забросил. Вчера узнал, что Graphviz умеет правильно располагать вершины графа по слоям. В общем, сделал визуализацию, на Graphviz, и решил спросить мнение моего научного руководителя, как менее страшно «сверху вниз» или «слева направо»?

Стал искать Его почту в gmail и не нашёл. Стал искать Его служебную почту и… Оказалось, что Он умер этим летом…

Сижу, грущу.

Спите спокойно, Дмитрий Владимирович. Мы Вас помним.

 , ,

shkolnick-kun
()

Средства разработки, которые мы заслужили...

Привет, ЛОРчане!

А вам не кажется, что со средствами разработки в последнее время творится что-то странное или даже страшное?

В общем делюсь своей историей «успеха».

Не так давно создатели SDCC добавили новый стандарт вызова процедур, ломающий обратную совместимость со старым ассемблерным кодом. Причем добавили они его в версии SDCC 4.2.0, то есть сломали совместимость в минорщине…

И вот 29 декабря прошлого года я решил, что на текущих выходных не буду заниматься проприетарщиной на фрилансе, а внесу соответствующие изменения в порт BuguRTOS на stm8/sdcc. Сами ассемблерные вставки я поправил ещё 29-го перед корпоративом, а вчера решился внести изменения в код ОС, поднять всё, что нужно для разработки и тестирования имбедов на своём ноуте с debian bullseye (inb4 некрофилия), и протестировать BuguRTOS на реальном железе, ибо грядёт релиз.

В общем, включил ноут, запустил git-gui, чтобы склонировать репу с Гитхаба и…

Тут меня ждали первые грабли

Название ветки master по дефолту депрекейтед и вообще не политкорректно, меняй дефолтное название ветки, ибо белые цисгендерные гетеросексуальные шовинистические членомрази должны страдать!

Ладно, сделал git clone из консоли, начал ставить инструметы для разработки и тестить.

Под AVR все тесты удачно собрались штатными avr-gcc и avr-binutils, запустились на штатном simavr с отладкой через штатный avr-gdb, загрузились штатным avrdude и удачно отработали на старенькой Arduino(tm) nano.

Отладка работает быстро.

На Cortex-Mх меня ждали следующие грабли

Пакет stlink в debian oldstable оказался стабильно глючный: точки останова не ставятся, дисасм не работает и т.д.

Пол дня пытался подобрать команды gdb в попытках заставить отладку работать. В итоге скачал с GitHub васянскую сборку от создателей пакета, поставил, отладка заработала сразу же со старыми проверенными командами gdb!

Третьи грабли встретились мне на rp2040

Использую VSCodium вместо VSCode, дабы избежать «телеметрии». Установка cortex-debug и ms-vscode.cmake-tools прошла успешно, а вот комада:

codium --install-extension ms-vscode.cpptools

выдала

Installing extensions...
Extension 'ms-vscode.cpptools' not found.
Make sure you use the full extension ID, including the publisher, e.g.: ms-dotnettools.csharp
Failed Installing Extensions: ms-vscode.cpptools

и такая проблема не только у меня.

Ладно, на сборку и отладку это не повлияло, но осадочек остался.

Да, кстати

Отдадка на rp2040 через старую версию picoprobe под vscodium работает гораздо быстрее, чем на любом stm32 через stlink под Code::Blocks.

Четвёртые грабли ждали меня… правильно на stm8 и sdcc

В debian bullseye стоит SDCC-4.0.0 и нет пакета stm8flah.

В общем, stm8flash собрал из исходников, протестил ОС на старой версии компилятора.

Дальше скачал SDCC-4.3.0 и Code::Blocks под Офтопик, и перешёл в виртуалку с офтопиком 10, поставил тулчейн, IDE, st-toolset для прошивки, стал собирать и «заливать» тестовые проекты на Discovery…

И один из проектов не собирается ни в какую, т.е. на SDCC-4.0.0 в debian собирался, а тут sdccld посчитал, что мои статики не статики и ругается на множественные определения функций!

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

Итого

Вместо того, чтобы поставить средства разработки и протестировать BuguRTOS за ПОЛ дня я протахался ДВА!!!

Из-за множественных ошибок в средствах разработки!

Кто из вас сталкивался с чем-то подобным?

Напишите в комментариях, что вы на этот счёт думаете, и поделитесь своими историями «успеха».

 , , ,

shkolnick-kun
()

Asterisk на русских Линуксах

Привет, ЛОР!

Поскажите российский дистрибутив линукса, желательно сертифицированный для применения в госорганах, МО РФ и т.д., у которого в репах есть asterisk.

 , ,

shkolnick-kun
()

YAFL, много аргументов у функций, что делать?

Привет, ЛОР!

Есть у меня вот такое поделие.

И есть в нём страшные места по типу:

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

Хочется сэкономить память на стеках и (в идеале) не уронить производительность.

В первом случае можно для всех аргументов сделать поля в self, но для второго (если действовать по аналогии) уже придется создавать отдельную структуру для значений аргументов…

Встечались ли вы с подобными проблемами, и как решали их?

 , , , ,

shkolnick-kun
()

Разыскивается говнокод

Привет ЛОР!

Разыскивается безобразный код на С/С++!

Вот прям чтоб мозг взорвался при чтении!

Желательно, - под микроконтроллеры или embedded linux.

Приветствуются:

  • магические числа прямо в коде, без определения константы,
  • операции с правкой i внутри цикла for (i=0;…),
  • прямые (не через колбэк) вызовы функций верхнего уровня из нижнего,
  • переполняющиеся буфера,
  • программмирование копипастой,
  • китайский и индусский код,
  • любые другие антипаттерны!

 , , ,

shkolnick-kun
()

Новый корчеватель или доигрались с этими своими антиплагиатами.

В науке происходят странные вещи. Институт инженеров электротехники и электроники (IEEE) был опубликован документ под названием «Исследования по удалению мышьяка с гетеросексуальных электродов неоднородных материалов в воде».

>>>Подробности

Для Ъ: Засилье этих ваших антиплагиатов и машинных переводчиков приводит к появлению странных статей в известных научных изданиях с peer review, ИЧХ статьи пропускают без исправлений.

А линукс тут при том, что у нас так гетеросексуальные модули ядра могут появится из-за гуглоперевода!

 , корчеватель,

shkolnick-kun
()

Как обращаться с графами, хранящимися в реляционной БД?

Привет ЛОР!

Поскольку моя текущая работа сильно завязана на embedded и iot, я решил, что в свободное время от всего этого надо бы отдыхать, и собираюсь запилить очередное OpenSource-поделие.

В данном поделии предполагается работа и визуализация графов.

В теории графов не силен, зато хорошо знаю область деятельности, для которой буду писать софтинку.

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

Соответственно есть вопросы к уважаемым регистрантам и анонимусам. Эти вопросы я хочу постить здесь.

Итак, первая часть вопросов

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

В БД, будут таблицы:

  • графы
    • id
    • desc
  • узлы
    • id
    • graph -> графы.id
    • desc
  • связи
    • id
    • src -> узлы.id
    • dst -> узлы.id

Насколько я понимаю, при копировании графа мне придется:

  • вставить новую запись в «графы»
  • запросить её id
  • вставить дубликаты узлов с новым id
  • запросить их id
  • преобразовать старые id узлов для связей в новые
  • вставить связи с новыми id узлов

Во всем это мне не нравятся два предпоследних шага. Хочется облегчить себе работу и есть две альтернативных идеи:

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

  • добавить в «связи» колонку graph -> графы.id, добавить в «узлы» колонку num (номер узла в графе) и соответственно из колонок src и dst «связей» ссылаться не на узлы.id, а на узлы.num.

На самом деле номера узлов у меня уже генерируются процедуркой, которая строит граф, так что с склоняюсь к последней идее.

Вопросы:

  • Насколько правильно я понимаю что, надо делать?
  • Как правильно обращаться с такими графами в реляционной БД?
  • Если перечисленные варианты жизнеспособны, то в каких случаях какой из них целесообразно использовать?

 , ,

shkolnick-kun
()

Rassbery Pi Pico / RP2040

Привет ЛОР. Кто знает, как в России купить сабж?

Из реселлеров только Sparkfun/Digikey/Adafruit, которые к нам не возят…

А линукс тут при том, что с его помощью я буду портировать BuguRTOS на сабж.

 ,

shkolnick-kun
()

Привет ЛОР, а что у нас с видеокартами?

Задумался об обновлении зеленой видюхи. Открыл сайты известных торговых сетей, а там какой-то тихий УЖОС с видеокартами:

  • либо затычки для слотов,
  • либо 3070 за 80+ тыс. руб..

Кто знает, в чем дело, и как долго это безобразие будет продолжаться?

Вопрос со звездочкой: стоит ли брать зеленые карточки с ebay?

Перемещено leave из linux-hardware

 , , ,

shkolnick-kun
()

[Решено] Arduino ThingsBoard помогите разобраться с шаблонами.

Привет ЛОРчане!

Захотелось мне поуправлять своей ардуиной через одно известное облако.

У них даже есть свой типа SDK.

Проблема в том, что писали его в торопях и:

  • реализовали только ограниченный функционал RPC, прчем так, что с виджета knot, например, не получится поуправлять девайсом т.к. колбэк может возвращать только пары ключ-значение, но не может вернут real, например.

  • не реализовали подписку на атрибуты. Совсем.

Первый косяк я уже пофиксил, правда пришлось сломать совместимость с исходным api (нехорошо, но по другому было нельзя).

Сейчас думаю, как пофиксить второй косяк, но, т.к. я трогаю С++ второй раз в жизни, то есть определенные трудности понимания. В этой связи вопрос к плюсовикам: что значат вот эта строка и следующая?

По итогу обещаю выложить пофикшенную версию и сделать пулл-реквест. Doen! Спасибо @fsb4000!

 , ,

shkolnick-kun
()

USB-stick MBR Boot чем сделать?

Привет, ЛОР, есть один старинный EEE PC (2007 года), с офтопом XP.

Недавно там завелась зараза. Загрузить Live-образы с антивирусами от известных вендоров не получается, т.к. там давно x86_64 и UEFI.

Хочу запустить на нем какой-нить PuppyRus-i686 и из него попробовать запустить антивирь, или вообще снести офтоп.

Реквестирую утилит по типу MultibootUSB, с возможностью создания Live flash с MBR…

 , ,

shkolnick-kun
()

Си, «горячий код», несколько версий функции.

Привет, кодач девеЛОРч, продолжаю делать очередное OpenSource поделие.

Само поделие тут.

Это будет либа с оценивающими фильтрами.

Особенности:

  • Старался писать КАК ДИДЫ в программе «Аполон».
  • No dynamic memory allocation.
  • Использование [ну типа] cache-aware алгоритмов.
  • Выполнение на архитектурах с аппаратной плавающей точкой.
  • Использование стабилизированных численных методов.
  • Принятие того факта, что у нас тут не NASA, соответственно, пользователи могут косячить в моделях процессов и наблюдений. Использование алгоритмов, которые позволяют хоть как-то сгладить последствия этих косяков.
  • Принятие того факта, что шумы могут быть не Гауссовы. Использование алгоритмов, которые позволяют хоть как-то сгладить последствия неверных гипотез о шумах.
  • Прототипирование на Python c использованием буквально тех же реализаций алгоритмов, что и в продакшоне, посредством Cython-обертки над либой.

Итак, ближе к сути: есть несколько версий функций (в данный момент - две, запланировано до четырёх), например: раз и два.

Отличаются они тем, что первая - обычная реализация, как в учебнике, а вторая - с адаптивной коррекцией, на случай, если пользователь накосячил в модели процесса, или что-то «поломалось» в объекте наблюдения.

Отличия могут быть довольно небольшими, но они сожрут какое-то количество мегафлопс и памяти.

Вопрос к знатокам:

Стоит ли делать несколько вариантов функций, как сейчас, или оставить самый сложный?

З.Ы.: И да, если это применять, например, при адаптивном подавлении шумов от производственного оборудования в наушниках у рабочего, то частоты вызова могут быть несколько килогерц (в данном случае - от восьми) для нескольких объектов, и звук будет идти с нескольких микрофонов.

 , , , ,

shkolnick-kun
()

Хочу выяснить пару вопросов про современные процессоры и компиляторы.

Привет, ЛОР.

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

Библиотеку хочу сделать переносимой (чтоб работала и на микроконтроллерах/DSP и на х86-64, и т.д.), поэтому готовый код от вендоров в топку.

И тут возникли вопросы про векторно-матричные операции:

  • Я правильно понимаю, что для минимизации кеш-промахов надо сделать так, чтобы на соседних итерациях циклов было как можно меньше «скачков» указателей?

  • В каком виде лучше (с точки зрения оптимизации вычислений компиляторами) писать доступ к массивам?

Так:

#define _DO_MM(name, op1, op2)                                                             \
void name(libInt sr,  libInt scr, libInt sc, libFloat *res, libFloat *a, libFloat *b)      \
{                                                                                          \
    libFloat   *vr;                                                                        \
    libFloat   *vb;                                                                        \
    libInt      c;                                                                         \
    libInt      r;                                                                         \
                                                                                           \
    assert(res);                                                                           \
    assert(a);                                                                             \
    assert(b);                                                                             \
                                                                                           \
    while (0 < sr--)                                                                       \
    {                                                                                      \
        r  = scr;                                                                          \
        vb = b;                                                                            \
        c  = sc;                                                                           \
        vr = res;                                                                          \
        while (0 < c--)                                                                    \
        {                                                                                  \
            *vr++ op1 *a * *vb++;                                                          \
        }                                                                                  \
        a++;                                                                               \
                                                                                           \
        while (0 < --r)                                                                    \
        {                                                                                  \
            c = sc;                                                                        \
            vr = res;                                                                      \
            while (0 < c--)                                                                \
            {                                                                              \
                *vr++ op2 *a * *vb++;                                                      \
            }                                                                              \
            a++;                                                                           \
        }                                                                                  \
        res += sc;                                                                         \
    }                                                                                      \
}

_DO_MM(lib_mm,      =, +=)
_DO_MM(lib_add_mm, +=, +=)
_DO_MM(lib_sub_mm, -=, -=)

или Так:

#define _DO_MM(name, op1, op2)                                                             \
void name(libInt sr,  libInt scr, libInt sc, libFloat *res, libFloat *a, libFloat *b)      \
{                                                                                          \
    libInt      i;                                                                         \
    libInt      j;                                                                         \
    libInt      k;                                                                         \
                                                                                           \
    assert(res);                                                                           \
    assert(a);                                                                             \
    assert(b);                                                                             \
                                                                                           \
    for (i = 0; i < sr; i++)                                                               \
    {                                                                                      \
        for (k = 0; k < sc; k++)                                                           \
        {                                                                                  \
            res[sc*i + k] op1 a[scr*i] * b[k];                                             \
        }                                                                                  \
                                                                                           \
        for (j = 1; j < scr; j++)                                                          \
        {                                                                                  \
            for (k = 0; k < sc; k++)                                                       \
            {                                                                              \
                res[sc*i + k] op2 a[scr*i + j] * b[sc*j + k];                              \
            }                                                                              \
        }                                                                                  \
    }                                                                                      \
}

_DO_MM(lib_mm,      =, +=)
_DO_MM(lib_add_mm, +=, +=)
_DO_MM(lib_sub_mm, -=, -=)

З.Ы.: Больно не стукайте…

 , , omp,

shkolnick-kun
()

Python, asyncio, удаление ненужных очередей

Привет ЛОР!

В данный момент пилю прототипы сервера, прокси и клиента для одного IoT стартапа. Суть такова: есть IoT девайс (сервер), к которому должно подключаться и интерактивно взаимодействовать мобильное приложение (клиент), поскольку девайс сидит за NAT-ом, то нужен прокси с белым IP, через который будет организована связь.

Вчера запилил прототип прокси в котором для каждого сервера/клиента создается очередь сообщений (asyncio.Queue) при первом обращении к прокси.

Мне для прототипирования достаточно просто создавать эти самые очереди, и хрен с ней, с текущей памятью, но…

Возникли вопросы:

  1. как правильно удалять эти самые очереди, если к ним давно небыло доступа на чтение?

  2. Есть ли какие-то паттерны для решения подобных задач?

 , , ,

shkolnick-kun
()

Воркспейс Eclipse, метаданные и git

Привет, лорчане!

Есть воркспейс эклипса с несколькими проектами, который находится под контролем git.

Чтобы не следить за всякими там логами и прочими history я добавил в .gitignore весь каталог .metadata.

Как показала практика, это было зря, ибо имортировать кучу проектов при переносе на другое рабочее место - БОЛЬ!!!11

Реквестирую рецептов для .gitignore, которые позволят держать в git-е каталог .metadata в работоспособном состоянии, но без всяких логов и истории, которая и так есть в git.

 , , , ,

shkolnick-kun
()

Вот запилил тут прототипы алгоритмов фильтрации и статью с описанием

Вы наверное заметили, что в последние пару месяцев не двигался проект нейроябеды…

Это случилось потому, что я занимался другим проектом.

В общем, накидал несколько прототипов «доработки фильтров Калмана напильником», и написал околонаучную статью о том, как это устроено.

Прототипы

Графомания

Милости прошу в issues к нашему шалашу.

 , ,

shkolnick-kun
()

В nim 1.0 поломали целочисленную арифметику в нескольких местах.

Заголовок самодостаточен.

Подробности

В общем, зря я провел несколько вечеров настраивая vscode в debian для работы с этим хипсторским языком.

Одно радует, - выходит! (c) Павел Воля

Пожалуй, подожду ещё несколько месяцев, пока они по крайней мере арихметику починят.

 , ,

shkolnick-kun
()

Вконтакте запускает нейромодератора

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

Это очень похоже на то, что я предлагал сделать тут

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

Подробности

З.Ы. Шома, мы отстаем! Cast @Shaman007

 , ,

shkolnick-kun
()

RSS подписка на новые темы