Сохранен 30
https://2ch.su/b/res/327475101.html
К сожалению, значительная часть сохранённых до 2024 г. изображений и видео была потеряна (подробности случившегося). Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

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

 Аноним 09/12/25 Втр 07:57:54 #1 №327475101 
images(3).jpg
Помоги мне, сосачик. Я пишу свою хуйню на C для максимально голые арч под двм, заточенные на энергоэффективность типа, но у меня нихуя не получается. Я пытаюсь как-то писать код, но гемини раз за разом меня унижает

>Текущий подход страдает от постоянного открытия/закрытия файлов и парсинга текста, что заставляет процессор совершать много лишних тактов и системных вызовов (syscalls).
>Вот детальный разбор того, что нужно изменить, от простого к сложному:
>1. Главная проблема: /proc/driver/rtc
>Чтение /proc/driver/rtc — это очень дорогая операция для получения времени. Вы заставляете ядро генерировать текстовый отчет, который вы потом парсите.
> Решение: Используйте стандартную библиотеку C (time.h). Это на порядки быстрее, так как часто time() и localtime() работают через vDSO (виртуальный системный вызов) и даже не требуют переключения в режим ядра.
>2. Проблема ввода-вывода: fopen vs open
>Функции fopen/fread (из stdio.h) используют буферизацию и структуры FILE. Для чтения 3 байт из /sys это избыточно.
>
Решение: Используйте низкоуровневые open, read, close (или lseek) из unistd.h и fcntl.h. Это уменьшит оверхед памяти и процессора.
>3. Частота обновлений (Polling rate)
>Батарея не меняет заряд каждую секунду. Читать файл /sys/.../capacity в каждом цикле — расточительство.
> Решение: Обновляйте время каждую секунду, а заряд батареи — раз в 30 или 60 секунд.
>4. X11 оптимизация
>XStoreName отправляет данные на X-сервер. Если строка не изменилась, отправлять её не нужно. Хотя в вашем случае время меняется каждую секунду, но если вы решите убрать секунды, это станет критичным.
>Оптимизированный код (Extreme Power Saving Edition)
>Этот код использует нативные вызовы времени, низкоуровневое чтение и разделение частоты обновлений.
>#include <stdio.h>
>#include <stdlib.h>
>#include <string.h>
>#include <time.h>
>#include <unistd.h>
>#include <fcntl.h>
>#include <X11/Xlib.h>

>// Путь к батарее (проверьте, BAT0 или BATT у вас)
>#define BATT_CAP_PATH "/sys/class/power_supply/BATT/capacity"
>// Обновлять батарею раз в N секунд (циклов)
>#define BATT_UPDATE_INTERVAL 60

>int read_int_from_file(const char
path) {
> int fd = open(path, O_RDONLY);
> if (fd == -1) return -1;

> char buf[16];
> ssize_t bytes_read = read(fd, buf, sizeof(buf) - 1);
> close(fd);

> if (bytes_read > 0) {
> buf[bytes_read] = '\0';
> return atoi(buf);
> }
> return 0;
>}

>int main(void) {
> Display dpy = XOpenDisplay(NULL);
> if (!dpy) {
> fprintf(stderr, "Cannot open display\n");
> return 1;
> }
> Window root = DefaultRootWindow(dpy);

> char status[128];
> time_t rawtime;
> struct tm
timeinfo;
> int battery_percent = 0;
> int cycle_counter = BATT_UPDATE_INTERVAL; // Чтобы обновить батарею сразу при старте

> for (;;) {
> // 1. Получаем время (супер быстро через vDSO)
> time(&rawtime);
> timeinfo = localtime(&rawtime);

> // 2. Читаем батарею только раз в BATT_UPDATE_INTERVAL секунд
> if (cycle_counter >= BATT_UPDATE_INTERVAL) {
> battery_percent = read_int_from_file(BATT_CAP_PATH);
> cycle_counter = 0;
> }

> // 3. Форматируем строку
> // %H:%M:%S - часы:минуты:секунды
> // Используем strftime для эффективного форматирования времени
> char time_str[24];
> strftime(time_str, sizeof(time_str), "%Y-%m-%d | %H:%M:%S", timeinfo);

> snprintf(status, sizeof(status), " %d%% | %s ", battery_percent, time_str);

> // 4. Отправляем в X11
> XStoreName(dpy, root, status);
> XSync(dpy, False);

> cycle_counter++;
> sleep(1);
> }

> XCloseDisplay(dpy);
> return 0;
>}

>Что еще можно улучшить (Hardcore):
> Убрать секунды:
> Если вам не нужны секунды на часах, вы можете переписать логику так, чтобы просыпаться раз в 60 секунд. Это даст колоссальный прирост энергоэффективности, так как процессор будет спать (C-states) 99.9% времени, не просыпаясь каждую секунду для перерисовки экрана.
>
Событийная модель (Event Driven):
> Вместо sleep(1) можно использовать poll или select для ожидания событий, но для батареи это сложно (netlink сокеты), а для времени бессмысленно (оно течет линейно).
> * Компиляция:
> Используйте флаги оптимизации для уменьшения размера бинарника и ускорения кода (хотя для такого простого кода это микро-оптимизация):
> gcc -O2 -march=native -s status.c -o status -lX11
>Итог по вашему коду:
>Самое "узкое" место в оригинале — это fopen("/proc/driver/rtc", ...) внутри бесконечного цикла. Замена этого на time() и localtime() снизит нагрузку на CPU практически до нуля.

Как избавиться от этой ебаной фиксации на эффективности?
Аноним 09/12/25 Втр 08:03:31 #2 №327475193 
>>327475101 (OP)
Через несколько лет и несколько недоведенных до мвп проектов само пройдет.
Тебе в данный момент хочется пердолиться, а не реализовывать, вот ты и пердолишься.
Аноним 09/12/25 Втр 08:08:42 #3 №327475275 
>>327475193
Мне мвп нахуй не нужон, потому что я для себя пишу. А стремление к пердолингу вряд ли закончится, потому что энергоэффективность и пердолинг идут бок о бок
Аноним 09/12/25 Втр 08:11:26 #4 №327475324 
>>327475275
Смотри не сломай себе дофаминовую обратную связь, занимаясь дрочевом без четко видимого результата.
А то перехочется пердолиться в один момент - а по жизни ты больше ничего не умеешь.
Аноним 09/12/25 Втр 08:11:58 #5 №327475335 
>>327475101 (OP)
> Как избавиться от этой ебаной фиксации на эффективности?
Не просить нейронку ревьюить твой код, может?
sage[mailto:sage] Аноним 09/12/25 Втр 08:18:43 #6 №327475446 
>>327475324
Моя проблема как раз в том, что он четко видимый. Я доделал статус-бар ещё вчера ночью и не собираюсь, вроде, его трогать, но меня гложет эта хуйня. Я знаю, что он не идеальный

>>327475335
Я все равно примерно понимаю, в чем проблема кода. Нейронка тут следствие, а не причина
Аноним 09/12/25 Втр 08:26:57 #7 №327475590 
>>327475446
Может, не писать проблемный код?
sage[mailto:sage] Аноним 09/12/25 Втр 08:28:16 #8 №327475617 
>>327475590
Это избыточно и бессмысленно. Прочитай рекомендации из оп-поста
Аноним 09/12/25 Втр 08:50:13 #9 №327476038 
>>327475617
Может, не просить нейронки бессмысленно его ревьюить?
Аноним 09/12/25 Втр 09:01:26 #10 №327476253 
>>327475101 (OP)
почему не на расте)
Аноним 09/12/25 Втр 09:03:52 #11 №327476304 
>>327475101 (OP)
саси
Аноним 09/12/25 Втр 09:04:33 #12 №327476323 
>>327475101 (OP)
>Двач, я слабоумный олигофрен и ничего не могу решить сам. Давай погугли за меня, почитай, мне расскажи и вариантиков накидай.
Давай сразу на хуй.
Аноним 09/12/25 Втр 09:07:09 #13 №327476376 
>>327475101 (OP)
Часы программируешь?

Хуйло ворлд не осилил?
Аноним 09/12/25 Втр 09:09:14 #14 №327476413 
>>327475101 (OP)
> Как избавиться от этой ебаной фиксации на эффективности?
Ебанутый, ты слип делаешь. Пиздец, дочитал до этого момента и охуел. Иди нахуй просто, слушай нейросеть, если ты сам такой даун.

Статус батареи/часов и любых нахуй не нужных системных таймеров нужно раз в 5 минут, делать интерполяцию и хуй забивать.
Аноним 09/12/25 Втр 09:10:22 #15 №327476439 
>>327476413
Вижу ты спец, скажи, чем кончается цикл for next?
Аноним 09/12/25 Втр 09:14:24 #16 №327476535 
>>327475101 (OP)
> Как избавиться от этой ебаной фиксации на эффективности?
Водочки выпить блядь.
Че ты пишешь? Хелло ворлд с прогресс баром?

Тебе надо чтобы работало, или ты там борешься за каждый бит памяти?
Если первое иди к психиатру он поможет избавиться от навязчивого перфекционизма. Если второе гугли, а не нейросеть используй.
sage[mailto:sage] Аноним 09/12/25 Втр 09:16:18 #17 №327476574 
>>327476535
Я буквально в оп-поста пишу, что проблема в этой навязчивой идее оптимизации
Аноним 09/12/25 Втр 09:17:39 #18 №327476601 
>>327476574
В любом случае я тебе на вопрос ответил.
Водочка или психиатр.
Аноним 09/12/25 Втр 09:46:32 #19 №327477184 
>>327476439
> чем кончается цикл for next?
Че эт за говно?
Аноним 09/12/25 Втр 09:58:43 #20 №327477412 
>>327477184
Так я и думал
Аноним 09/12/25 Втр 10:03:04 #21 №327477518 
>>327475101 (OP)
>арч под двм
Ща?
Аноним 09/12/25 Втр 10:08:41 #22 №327477652 
>>327476253
Потому что мне не нравится ооп

>>327476323
Попробуй прочитать оп-пост

>>327476376
Часы, для названия рут окна в иксах, да

>>327476413
Я не нейросеть слушаю, это моя фиксация. Я сам прошу нейрокал ревьювить мой код на предмет эффективности

>>327477518
Тайловый оконный менеджер для пердиксов-пердоликсов
[mailto:Sage] Аноним 09/12/25 Втр 10:14:07 #23 №327477792 
>>327475446
>Моя проблема как раз в том, что он четко видимый. Я доделал статус-бар ещё вчера ночью и не собираюсь, вроде, его трогать, но меня гложет эта хуйня. Я знаю, что он не идеальный
Открываешь себе ишью либо хуяришь туду в коде комментом, мы же знаем, что ты не юзаешь гитхаб для своих поделок и говоришь, что когда-нибудь поправишь. Распыляться сейчас на преждевременную оптимизацию значит не доделать проект вовсе. А недоделанный проект намного хуже, чем доделанный но не совершенный.
Возможно также, что твоё топтание на месте с оптимизацией это такая завуалированная лень. Типо ты вообще не знаешь, как заканчивать проект, но представляешь как делать оптимизации. И твой мозг подсознательно пытается не заканчивать этот этап.
Аноним 09/12/25 Втр 10:19:05 #24 №327477929 
>>327477792
А гит вообще нужен для таких поделок? Я бы хотел вкатиться, но ничего масштабного не пишу. Алсо, совет крайне годный, спасибо
Аноним 09/12/25 Втр 10:23:51 #25 №327478049 
>>327477412
Меня не интересуют твои говноконструкции из шарпа и прочих языков для пидорасов
[mailto:Sage] Аноним 09/12/25 Втр 10:25:00 #26 №327478077 
>>327477929
>А гит вообще нужен для таких поделок?
Разве что, чтобы удобно переключаться между изменениями. Но я бы рекомендовал уже к нему привыкать, чтобы потом не осваивать отдельно.

>Алсо, совет крайне годный, спасибо
В целом, переставай смотреть на свою работу как на какой-то финальный результат, и смотри как на функцию от усилий и времени, которых у тебя, очевидно, не бесконечное количество. Охуеешь как вырастет твоя продуктивность. Не обращай внимание, что качество поначалу просядет - за счет большего количества практики, вместо дрочения одних и тех же оптимизаций, оно быстро пойдет вверх.
[mailto:Sage] Аноним 09/12/25 Втр 10:27:01 #27 №327478138 
>>327477652
>Потому что мне не нравится ооп
Разве в расте жесткое ооп, которому обязательно следовать? Мне всегда казалось наоборот, но я только смарт контракты на его диалекте писал, сам раст не трогал.
Аноним 09/12/25 Втр 10:40:13 #28 №327478475 
>>327475101 (OP)
> читает какойто файл вместо того чтобы просто сделать time()
вайбкодеры
Аноним 09/12/25 Втр 10:42:42 #29 №327478548 
>>327477929
а ls нужен для таких поделок? я бы вкатился
у гита пять команд, там вкатываться некуда
Аноним 09/12/25 Втр 10:56:09 #30 №327478862 
>>327475101 (OP)
Блин, помню, на Ардуино пытался сделать свою игровую консоль с играми. По итогу сделал одну и забил.
comments powered by Disqus