LINUX.ORG.RU

[опять я] требуются разработчики в проект


0

2

Я уже пиарил здесь свое поделие, и меня отправили переписывать его с учетом разделения на две части (ядро, которое выводит информацию в консоль и гуй, который ее парсит). Я это сделал и теперь вернулся. Повторюсь, программа предназначена для сбора информации о софте и железе (как пример, lshw и hardinfo, хотя я равняюсь на Everest (ныне AIDA64)) , называется hardinform. Располагается на github: git://github.com/inish777/hardinform
Приветствуется как помощь в создании кода, так и советы (по читаемости кода, архитектуре, и прочее из опыта). Кастую amaora, который хотел написать несколько тестов производительности.

★★

family2[] = {
    { 0x01, "Other" },
    { 0x02, "Unknown" },
    { 0x03, "8086" },
    { 0x04, "80286" },
    { 0x05, "80386" },
    { 0x06, "80486" },
    { 0x07, "8087" },
    { 0x08, "80287" },
    { 0x09, "80387" },
    { 0x0A, "80487" },....

Я думаю, что такие вещи не должны присутствовать в программе. Еще и malloc(calloc) может вернуть NULL.

rg-400
()

Поглядел малость, зачем такие «сложности»:

int cpu_info ()
{
  FILE *cpufp/* /proc/cpuinfo */ /*, *sysfs_max_cpu_freq_fp /sys/devices/system/cpu/cpu%d/cpufreq/cpuinfo_max_freq */;
   
  char* ch = (char*)malloc (MAXLEN);
  char* line = (char*)malloc (MAXLEN);
  char* buf = (char*)malloc (MAXLEN);
...  
}

Будь мужиком, юзай стек, и вызовы free в конце не понадобятся:

   
  char ch[MAXLEN];
  char line[MAXLEN];
  char buf[MAXLEN];
Этот «приём» у тебя красной линией через весь код проходит :)

xterro ★★★★★
()
Ответ на: комментарий от rg-400

Такая конструкция в GCC во время компиляции или во время выполнения инициализируется? Что-то мне подсказывает, что во время выполнения...

buddhist ★★★★★
()
Ответ на: комментарий от xterro

Да и

if (user_data->info_db->cpu_info_db[x]->cpu_model_name)
                        gtk_tree_store_insert_with_values (user_data->InformationTreeStore, cpu_model_name, cpu, pos++, 0,"Model name" , 1, user_data->info_db->cpu_info_db[x]->cpu_model_name, -1);
такие портянки не есть гуд, разбивай на несколько строк, а то пока промотаешь...

xterro ★★★★★
()
Ответ на: комментарий от buddhist

Такая конструкция в GCC во время компиляции или во время выполнения инициализируется?

В GCC даже strlen(«foo») на этапе компиляции в троечку развернется, а ты уж за такие очевидности переживаешь :)

anonymous
()
Ответ на: комментарий от xterro

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

netcat ★★
() автор топика
Ответ на: комментарий от anonymous

ЕМНИП, именно такая конструкция у меня почему-то во время выполнения инициализировалась. Могу ошибаться, давно было.

buddhist ★★★★★
()
Ответ на: комментарий от netcat

У тебя настолько большое кол-во данных что для твоей вундервафель-системы стека не хватило? Не боись, хватит.

xterro ★★★★★
()
Ответ на: комментарий от SergMarkov

Он вроде как отделил гуй от не гуя, так что можешь наваять свой гуй, на чём хочешь )

xterro ★★★★★
()
Ответ на: комментарий от xterro

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

netcat ★★
() автор топика
Ответ на: комментарий от SergMarkov

если ты о Qt, то нет. я не понимаю сути ООП, и использовать C++ не буду. теорию знаю(полиморфизм, все прочее), но как использовать это на практике - не понимаю. если кто может, посоветуйте проект, в коде которого более или менее наглядно продемонстрирована практика ООП.

netcat ★★
() автор топика
Ответ на: комментарий от xterro

MAXLEN

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

Уж лучше напилить что-нибудь с realloc-ом, блоками по N байт, чтоб не часто.

anonymous
()
Ответ на: комментарий от anonymous

Уж лучше напилить что-нибудь с realloc-ом, блоками по N байт, чтоб не часто.

Лучше не выпендриваться и не юзать динамическую память, пока действительно не понадобится. C такими рассуждениями можно до написания самопальных аллокаторов дойти.

AptGet ★★★
()

Я уже пиарил здесь свое поделие, и меня отправили переписывать его с учетом разделения на две части (ядро, которое выводит информацию в консоль и гуй, который ее парсит). Я это сделал и теперь вернулся. Повторюсь, программа предназначена для сбора информации о софте и железе (как пример, lshw и hardinfo, хотя я равняюсь на Everest (ныне AIDA64)) , называется hardinform. Располагается на github: git://github.com/inish777/hardinform
Приветствуется как помощь в создании кода, так и советы (по читаемости кода, архитектуре, и прочее из опыта). Кастую amaora, который хотел написать несколько тестов производительности.

Чем можно помочь? Знаю асм/си/гтк, но опыта в реальных проектах 0, поэтому буду рад помочь.

Deleted
()
Ответ на: комментарий от rg-400

ты думаешь херню. Так и нужно, чтоб данные лежали в .data

anonymous
()
Ответ на: комментарий от Deleted

Поле для деятельности огромно (сравни мою программулину и hardinfo (про AIDA64 - не говорю)). навскидку - отсутствует возможность настройки программы, о видеокарте инфы нет, о переменных окружения нет, о винчестере инфы нет, etc. Говори ник на github, открою тебе доступ к репозиторию.

netcat ★★
() автор топика
Ответ на: комментарий от Deleted

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

netcat ★★
() автор топика
Ответ на: комментарий от AptGet

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

Какой, по-вашему, оптимальный MAXLEN для строки с названием процессора, например?

anonymous
()
Ответ на: комментарий от anonymous

Какой, по-вашему, оптимальный MAXLEN для строки с названием процессора, например?

1 страница для текстового буфера

AptGet ★★★
()
Ответ на: комментарий от bk_

Я просто стал использовать gtk3 вместо gtk2(раньше прога юзала его). Я не изменил ни строчки кода. Что переписывать-то? Просто слинковать с библиотекой gtk2 и все.

netcat ★★
() автор топика

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

А по сабжу: PKGBUILD есть? Лень руками собирать...

geekless ★★
()
Ответ на: комментарий от netcat

Gtk2 устарел

А софт, который на нём работает, в курсе? :-D

geekless ★★
()
Ответ на: комментарий от Delirium_veritas

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

xterro ★★★★★
()
Ответ на: комментарий от xterro

А критерии нужности? Например 8-16 килобайт в стеке хранить? А метр?

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

Delirium_veritas
()
Ответ на: комментарий от Delirium_veritas

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

BattleCoder ★★★★★
()
Ответ на: комментарий от Delirium_veritas

Надо исходить не из единообразия, а из необходимости применения. Нафига располагать переменную, размером 1024 байта в куче? Тем более что по выходу из функции она освобождается? Лишние накладные расходы(небольшие, но всё же), лишний код. Обычно в куче располагают объекты, которые либо достаточно крупные(их создаётся большое количество), или которые должны существовать на протяжении работы программы(или какое-то определённое время в рамках её работы), и не ограничены областью видимости одной функции.

xterro ★★★★★
()
Ответ на: комментарий от geekless

lshw собирает информацию только о hardware, да и то не всю. Я же хочу создать нечто вроде AIDA64. + мне же нужно учиться создавать свое, не всю же жизнь мне придется только морды к готовым инструментам писать

netcat ★★
() автор топика
Ответ на: комментарий от ZenitharChampion

ну хоть кому-то это нужно, уже стоит продолжать работать :-)

netcat ★★
() автор топика
Ответ на: комментарий от netcat

Я же хочу создать нечто вроде AIDA64.

Я вбил AIDA64 в гугл, мне сказали: AIDA64 offers a complete set of tools to benchmark, overclock, monitor, fine-tune, and troubleshoot Windows based desktop and mobile computers.

Бред про «overclock, monitor, fine-tune, and troubleshoot» пока оставим, поговорим о benchmark.

Ты хочешь создать фреймворк для тестирования производительности подсистем компьютера и единую базу даных к нему? Отлично, достойное начинание. Но почему ты вместо этого занялся реализацией кривого аналога lshw? Бенчмаркинг не имеет НИКАКОГО отношения к сбору информации о железе. Это две соврешенно разных задачи.

lshw собирает информацию только о hardware, да и то не всю.

Ты думаешь, что ты соберешь «всю»? Почему бы тогда не доработать lshw?

Сорцы открыты?

$ pacman -Qi lshw | grep Лиц
Лицензии              : GPL
Сорцы открыты. Нет проблем.

не всю же жизнь мне придется только морды к готовым инструментам писать

А написать хорошую морду — та еще задача. Подчас, бывает сложнее разработки backend-а. Страшные кишки программы никто не видит, а вот страшный неюзабельный интерфейс видят все. Так что не стоит от разработке морд говорить столь пренебрежительно.

geekless ★★
()
Ответ на: комментарий от geekless

разные задачи

Ну пусть это будет еще одна задача моей программы.

доработать lshw

Учитывая объем усовершенствований - проще свое написать, с учетом того, что lshw написана на плюсах и использует ООП, в котором я ни бум-бум.

netcat ★★
() автор топика
Ответ на: комментарий от geekless

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

netcat ★★
() автор топика
Ответ на: комментарий от netcat

Ну пусть это будет еще одна задача моей программы.

Зачем тебе писать монстра, решающего 3 задачи, если можно написать 3 нормальные программы? Блеать, зачем? Объясни мне.

Тем более, что для первой задачи программа уже написана.

Учитывая объем усовершенствований - проще свое написать

«Учитывая объём усовершенствований, необходимых для замены дисков на моей тачке, проще создать собственный автозавод.» А еще лучше начать с переизобретения двигателя.

с учетом того, что lshw написана на плюсах и использует ООП, в котором я ни бум-бум.

Это вообще какая-то нелепость. Ты программист или где? Раз взялся писать софт, значит программист. А раз программист, должен знать инструменты. Не знаешь — учи.

Вспоминается боян про специалиста по левой нозде, который ничего не понимает в правой.

geekless ★★
()
Ответ на: комментарий от geekless

Everest, кроме бенчмаркинга, занимается еще и сбором информации, кстати великолепно это делая, что свидетельствует о немаловажности этой функции для ее разработчиков. AIDA64 - его продолжение. То, что я хочу получить, похоже на hardinfo, но только лучше.

netcat ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.