LINUX.ORG.RU

Сообщения seiken

 

SignalStrength сотовой сети на Андроиде

Решил тут ради эксперимента написать простейший апп для Андроида, но за незнанием API всего этого безобразия, параллельно решил протестить, что мне подскажет chatGPT.

Идея аппа такая: Всего одна кнопка, при нажатии на неё каждую минуту апп проверяет, доступна ли сотовая сеть (ну, скажем, сигнал больше N дБ), а если кнопку опять нажать, проверять перестанет, и выведет относительное время доступности сети за измеряемый промежуток времени.

chatGPT создал прекрасный костяк приложения, который после дополнительных распросов даже собрался без ошибок, но… при изменении уровня сигнала никаких апдейтов не происходит. Т.е. коллбэк, который листнер должен вызывать, вызывается только один раз, в значении всегда 99 попугаев, и больше коллбэк не вызывается, как ни носись со смартфоном по разным углам квартиры.

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

Привожу далее ключевой момент (листнер и коллбэк, и как они привязаны к MainActivity).

Сперва листнер:

class SignalStrengthListener(private val context: Context, private val textView : TextView) : PhoneStateListener() {
    var signalStrengthdBm : Int = 0

    override fun onSignalStrengthsChanged(signalStrength: SignalStrength) {
        Log.d("SignalStrength", "onSignalStrengthsChanged")
        super.onSignalStrengthsChanged(signalStrength)
        // Get TelephonyManager
        val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager

        // Check if the network type is cellular
        if (telephonyManager.phoneType == TelephonyManager.PHONE_TYPE_GSM ||
            telephonyManager.phoneType == TelephonyManager.PHONE_TYPE_CDMA) {

            // Get signal strength in dBm (decibels)
            signalStrengthdBm = if (telephonyManager.phoneType == TelephonyManager.PHONE_TYPE_GSM) {
                signalStrength.gsmSignalStrength
            } else {
                // For CDMA networks
                signalStrength.cdmaDbm
            }
            textView.text = String.format("Strength(dB): %-10d", signalStrengthdBm)

            // Check if the signal strength is significant for cellular communication
            if (isSignalStrengthSignificant(signalStrengthdBm)) {
                Log.d("SignalStrength", "Signal strength is significant: $signalStrengthdBm dBm")
                // Perform actions based on significant signal strength
            } else {
                Log.d("SignalStrength", "Signal strength is not significant: $signalStrengthdBm dBm")
                // Perform actions based on non-significant signal strength
            }
        }
    }

    private fun isSignalStrengthSignificant(signalStrengthdBm: Int): Boolean {
        // You can define your own criteria for determining if the signal strength is significant.
        // For example, you might consider a threshold value for the signal strength.
        return signalStrengthdBm >= -100 // Example threshold: -100 dBm
    }
}

Кусок кода, активирующий листнер:

        val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        val signalStrengthListener = SignalStrengthListener(this, auxTextView)
        telephonyManager.listen(signalStrengthListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)

О том, что onSignalStrengthsChanged вызывается только один раз и только в самом начале после старта аппа, я знаю из содержимого Logcat, в котором только одна соотв. запись.

Пара неоднозначных моментов:

  1. собирается для API level 31, тестировал как на эмуляторе с таким же API level, так и на реальном xiaomi с Андроид 13;

  2. Android Studio сигналит, что PhoneStateListener deprecated. Но в какой версии оно депрекейтед и что использовать вместо него - не понятно.

Есть какие идеи?

Перемещено Zhbert из mobile

 , phonestatelistener

seiken
()

Потыкал Альт РС 10.2 с Мейтом

Захотелось мне тут от нечего делать попробовать российский дистр. Астру продают, поэтому остановился на AltLinux Рабочая Станция 10.2 с Мейтом.

Ставил, очевидно, в виртуалочке. Загрузочное меню ораньжево-коричневое, на русском. Что на русском - хорошо, а вот цвета так себе, потому что не всегда контрастно (проценты на фоне заполненного прогресс-бара…). Это же блин базовый принцип эргономичности: чтобы было контрастно. Минус.

Выберите язык. Язык чего? Раскладки? GUI? Клавиатура у меня немецкая. Ну да впрочем хрен с ней, английского хватит вместо немецкого. Можно создать шифрованный раздел, если выбрать ручную разбивку. Можно убрать некоторые опциональные пакеты из категорий пакетов (Офис/Мультимедиа/….) при установке. Это хорошо. В процессе установки можно узнать, что альт включен в какой-то «Единый реестр ПО и БД» или что-то такое.

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

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

Смотрим после установки. Зачем-то прашивает пароль пользователя два раза, хотя при установке выбрал «Автоматический вход». Первый раз - понятно, это dm-crypt, а второй раз (на фоне прогресс бара) зачем? Русифицировано не всё. Например, «Grub Customizer» в настройках.

В целом Mate я не особо тыкал, но создаёт приятное впечатление старого доброго быстрого и аккуратного GNOME. Шрифты качественные из коробки - это до сих пор актуальный пункт в 2024г. Плюс.

Минусы. sudo нет из коробки, такое ощущение, что попал в debian или даже *bsd. Вместо apt-file apf. Пробуем iotop, открывается привычная простыня, но что это:

CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine SWAPIN and IO % и в соотв. колонке для всех процессов стоит «unavailable».

Грепаем текущий конфиг ядра, а там всё в порядке, CONFIG_TASK_DELAY_ACCT=y.

Дальше я не стал копать, потому что суббота не резиновая.

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

 

seiken
()

ChatGPT и лицензирование

Сейчас много шума вокруг GPT. И вот я подумал, а под какой лицензией GPT отправляет код его пользователям. И вот, что пишут:

The OpenAI API can be used for commercial purposes. However, when it comes to using the code generated by AI, it’s important to check whether AI-generated code can be copyrighted in your country. In the United States and the European Union, it’s not legal to copyright any kind of AI-generated content. To address copyright issues, you would need to modify the code generated by ChatGPT in a significant and meaningful way before copyrighting it under the license of your choice. Otherwise, the code is considered to be in the public domain. So yes, you can use it for commercial purposes regardless of the country you are in. However, whether you need to make significant modifications to the code to protect it with a copyright will depend on the copyright laws of your country.

Короче, прежде чем код можно легально использовать, его необходимо конкретно так перелопатить. Иначе он является достоянием общественности.

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

 

seiken
()

Встраивальщина или веб-сервис?

Чтобы вы выбрали из этих двух вариантов:

  1. лид в проекте встроенного ПО, с минимальным вовлечением в проектирование, разработку, но с серьезными техническими навыками, чтобы понять, где какие проблемы и как их решать (кого позвать/назначить их решать, кого с кем связать) или

  2. принципал инженер ПО на задаче разработки очень ответственного корпоративного веб-сервиса? «Очень ответственного» не значит, что в п.1) какая-то никчемная поделка с низкой ценой ошибки, просто веб-сервис - не на от*еись, от которого многие команды как внутри конторы, так и со стороны заказчиков будут зависеть.

З/п, допустим, одинаковая. Но если кого-то рвёт от веб-сервисов, можно взять доп. вводную, что там будут платить больше. Принудиловки с технологиями (кровь из носа Java) в п.2) нет.

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

Перемещено leave из job

 специализация

seiken
()

Гугл: переходим постепенно на безопасные ЯП

Сегодня читал со смартфона новый (начало марта 2024г.) технический отчёт от гугловцев, в котором они объявляют о постепенном переходе на ЯП с memory safety. Сейчас не могу найти ссылку, но вот, что по сути.

Вводится таксономия ошибок при работе с памятью (типа пространственная и временная безопасность и проч.). Наверное уже миллион раз это уже предлагалось, и у Эппла есть аналогичная классификация. Для каждого типа ошибок предлагается решение.

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

Приводится какая-то статистика, что типа в Андроиде 70% критических уязвимостей - ошибки в работе с памятью. Но тогда возникает логичный вопрос, ведь кроме ядра в Андрюше очень мало плюсового кода, это какие-то нижние части HAL или что там у них, всякая околосистемная мишпуха, может быть кодеки какие анально огороженные, а всё что выше и остальное уже давным давно на память-безопасных мега языках. И что тогда переводить на эти безопасные языки, если всё, что можно уже и так переведено…

Предлагают типа тюнить плюсы до безопасного подмножества и использования только его. Но тогда нафига нужно будет с этого безопасного подмножества переписывать на Rust? Опять непонятка.

Упоминаются языки на VM, а также Rust, Carbon (экспериментальны проект, типа безопасный C++), Go (блин, он-то тут при чём, если это ниша веб-сервисов? Кто-то пишет вебсервисы на сишке, что это прямо такая глобальная проблема?). Ни слова о Аде. Видимо, упоминаются только те ЯП, в которые Гугл вложился и теперь пиарит.

 

seiken
()

ChatGPT лажает

Спрашиваешь у него чисто справочную инфу: сколько АПИ юнитов стоит скачивание видео. Он вываливает портянку, смысл которой в том, что типа, иди на х* (смотри справку по квотам АПИ). А в справке по квотам там никакого скачивания нет, и приходится опять таки прибегать к технологиям 90х, и гуглить о том, что скачивание не поддерживается АПИ.

Занавес.

 дерьмо

seiken
()

Бесплатные IT курсы от VK

https://lenta.ru/news/2024/02/15/v-rossii-zapustili-nabor-na-besplatnoe-obuchenie-v-it/

по 14 направлениям, среди которых разработка, машинное обучение, информационная безопасность и продуктовые исследования
 Лучшие студенты программ смогут претендовать на позиции в штате компании или приглашение на стажировку

Я бы пошёл, если бы начинал карьеру, ну там, людей посмотреть и себя показать. Интересно, на сколько там перекос в сторону Linux, ввиду событий последней пары лет.

 

seiken
()

В оффтопик добавляют sudo

В утекшей в сеть новой версии windows11 появилась знакомая всем пользователям Макос и Линукс команда sudo:

https://www.windowslatest.com/2024/02/01/first-look-windows-11-is-getting-native-macos-or-linux-like-sudo-command/

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

 заимствование

seiken
()

Переполнение кучи в glibc и другое

Рунет сегодня ожил, а тут свежачок подвезли:

https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=6bd0e4efcc78f3c0115e5ea9739a1642807450da;hp=8aeec0eb5a18f9614d18156f9d6092b3525b818c

И ещё другие баги в glibc 2.37 типа порчи памяти в qsort.

Если бегло взглянуть на код исправления по ссылке, ясно, что это не что-то совсем уж тривиальное, т.е. именно те случаи, ради которых выдумываются и продвигаются все эти ады и расты. Но так же понятно, что в существенное количество устройств такие баги даже не смогут теоретически попасть, потому что будут исправлены ещё до того, как конторы дойдут до версии glibc 2022г.в.

Перемещено hobbit из talks

 ,

seiken
()

Выключить snap

У меня десктоп на Ubuntu 22.04, ничего особенно не менял. Что конкретно отвалится или перестанет работать, если я сделаю systemctl disable snapd и перезагружу систему? Я так понял, файрфокс отвалится, т.е. его надо удалять из снапа и ставить из deb. Что ещё?

 

seiken
()

C# - язык 2023 года!

Ну что, любители меряться пиписьками, мозгами, пузами и проч., детище MS, легендарный ЯП С#, знаменитый своей AOT, стал языком 2023 года по версии TIOBE, с формулировкой " language with the biggest uptick in one year (+1.43%)".

https://www.tiobe.com/tiobe-index/#:~:text=January%20Headline%3A%20C%23%20is%20programming,Congratulations!

P.S. Ловсан должен быть доволен.

 пузомерка

seiken
()

Приложение камеры внезапно не открывается

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

Xiaomi POCO X4 pro g5.

 

seiken
()

Разделение реализации и заголовков

Видел такое в одном проекте. Все *cpp располагаются в поддиректории impl, на один уровень ниже в дереве исходников относительно соответствующих заголовочных файлов.

Где это может быть удобно? Быстро скопировать заголовки и отдать кому-то без доступа к реализации? В любом случае всё тот же rsync, с минимальными отличиями. Автоматически добавлять ACL/MAC ограничения ко всем директориям impl? Что ещё?

 

seiken
()

Много-адаптерная мышка

Есть ли такие мышки, которые позволяют работать с разными BT адаптерами, переключаясь между ними?

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

 

seiken
()

Почему вы заинтересовались именно в нашей компании?

Сабж дурацкий вопрос на собеседовании при устройстве на работу? или нет? Я к тому, что есть иногда такие критерии, как близость офиса к месту жительства (не всегда актуально для IT), репутация компании (что-то не слышал, что какой-нибудь мексиканский картель или иные бандосы занимаются разработкой ПО). На все остальные нюансы ответ один и тот же: думаю, что способствует моим карьерным/профессиональным интересам.

 

seiken
()

Вопрос о китайском MIPS

Я правильно понимаю, что китайский Loongson 3A6000 использует свою «совместимую с MIPS» архитектуру, и китайцы не должны ничего Wave Computing, и не ограничены лицензиями и проч.?

 

seiken
()

Новый проц от MS

Пока SiFive реструктуризируется и увольняет сотрудников, MS работает над новым 128-ядерным ARM’ом для облаков. Целочисленная производительность ядра на уровне Ксеона эпохи SkyLake. Память планируется DDR5.

https://www.servethehome.com/microsoft-azure-cobalt-100-128-core-arm-neoverse-n2-cpu-launched/

Как думаете, что будет быстрее, собирать Линукс на младшей версии тредриппера в 64 потока или на вот этом, в 256?

 

seiken
()

Некрофилия или чувство прекрасного

Задумайтесь, почему люди, которые не застали эпоху 70х, 80х, с удовольствием смотрят фильмы того времени, а от современных плюются? Нельзя в данном случае сказать, что «когда я был молодой, солнце светило ярче, а стоял дольше», т.к. не было их даже в проекте, и никакого солнца для них не существовало.

Эпоха Вивальди и даже Моцарта - это вообще временной раздел размером с океан, и тем не менее.

Линукс тут при том, что когда копировали со «старых» коммерческих систем из 90х, была надежда, что будет альтернативный десктоп, а потом…

Разве это не подтверждение всеобщей дегенерации общества, а никакая не вкусовщина?

 

seiken
()

Werror - контроль качества или занудство?

Все, кто занимается низкоуровневым жонглированием байтами в реалых промышленных условиях (с кучей поставщиков со всего мира, а не в уютненьком молодёжном стартапе где-нибудь в Саннивейл), понимают, что C’шка с нами надолго, лет на 20, если не больше. И поэтому возникает желание максимально использовать существующие технологии для обеспечения качества кода.

Например, Werror (и то, что к нему полагается в виде -Wall, -Wextra и проч.). Но возникают такие ситуации, как например с «целочисленным повышением» и последующим сравнением с разным знаком. Например:

const unsigned x = 12;
unsigned char y;
unsigned char z;
... // что-то кладём в y и z
if (x < (y*z))
{
   // тра-ля-ля
}

И y*z превращаются («брюки превращаются, превращаются брюки…») в элегантный int, и вылезает предупреждение о различной знаковости, как бы совершенно на ровном месте. Т.е. теперь, чтобы ублажить компилятор, надо дополнительно, например, явно кастануть x к int’у. Т.е., код уже на пределе читаемости (выше пример - это сильное упрощение возможной реальной ситуации), и тут мы ещё добавляем вовсе не интуитивный (int).

И возникает вопрос: а стоит ли овчинка (-Werror и ко.) выделки? Я сейчас, очевидно, не имею в виду код наивысшей критичности, а такой, который при случае можно просто неспеша поправить, в конце рабочего дня, с нулевыми последствиями для пользователей, окружающей среды и т.п.

P.S. кстати, поскольку в расте тоже есть беззнаковые типы, там тоже нечто подобное должно быть, или как?

UPD: в примере, в нагрузку к умножению надо ещё добавить сложение с ещё одним unsigned char.

 ,

seiken
()

Окно открытия файла и передний план

В GNOME ввели уже давно какую-то наркоманскую хрень. Если в приложении выбрать «открыть файл», pop-up окно отрывается где-то на заднем плане, а на переднем появляется уведомление, что типа окно готово. Где настроить, чтобы по-человечески диалог показывался сразу после его открытия?

 ,

seiken
()

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