• Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    Axian Ltd, а какую литературу вы бы порекомендовали?
    Да, на всякий случай, я имею ввиду чисто программную собственную реализацию ПИД, а не готовое покупное устройство.
    Пока от прочитанной теории (с примерами реализации тут и тут реализации правда несколько отличаются) складывается впечатление что ПИД подобен механической ручке регулирования и что для каждого значения скажем необходимой скорости вращения требуется его перенастройка, так ли это?
    Если взять конкретный пример, скажем 60об/мин, то мне кажется что +/- 1-5% к этой скорости погоды не сделают, а вот +33% это наверняка приведет к разбалансировке и необходимости перенастройки ПИД?
    Может не совсем понятно выразился, я имею ввиду, что предположим имеется некая программная реализация ПИД и возмем два случая:
    1) произведена его настройка для скорости 60об/мин для холостого (условно, нагрузка конечно же есть, но меньше, ну скажем минимальная, но постоянная, которая не увеличивается и не уменьшается) хода
    2) нагружаем систему, соответственно возрастает ее инерционность, как следствие необходимо повышать мощность на двигатель и ПИД в данном случае будет пытаться это делать, чтобы достичь той же скорости
  • Как сопрячь не спрягуемое?

    @4ainik Автор вопроса
    Спасибо, заменил FileWriter на FileOutputStream и все срослось :)
  • Почему не работает загрузка изображения из файла?

    @4ainik Автор вопроса
    и сохранить ее в файл так же без манимуляций с кодировками?
  • Почему не работает загрузка изображения из файла?

    @4ainik Автор вопроса
    в общем проблема похоже понятна, файл содержит мусор, который появился в результате неявных преобразований кодировки...
    вот код (корявый конечно) :)
    String load_url(String url){
    try {
    URL u = new URL(url);
    URLConnection conn = u.openConnection();
    BufferedReader reader = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));
    StringBuilder sb = new StringBuilder();

    char [] buf = new char[128];
    while(true){
    int c = reader.read(buf);
    if(c <= 0){
    break;
    }
    sb.append(buf, 0, c);
    }
    reader.close();
    return sb.toString();
    } catch (Exception e) {
    }
    return null;
    }

    String img = load_url(photo_url);
    try {
    FileWriter fWriter = new FileWriter(sdCardFile, false);
    fWriter.write(img);
    fWriter.close();
    } catch (Exception e) {
    }

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

    @4ainik Автор вопроса
    ну хз, должно же быть какое-то логическое объяснение?!
    может нужны какие-то дополнительные права в манифесте?
    хотя файл же записался...
    путь был сформировал с помощью вызова getCacheDir
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    Пример кода/хака/костыля из статьи https://habrahabr.ru/post/274169/

    private static void setUpAlarm(final Context context, final Intent intent, final int timeInterval)
    {
    final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    final PendingIntent pi = PendingIntent.getBroadcast(context, timeInterval, intent, 0);
    am.cancel(pi);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    {
    final AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeInterval, pi);
    am.setAlarmClock(alarmClockInfo, pi);
    }
    else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi);
    else
    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi);
    }

    3(!) ТРИ различные способа установки алармманагера в зависимости от версии АПИ, в страшном кошмаре такое не приснится! кофейная гуща нервно курит в сторонке и отдыхает :)
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    cherepizza: под push вы имеете ввиду GPM (Google Push Messages) ? судя по статье https://habrahabr.ru/post/274169/ это та еще хрень, которая работает через пень колоду
    Денис Загаевский: да читать можно до посинения, но факт есть факт, вполне возможно, что такое поведение далеко не на всех устройствах и/или версиях андроида, но конкретно на моем устройстве это именно так.
    В методах и конструкторе сервиса сделан вывод отладочной инфы в логи. И судя по логам после отработки сервиса он реально завершается (т.е. вызывается onDestroy и он пропадает из списка задач), но буквально через считанные секунды снова появляется, при этом в логах об нет никакой информации, как будто ни конструктор ни какой-либо другой метод не вызывается.
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    и вообще довольно странное поведение, вызывается даже конструктор сервиса каждый раз, даже если сервис был запущен...
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    Денис Загаевский: сделал через WakefulBroadcastReceiver и получается забавная вещь, в методе onHandleIntent в конце используется SimpleWakefulReceiver.completeWakefulIntent(intent) (где-то в примере было) и после его вызова на несколько секунд исчезает процесс, но потом снова появляется (при этом в алармманагере интервал запуска стоит 5минут). Т.е. получается система по какой-то непонятной причине все равно перезапускает сервис независимо от алармманагера?!
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    Денис Загаевский: Нашел вот такой пример алармманагера https://github.com/commonsguy/cw-omnibus/tree/mast..., в принципе по смыслу подходит, но и тут все равно используется сервис IntentService, у которого срабатывает метод onHandleIntent с указанной периодичность. И опять же после убивания процесса сервис автоматически запускается.
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    Денис Загаевский: хм, дело в том, что приложение должно авто запускаться после загрузки и отслеживать "новости" без явного запуска приложения и умные люди посоветовали сервис Как в андроиде реализован механизм? А AlarmManager не обладает такой способностью?!
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    А вообще если в одном приложении одновременно находятся и сервис и активити, то они же работают в разных потоках?!
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    Не хотелось захламлять вопрос ненужными подробностями.
    Но вкратце работа сервиса должна зависеть от того запущена активити или нет, если запущена, то сервис ничего не делает, а если не запущена, то делает полезную работу :) а конкретно с определенным интервалом опрашивает сервер и при необходимости формирует извещения.
  • Какой язык сейчас лучше учить для веба?

    @4ainik
    Ярослав Иванов: Нет конечно, асм весьма специфичная вещь и безусловно используется.
  • Какой язык сейчас лучше учить для веба?

    @4ainik
    Ярослав Иванов: Да и где она цветет, если на фрилансе по ней проектов нет, да и вакансий таких уже давно не видно?!
  • Как узнать что активити запущено?

    @4ainik Автор вопроса
    Можно и посредник, только непонятно как это вообще будет/должно работать?! Собственно и так не понятно кто/где и в какой момент инстанцирует экземпляр сервиса и активити, а при появлении посредника вообще все становится еще непонятнее. Кто должен инстанцировать посредника? Пока единственным вариантом мне кажется это сохранение состояния активити в SharedPreference наверное топорно, но тут хоть понятны механизмы взаимодействия.
  • Как в андроиде реализован механизм?

    @4ainik Автор вопроса
    Да все супер, получилось и работает. Спасибо.
  • Как в андроиде реализован механизм?

    @4ainik Автор вопроса
    Ну вот еще к примеру приложение "гугл+" или "госуслуги" их никто не запускает, по крайней мере после перезагрузки, но они заразы такие постоянно висят с таскманагере и даже если их прибить, то все равно они снова появляются. Это сервисы?
  • Как в андроиде реализован механизм?

    @4ainik Автор вопроса
    GavriKos: все верно, приложение должно работать как бы в фоне, с некой периодичностью будет опрашивать сервер и в случае появления "новостей" выводить извещение об этом. Это нужно для проекта https://github.com/KRAndroidDevelopment/LizaAlert