LINUX.ORG.RU

Сообщения u5er

 

Как правильно вычитывать строки из потока?

Форум — Development

Под потоком подразумевается сокет, последовательный порт и т.д..

Есть куча протоколов общения, которые подразумевают общение строками, длина которых заранее не известна. Насколько я знаю, есть 2 подхода. Первый подход заключается в чтении по одному байту до тех пор, пока не встретится конец строки. Второй подход заключается в чтении какого-то произвольного числа байт в некий буфер и уже проход по буферу.

Первый вариант хорош своей простотой, но плох большим количеством вызовов read()/recv(). Второй вариант хорош тем, что число вызовов read()/recv() будет минимально, но плох тем, что можно вычитать более одной строки и тогда вокруг данных после конца строки начинается пляска с бубном.

Как вообще принято реализовывать подобные вещи?

 

u5er
()

СИ: enum VS #define

Форум — Development

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

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

P.S. Тема не имеет под собой какого-то конкретного случая. Просто хочу посмотреть на опыт других программистов.

 

u5er
()

Waydroid: ручная установка native bridge

Статьи — Desktop

Т.к. в сети информации толком нет (ну или я просто не умею её искать), то решил написать эту статью, чтоб исправить это.

Введение

Речь пойдёт про установку конкретно houdini. В сети есть скрипты для автоматической установки, которые нужно запускать от рута, но описания что конкретно они делают к ним нет, поэтому у меня не возникло к ним доверия и я решил разобраться что да как.

Многим играм и программам для андроид требуется архитектура arm для работы. Houdini — это набор библиотек-трансляторов, которые позволят запускать их на архитектуре x86 и x86_64. Эти библиотеки были взяты из образов андроид от майкрософт. Есть аналогичный набор библиотек NDK, которые были взяты из образов андроид от гугла.

В данном примере я буду использовать houdini для Android 11, который идёт в штатной поставке waydroid. Там используется образ Lineage OS, но сути это не изменит.

Для начала скачиваем сами библиотеки. Например, отсюда https://github.com/supremegamers/vendor_intel_proprietary_houdini В данном случае нас будет интересовать содержимое каталога prebuilts.

( читать дальше... )

 ,

u5er
()

Напомните название мобильника со свободным 3g модемом

Форум — Talks

Помню давно мелькали новости про свободный мобильник, у которога 2 модема: основной свободный 3g и второй проприетарный 4g. Там можно было отключать питание 4g модема. Не могу найти новость. Была достаточно давно 4+ лет назад.

u5er
()

Покритикуйте подход: запуск функций из массива указателей

Форум — Development

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

int sx1509_init( struct BicOS* os ){
	
	int res;
	int i;
	
	const struct {
		int (*function)( struct BicOS* );
		const char* name;
	} initSequence[] = {
		{ gpioSetup,                  "GPIO setup"                    },
		{ deviceSetup,                "Device setup"                  },
		{ interruptHandlerSetup,      "Interrupt handler setup"       },
		{ interruptEventHandlerSetup, "Interrupt event handler setup" },
		{ keyboardSetup,              "Keyboard setup"                },
		{ debug_key_printer_register, "Deug key printer"              },
		{ NULL,                       NULL                            }
	};
	
	for( i = 0; initSequence[i].function; i++ ){
		
		res = initSequence[i].function( os );
		if( res ){
			printf( "{B} [sx1509] %s failed.\n", initSequence[i].name );
			return -1;
		}
	}
	
	return 0;
}

На первый взгляд оверхед у такого небольшой. Может у меня глаз замылился и я в упор не вижу подвоха? Какие у вас будут мнения на этот счёт?

 

u5er
()

Как победить git?

Форум — Desktop

Гит снова выходит на связь:

$ git clone -b v5.3.1 --recursive https://github.com/espressif/esp-idf.git
Клонирование в «esp-idf»...
remote: Enumerating objects: 673982, done.
remote: Counting objects: 100% (9539/9539), done.
remote: Compressing objects: 100% (3825/3825), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
error: 7330 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: неожиданный конец файла
fatal: fetch-pack: invalid index-pack output

Пробовал все советы отсюда ничего не помогло: ошибка всё равно происходит, но немного позже. Есть ещё варианты?

Также пробовал скачать zip-архив и распаковать его, но в моём случае это не сработало, т.к. сама idf полагается на гит.

Дополнительный вопрос: есть ли drop-in замена гиту, в которой разработчики осилили докачку?

 , ,

u5er
()

Как часто у вас зависает домашний компьютер?

Голосования — Голосования

Опрос касается потребительского железа.

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

>>> Результаты

 , ,

u5er
()

Графические программы засыпают при переключении терминала

Форум — Desktop

Например, на tty1 запущены иксы и в них запущены различные программы. Если я переключусь на tty2, то эти программы через 5-10 секунд перестанут работать до тех пор, пока не переключусь обратно на tty1. Есть ли способ обойти это малой кровью без накатываний патчей на ядро?

u5er
()

Ищу специалиста по Dracut

Форум — Desktop

В очередной раз я накатываю void на ssd на f2fs и в очередной раз я сталкиваюсь с ошибкой FLUSH_MERGE not compatible with readonly mode.

В этот раз меня это выбесило основательно и я закатал рукава и начал искать, откуда лезет эта дичь. Начинаем по порядку. Если ручками монтировать фс командой вида mount /dev/sda1 /mnt/1, то всё ок. Когда это делает initramfs, то не ок.

В сети нашёл информацию по прописыванию либо rw либо noflush_merge в командную строку ядра. Я решил пойти по пути прописывания rw - не помогло.

Дальше я полез изучать устройство содержимого initramfs. Опции монтирования лежат в /etc/cmdline.d/95root-dev.conf. Вот его содержимое в моём случае

 root=UUID=e10bcf2f-f3de-4bb4-993c-dbb82afa09ad rootfstype=f2fs rootflags=rw,noatime,lazytime,background_gc=on,nogc_merge,discard,discard_unit=block,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,barrier,extent_cache,mode=adaptive,active_logs=6,alloc_mode=default,checkpoint_merge,fsync_mode=posix,memory=normal,errors=continue

Как видно, тут есть опция rw, значит всё хорошо. Более того, если руками смонтировать раздел с этими опциями, то всё монтируется без проблем.

Дальше я решил сравнить эти опции с теми, которые используются фактически при монтировании. Оказалось, что в самом конце к ним добавляется ,rw,ro и таким образом фс пытается смонтироваться в режиме только чтения! И это вызывает ошибку.

Я полез искать по скриптам место, где отрабатывает вот это вот всё и нашёл файл /usr/lib/dracut/hooks/mount/99-mount-root.sh. Практически в самом начале есть такой участок кода

    _rflags_ro="$rflags,ro"
    _rflags_ro="${_rflags_ro##,}"

    while ! mount -t "${rootfs}" -o "$_rflags_ro" "${root#block:}" "$NEWROOT"; do
        warn "Failed to mount -t ${rootfs} -o $_rflags_ro ${root#block:} $NEWROOT"
        fsck_ask_err
    done

Из этого куска кода ясно, что к опциям монтирования в хвосте всегда приписывается ro.

Присмотревшись повнимательнее, я заметил, что параметры ro и rw в параметрах ядра всё же передаются и приписываются предпоследним параметром, но погоды это не делает, т.к. в конце всегда дописывается ro.

Теперь вопрос - они там на приколе что ли совсем? Это действительно захардкожено или я чего-то не понимаю? Как передать ему rw?

 ,

u5er
()

Странные странности AMDGPU

Форум — Desktop

Карта rx7900xt. Система void.

На иксах в хроме при просмотре рутуба при разворачивании видео на весь экран иногда картинка зависает. При этом видео продолжает воспроизводиться - об этом свидетельствует звук. Хром получается закрыть только сочетанием клавиш оконного менеджера i3.

В ходе экспериментов удалось получить выхлоп хромого в консоль

[4160:4160:0920/203250.113396:ERROR:command_buffer_proxy_impl.cc(325)] GPU state invalid after WaitForGetOffsetInRange.
[4160:4160:0920/203250.149693:ERROR:gpu_process_host.cc(1007)] GPU process exited unexpectedly: exit_code=512

При этом в логе иксов начинается флуд

[ 13709.802] (WW) AMDGPU(0): flip queue failed: Invalid argument
[ 13709.802] (WW) AMDGPU(0): Page flip failed: Invalid argument
[ 13709.802] (EE) AMDGPU(0): present flip failed
[ 13709.831] (WW) AMDGPU(0): flip queue failed: Invalid argument
[ 13709.831] (WW) AMDGPU(0): Page flip failed: Invalid argument
[ 13709.831] (EE) AMDGPU(0): present flip failed
[ 13709.863] (WW) AMDGPU(0): flip queue failed: Invalid argument
[ 13709.863] (WW) AMDGPU(0): Page flip failed: Invalid argument
[ 13709.863] (EE) AMDGPU(0): present flip failed

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

 , ,

u5er
()

Посоветуйте экранный переводчик под линукс

Форум — Desktop

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

 

u5er
()

Есть те, кто держит ноды PeerTube?

Форум — Talks

Предложение зеркалировать ютуб в связи с его нестабильной работой. Не все каналы, конечно же, но хотя бы что-нибудь.

 

u5er
()

Оптимальный способ хранения списка пользователей онлайн

Форум — Web-development

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

Как такие задачи решаются в современном вебе?

u5er
()

Собрал браузер Ladybird

Галерея — Скриншоты

Тут не так давно мелькала новость про этот браузер, вот я и решил собрать и потыкать. Удивительно, но собрался он вообще без проблем. Запускается тоже без проблем, а вот работает он как-то странно.

Странности заключаются в том, что скорость работы его то быстрая, то медленная. Не знаю, как объяснить. Например, когда я после сборки его запустил и открыл ЛОР, то он безбожно тормозил: страницы открывались по нескольку секунд, прокрутка была в виде слайд-шоу, но через некоторое время он прочухался, и всё стало быстро и плавно. Простые сайты открываются без особых проблем. Тяжёлые тоже открываются, но туго. Например, главная страница github загружается и отображается без особых проблем, но вот после клика по какой-нибудь ссылке из меню, нужно ждать некоторое время, пока он прогрузит страницу.

Моё железо: i7-5820k, 32Gb DDR4, rx 7900xt. На этом железе хромой летает (это для сравнения).

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

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

>>> Просмотр (1920x2119, 587 Kb)

 

u5er
()

Какие есть способы борьбы с диверсиями ассоциаций mime?

Форум — Desktop

Иногда после установки/обновления ПО, ассоциации mime слетают.

Например, в системе настроено так, чтоб текстовые документы открывались в geany. После установки wine, они открываются в notepad.exe.

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

 

u5er
()

Отдельный раздел для read-only тем

Форум — Linux-org-ru

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

 

u5er
()

Как отключить тачпад/мышь/клавиатуру в линуксе.

Форум — Desktop

Эта тема для гугла, т.к. информация сходу не гуглится и поиск по лору тоже толку не даёт. Написал бы в статьи, но статью слишком мало текста, поэтому пусть будет обычная тема.

Задача. Отключить какое-нибудь устройство, чтоб оно перестало работать во всей системе: в иксах, в консоли и т.д..

Решение. В каталоге /sys/class/input перечислены все устройства ввода. Они все имеют маску input* где вместо звёздочки число. Внутри каждого каталога есть файлы name и inhibited. Файл name содержит в себе имя устройства. Файл inhibited служит для подавления ввода с устройства. Если записать в файл inhibited значение 1, то ввод с устройства отключится, а если записать 0, то снова будет работать. Таким образом следует найти нужное устройство читая файлы name и отключить ввод с него, записав единицу в файл inhibited.

 ,

u5er
()

Непредсказуемые сетевые имена.

Форум — Admin

Было: eno1, enp8s0 и wlp7s0.

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

Стало: eno1, enp10s0 и wlp9s0.

Обе сетевые карты распаяны на материнке. Вафля установлена в слот M.2 и не трогалась.

Вопрос чисто из любопытства: как это работает?

u5er
()

Аврора ОС: как происходят обновления системы?

Форум — Mobile

В сети искал и ничего внятного не нашёл. Я знаю 2 схемы обновлений:

  1. Как на андроиде. Обновы приходят ровно до тех пор, пока их клепает разработчик устройства. После окончания срока поддержки изволь купить новое устройство с новой версий системы.

  2. Как на пк. Обновления можно ставить до тех пор, пока это позволяет железо. Имею в виду производительность процессора, объём памяти и т.д., а не огороженность.

Сам вопрос: обновления происходят условно «как на андроиде» или «как на пк»? Или может быть по другой схеме?

 

u5er
()

Мини-опрос: как вы переключаете раскладку клавиатуры?

Форум — Desktop

Любопытства ради. Сочетания клавиш? Напишите какие. Программы-переключалки? Напишите какие.

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

 

u5er
()

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