• Почему не работает созданная служба systemd?

    @Aves
    Проблема в отсутствии #!/bin/bash в dts-service.sh
    Или нужно в юните написать
    ExecStart=/bin/sh -c '/home/dts/bin/dts-service.sh'

    Ну и Type=forking нужен, только если ./khconsole форкается & и dts-service.sh завершается. Без этого Type нужен simple, то есть можно не указывать.
    Ответ написан
    Комментировать
  • Корректное преобразование char[] в System::String

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char str[len + 1];
    memcpy(str,somechararray,len);
    str[len] = 0;

    Это если вы действительно хотите подстроку скопировать.
    А вообще, у String же есть конструктор, принимающий указатель, позицию и длину. Почему вам сразу было бы не написать так:
    System::String^ clistr = gcnew System::String(somechararray, 0, len);
    Ответ написан
    1 комментарий
  • Есть ли техническая возможность автоматизировать установку программ для Android?

    @elgordo
    Предустановленные приложения можно добавить в прошивку. Они лежат в папке /system/app. Вам нужно будет конвертировать APK в ODEX чтобы они заработали из указанной папки. Конечно, в некоторые подробности вам придётся вникать самостоятельно. APK файлы надо будет достать с уже "прокачанного" планшета.

    Или второй вариант, Андроид позволяет сохранять список установленных приложений в учётной записи Google Play. Т.е. просто при поступлении нового планшета прописываете учётку где всё установлено, затем входите в список и всё устанавливаете. Вот статейка на эту тему:

    howto.cnet.com/8301-11310_39-20100093-285/how-to-i...

    Правда, работает только с новым Google Play, если у вас старый, аккаунт нужно прописывать как основной (первый).
    Ответ написан
    Комментировать
  • Есть ли техническая возможность автоматизировать установку программ для Android?

    @FoxInSox
    Установить apk на устройство из консоли можно спомощью утилиты adb:
    $ adb install /somefolder/app.apk

    С GooglePlay приложениями думаю придется "тыкать пальцами" или попробовать достать apk файлы с маркета.

    Итого: пишите bach/python скрипт который перебирает apk файлы и вызывает adb install
    Ответ написан
    Комментировать
  • Анализ данных с термодатчиков и трубки Флейша?

    kbtsiberkin
    @kbtsiberkin
    Вейвлет-дифференцирование позволяет неплохих результатов по фильтрации добиться, хотя алгоритм относительно трудоёмкий и экстремумы там придётся детектировать уже двумерные. Но эффективность грандиозна, особенно на Ваших весьма чистых и красивых сигналах.
    Математика описана, например, вот тут.
    Ответ написан
    Комментировать
  • Анализ данных с термодатчиков и трубки Флейша?

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

    d = V[1]-V[0];
    for (i = 1; i < N-1, i++) {
        d1 = V[i+1]-V[i];
        if (d < 0 && d1 > 0) {
            // Локальный минимум V[i]
        } else if (d > 0 && d1 < 0) {
            // Локальный максимум V[i]
        }
        d = d1;
    }

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

    noise = 2; // Уровень шума, поставить нужное значение
    t1 = 0; // Точка перехода к нулю
    upDown = 0; // Направление движения до нуля, > 0 - вверх, < 0 - вниз, 0 - начало графика
    d = V[1]-V[0];
    if (abs(d) < noise)
        d = 0;
    for (i = 1; i < N-1, i++) {
        d1 = V[i+1]-V[i];
        if (abs(d1) < noise)
            d1 = 0;
        if (d < 0 && d1 > 0) {
            // Локальный минимум V[i]
        } else if (d > 0 && d1 > 0) {
            // Локальный максимум V[i]
        } else if (d != 0 && d1 == 0) {
            t1 = i;
            upDown = d;
        } else if (d == 0 && d1 > 0 && upDown < 0) {
            // Локальный минимум V[(t1+i)/2] или (V[t1]+V[i])/2
        } else if (d == 0 && d1 < 0 && upDown > 0) {
            // Локальный максимум V[(t1+i)/2] или (V[t1]+V[i])/2
        }
        d = d1;
    }
    Ответ написан
    2 комментария