sysInfo

Nakon strasno loseg odaziva na mail kojeg sam posalo na mailing listu, odlucio sam ovaj mini-projekat spomenuti i ovdje.

Da budem iskren, planirao sam to tek kasnije, poslije ove neke, nazovimo, testne faze, ali sta je tu je.



Ovaj program je i neka vrsta uvida na kompletnu situaciju u udruzenju (tj. da vidim, kao i ostali, da li udruzenje funkcionira kao skup nezavisnih pojedinaca, ili kao pak ono sto je zastitni znak svakog pojma “udruzenje”).



Sve potrebno cete naci na code.linux.org.ba, kao i u readme.txt koji dodje uz program.



PS.

Nihade, hvala na prijedlozima.



Pozdrav

Sanel



Sanele, mislim da je tvoj problem sto jako malo ljudi ovdje koristi Linux od kuce.

a moj je problem sto mi server uporno

tvrdi da sysinfo.zip ne postoji???



dobradusa

Hi,

zeznuo sam velika i mala slova.

Sredio sam to.



>Sanele, mislim da je tvoj problem sto jako malo ljudi ovdje koristi Linux od kuce.<



Ja ne bih rekao da je ovo moj problem, vec problem tih korisnika ; a osim toga, zdravo je promjeniti ucmalu windows okolinu.



pozdrav

Sanel

Hm, evo da dodam nesto sto spada u naucnu fantastiku.

Nedavno surfajuci netom naletim na program istog naziva, sa malo vecim brojem verzije pored svoga imena. Rekoh ok, velika je vjerovatnoca da je neko smislio isto ime za program koji isto radi. Ja pogledah i screenshotove, kada ono program izgleda upravo onako kako bih trebla izgledati verzija 1.0 mog cuda.

Zijan covjece. Kao da mi je neko citao iz glave.

Kao slag na ovo sve, taj program ima registrirano ime SysInfo (jos ce me neko tuziti )



Nego nema druge vec promeniti ime; sto se tice dizajna, hm…, sad za sad je takakv kakav jeste, pa sta vrijeme donese.

Ako ne vjerujete, evo link:

>http://www.magnicomp.com/sysinfo/screens/general_tree.jpg



Komentari ?



PS.

danas izgleda nista ne moze biti uradjeno i smisljeno bez da postoji nesto slicno na netu.



Pozdrav

Sanel

[b]From: kk

To: Sanel[/b]

Iako je kod nas u Bosni i Hercegovini relativno malo ljudi koji koriste Linux, a jos mnogo manje onih koji ga poznaju (ili zele da ga upoznaju), ipak raduje cinjenica da postoji barem nekolicina onih koji se trude da urade nesto ne bi li pokrenuli trome mase informaticara da konacno shvate da je sav pametan svijet presao na Linux i da je dosta vise “bajatih” kolaca iz C:WINDOWSCOOKIES. Bilo kako bilo, cilj ovog mog javljanja nije da puno supljiram oko nekih opce poznatih stvari, nego da probam da dam svoj skromni doprinos tvom projektu.

Iako je ovo (izgleda) prvi_i_jedini javni projekat ovog tipa na vasoj stranici (mozda ljudi ocekuju vise, ko zna) i uprkos cinjenici da postoje i slicni projekti na Internetu, mislim da ga ne treba odmah sutnuti u smece i da treba od njega napraviti nesto ozbiljnije. Nije vise ni bitno da li je ideja originalna ili ne. Dovoljno je da pokrenes par ljudi da se zamisle o problemu i ukljuce se u projekat sa svojim prijedlozima, komentarima, zakrpama, pa cak i pitanjima. Mislim da je to ono sto treba informaticarima u BiH koji, zacarani sarenilom WinXP-a, nisu ni svjesni njegovih uzasnih performansi (prije odredjenog vremena na IBM developerWorks-u sam procitao clanak o IPC, tacnije o cijevima (pipes) pod Linuxom, Win2K i WinXP - covjek prosto ne moze da vjeruje da poslije Win2K moze doci takvo nesto kao sto je XP – link na dokument o kojem govorim naveden je u fusnoti).

Predjimo na stvar…

Skinuo sam tvoj source i pregledao ga onako letimicno. Nisam ga kompajlirao, jer nema potrebe, sve je otprilike jasno. Dakle, ti citas razlicite fajlove iz direktorija /proc, parsujes ih i ispisujes u nekom svom usminkanom formatu sa pendzerima (mozda bi cak i veseli Windows korisnik na trenutak pozelio da predje na Linux). Ja imam u osnovi dva prijedloga koji ti mogu pomoci da malo unaprijedis svoj program:

  1. Dizajniraj program na principu “dva kraja” - “front-end” i “back-end”. Na taj nacin spajas dvije stvari. Naime, imas program koji radi u tekstualnom modu i koji mozes vrlo lahko kombinovati sa bilo kojim od standardnih UNIX alata da uradis puno posla za malo vremena i sa relativno malo truda, dok s druge strane mozes jednostavno napraviti front-end za taj program, koji ce iskoristiti dobre performanse Linuxa u pogledu IPC-a i ispisivati informacije po lijepim sarenim pendzerima. Veliki broj UNIX/Linux programa koristi ovaj princip, jer je vrlo fleksibilan i omogucava visok stepen portabilnosti (pogledaj, npr. Fyodorov nmap)

  2. Druga stvar, koju bih zelio da istaknem, tice se tvog parsera. Jedna od vrlo vaznih smjernica, kojih se mozes drzati pri unaprjedjenju svog parsera, jeste cinjenica da formati STANDARDNIH fajlova u /proc fajl sistemu ne zavise od distribucije, nego iskljucivo od verzije kernela, jer je proc fajl sistem sastavni dio kernela. Dakle, bitno je da pri parsovanju podataka koje proc nudi vodis racuna samo o verziji kernela. U tom slucaju mozes napraviti 100% precizan parser, o cemu bih zelio da govorim u nastavku.

Prije nego pocnem, zelio bih napomenuti da ja radim na RH6.2 sa kernelom 2.2.14, dakle sva prica se odnosi na taj kernel. Sto se tice kernela 2.4, postoje neke razlike, koje cu se truditi da napomenem radi lakseg snalazenja.

Izvorni kod proc fajl sistema lociran je u direktoriju /usr/src/linux/fs/proc i sastoji se od nekoliko fajlova. U cilju pisanja kvalitetnog parsera podataka, potrebno je analizirati fajl array.c (Napomena: u kernelu 2.4 fajl array.c podijeljen je na array.c i proc_misc.c). Fajl array.c sadrzi rutine za formatiranje podataka koje proc emituje prema userlandu - kljucna rijec je ovdje “formatiranje”. Kao sto se odmah da primijetiti, funkcija koja se koristi za formatiranje podataka je sprintf(). Sada je sve na dohvat ruke. Ako pogledas kod, vidjeces da tu imas sve poznate formate koje proc koristi za ispis podataka, dakle imas “filter” kroz koji podaci prolaze. U cilju pravilnog parsovanja podataka potrebno je da, koristeci iste formate, napravis inverznu operaciju, tj. da podatke skeniras pomocu neke od funkcija iz familije scanf() i gotovo.

Posto je prilicno kasno i ja imam drugog posla, zelio bih da ovaj tekst privedem kraju sa jednim malim primjerom. Naime, samo navodim primjer koda koji ce parsovati podatke iz fajla /proc/uptime i iste ispisati na nasem dragom bosanskom jeziku (to bi se moglo nazvati i “lokalizacijom proc-a”). Funkcija koja formatira podatke u fajlu /proc/uptime naziva se get_uptime() u kernelu 2.2 ili uptime_read_proc() u kernelu 2.4. Ono sto je ovdje najbitnije jeste da su ove dvije funkcije skoro potpuno identicne i da se format izlaznih podataka ne razlikuje.

Format o kome govorimo je: “%lu.%02lu %lu.%02lun”, pri cemu je prvi podatak broj sekundi koje su protekle od podizanja sistema, drugi podatak je odgovarajuci broj stotinki. Treci i cetvrti podatak imaju ista znacenja, s tim da se odnose na procesorsko vrijeme koje je konzumirao “idle” proces. Dakle, prilikom izvodjenja inverzne operacije (tj. parsovanja) potrebno je alocirati prostor za 4 podatka tipa “unisgned long” (sto se vidi iz koda, a i iz samog formata). Primjer koji navodim u nastavku uzima u obzir cinjenicu da prva dva podatka zajedno cine “uptime”, dok druga dva zajedno cine “idle-time”, tako da je bilo zgodno definisati jednu strukturu u cilju njihovog lakseg grupisanja:








 /*







  * Program koji cita i _ko_fol_parsuje_ fajl "/proc/uptime"







  * napisan 20.12.2002 by kk







  */















#include <stdio.h>







 







 /*







  * Struktura za lakse i preglednije grupisanje sekundi i stotinki







  */







struct uptime_info {







        unsigned long sec;      /* sekunde */







        unsigned long sto;      /* stotinke */







};







 







main()







{







        struct uptime_info up, idle;







        FILE *f;







 







        if (!(f = fopen("/proc/uptime", "r"))) {







                perror("fopen");







                exit(-1);







        }







 







        /*







         * Citamo podatke iz fajla koristeci isti format







         * koji proc koristi za ispis







         */







        fscanf(f, "%lu.%02lu %lu.%02lun", &up.sec, &up.sto, &idle.sec, &idle.sto);







        fclose(f);







 







        /*







         * Ispis u "lokalizovanom" formatu i kraj







         */







        printf("Uptime je: %lu sekundi i %02lu stotinki.n", up.sec, up.sto);







        printf("  Idle je: %lu sekundi i %02lu stotinki.n", idle.sec, idle.sto);







        exit(0);







}















/* kraj */






Eto, dosta vala od mene, de nek i ostali nesto kazu …

(evo ispod je link na onaj dokument koji govori o slavnom XP-u)


1) IBM developerWorks: Pipes in Linux, Windows 2000 and Windows XP

http://www-106.ibm.com/developerworks/library/l-rt4/index.html

Prije nego što probam tvoj program postoji li mogućnost da mi pojasniš upotrebnu vrijednost samog programa. “Pokazuje sistem podatke” meni ne govori ništa. ! :frowning: :shock:

Hvala

Sahbaze, prijatelju,

Sigurno imas pravo da postavis takvo pitanje, jer se ovakvi programi ne upotrebljavaju veoma cesto, tako da se slobodno moze reci da mu, sa aspekta prosjecnog korisnika Linuxa, upotrebna vrijednost tezi 0+.

Medjutim, kao sto sam naveo u svom prethodnom javljanju, nije vise ni bitno ima li program neku genijalnu primjenu ili neprikosnivenu originalnost. Radi se o tome da je covjek barem pokusao da pokrene ljude da razmisljaju o necemu, da se ukljuce, da razgovaraju o necemu. Tako je i ovo tvoje javljanje sigurno pozitivan pomak, jer svaki feedback, bilo prijedlog ili kritika, idu u prilog onome kome su upuceni (naravno, aku mu sujeta dozvoli da ih prihvati - u suprotnom, sam sebi nepravdu nanosi).

Sa druge strane, ako bi ti kao programer zelio da saznas koje sve fajl sisteme tvoj kernel podrzava u datom trenutku, najlaksi nacin da to uradis bio bi da procitas sadrzaj fajla /proc/filesystems i to je to. Drugi, nimalo bezbolan nacin, bio bi da napises kernel modul koji bi trebao ucitati, a koji bi onda prosao kroz listu registrovanih fajl sistema u kernelu i iz svakog elementa liste procitao ime i poslao ga tvom programu u userland (putem sistemske rutine, koju bi opet ti trebao napisati). Za ucitavanje modula bi naravno morao biti root, dakle obicni korisnik bi “mog’o mahat usima”.

Nadalje, /proc ti nudi i brojne per-process informacije, koje su ti dostupne po standardnom principu - na osnovu PID-a datog procesa. Najbolji nacin da shvatis pravu vrijednost ovoga je da u shellu otkucas:

$ strace ps 2>&1 | grep proc

Tako ces vidjeti koliko komanda ps zavisi od proc fajl sistema.

Prema tome, upotrebna vrijednost postoji, mozda ne za obicnog korisnika, ali za programera zasigurno da. Nadam se da sam ti ovim mogao ponuditi barem neke osnovne informacije, koje si mozda i znao, ali nema veze - mozda neko drugi nije…

Veoma iscrpan odgovor.
Hvala KK…

Program za mene nema “neku” vrijednost ali je svakako za pohvalu to što radiš Sanele. Samo naprijed…

konacno!!!

Trebalo je da prode vrijeme od 5. jula do 21. decembra, pa da se neko pojavi i napise nesto o ovom topicu. Pojavio se neki kk i napisao dva prava tehnicka “clanka”, o bojama i ovaj o Sanelovom programu (mozete ih slobodno staviti na stranicu kao tutorijale). Ja sad imam sljedece zamjerke:

a. Sanel se uposte nije javio da kaze nesto po pitanju ovog topica. Da kaze “valja, odlicno” ili “ne valja, bez veze”, al eto da nesto kaze.

b. pola godine je proslo, a neki anonimus (izvinjavam se kk) mora pisat o vasim projektima i trudit se da ih unaprijedi, a vi imate samo jedan programerski projekat, i svadate se oko toga da li treba da postoji LugZE ili samo LugBIH. Pravo bez veze!

Dajte ba ljudi, uozbiljite se malo!

pReLe.

Vozdra,

[quote]b. pola godine je proslo, a neki anonimus (izvinjavam se kk) mora pisat o vasim projektima i trudit se da ih unaprijedi, a vi imate samo jedan programerski projekat, i svadate se oko toga da li treba da postoji LugZE ili samo LugBIH. Pravo bez veze!
[/quote]

ja nazalost nisam programer i ne namjeravam se baviti programiranjem, tako da mi se cinilo da je moj komentar suvisan (ako govorimo o programiranju).
Ideja je zaista pohvalna, i mislim da bi se sa projektom trebalo nastavit, bezobzira sto je slican vec neko napravio. Da budem iskrena ja se vise volim zaroviti u /proc direktorij i saznati ono sto mi treba, ali to je samo navika, koju mogu mijenjati. Aplikacija koja daje formatirane informacije iz /proc direktorija bi sigurno mogla pomoci mnogima, zato apeliram da se rad na ovome nastavi!

Pozdravi,

Amila

Vozdrica Vedrane,

Napisa ti ogroman tekst o tome kako nam ne trebaju programerski projekti i kako treba da kompajliramo vlastite distribucije, i teksta odjednom nestade…
Ja, kao osrednji programer, mogu samo reci da se neko pravo napati da napise taj kernel, a mi samo napisemo “make ovo”, “make ono” i eto, ispadosmo ko strucnjaci. Nemoj to shvatiti kao nesto licno, ali ako cemo oko “vlastite” distribucije, Knopper je taj koji je imao znanje da je napravi, a mi mozemo samo programe na njemackom i engleskom u Knoppixu zamijeniti lokalizovanim verzijama, a o tome da napravimo vlastitu distribuciju ‘nako “from scratch” - e za to, pasa moj, treba pravo puno znanja, izmedju ostalog i programerskog. Nego, haj’ da mi to nazovemo BHLDWIALVOK (BH Linux Distro Which Is A Localized Version Of Knoppix) i da budemo sretni i mi i Knopper, a i ljudi koje to mozda moze i zainteresovati… i de otvorite taj projekat, pa da se ljudi ukljuce - da ne supljiramo vise!

pozdrav,

pReLe.

Neću da talasam :slight_smile:

Ali ako si pročitao što je bilo, onda ti je sve jasno.

Jarane, ne kažem ja da ne treba programirati ili da je programiranje loše itd. Kažem da se to vrijeme korisnije može uložiti. Ako je tebi jedini cilj u životu da te poznaju kao hackera koji je napravio svoju vlastitu distribuciju from scratch, onda bujrum. Meni nije. Ja sam za sebe odabrao jednu puno težu misiju - da BiH bude prva na ovoj listi, ili makar među prvih 10 (teško da možemo prestići Antarktik ili Farska ostrva :wink:

Šta ćeš… valjda pravljenje vlastite distribucije nije dovoljan izazov za mene 8)

Da, da, evo mene iz zimskog sna :). Pravo sam se iznenadio, ugodno, naravno, kada sam vidio temu o kojoj se raspravlja.
Moram priznati da sam zaboravio na ovo (reci ce neko, svasta!), ali kao sto
sam spomenuo u prvom postu, zahvaliti treba losem odazivu, Ipak,
uradio sam jos dvije verzije koje se suse kuci na disku.

Dalje, hvala svim prijedlozima i kritikama, naraocito covjeku koji je i pokrenuo ovu uspavanu diskusiju. Samo da spomenem; prije svega ovo
je bio neki demo da se licno upoznam sa FLTK toolkitom, a kao drugo,
neko vrijeme (znaci prije) sam razmisljao o samom parseru.
Iako sam ga bolje odradio, primjetio sam da se /proc struktura u raznim
verzijama kernela mijenja. “Konsultovao” sam druge uratke i dosao
do zakljucka; hm nakon poprilicnog proracuna u kojeg sam uposlio
Cray i vodecu svjetsku elitu naucnika upregnutih dimom Drine (koju je
moja dimacka malenkost konzumirala u povecim dozama), da je bolje da
jednostavno prepisem kompletanu strukturu /proc fajlova u prozor.

Kako sve ovo izgleda, ako stignem stavicu sljedece sedmice.
Naravno, posto sam uvijek bio otvoren za (brojevi telefona, Voodoo kartice, i sl.) sve kritike, “popljuvotine” i prijetnje (sa onim u zagradi naravno) :slight_smile: ostavite ovdje ili na e-mail

Sanel

[quote]Samo da spomenem; prije svega ovo
je bio neki demo da se licno upoznam sa FLTK toolkitom,[/quote]

Now THAT is interesting :slight_smile:
Sto ne rece ranije da je fulltick u pitanju? Vec duze vremena planiram da nesto cackam oko toga, ali nema se vremena. Da li si vidio EDE? Zvuci interesantno…

Sanele,

Veoma mi je drago da si se pojavio, jer se ovdje u sustini radi o tvom projektu i ideji, a topic je polahko poceo da gubi smisao i cinilo se da ce zavrsiti u mrtvoj petlji tipa:

replika(const char *target)
{
    if (!strcmp(target, "vedran"))
        replika("prele");
    else
        replika("vedran");
}

Ali eto, ipak nije tako, i vjerujem da ce i prepirka izmedju Verdana i Preleta prestati ako budemo ovdje razgovarali o projektu sysInfo, za sto sada, nakon tvog pojavljivanja, postoji realna osnova.
Dakle, iako struktura razlicitih fajlova proc fajl sistema moze biti razlicita u dvije razlicite verzije kernela, ipak su promjene unutar proc-a dovoljno trome da je moguce napisati vrlo portabilan program koji ce odlicno raditi na svim dosadasnjim kernelima. Sustina je u prijedlogu koji sam ti uputio u mom prvom javljanju, a koje se tice izlaznog formata koji proc koristi, tako da je dovoljno da zaviris u kod unutar /usr/src/linux/fs/proc i pokupis gotove formate, a onda samo invertujes operaciju i dobijes sve podatke bez nekog posebnog truda.
U cilju postizanja zadovoljavajuceg nivoa portabilnosti, mozes jednostavno napraviti Makefile u kojem definises dva targeta, jedan za 2.2 i jedan za 2.4, a u kodu pomocu #ifdef definises odgovarajuce formate, kao npr:

#ifdef KERNEL_22
    #define FORMAT_CPUINFO "%lut.....blabla"
    #define FORMAT_UPTIME "......"
    ...
#else
    #define FORMAT_CPUINFO "%ld nesto drugo.....blabla"
    ...
#endif

main()
{
    ...
    fscanf(f, FORMAT_CPUINFO, &blabla, .... );
    ...
}

Mislim da bi trebao razmisliti o ovom prijedlogu. Moje misljenje je da je bolje da koristis ovaj pristup, nego da samo preslikas fajlove iz /proc direktorija u GUI, jer ce to liciti na obicni fajl manager. U svakom slucaju, ovo je tvoj projekat, pa ti odluci sta ces i kako ces! Nadam se da ce ti neke od ovih ideja i prijedloga pomoci da unaprijedis svoj program. Mozda ce lokalizovana verzija sysInfo-a pomoci da se spoje interesi Vedrana i Preleta i izbjegnu bespotrebne rasprave bilo kojeg tipa.