Комментарии 59
Круто!
Остается то же самое провернуть на реальном железе.)
Про оператор switch Метанит по-видимому знаний не дает
Так работоспособность ReactOS на реальных компьютерах плохая, то я использовала эмулятор.
Тогда я не понимаю выбор ОС. Если она настолько плоха, что лучше использовать эмулятор, то зачем это вообще надо?
Прочитал пару слов об этой ReactOS - в альфа-версии с 98 года, 27 лет! А-фи-геть...
А по коду, вместо длинной цепочки if-ов и даже вместо потенциального switch сделать массив указателей на функции и вызывать их в цикле по индексу цикла. Будет существенно короче и изящнее.
Пока же код с таком виде не готов для публичного коммита (точнее, готов, но pull request не пройдет ревью).
код я написала самостоятельно и он работает на ReactOS
Это вы 4 года назад писали?
https://github.com/NikkiNext/ROS_Fetch/blob/main/fetch.c
Отдельные функции выглядят как Ctrl+C
Ctrl+V
оттуда.
несколько
Ключевое слово :) Если обратите внимание, то изменений там не так уж и много. По большей части имена функций изменены. Там даже форматирование скопировано в чистом виде.
Из изменений только вывод логотипа и вот этот участок кода:
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 :) Он хорошо умеет "упрощать".
на винде апи вызвать тоже копипаста )
Ну, от HelloWorld эта утилита отличается чуть менее чем ничем ;) Строк больше.
Выход за границу массива Logo. Его можно было объявить как двумерный и на месте инициализипрвать.
Да, что-то типа того, только условие цикла стало совсем некорректным.
Да всё тут "норм", только если строки будут не размера 8, а разного размера, то такое условие будет некорректно:
sizeof(Logo)/sizeof(Logo[0])
Потому что sizeof(Logo[2]) может отличаться от sizeof(Logo[0]). А так-то всё работает как нужно.
Не будет. Или 8 или 4 байта в зависимости от разрядности.
Что? Не понял к чему Вы это.
Указатель на статический массив и указатель на динамический массив - это два разных указателя и для них вычисление размера (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, и т.п.).
Всё делается для человека и человеком. Вся интеллектуальная сфера, которую мы построили, она работает на человека и для человека. Не вижу здесь что-то негативного.
Важно понимать, что любые ошибки можно исправить. Вот и всё.
на деле просто ищем апишки на получение
https://github.com/dylanaraps/neofetch?tab=readme-ov-file
исходя из того что на скрине просто поработать с апишками зачем лесть в лоулевл(не смотрел ваш код) тоесть для линукса там половина парсится в нужном месте(bash+awk), линукс сам всё сериализирует и уже имеет все имена, ну у виндоподобных ищем сколько файлов в апи, сколько памяти, какой аптайм, какой проц, там половина будет в апишках если не всё
а хотя раскрыл/посмотрел, нормально, просто его доработать чутка или оставьте так если вам нравится.
А код генерировал ChatGPT?
Привет Автор.
Я горд за тебя. С полного ничего до fetch утилиты пусть для консоли это просто круто. Я хоть и немного умею программировать на C++ всё равно бы не написал такую утилиту.
Для простого написания программ для большинства современных ОС не требуется знания работы самой ОС. По этой причине я этого и не знаю и я больше могу сказать про сам язык чем про среду для которой пишу код.
Молодец. Если есть желание начать программировать хотя бы как хобби такие приложения куда лучше как и сказано в статье чем Hello World.
Тут крупнее: https://leonardo.osnova.io/7eee3bf4-9fc6-5b53-9984-3d12a8661917
AI generated.
Тут фото настоящее, наверно: https://dtf.ru/id2150981/3716188-dobroe-utro-dtf
Полагаю, что публикация таких статей с женского профиля (на котором присутствует определённое изображение), имело своей целью привлечь к себе внимание со стороны противоположного пола. Судя по публикациям в DTF, возможно, не просто так, а с определённо целью будущего заработка (о чём говорят комментарии под постами).
Учитывая количество "плюсов" и "одобряющих комментариев" на этой платформе автор свою цель достиг :)
Ох уж эта наша мужская натура... используют её как только могут. Причём очень успешно. Есть даже социальные исследования, как парни в видеоиграх помогают другим игрокам с женскими персонажами, и как они плохо или нейтрально относятся к мужским персонажам - разница колоссальная :) Причём куча мужиков этим успешно пользуется и потом "меняет пол" в игре, вместе с ником, набрав достаточно "помощи" у других мужиков играя за женских персонажей.
Впрочем, всё как и должно быть. Большинство людей наивны и глупы, а потому на этом большинстве будет зарабатывать тот, кто по умнее и хитрее. Так всегда было, есть и будет (а может и нет).
Плохо, что за три абзаца несколько раз читаем, что вы не умеете программировать, но так и не понятно, что собственно делает утилита fetch (я, например, не знал). В остальном все супер
Никогда раньше про нее не слышал. Где ее скачать под андроид, чтобы заценить полезность?
В остальном все супер
Вы серьёзно? Тут скорее бот хорошо поработал, чтобы эту статью опубликовать, а Вы пишете что "все супер", даже несмотря на то, что код тупо скопирован отсюда https://github.com/NikkiNext/ROS_Fetch/blob/main/fetch.c ?
Видимо в оценке Вы руководствовались сексистским принципом "ааа, женщина", а не объективным положением вещей. Как это вообще можно "плюсовать"?
Хотя... думается мне, что тут не обошлось без ботов, на самом деле. И в самой статье, и в комментариях. Очень похоже на это. А может я не прав, и люди уже себя ведут как боты :)
Тоже ничего не понимаю в программировании, но судя по коментам и статейке "автор_ка" что то нашлепала в чатгпт, напиздила чужой код и вывалила это сюда. Самое страшное что это плюсуется.
— Есть две "новости", плохая и хорошая, с какой начать?
— Давай с плохой...
— GetTickCount имеет период переполнения — примерно каждые ~49.7 суток (~2^32 мс). Это плохая "новость".
— Так, а хорошая?
— Ещё ни на одном скриншоте не было замечено, чтобы ReactOS работал столько суток без перезагрузки.
@moderator мы уже выяснили, "авторка" чуть подредактировала ворованный код и выдает это за свое, что это все ещё делает в публикациях?
Как же хорошо статья отражает нужду проверять информацию, прежде чем делать какие-либо выводы по поводу автора. Изначально, увидев этот рассказ, в голове засело то, что автор не умеет программировать, читая дальше удивило, что человек смог понять, как писать код за столь малое количество времени. Это заставило покраснеть. Минуя половину воды и прийдя к результату, немного прикурил. Задумался. Вышел в комментарии узнать, что думают по этому поводу другие люди и обнаружил, что люди ссылаются на код, очень уж похожий на этот: 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) дано до ссылки на код / самого кода, мысли обрываются на половине, некоторые предложения разбиты на части.
Автор, в следующий раз, пожалуйста, прочитай сгенерированный набор предложений и оцени, насколько он похож на реально кем-то написанный текст.
Я портировала знаменитую утилиту Fetch на ReactOS