LINUX.ORG.RU

Сообщения reprimand

 

Нужен алгоритм гарантированного создания названий файлов

Всем привет!

Есть такая задача.

Допустим, есть некая информация, например, дипломная работа.
Я пытаюсь ее сохранить в файл с названием diplomnaya

char *document_name = "diplomnaya";
int fd = openat(dirfd, document_name, O_RDWR | O_CREAT | O_EXCL, 0644); // -1, errno = EEXIST

Оказывается, что файл с таким именем уже есть.

Какой бы вы посоватовали наиболее удачный способ изменения названия файла для того чтобы наименее слабо модифицировать это название?

Первое что приходит в голову: добавлять число в конце названия, постепенно его увеличивая если и такие названия будут заняты. Такой алгоритм используется, например, в современных браузерах.

Однако хочу заметить, что помимо прочего, существует ограничение на длину названия файла в 255 байт (NAME_MAX), как и в длину общего пути (PATH_MAX). И вполне реально «упасть» при попытке создания файла с подобным именем в errno == ENAMETOOLONG.

Какие есть предложения? Модифицировать оригинальное имя вплоть до наихудшего случая (полная неузнаваемость по сравнению с оригинальным названием) разрешается.

Выбирать имя файла пользователю не предлагать - он его видить не будет в 99% случаев, а совпадения по названию при сохранении иногда будут.

Стоит ли велосипедить что-то свое или достаточно просто взять https://man7.org/linux/man-pages/man3/tempnam.3.html ?

UPD: Решил сделать так: Нужен алгоритм гарантированного создания названий файлов (комментарий)
UPD2: Код:
int randfd = -1; // randfd = open("/dev/urandon", O_RDONLY);

#define RANDBYTES_WIDTH 11

void randfilename(char *ptr, size_t len) {
	const char pool[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	char randbytes[RANDBYTES_WIDTH];
	ssize_t got = read(randfd, randbytes, sizeof(randbytes));
	if (randfd < 0 or got < sizeof(randbytes)) { //fallback
		for (unsigned i = 0; i < sizeof(randbytes); i++) {
			randbytes[i] = (char) rand();
		}
	}

	for (unsigned i = 0; i < sizeof(randbytes); i++) {
		randbytes[i] = pool[randbytes[i] % (sizeof(pool) - 1)];
	}

	if (len + sizeof(randbytes) > NAME_MAX) len -= len + sizeof(randbytes) - NAME_MAX;
	memcpy(ptr + len, randbytes, sizeof(randbytes));
	ptr[len + sizeof(randbytes)] = '\0';
}

 ,

reprimand
()

Современные телефоны - это регресс или прогресс?

Всем привет!

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

К этому треду меня подтолкнул AntonI, который изначально отвечал Владимиру о том, что за последнее время есть МНОГО прогресса в области алгоритмов, но почему-то возвел это утверждение в масштаб всего IT. Все что я хотел объяснить своим постом, это то, что это разные вещи, и прогресс в IT будет лишь в той сфере, где это выгодно бизнесу. Если бизнесу выгодно будет сделать в чем-то регресс - он и будет.

Итак, поехали:

Давайте сравним современный телефон с телефоном 60ти летней давности? Мой телефон из меня доит чудовищную сумму - 900рэ в месяц (за три номера). Он конечно иногда подтормаживает, но в целом это исключительно удобный девайс экономящий кучу времени и сил.

А давайте сравним современный телефон с телефоном 4-7 летней давности?

Что изменилось с тех пор помимо возможности играть в более жрущие игры?

Я лично для себя выделил только 3 позитивных аспекта:

1. Беспроводная зарядка
2. Качественная фото/видеосъемка
3. (super)(AM)OLED экран

Могу ли я без них жить? Могу. А сколько регресса случилось за это время?

Смотрим.

Jack 3.5mm внаглую выбросили. И нет, это вранье что «ой мало места в корпусе». Захотели бы - вместили каким-то образом этот небольшой объем в корпус. А сейчас просто намертво убили любое удобство прослушивания музыки (я даже не говорю о меломании) своими USB-C only и Apple Lightning only. Нет, я не против USB-C, хотя mini/micro usb были ничем не хуже: там намного более очевидно с какой стороны «вставлять», и они гораздо более надежные физически. Проблемы в следующем:

1. jack3.5 mm есть у всех, он намного более надежнее подключается, все его знают, понимают, с ним ПРОСТО работать. Это стандарт с которым НЕТ проблем, любые наушники любого класса вполне реально подключить
2. USB-C/Lightning не дают возможности одновременного подключения наушников и ЧЕГО УГОДНО одновременно. Подключить в машине зарядку и AUX? Или может ты используешь всякий музыкально-диджейский софт, которого, между прочим, в маркете полно? cocatb!
3. Официальный переходник из lightning на jack3.5 - унылое говно за конскую цену. Такие тонкие провод и корпус это верх наглого потреблядства. Эта хрень у меня в кармане с ключами или в сумке с другими вещами сотрется за полтора-два дня. Для кого это придумали? Оригинальных надежных переходников не существует в природе
3.1. Китайские аналоги изготовленные по лицензии и/или которые хотя-бы немного выглядят по конструкции надежно стоят конских денег (ОПЯТЬ!): https://www.aliexpress.com/item/4001042899822.html
4. Велосипедирование стандартов USB-C переходников, из-за чего на планшете все работает, а на флагманском телефоне годичной давности я получаю уведомление «Это USB устройство не поддерживается». ЧТО, ПРОСТИТЕ?
5. Китайские переходники в 90% случаев либо не работают либо работают нестабильно (отваливается через несколько секунд подключение, нет звука, не определяет телефон). В местных магазинах СНГ (проверял и в Киеве и в Москве) продаются либо они же либо их аналоги, которые работают через жопу.
6. USB-C наушников крайне мало. В физических магазинах ОНИ ПРОСТО ОТСУТСТВУЮТ
7. Те переходники что присутствуют в интернет магазинах имеют либо сомнительное качество либо конскую цену (гораздо выше чем любые аналогичного класса но с jack3.5mm подключением), а общий выбор гораздо меньше.
8. Bluetooth наушники - отвратительное говно, они не могут заменить полноценно проводные наушники, они могут лишь дополнять их. Хотя производители и телефономрази-потребители делают вид что всё иначе. Я абсолютно честно пользовался ими года 2 подряд, самыми разными и на разных телефонах. Могу насыпать аргументов почему это не выбор, по крайней мере не такой, чтобы можно было забить на jack3.5mm.


На текущий момент нет ни одного современного нового телефона который с самого начала можно начать сразу использовать. Везде нужен свой допил и донастройка. Нет, айфоноадепты, молчать! Мы начнём с вас:

1. Знакомая получила iphone 12 в подарок от девушки - в режиме ожидания садится батарея, причем довольно сильно, и это известная проблема.
2. Стандартная блотварь и реклама, как оказалось, есть в том числе и у яблочников, причем в самом наглом и неожиданном месте.
3. Весь стандартный софт норовит завалить уведомлениями в стиле ИСПОЛЬЗУЙ МЕНЯ, ОТКРОЙ, ПОСМОТРИ! Создалось впечатление что держишь в руках сяоми, и шутка «xiaomi - топ за свои деньги» перестаёт быть шуткой.
4. Сверхнеочевидные баги как оказалось есть тоже у всех и требуют каких-то странных действий-движений-переустановок (обратим внимание на то, что приложение и ос/телефон сделано одной компанией): https://cdn.discordapp.com/attachments/702530135882203250/910551129149046804/...
5. IPhone так и не научился перестать быть неспособным подключаться к Wi-Fi раз в неделю (не хочу палить названия Wi-Fi сетей, кому интересно могу скинуть, напишите на почту, скину видосики), при этом стандартные варианты решения в интернете не всегда помогают. Проблема известная и критическая - яблоку пофигу, ведь бабки текут рекой.

Это лишь часть проблем, другие мелкие баги и тупые недочеты яблока вообще влом вспоминать, будет интересно - накидаю еще.


А что у ведроида? Ну, давайте посмотрим!

1. Сосунг тем временем выбросил не только jack3.5mm, но и sd карту в своих новых телефонах. Может скоро логотип поменяют на какой-то фрукт, ростущий на дереве.
2. При перезагрузке часть иконок приложений «вылетает» из своих каталогов
3. Сяоми при этом ТАК СИЛЬНО любит обновления, что будет задалбывать незакрываемым увдомлением ПОКА НЕ ОТКРОЕШЬ ПРИЛОЖЕНИЕ ДЛЯ ОБНОВЛЕНИЙ. Заботливо при этом запретив выключать уведомления этому приложению. Вот молодцы - забота о людях! Господи КАК ЖЕ ЭТО РАЗДРАЖАЕТ
4. С каждой новой версией Android все толстеет и толстеет обвесок из системных приложений, которые само собой написаны на тормознутой, и потому батареесосущей, java. Более половины функций, которые предоставлены этими приложениями, людьми не используются, но зато занимают место на диске и в RAM.
5. У каждой фирмы есть комплект «своих собственных» приложений, которые банально нельзя либо удалить либо отключить либо ограничить их фоновую активность. Боже как же это бесит, какие же они ТВАРИ.
6. Приложение «Камера» нагло скопированное у яблочников по интерфейсу. Ну то есть не приходило никому в голову, что там, возможно, не самый удобный интерфейс, верно? Лучше будем Apple-slaves, ведь никакой гордости и самобытной самоидентификации у Google нет - только деньгососущий фактор.
7. Какой ИДИОТ додмуался совместить возможности сканирования bluetooth/wifi с геолокацией? То есть если какому-то говну нужен доступ к bluetooth, в т.ч. чтобы «сканировать» устройства bluetooth, то это говно будет знать где я нахожусь физически, верно? Компартия китая всегда будет знать где её вассалы!
8. Мало места на диске. Казалось бы, как может телефонная хрень жрать памяти больше чем обычный десктопный линукс? МОЖЕТ! 20 гб система и 14гб «другое». При этом что за «другое» понять невозможно. Может это кеш приложений? А может его можно было бы одной кнопкой очистить? Или чистить их автоматом если часто не используется? Или как-то информировать, мол, «ЭЙ, У ТЕБЯ ВАЦАП/ТЕЛЕГА ОТОЖРАЛИ 50ГБ!»? В итоге из 128 гб памяти мы имеем... Эээ, половину. Можно мне sd карту на 500гб? НЕТ, ХОЛОП, СОСАТЬ!

В этом высере много чего не учтено. Например, пердолинг с прошивками, стелками/пленками/чехлами. Почему раньше спокойно не использовали ни чехлы ни пленки? А сейчас нужен этот обвесок?


Для себя я понял, что:

1. При Стиве было лучше.
2. Гугл будет сосать всегда, до тех пор, пока топ менеджеры ведра не будут сами использовать свое ведро.
3. Если какие-то мелочи комиссия по стандартизации решила не стандартизировать - будет зоопарк, в котором. обязательно начнется цирк с конями.
4. Пипл хавает - бизнес штампует.
5. Везде индусы одинаковые, и потому телефоны в среднем одного уровня паршивости.
6. Все сделано для того чтобы сосать бабло.

НОВЫЙ АЙПОНТ 13 ПРОМАКС! ФОТКИФОТКИ, ИНСТАСАМКИ
СОСУНГ S22 УЛЬТРА! ФОТКИФОТКИ, КОНТАКТИКТЕЛЕГРАМЧИКВАЦАП, ПОТРЕБЛЯДСТВО

Тьфу блин.

В общем, повторю вопрос в названии темы: современные телефоны - это регресс или прогресс?


P.S. Читайте книги. Проводите время с близкими и любите друг друга.

UPD: Тут для свихнувшихся яблочников, которые на любой пост о телефонах кукарекают «ты нищеброд, денег не хватило!» видимо стоит сообщить что у меня есть в личном владении достаточно приличная коллекция аппаратов, включая флагманы от Apple. Господи, вы такие смешные, стереотипы о яблочниках не на пустом месте появились =)

 , , , ,

reprimand
()

Как выйти из системного вызова внутри потока?

Сабж. Основной процесс получает сигнал.

Однако потоки находятся в системных вызовах (accept, read, и т.д.). Собственно, как из них выйти?

Почитав документацию и stackoverflow я понимаю, что:

Сигналы - прерогатива процессов. И потому лишь главный поток (тот который в main()) чаще всего получает сигнал и его обрабатывает. Остальные потоки сигналы не получают

Собственно, мне нужно чтобы ВСЕ потоки получили сигнал и выполнили хендлер для того чтобы их «выбросило» из системных вызовов.

Демонстрационный код:

#define _BSD_SOURCE
#define _DEFAULT_SOURCE

#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
#include <sys/stat.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <iso646.h>

#define n_threads 4
pthread_t threads[n_threads];
pthread_t main_thread;

static void signal_handler(int signo) {
	pthread_t mypid = pthread_self();
	if (mypid != main_thread) return;

	for (unsigned i = 0; i < n_threads; i++) {
		pthread_kill(threads[i], SIGINT);
	}
}

void *worker() {
	//sigset_t set;
	//sigemptyset(&set);
	//sigaddset(&set, SIGTERM);
	//sigaddset(&set, SIGINT);
	//pthread_sigmask(SIG_UNBLOCK, &set, NULL);

	char buffer;
	while(1) {
		if (read(STDIN_FILENO, &buffer, 1) < 0 and errno == EINTR) return NULL;
	}
	return NULL;
}

int main() {
	signal(SIGINT, signal_handler);
	signal(SIGTERM, signal_handler);
	main_thread = pthread_self();

	for (unsigned i = 0; i < n_threads; i++ ) {
		pthread_create(&threads[i], NULL, worker, NULL);
	}

	for (unsigned i = 0; i < n_threads; i++ ) {
		pthread_join(threads[i], NULL);
	}

	return EXIT_SUCCESS;
}

c99 test.c -lpthread
./a.out

После запуска пожмакайте Ctrl+C, результата не будет.

Убить процесс:
killall -SIGKILL a.out


P.S. Закомментированный код не работает.

РЕШЕНИЕ: Я лично выбрал вот это: Как выйти из системного вызова внутри потока? (комментарий)

 , , ,

reprimand
()

А есть какой-то протокол, полностью аналогичный IBM Aspera, но без энтерпрайз-тупака?

Приветствую!

Имеется следующая задача:

1. Передача файлов или потоковых данных
2. У клиентов может быть высокий ping и нехилый packet loss (бОльший чем в стандартных проводных сетях, вплоть до 50%)
3. Нужно отправлять данные, при этом как можно сильнее избежать потерю скорости из-за высоких задержек

Существует уже готовое решение, о котором можно подробно прочитать вот тут: https://habr.com/ru/company/ibm/blog/274807/

В чём его проблема?

1. Адская огороженность - типичная для толстенного энтерпрайза
2. Отсутствие библиотеки в свободном доступе (имеется ввиду не свободное ПО, а вообще наличие .so .h где-либо в интернете)
3. Эту технологию IBM вообще убрал из своего сайта. Вместо этого он предлагает какой-то клауд с передачей файлов. Т.е. никакой интеграции и близко нет и не будет.
4. Саппорт IBM - цирк с конями. По поддержке IBM нет общей поддержки, вместо этого предлагают поддержку для кастомеров. Поддержка для кастомеров обычным людям недоступна (нет customer id), нужно создавать тикет и просить чтобы зарегали тебя как кастомера. ШТО?

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

Есть какие-то аналоги? Что тут вообще можно посоветовать?

UPD: Решение найдено - QUIC. А IBM - жадные проприетасты.

 , , upd

reprimand
()

Как лучше сделать низкоточные таймеры?

Пишу софт на C.

Нужно выполнять ряд действий за равные промежутки времени (высокая точно НЕ нужна). Как правильно узнать что текущий промежуток уже закончился?

Варианты:

1.

action();

clock_gettime(CLOCK_MONOTONIC, &point)

if (compare(point, end)) break;

Тут для меня не очень понятно насколько вообще будет разумно использовать так ресурсы: clock_gettime() не бесплатен

2. вводить тред в котором внутри будет:
thread2() {
    sleep(100);
    global_var = true;
}

затем после каждого action(); делать
if (global_var) break;


3. ДЭБИЛЬНЫЙ, но работающий вариант с сигналами
void handler(int signo) {
    signal(SIGALRM, handler);
}

...

{
	struct itimerval tval = {.it_value.tv_sec = 1};
	setitimer(ITIMER_REAL, &tval, NULL);
}

Мне крайне странно, что после каждого срабатывания хендлера, он сбрасывается, и надо каждый раз делать signal(SIGALRM, handler); Что за бред?



Какие еще есть варианты?

 ,

reprimand
()

Wifi6 (802.11ax) с USB подключением нет в природе? Или помогите найти адаптер для USB->M.2/MiniPCI-e

Приветствую!

Ищу Wifi6 модуль. Не вижу на рынке, которые подключаются по usb

Зато вижу в продаже много дешевых модулей с подключением по pci-e/m.d

Например: https://www.aliexpress.com/item/4000563277082.html

И тысячи схожих!

Но как их подключить к компьютеру? Оба M.2 слота заняты NVME SSD...

В общем, в любом случае ищу способ подключить это дело через USB. Пытаюсь найти USB->PCI-e/M.2, но нахожу устройства, которые сами включаются в PCI-e/M.2, и отдают USB, а мне нужно наоборот...

Или таких адаптеров не бывает?

UPD: Спасибо всем отписавшимся, тема решена!

Результаты:

1. Wifi6 с USB подключением лишь в планах, правда, их конская цена смущает: https://3dnews.ru/1029847/dlink-predstavila-perviy-v-mire-adapter-wifi-6-s-in...
2. Нормальных райзеров USB->PCI-e/M.2 нет, есть только специализированные, которые позволяют подключить лишь некоторый тип устройств (LTE модем либо SSD накопитель)
3. Проще решить проблему с занятыми PCI-e слотами чем городить адские костыли

-----------
FYI: https://www.ixbt.com/data/realtek-rtl9210b-orico-tcm2m-c3-ext-ssd-review.html

 , wi-fi 6

reprimand
()

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

Дано:

1. tcp сокет. Один.
2. Большой поток данных, явно выше чем возможности сети, из-за чего сетевой буффер постоянно забивается (т.е. другими словами, poll() по этому дескриптору очень часто не возвращает POLLOUT в revents)

Задача:

Отправить кусочек данных В ПЕРВУЮ ОЧЕРЕДЬ, минуя стандартную очередь в ядре.

MSG_OOB не работает:

1. Только 1 байт будет приоритетным
2. Принимающая сторона которая получает данные используя read() не получает этот байт
3. Принимающая сторона которая использует recv() должна ОТДЕЛЬНО этот байт вытягивать с помощью этого же флага
4. Принимающая сторона может быть различным софтом, который иногда не поллит POLLPRI

Что делать?

 ,

reprimand
()

Pulseaudio самостоятельно меняет sample rate при появлении клиента с другим sample rate

SUBJ

Звучит это очень странно. Включаешь музыку на ютубе, запускаешь какой-нибудь OBS у которого в настройках установлен sample rate 44100Hz, музыка становится на тон ниже. Т.е. звучит более низкочастотно.

Исправляется на ходу только через pulseaudio -k

Комбинации с добавлением avoid-resampling с разными значениями (false и true) не помогли

В какую сторону копать?

Аудиокарта:

M-audio Air 192 4

 ,

reprimand
()

Нормальных мышек нет?

Приветствую!

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

Просто начинает немного раздражать когда это происходит с высшим ценовым сегментом.

К примеру. Razer Lancehead Tournament Mercury Edition. $80. Для мышки - нехилая цена. Проходит год - перестаёт нормально работать лефтклик. С вероятностью 25% не нажимается, при удержании часто «отпускает». Отдал в сервис с надеждой что починят... а там... предложили тупо вернуть мне деньги. Зашел в комментарии к товару - у людей такие же проблемы.

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

Заходишь в отзывы, а там просто беда: то тефлон отваливается, то резиновые накладки отслаиваются, то весь корпус люфтит и пластик из говна, то софт глючит... И это у мышек почти за $150!

У меня вопрос... А есть вообще сейчас нормальная беспроводная мышь чтобы выполненная качественно и просто работала? Мне не нужно миллион кнопок, тысяч профилей, мигающих подсветок...

Я просто хочу чтобы:

1. Там был нормальный сенсор чтобы можно было не только работать но и поиграть (то есть да, мышь нужна игровая)
2. Оно не ломалось от чиха
3. Были решены старые-древние как мир проблемы с клавишами и колёсиком
4. Желательно беспроводная, ибо 2021 год, уже можно было бы это осилить

Цена не имеет значения. Желательно не Razer, ибо, как оказалось - говно.

Я бы хотел купить Hydrogen, но поставки в мире обещают лишь к вторуму кварталу 2021, т.е. с СНГ это будет хрен знает когда.

Я знаю о https://sensor.fyi/ но там нет ни слова о беспроводных

К Logitech и A4tech ранее относился скептически, мол, делают ширпотреб. Сейчас вроде слышал что делают годноту. Это правда? Истории успеха есть?

 ,

reprimand
()

Посоветуйте менеджер процессов для linux/freebsd

Приветствую!

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

Системный менеджер решительно не подходит, это должна быть отдельная программа.

Хотелки:

1. Логирование на каждый аномальный случай
2. Удобное управление процессами. CLI тоже подходит, лишь бы можно было спокойно зайти, посмотреть список этих процессов и остановить по нужному сигналу.
3. Не очень сложная конфигурация. Скачал, в конфиге указал бинарники которые запускать, работаешь
4. Возможность не просто логировать, а, например, выполнять скрипт на определенные случае. Допустимо отсутствие этой фичи но относительно несложный код на C чтобы я мог сам это поправить/допилить.

 ,

reprimand
()

Помогите найти статью о исследовании речи человека если он слышит эту же речь

Привет!

Иногда так случается, что человек не понимает проблемы пока сам её не испытает. Сытый голодного не понимает.

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

Бывают такие конфигурации оборудования когда эта компенсация не работает ВООБЩЕ на определённых людях. Объяснения чтобы они это как-то исправили (использовали наушники/гарнитуру либо активацию по кнопке) не приводят к результату.

Я где-то в интернете видел статью-исследование, в котором описывалась следующая процедура:

1. люди говорили в микрофон речь
2. слышали через наушники себя же с некоторой задержкой

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

Можете помочь найти?

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

 

reprimand
()

Как отладить случайные зависания системы и внезаптные segmentation fault разного ПО?

Имеем:

1) AMD Ryzen 9 3900X
2) X570 AORUS ELITE
3) Nvidia RTX 2070S
4) Система Linux Mint 17.2 с ядром 3.19.0-39, всё работает стабильно, но сама система давно устарела, обновлений нет, новый софт зачастую работать отказывается.
5) Система Linux Mint 19.3. Иногда работает стабильно и всё отлично. Иногда случайные программы падают с сегфолтом без видимой причины. Периодически (очень редко) просто зависает система. Стоковое ядро (вроде 5.0), равно как и и более свежие ядра, в том числе из пакета 5.6.3 дают аналогичную картину.

Вопросы:

1) Как отладить эту проблему? Обращался в саппорт амд - послали лесом со словами «Please be informed that AMD Ryzen™ 9 3900X officially have drivers for Windows 10 - 64-Bit Edition».
2) Может ли быть проблема в дистрибутиве? Не думаю что ситуацию будет другой. Даже если я накачу ubuntu mate, и следом напишу в багтрекер убунты, всё равно с меня потребуют провести некоторые исследования ибо никто неведомой хренью заниматься не будет и не хочет
3) Может ли быть дело в том, что система «Linux Mint 17.2» установлена на обычном SSD, который подключается через SATA, а «Linux Mint 19.3» установлен на nvme ssd?

Доп информация:

1) https://github.com/suaefar/ryzen-test не показал результатов, система не падает
2) Разгоном CPU и памяти не занимаюсь, все настройки в bios стоят штатные, версия bios самая последняя, СО достаточно эффективная и температурный режим всегда в норме
3) Пакет с микрокодом установлен
4) Судя по табличке https://wiki.gentoo.org/wiki/Ryzen всякие костыли и опции с отключением cstates не нужны в более новых Ryzen-ах. Это так или стоит попробовать?
5) dmesg: https://paste.ubuntu.com/p/Bqh9RtQ5tt/

 , , ,

reprimand
()

IOMMU уже работает на последних ядрах?

Обнаружил большое кол-во информации что AMD-vi забагован, в том числе в относительно свежих ядрах если использовать nvme, и trim в частности

Ссылка: https://bugzilla.kernel.org/show_bug.cgi?id=202665

Сценарий использования типичный:

1) материнка под AMDшный сокет (а именно X570 AORUS ELITE)
2) NVMe SSD M.2

Всегда брал ssd с sata подключением ибо проверено временем, и тут вдруг друзья такие:

ДАВАЙ ЭТО Ж МОДНЯВО-МОЛОДЕЖНО-БЫСТРО-КЛАССНО! НЕ ЗРЯ Ж МАТЕРИНКУ КУПИЛ ТАКУЮ!!

Ну я и повёлся...

Теперь вот думаю стоит ли ВООБЩЕ это (накопитель) использовать или вернуть в магаз пока не прошло 14 дней.

P.S. С виртуалками не работаю, виртуализацию вообще даже не включал в биосе.

 , , , ,

reprimand
()

Помогите найти самую дешевую материнскую плату с поддержкой ECC

Зачем?

Нужен сервак для хранения данных. Вычисления и прочие трудоёмкие активности не планируются, и потому мощный процессор и большие объемы памяти ни к чему.

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

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

Если кто-то может кинуть какие-то документы или статьи на тему как софтварно можно решить проблему отсутствия ECC на борту - очень буду благодарен.

 , ,

reprimand
()

Весеннее обострение?

Я тут заметил jollheef начал махать банхаммером.

Я-то, конечно, не против, за него Шома всегда заступится и укажет на его неистовый профессионализм, в связи с которым людям надо закрыть рот. Мне просто интересно...

Чем тебе помешал dk-? Он-то не кащенко, он такой же человек как и мы все, ну напостил какую-то чушь. Ну помахай удалятором, зачем рубить с плеча?

 

reprimand
()

Накидайте примеров хорошего дизайна

Подойдет что угодно: сайт, мобильное приложение, десктопный софт, приборная панель устройства, и т.д.

Для меня лично это удобность (не нужно делать много кликов мышкой по разным меню либо крутить туда-сюда колесиком чтобы переместиться по огромному landing page) и дизайн от которого не вытекают глаза.

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

Например:

https://slack.com/, https://medium.com/ - у обоих сайтов простой и понятный дизайн без излишеств. Но напрягает разбрасывание контента по разным сторонам и необходимость крутить колесо вниз из-за лендинг-гигантизма.

Искал по ЛОР-у, но интересных тредов про дизайн не так уж и много, к сожалению:
1) Современные интерфейсы программ
2) Дизайн числовых полей ввода
3) «Погоняем» современный дизайн мессенджеров

Зачем мне всё это нужно?

На ЛОР-е часто ругают дизайн ПО и сайтов либо за ущербность либо за ретроградный «привет из 90-х!».
Покажите что вам НРАВИТИСЯ и скажите почему. И когда мне в ближайшем будущем придется иметь дело с дизайном чтобы я не погряз в пучине:

1) гигантских лендингов
2) UltraHD картинок на всю ширину экрана
3) видосов на всю ширину экрана в фоне
4) моднявых элементов управления без кнопки подтверждения
5) бесполезных анимаций, которые лишь занимают ваше время
6) ну и другой мерзости которая вас раздражает (укажите ниже) при посещении сайтиков или при использовании софта

Мне вот, например, тошно когда заходишь на сайт интернет-магазин а в углу экрана вылазит из кнопки чата окно чата и «якобы» тебе пишет какой-то консультант с попыткой помочь. А сейчас к анимации развёртывания окна чата прилепили ЗВУК. АААА БЕСИТ СМЕРТЬ СМЕРТЬ ЧЕРЕП КРЕСТ

 , ,

reprimand
()

Сейчас существует хоть один нормальный НЕпроприетарный браузер под Android?

Настраиваю отцу планшет на андроиде. Хочу поставить вменяемый браузер вместо стандартного chrome.

Попробовал несколько вариантов:

1) Chromium (устанавливается через различные проги типа getChromium)
2) Firefox (с офсайта)
3) Icecat (скачивается как с офсайта так и с f-droid-а)

А теперь проблемки:

1) Хромиум почему-то можно скачать исключительно последней версии. Которая отличается откровенно гнусным ненастраиваемым интерфейсом и всякой дрянью на стартовой странице типа «персонализированный контент» и «включите гугл плей сервисы хотя и так всё работает».
2) Вкладки во всех браузерах (ласт хромиум, icecat, firefox) выглядят точь в точь как на десктопе - полоска с кнопкой-крестиком. С моими пальцами попасть в крестик нереально (на самом деле реально, просто из-за размера планшет думает что я нажал либо на саму вкладку либо еще куда-то), а человеку с более толстыми пальцами - и подавно.
3) Что в firefox что в icecat нельзя зайти в настройки дополнений. Такое чувство, что их просто выпилили. Вот ты поставил дополнение - и что-то с ним сделать невозможно. Да и кажется, как будто половина из них тупо не работает. Половина самих настроек браузера тупо отсутствует, сделать домашнюю страницу на новую вкладку или хотя-бы добавить кнопку «домашняя страница» я не осилил. Что за говнище?

Что не так с этими людьми? Создаётся впечатление, что браузеры перестали делать для людей (это и так понятно, но ведь интерфейс-то должен был бы быть для людей!) а для каких-то идиотов.

У меня на моём личном телефоне стоит Chromium 51. Там предельно простой интерфейс - строка с адресом и кнопка, которая открывает список вкладок на весь экран. Но я так и не нашел способа установить конкретную версию хромиума под андроид.

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

P.S. Пробовал Dolphin браузер. Говно еще то.
P.P.S. У меня дико горит от ущербности современного софта. Чем дальше тем хуже.

 ,

reprimand
()

GDB плюётся на MIPS бинарник с «not in executable format»

Привет всем! Сразу хочу сказать что я не ищу готового решения - мне достаточно будет совета насчёт «куда копать».

Собственно, есть embedded девайс, есть root доступ вместе с пачкой утилит на борту (gdb, strace, busybox).
Скачал тулчейн, нашел инструкцию как билдить бинарники под сей девайс с помощью тулчейна. Итоговые бинарники по оценкам утилит objdump и file НИЧЕМ (кроме stripped) не отличаются от тех бинарников, что уже есть на борту:

$ file bin_from_device
bin_from_device: ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.12, stripped
$ file hello
hello: ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), for GNU/Linux 2.6.12, not stripped

аналогично с objdump:
$ mips-linux-gnu-objdump -f bin_from_device 

bin_from_device:     file format elf32-tradlittlemips
architecture: mips:isa32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00401900

$ mips-linux-gnu-objdump -f hello

hello:     file format elf32-tradlittlemips
architecture: mips:isa32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00400490


Всё якобы должно работать. НО! Я заливаю hello на дейвайс, и при запуска получаю segmentation fault. При попытке схавать hello с помощью бортового gdb, он плюётся вот так:
$ ./gdb.867x hello
GNU gdb 6.7.1
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "mipsel-linux"...
"hello": not in executable format: File format not recognized

Такой хрени я еще не видал, о_О. Собственно, куда копать? Никак не ожидал плевка со стороны gdb.

Доп. информация:

1) Если скомпилить -static, то получаю Illegal instruction вместо segmentation fault. Лол?
2) Компилю бинари вот таким образом: $ mips-linux-gnu-gcc -EL -march=74kf2_1 -mdspr2 hello.c -o hello
3) Чипсет: Sigma Designs 8672
4) Проц: MIPS 74Kf (согласно документации на девайс)
5) cat /proc/cpuinfo
6) пробовал компилить с различными опциями -march, включая 74kc, итог один и тот же

 , ,

reprimand
()

Кто-то сейчас работает с callback-driven аудио?

Приветик!

Я тут поковырялся в ALSA, и пришёл к печальному выводу, что ихнее API тот еще кал, а как его использовать знает ограниченное кол-во лиц, на слова которых где-то в дебрях ссылаются многие гуглимые источники.
И/или порог вхождения там слишком высок, что понять всё волшебство и красоту мне не по силам.

Короче, решил взять какое-то кроссплатформенное API. Остановился на portaudio. Там сразу рекомендуют для non-glitchy playback/capture использовать callback. Неплохо. Пусть будет callback. Тем более, судя по современным тенденциям, это более удобный и безглючный способ передавать данные в/из DSP (DAC/ADC).

У меня пара вопросов:

1) В какой момент времени выполняется callback? Документация гласит, что «как только аудио API понадобились новые данные». Когда этот момент наступает? Когда все данные (читай - сэмплы) уже проиграны, и брать новые неоткуда? Но ведь в таком случае времени на «предоставление» этих данных и/или генерацию новых в callback-функции крайне мало, и каждая миллисекунда грозит «разрыву» в проигрывавнии.

Или API обычно просит новые данные как только прошлая порция данных начала проигрываться, и времени у нас на генерацию новой порции ровно столько, сколько длится проигрывание (в реальном времени) этой порции (т.е. эквивалентно размеру буффера)?

2) Что случается, если времени будет недостаточно? Например, из-за объемности выполняемого кода (сложности алгоримта?), недостаточному кол-ву процессорного времени (CPU жрут другие процессы, после вызова callback-а тело функции не выполняется, а время отдаётся другим процессам), отсутствию/недостаче данных для выдачи (read() из файла не вернул достаточно байт или вообще не вернул управление и/или аналогичная ситуация с сокетами)? Можно ли просто «дропнуть» недостающую часть пустотой?

3) callback вызывается в отдельном треде?

Буду рад если поделитесь опытом. Буду неистово и искренне рад комментариям waker, i-rinat.

З.Ы. pulseaudio API не предлагать - отличие от portaudio там нет кроссплатформенности

 , , ,

reprimand
()

AYKVMSBB 0.0000000000001

Я тут посмотрел на относительно недавнее веселье... И решил принять участие. Итак...

Наконец-то состоялся долгожданный первый релиз (c) утилиты AYKVMSBB. Скачать можно тут.

Что означает название можно посмотреть в README.md на страничке github. Программа позволяет быстро узнать курс валюты.

Ну и от слов к делу. Примеры работы программы:

$ ./aykvmsbb           # без аргументов выводится курс валюты по умолчанию для вашей страны (если она есть в бд)
USD: 26.070702
$ ./aykvmsbb EUR       # а вот так можно задать интересующую нас валюту
EUR: 29.253935
$ ./aykvmsbb 1122013   # а вот так можно узнать курс на первое декабря 2013 года
USD: 7.993
$ ./aykvmsbb 1103      # если нужна определённая дата текущего года - год можно опустить
USD: 26.908632
$ ./aykvmsbb 1         # аналогично если нужно 1-е число текущего месяца
USD: 26.310335
$ ./aykvmsbb 28        # А вот и киллер-фичи подъехали! Если сейчас (к примеру) 1-е число, но нужен курс за 28 число прошлого месяца - месяц можно не указывать
USD: 26.27667
$ ./aykvmsbb JPY 28    # Аргументы можно указывать в любом порядке
JPY: 0.235113
$ LC_MONETARY=uk_UA.UTF-8 ./aykvmsbb # меняем страну и смотрим курс НБУ
USD: 26.070702
$ LC_MONETARY=ru_RU.UTF-8 ./aykvmsbb # аналогично для Банка России
USD: 57.002

Программа распространяется под лицензией GNU GPL v3.

Помимо прочего, по сравнению с утилитой DELIRIUM-а:

1) Утилита возвращает корректный код возврата в зависимости от успеха/неудачи.
2) По возможности в стандартный поток ошибок пишется ошибка.
3) Используется официальное API банков вместо парсинга веб страничек.
4) Независимо от данных, возвращаемых банком, числа с плавающей запятой всегда используют точку для разделителя дробной части.
4а) Числа с плавающей запятой при отображении не содержат лишних нулей в конце.
5) Не нужны никакие зависимости и библиотеки. Для компиляции необходим C99 совместимый компилятор, а для выполнения любая POSIX совместимая ОС.
6) Поддерживаются различные страны (пока что Россия и Украина), возвращается любая валюта, предоставляемая банком.

Фич-реквесты, багрепорты и (особенно!) пуллреквесты принимаются по адресу https://github.com/xdevelnet/AYKVMSBB

Хочу также отдать честь и совершить низкий поклон следующим регистрантам:

1) saahriktu
2) DELIRIUM

Ну и кастану nihirash - по приколу.

 , ,

reprimand
()

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