[ Alexe @ 26.02.2009. 21:22 ] @
Pocetnik sam u c++ i imam veliki zadatak: pridruzivanje jednoj open source zajednici u razvoju ruting softvera pisanog u c++. O cemu se radi: ovaj ruting softver je zapravo sastavljen od nekoliko ruting protokola (deamon-a) i potrebno je implementirati odredjene izmene na jednom od njih, tacnije BGP protokolu. Jos preciznije, za pocetak je potrebno uneti odredjene izmene u jedan od paketa (open packet) koji taj protokol salje. Taj open packet jeste jedna klasa koja je izvedena iz generalne klase BgpPacket. Ceo projekat je zapravo i pisan kroz c++ obrasce klasa (class templates). E sad, kako poceti? Posto sam pocetnik, a radi se o velikom projektu jedne open source zajednice, zanimaju me generalni postupci pri pocetku pisanja izmena (dopuna) na necemu sto je neko vec napisao. Ako je neko radio slicne stvari znacilo bi mi par saveta u smislu:

-kako ispitati veze izmedju razlicitih klasa i uticaj izmene jedne na korektnost druge? Da li se to u c++ koji koristi class template svodi na "class <name>::public <name> ili je kompleksnije to utvrditi i kako?
-ako se menja tj. dopunjuje postojeca klasa (u mom slucaju sadrzaj paketa koji je predstavljen klasom), da li kreirati novu, izvedenu klasu (nasledjivanje) ili ...?
-u kom okruzenju pisati, odnosno neki savet oko IDE-a ...?

Ono sto sam do sada uradio je da sam ceo ovaj ruting softver kompajlirao u Linux-u (FC8) i poceo da citam knjige o c++. Hvala!
[ deerbeer @ 27.02.2009. 08:45 ] @
Citat:

-kako ispitati veze izmedju razlicitih klasa i uticaj izmene jedne na korektnost druge? Da li se to u c++ koji koristi class template svodi na "class <name>::public <name> ili je kompleksnije to utvrditi i kako?

Imas li neku dokumentaciju (UML i slicno) ili makar dobro komentarisan source code ?
Ako nemas onda ces morati dobro da zagnjuris u sors da bi otkrio,
sto je uglavnom slucaj kod open-source projekata .

[ Alexe @ 27.02.2009. 11:50 ] @
Postoji class index koji nabraja sve klase koje se koriste za konstrukciju tog deamon-a i kdoc koji daje neki opis klase (mada ne bas detaljno). Pod pretpostavkom da shvatim kako je implementirana klasa, nisam bas siguran kako da zapocnem sa izmenom.
[ obucina @ 27.02.2009. 12:39 ] @
Ne poznajes C++, ne poznajes timski rad, verovatno ne poznajes ni sisteme za kontrolu verzija. Da li poznajes strukture podataka? Algoritme rutiranja? BPG protokol? Ne obeshrabrujem te, iznosim svoje misljenje - da li si siguran da grizes ono sto mozes da progutas?
[ Alexe @ 27.02.2009. 13:15 ] @
Pa ovako: Sto se tice c++ ne slazem se sa tobom da ga "ne poznajem" uopste. Pre bih rekao da nisam iskusan. Sto se timskog rada tice, svrha OOP i c++ jeste nezavisni rad vise programera i moze se svesti na moj prvi odgovor. Sto se tice sistema za kontrolu verzija ovaj projekat (kao i svi ostali) ne bi ni mogao da se razvija bez CVS-a pa sam tako citao i shvation nesto o tome. Strukture podataka recimo da ne poznajem. Sto se tice algoritama rutiranja, imam CCNP i radim dovoljno dugo u networkingu da znam sta je BGP... Nisam siguran da mogu da "progutam" odjednom i lako ono sto sam zagrizao, ali uz upornost i pomoc mogu.
[ deerbeer @ 27.02.2009. 13:36 ] @
Citat:
Alexe: Pa ovako: Sto se tice c++ ne slazem se sa tobom da ga "ne poznajem" uopste. Pre bih rekao da nisam iskusan. Sto se timskog rada tice, svrha OOP i c++ jeste nezavisni rad vise programera i moze se svesti na moj prvi odgovor. Sto se tice sistema za kontrolu verzija ovaj projekat (kao i svi ostali) ne bi ni mogao da se razvija bez CVS-a pa sam tako citao i shvation nesto o tome. Strukture podataka recimo da ne poznajem. Sto se tice algoritama rutiranja, imam CCNP i radim dovoljno dugo u networkingu da znam sta je BGP... Nisam siguran da mogu da "progutam" odjednom i lako ono sto sam zagrizao, ali uz upornost i pomoc mogu.


Onda se baci na proucavanje objektnog modela tog programa ili dela programa koje treba da promenis
(klase,strukture , uzajamne veze , nasledjivanje,templejti koji se koriste).
Posle toga prouci i konkretan zadatak ii napravi plan kako da izmenis postojece
uz sve moguce procene rizika , kasnije nadogradnje, kao i lakseg odrzavanja
i citljivosti koda za nekog drugog koji ce posle tebe nastaviti da radi na tome .
CVS pod obavezno ako na tom programu radi vise ljudi .
Tek onda pocni da programiras ...
Srecno !!!

[ Java Beograd @ 27.02.2009. 14:23 ] @
Citat:
Alexe: ... Sto se timskog rada tice, svrha OOP i c++ jeste nezavisni rad vise programera i moze se svesti na moj prvi odgovor.

Mnogo sam radio u softverskim firmama i veoma dobro poznajem timski rad. Zato, slobodno mogu da kažem (i tvrdim) da od "nezavisnog rada više programera" nema ništa ! Nula. Zero. Zapravo, ima: špageti projekat, boranija proizvod. Nikakva funkcionalnost.

Zajednička kobila u blatu završi.

Ukoliko taj projekat ima nekog rukovodioca, ili zvanično, ili bar po autoritetu, obrati se njemu. Ako nema - batali ćorava posla.

Zapravo, kad malo bolje razmislim, pitam se ko je i kako dozvolio da neko kao ti (mslim - principijelno, ne lično) bilo šta menja po projektu ? Pod čijom kontrolom ? Šta ako nešto zabrljaš, namerno ili slučajno ?!

Zamisli sebe posle pet godina rada na nekom velikom projektu, i onda se, kao, projektu priključi neki neiskusni novajlija i menja neke protokole ?!
[ Alexe @ 27.02.2009. 14:43 ] @
Pa da se ne bi desilo "da neko kao ja zabrlja projekat" postoji CVS! I da hocu, mogu da zabrljam nesto na svojoj masini ali ne i na masini nekog drugog ko ce download-ovati kasnije taj softver i koristiti ga. CVS repository jednostavno nece kompajlirati moju boraniju, zar ne?! To je i smisao open source projekata. Projekat ima rukovodioce na Berkeley Univerzitetu u SAD. Moja tema je trebala da ima drugi smisao od onoga sto ovde pokusavam..., verovatno je lose formulisan naslov.
[ Java Beograd @ 27.02.2009. 14:53 ] @
Citat:
Alexe: Pa da se ne bi desilo "da neko kao ja zabrlja projekat" postoji CVS!

(Napomena: Sve šta pišem, pišem iz dugogodišnjeg iskustva. A tebe kao prisutnog - izuzimam, i pišem "o nekom neiskusnom" koji će da uleti u projekat.)

Ne, CVS (i bilo koji drugi source code contol system) služi da se prate verzije i podverzije projekta, a ne da se peglaju brljotine. Na svu sreću mnogih razvojnih timova pomenuti alati su spasili stvar.
[ Goran Rakić @ 27.02.2009. 15:02 ] @
Prosto i jednostavno, dok ne prođe kroz „iskusno oko“ njegov kod neće biti ubačen u zvanično izdanje. Može stajati u formi zakrpe negde na vebu ili čak i biti u nekoj grani na sistemu za upravljanje verzijama, sve drugo je naravno veoma neodgovorno i loša praksa.

Naravno da svaki aktivan projekat koji se razvija metodologijom otvorenog koda ima i svoje programere-početnike. Razvijeniji i veći projekti imaju i neke mentorske programe kako bi početnici lakše uhvatili korak. (npr. u Gnomu postoji gnome-love inicijativa, u OpenOffice.orgu je tu Education ClassRoom projekat itd.)
[ obucina @ 27.02.2009. 15:32 ] @
Citat:
Alexe: Sto se tice algoritama rutiranja, imam CCNP i radim dovoljno dugo u networkingu da znam sta je BGP... Nisam siguran da mogu da "progutam" odjednom i lako ono sto sam zagrizao, ali uz upornost i pomoc mogu.

Obzirom da pricamo o programiranju, moje pitanje se odnosi na to da li ove stvari poznajes sa programerske strane i to u opstem slucaju, a ne vezano za ovaj konkretan projekat. Npr, da li znas kojom strukturom podataka bi predstavio BPG paket (kako na logickom nivou programa, tako i fizickom nivou, kao strukturu podataka koja putuje kroz mrezu). Primera radi, BPG paket NIJE klasa. Klasa sadrzi jos puno podataka osim onih koje po protokolu treba da pustis kroz mrezu. Klasa bi se koristila da se implementiraju operacija nad strukturom podataka koja predstavlja paket (primera radi, mozes pogledati u izvornom kodu jezgra kako je implementiran TCP paket, iako nije C++). Slicno je i za algoritme rutiranja, ne mislim da li ih znas u smislu teorije racunarskih mreza (sto nesumnjivo znas, jer se ne bi ni petljao sa ovakvim projektom, a imas i te sertifikate), nego imas li ideju kako bi ih implementirao (kojom strukturom podataka bi predstavio racunare, kako bi te strukture povezao (u graf, u listu...), kakav graf (kompletan, nekompletan, usmeren, neusmeren, tezinski...), kojim algoritmom bi obilazio graf i slicno. Znaci, mislio sam na poznavanja prakticnih implementacija. U svakom slucaju eksperimentisi, probaj, ako zapnes, pitaj...
[ Alexe @ 27.02.2009. 18:08 ] @
Mislim da ne moram da znam sve ovo sto si naveo. Ajde da malo konkretizujem problem kroz jedan primer: BGP ima cetiri vrste paketa: open, update, notification i keepalive. Postoji osnovna klasa BgpPacket koja ima svoje podatke i metode klase i izvedene klase te osnovne klase (za specificni paket) koje nasledjuju sve podatke i metode osnovne klase (npr. svaki paket bilo kojeg od ova cetiri tipa ima header sa odredjenim poljima) ali i svoje specificne podatke i metode. Dakle radi se o nasledjivanju. Pretpostavimo da open packet (koji je opisan klasom OpenPacket izvedenom iz osnovne klase) sadrzi neka polja (podatke clanove) koji su obliku (type, lenght, value) nad kojima je potrebno izvrsiti neke provere pri prijemu paketa (koje su implementirane metodama klase, tj. funkcijama clanicama). Kako se, generalno posmatrajuci ovakvu vrstu odnosa, mogu u postojeci open packet dodati jos neka polja opisana (type, lenght, value) trojkom i vrsiti provera na prijemu ovih novih polja metodama klase? Nasledjivanje ove nasledjene klase ili... ? Dakle, smatram da ne moram da poznajem sve ostale klase i njihovu implementaciju osim onih koje su u direktnoj vezi sa mojom klasom. Koje su to klase koje su u direktnoj vezi sa mojom klasom, pretpostavljam da mogu da saznam pomocu nekog code browser-a (kao sto je npr. cscope za C)?! Hvala.
[ obucina @ 27.02.2009. 20:24 ] @
Citat:
Alexe: Kako se, generalno posmatrajuci ovakvu vrstu odnosa, mogu u postojeci open packet dodati jos neka polja opisana (type, lenght, value) trojkom i vrsiti provera na prijemu ovih novih polja metodama klase? Nasledjivanje ove nasledjene klase ili... ?


Ja ti ne mogu dati odgovor na pitanje bez koda, jer ne poznajem protokol. Da ne pricamo napamet, najbolje je da posaljes kod (klase paketa i sve klase iz kojih je izvedena) i opis izmene koja ti je potrebna. Ili daj link.
[ Alexe @ 28.02.2009. 00:01 ] @
Citat:
obucina: Ja ti ne mogu dati odgovor na pitanje bez koda, jer ne poznajem protokol. Da ne pricamo napamet, najbolje je da posaljes kod (klase paketa i sve klase iz kojih je izvedena) i opis izmene koja ti je potrebna. Ili daj link.


Stvarno ne ocekujem da neko napise kod umesto mene nego samo savet kako se generalno pristupa resavanju ovih problema u c++. Zato sam i dao primer (koji je samo primer) kako bi malo konkretizovao temu. Evo linka koji opisuje klase BGP-a:

http://www.xorp.org/releases/current/docs/kdoc/html/bgp/index.html

Ovde se moze videti kako je projekat (odnosno njegov deo) implementiran. Ono sto ja treba ovde da uradim je malo kompleksnije od onoga sto sam naveo kao primer ali kada se shvati princip na jednostavnijem primeru mislim da ce ici lakse. Zato i ne ocekujem da neko cita kod umesto mene.