LINUX.ORG.RU

Сообщения seiken

 

Если прога падает, кому фиксить

Допустим, ваша контора работает с другой конторой, поставщиком некой железки. И есть некая утилита, которая с железкой коммуницирует. Но утилита предоставляется производителем железки только под виндоус, и они также предоставляют исходники.

И вот, ваш коллега пересобрал исходники для Linux и ARM64, и эта версия проги падает с сегфолтом.

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

 сишка

seiken
()

До 70% ускорения в метеоритном озере

Шрини из Интела опубликовал патч, ускоряющий работу процессоров Meteor Lake:

https://www.phoronix.com/review/intel-meteorlake-epp-perf

Налетай, накатывай, пользуй!

P.S. а ещё ругают индусов за их программирование…

 

seiken
()

ИИ не опасен

Для тех, кто боится за своё рабочее место. Вот, например, когда появились IDE, разве сократилось количество программистов? А IDE, заточенные на конкретный язык, до сих пор в мелочах полезнее всяких нейросеток.

Вот, сегодня бился с проблемой «undefined reference» в тесте. Суть проблемы понятна, а что именно импортировать в тесте - совершенно не ясно. Спрашиваем у ГПТ о проблеме - он тупо повторяет всё то, что у меня уже есть, типа, вот такой исходник, вот такой конфиг грэдл, ничего нового. А IDE просто добавляет нужный импорт грубо говоря, по щелчку «решить проблему».

 

seiken
()

Строчная подстановка в Питоне

А вы знали, что в Питоне, начиная с 3.6 вместо:

'1 + 3 = {}'.format(1+3)

можно писать:

f'1 + 3 = {1 + 3}'

Я только что узнал об этом от друга, который проходит курс о Питоне. Вот она, моща Питона во всей красе! Разве можно такую фичу представить в C++? Ну не реально же!

 моща

seiken
()

Энергоэффективность новых Интел и Линукс

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

Продают некие Intel core ultra с 14 ядрами. Из них 2 ядра «Low power efficient». Линукс умеет их нормально использовать или там чисто аппаратная логика?

 

seiken
()

Перенабор в корпах

ИТ гиганты типа Гугла и ФБ нанимают больше людей, чем реально нужно для бизнеса, просто чтобы они не ушли к конкуренту. Но приступив к работе, внезапно оказывается, что работать им не над чем, и они просто участвуют в бесконечных митингах. В результате их потом просто сокращают. «Если ты хочешь работать 4 дня в неделю, не вылезая из пижамы - иди в Фейсбук».

https://www.businessinsider.com/silicon-valley-debates-tech-employees-doing-fake-work-2023-3

 ненужные люди

seiken
()

Поднимать ноут за один угол

Часто вижу такое, как ноуты поднимают/переносят за один угол. Но ведь корпус не предназначен для такой нагрузки. Я так как-то делал с одной леновой, ну и она стала зависать при поднятии за один угол. В том смысле, что ноут надо за два противоположных края поднимать, чтобы больших моментов не было.

А вы как поднимаете свой ноут?

 головотяпство

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
()

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