Как стать автором
Обновить

Комментарии 59

Круто!
Остается то же самое провернуть на реальном железе.)

Про оператор switch Метанит по-видимому знаний не дает

И в правду, не дает......

Так работоспособность ReactOS на реальных компьютерах плохая, то я использовала эмулятор.

Тогда я не понимаю выбор ОС. Если она настолько плоха, что лучше использовать эмулятор, то зачем это вообще надо?

Прочитал пару слов об этой ReactOS - в альфа-версии с 98 года, 27 лет! А-фи-геть...

А по коду, вместо длинной цепочки if-ов и даже вместо потенциального switch сделать массив указателей на функции и вызывать их в цикле по индексу цикла. Будет существенно короче и изящнее.

Пока же код с таком виде не готов для публичного коммита (точнее, готов, но pull request не пройдет ревью).

НЛО прилетело и опубликовало эту надпись здесь

Да, вывод тоже можно оптимизировать, то есть, сделать только один вывод. вывод. Но цель всей утилиты, это всё-таки вывод на консоль.

НЛО прилетело и опубликовало эту надпись здесь

несколько 

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

Из изменений только вывод логотипа и вот этот участок кода:

 unsigned int a, b, c, d;
    char cpu_brand[49] = {0};

    get_cpuid(0x80000000, &a, &b, &c, &d);
    if (a >= 0x80000004) {
        unsigned int* brand = (unsigned int*)cpu_brand;
        get_cpuid(0x80000002, &brand[0], &brand[1], &brand[2], &brand[3]);
        get_cpuid(0x80000003, &brand[4], &brand[5], &brand[6], &brand[7]);
        get_cpuid(0x80000004, &brand[8], &brand[9], &brand[10], &brand[11]);
    }

    printf("CPU: %s\n", cpu_brand);

Который по сути ничего нового тоже не делает. Просто ассемблерные инструкции заменяет на более читаемые, не более. Видимо тут поработал ChatGPT :) Он хорошо умеет "упрощать".

НЛО прилетело и опубликовало эту надпись здесь

на винде апи вызвать тоже копипаста )

Я понимаю, что функционал в сабже на уровне «Hello, World!», но тут даже упоротое форматирование сохранено, просто переименовали функции и переписали две с половиной ассемблерные вставки.

Если что, оригинал даже под какой-то лицензией.

НЛО прилетело и опубликовало эту надпись здесь

Ну, от HelloWorld эта утилита отличается чуть менее чем ничем ;) Строк больше.

НЛО прилетело и опубликовало эту надпись здесь

Выход за границу массива Logo. Его можно было объявить как двумерный и на месте инициализипрвать.

НЛО прилетело и опубликовало эту надпись здесь

Да, что-то типа того, только условие цикла стало совсем некорректным.

НЛО прилетело и опубликовало эту надпись здесь

Неправильное было, неправильное и осталось.

Да всё тут "норм", только если строки будут не размера 8, а разного размера, то такое условие будет некорректно:

sizeof(Logo)/sizeof(Logo[0])

Потому что sizeof(Logo[2]) может отличаться от sizeof(Logo[0]). А так-то всё работает как нужно.

Что? Не понял к чему Вы это.

Указатель на статический массив и указатель на динамический массив - это два разных указателя и для них вычисление размера (sizeof) происходит по разному.

Если для первого (const char* Logo[10], в данном случае) sizeof(Logo) будет равен действительно 80 (потому что Logo содержит 10 элементов, каждый из которых представляет собой строку из последовательности 8-ми байт (если CHAR_BIT == 8)), то для второго (const char** Logo) значение sizeof(Logo) будет равно размеру указателя на динамически выделенную кучу (4 это будет байта или 8 - зависит от системы). Вы в этом можете сами убедится, тут всё довольно просто:

#include <iostream>

int main()
{
    const char *LogoStatic[10] =
    {
        "  $$ $$ $$$ $$$ $$ $$  ",
        " $     $$$$$$$$$     $ ",
        " $$ $$$$$$$$$$$$$$$ $$ ",
        " $$$$$$$$$$$$$$$$$$$$$ ",
        "   $ $$$$$$$$$$$$$ $   ",
        " $$$$  $$$$$$$$$  $$$$ ",
        "$ $$$$  $$$$$$$  $$$$ $",
        "$   $$$$$ $$$ $$$$$   $",
        "$      $$  $  $$      $",
        " $$ $  $$     $$  $ $$ "
    };
    
    char** LogoDynamic = new char*[10];
    
    std::cout << sizeof(LogoStatic) << std::endl;
    std::cout << sizeof(LogoDynamic) << std::endl;
    
    delete[] LogoDynamic;
    

    return 0;
}

Так что вычисление длины массива LogoStatic по формуле sizeof(LogoStatic) / sizeof(LogoStatic[0])) будет корректным в том случае, если все элементы массива LogoStatic будут иметь один и тот же размер (потому что деление опирается на первый элемент массива, а значит все элементы должны иметь один и тот же размер). Если это не так - будет либо ошибка (попытка доступа к недоступному участку памяти), либо неопределённое поведение.

Однако выход за границы массива в условии действительно будет:

for (int i = 0; i <= sizeof(Logo)/sizeof(Logo[0]); i++)

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

LogoStatic -- это массив из 10 указателей на const char*, на 64-разрядной архитектуре 10*8 = 80 байт. LogoStatic[0] -- указатель на const char, 8 байт, от длины строки не зависит. Так что sizeof(Logo[2]) не может отличаться от sizeof(Logo[0]).

LogoDynamic -- указатель на char*, 8 байт.

Все логично, если понимать разницу между массивом и указателем на указатель.

Не вводите людей в заблуждение.

Да, Вы правы. Я тут действительно ошибся, немного невнимательно посмотрел на этот массив.

Один из признаков плохого кода - вот такие когнитивные искажения. Человек видит одно, компилятор другое. Код пишется для человека, не для компилятора.

А потом на этом нейросеть обучат.

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

Код пишется для человека, компилятор работает так, как нужно человеку, более того - компилятор работает благодаря тому, что его определённым образом написал человек. Процессор работает так, как нужно человеку, всё IT так работает и так устроено (для человека), как и самая продвинутая нейросеть (LLM, GPT, и т.п.).

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

Важно понимать, что любые ошибки можно исправить. Вот и всё.

Важно понимать, что любые ошибки можно исправить

Можно. Только этот код не затем писался, чтобы его рефакторили.

НЛО прилетело и опубликовало эту надпись здесь

Присвоение в функции ros_logo() тоже с выходом за пределы массива.

Конечно.

на деле просто ищем апишки на получение

https://github.com/dylanaraps/neofetch?tab=readme-ov-file


исходя из того что на скрине просто поработать с апишками зачем лесть в лоулевл(не смотрел ваш код) тоесть для линукса там половина парсится в нужном месте(bash+awk), линукс сам всё сериализирует и уже имеет все имена, ну у виндоподобных ищем сколько файлов в апи, сколько памяти, какой аптайм, какой проц, там половина будет в апишках если не всё

а хотя раскрыл/посмотрел, нормально, просто его доработать чутка или оставьте так если вам нравится.

А код генерировал ChatGPT?

и статью тоже

Привет Автор.
Я горд за тебя. С полного ничего до fetch утилиты пусть для консоли это просто круто. Я хоть и немного умею программировать на C++ всё равно бы не написал такую утилиту.
Для простого написания программ для большинства современных ОС не требуется знания работы самой ОС. По этой причине я этого и не знаю и я больше могу сказать про сам язык чем про среду для которой пишу код.
Молодец. Если есть желание начать программировать хотя бы как хобби такие приложения куда лучше как и сказано в статье чем Hello World.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

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

Учитывая количество "плюсов" и "одобряющих комментариев" на этой платформе автор свою цель достиг :)

Ох уж эта наша мужская натура... используют её как только могут. Причём очень успешно. Есть даже социальные исследования, как парни в видеоиграх помогают другим игрокам с женскими персонажами, и как они плохо или нейтрально относятся к мужским персонажам - разница колоссальная :) Причём куча мужиков этим успешно пользуется и потом "меняет пол" в игре, вместе с ником, набрав достаточно "помощи" у других мужиков играя за женских персонажей.

Впрочем, всё как и должно быть. Большинство людей наивны и глупы, а потому на этом большинстве будет зарабатывать тот, кто по умнее и хитрее. Так всегда было, есть и будет (а может и нет).

Будет вдвойне смешнее, когда окажется, что даже бритые ляжки и педикюр на фото принадлежали обладателю Y-хромосомы.

НЛО прилетело и опубликовало эту надпись здесь

На самом деле желательно, чтобы утилита собралась в репозитории ReactOS для того, чтобы утилита Fetch была в ReactOS "из коробки"

НЛО прилетело и опубликовало эту надпись здесь

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

Никогда раньше про нее не слышал. Где ее скачать под андроид, чтобы заценить полезность?

В остальном все супер

Вы серьёзно? Тут скорее бот хорошо поработал, чтобы эту статью опубликовать, а Вы пишете что "все супер", даже несмотря на то, что код тупо скопирован отсюда https://github.com/NikkiNext/ROS_Fetch/blob/main/fetch.c ?

Видимо в оценке Вы руководствовались сексистским принципом "ааа, женщина", а не объективным положением вещей. Как это вообще можно "плюсовать"?

Хотя... думается мне, что тут не обошлось без ботов, на самом деле. И в самой статье, и в комментариях. Очень похоже на это. А может я не прав, и люди уже себя ведут как боты :)

НЛО прилетело и опубликовало эту надпись здесь

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

что то нашлепала в чатгпт, напиздила чужой код и вывалила это сюда

Не приходя в сознание.

Раньше этим не гордились (ц)

— Есть две "новости", плохая и хорошая, с какой начать?

— Давай с плохой...

— GetTickCount имеет период переполнения — примерно каждые ~49.7 суток (~2^32 мс). Это плохая "новость".

— Так, а хорошая?

— Ещё ни на одном скриншоте не было замечено, чтобы ReactOS работал столько суток без перезагрузки.

Ещё ни на одном скриншоте не было замечено, чтобы ReactOS работал столько суток без перезагрузки.

GetTickCount внутре переполняется потому что ;)

@moderator мы уже выяснили, "авторка" чуть подредактировала ворованный код и выдает это за свое, что это все ещё делает в публикациях?

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

Ну я написал модератору, толку то

Как же хорошо статья отражает нужду проверять информацию, прежде чем делать какие-либо выводы по поводу автора. Изначально, увидев этот рассказ, в голове засело то, что автор не умеет программировать, читая дальше удивило, что человек смог понять, как писать код за столь малое количество времени. Это заставило покраснеть. Минуя половину воды и прийдя к результату, немного прикурил. Задумался. Вышел в комментарии узнать, что думают по этому поводу другие люди и обнаружил, что люди ссылаются на код, очень уж похожий на этот: https://github.com/NikkiNext/ROS_Fetch/blob/main/fetch.c. И ахуел с того что этот пост все еще на плаву, так как помниться что годков так 3 назад я 2 недели сидел над реализацией BFS, набрался храбрости выложить на хабр, попросил конструктивной критики, и получил -карму +нормальнотак мнений по поводу наименований переменных. Интересно увидеть продолжение данных историй

Код в статье не принадлежит автору (оригинальный код https://github.com/NikkiNext/ROS_Fetch/blob/main/fetch.c и написан 4 года назад). Модератора уже тегнули где-то сверху, надеюсь, скоро статьи не станет.

Также в статье присутствуют логические ошибки: у обоих функций GlobalMemoryStatus и GlobalMemoryStatusEx минимальная версия — Windows XP / Windows Server 2003, так что их сравнение некорректно. При этом обе функции реализованы в ReactoOS.

Часть про поддерживаемые процессоры тоже неверна — ReactOS поддерживает как минимум все процессоры с SSE2. И вместо скрина с запущенной ReactOS внутри virtualbox автор любезно оставил(а) в статье картинку из интернета.

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

И в целом статья не похожа на читаемый текст: примечание о детали реализации кода (GlobalMemoryStatus) дано до ссылки на код / самого кода, мысли обрываются на половине, некоторые предложения разбиты на части.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации