[ toxi_programer @ 15.05.2007. 21:49 ] @
Napisao sam par kraćih tutoriala koji objašnjavaju evente i delegate, multithreading i korišćenje GDI+a u GUI programiranju. Ako nađete neku grešku ili imate neki komentar napišite ga ovde.
Da nebih kopirao ceo tekst( smara me da ga formatiram) daću manji citat i link ka celom tekstu.

Tutorial o Multithreading-u:
Citat:

Razumevanje pojma procesa i niti( thread-a)
Vindovs je jedan od operativnih sistema na kojima je moguće izvršavanje više procesa
"istovremeno". Naime, svaka aplikacija/servis se tretira kao proces, a na vaše računaru je uvek pokrenuto više od jednog procesa. Na primer možete pokrenuti web browser i notepad i pomislićete da ta dva procesa rade istovremeno, ali ne rade istovremeno! Procesor računara može da izvršava kod samo jednog programa u jednom trenutku, ali ima sposobnost( koristeći sofisticirane algoritme) da veoma brzo prelazi sa izvršavanja koda jednog programa na izvršavanje koda drugog programa. Na ovaj način računar stvar iluziju da svi procesi rade istovremeno, iako se to ustvari nedogađa. Naravno, jedan računar može imati više od jednog procesa ali to nemenja način na koji se izvršavaju procesi, s'tim poboljšanjem što će svaki od procesora biti zadužen za manji broj procesa i samim tim ceo sistem će raditi brže.

Nit( thread) je "osnovna jedinica građe" procesa jer svaki proces mora imati najmanje jednu nit. Ali, po potrebi, program( iliti proces) može imati više od jedne niti. Ono što je bitno uočiti jeste da procesor računara na potpuno isti način tretira i procese i niti- on će "malo izvršavati jedan proces( ili nit) pa malo drugi pa treći" i tako u krug. Kada će procesor preći sa izvršavanja jedne niti( ili procesa) na drugu mi nikako nemožemo znati, mada ipak možemo delimično uticati na vreme ovog prelaženja( objašnjenje sledi kasnije).
Takođe treba znati da svaka od niti procesa može zauzeti sve sistemske resurse( npr. memoriju) koji su rezervisani za taj proces.

Ostaje pitanje zašto bi se koristilo više niti u jednom procesu. Korišćenje višenitnosti ( multithreading) nemože stvarno ubrzati rad programa ali može stvoriti iluziju da program radi brže, ali i mnogo više od toga! Razmotrimo primer štampanja teksta. Napisali ste neki tekst u notepad-u i želite da ga ištampate. Izabraćete opciju "Print" i štampanje će početi ali primetićete da vi i dalje( dok traje štampanje) možete menjati sadržaj teksta. Ovo je moguće zato što je notepad pokrenuo štampanje u drugoj niti programa a prva nit( koja obrađuje unos teksta i ostale stvari) je nastavila svoje izvršavanje, dakle obe niti se izvršavaju istovremeno. Da nije urađeno na ovaj način( koristeći dodatnu nit) vi nebiste bili u mogućnosti da menjate sadržaj teksta sve dok štampanje ne bude završeno. Postoji mnogo primera, ovo je samo jedan od njih.

CEO TEKST: <mod: link uklonjen>

Tutorial o Eventima i Delegatima
Citat:

Eventi i delegati su međusobno u vezi, jer za pravljenje eventa je potreban neki delegat. Ako ste programirali bilo šta na jeziku C ili C++ onda vam je jasno šta je to pokazivač na funkciju. Na .NET platformi nepostoji( ni u jednom jeziku) takav pokazivač a zamena za njega je delegat. Pa čemu u stvari služi delegat? Pomoću delegata možete, posredno, pozvati jednu ili više funkcija. Možda ovo deluje kao bespotrebna stvar ali uopšte nije tako. Jednostavan primer je funkcija za na primer sortiranje nekog niza. Obično takve funkcije zahtevaju dva argumenta- prvi je niz koji treba da se sortira a drugi argument bi bila funkcija koja će određivati da li je jedan element niza veći od drugog( videćete primer za ovo kasnije). Da bi ste predali funkciju koja će vršiti poređenje morate koristiti delegate( pošto je nemoguće koristiti pokazivače na funkciju). Ako vam ipak nije jasno šta su to delegati, shvatićete u sledećem odeljku.

CEO TEKST: <mod: link uklonjen>



Tutorial o korišćenju GDI+a u GUI programiranju
Citat:

Skoro svaka knjiga u sebi sadrži jedno ili par poglavnja koja opisuju GDI+ i stoga ću samo u najkraćim crtama da objasnim njega a u nastavku teksta će biti reči o primeni GDI+a za pravljenje GUI interfejsa( iznenadićete se kakve sve mogućnosti postoje!), odnosno pretstaviću najbolji( bar koliko je meni poznato, a poznato mi je) metod za modeliranje izgleda button-a, formi i drugih GUI komponenti.

CEO TEKST: <mod: link uklonjen>


Nadam se da će nekom koristiti. E da, svi primeri koda su dati u C# jeziku.

[Ovu poruku je menjao mmix dana 16.05.2007. u 20:41 GMT+1]
[ Pharos @ 16.05.2007. 08:47 ] @
Tutorijali su prekratki da bi u potpunosti pokrili željene oblasti.
Da li su to beginner ili advanced tutoriali?
Kod GDI+ objašnjavaš kako da promenimo izgled dugmića, a ne objašnjavaš osnovne tehnike crtanja linija i gomilu sitnijih čudesa.
Potrudi se da ne prevodiš tutoriajle iz neke strane literature već prikaži neke svoje primere ili lepo napiši prevedeno odavde i kraj. U suprotnom smemo da te kritikujemo :)
Kad objašnjavaš nešto važno kao što su niti, još u GUI programiranju, ne bi bilo loše da napomeneš kada su niti najpotrebnije. Nigde nisam video recimo opisanu join naredbu.

Za prevod iz strane literature nije loše. Ukoliko je tutorijal tvoj, onda dosta loše jer pola stvari nije pokriveno.
Bolje da si umesto 3 oblasti, objašnjavao samo jednu, ali da si je svetski odradio, nego što si opisivao tri, a sve s brda s dola.

pOz
[ toxi_programer @ 16.05.2007. 14:51 ] @
Ovaj, pa ne znam zasto mislis da sam prevodio neki strani tutor? Nisam naravno, a aj' daj neki link ka tim knjigama koje su na engleskom a liče na ove moje tekstove( nije da ti ne verujem nego sam radoznao :) ). E da, jedan primer( baš kod multithreading-a) jeste uzet sa neta ali naravno nije potpuno isti vec je to bila samo osnova.

Pa napomenuo sam da se pretpostavlja da citalac ima nekog osrednje znanje.
Ovo za GDI... Naslov "GDI+ u GUI programiranju" i nije bas najsrecniji ali ocigledno govori da ne zelim da objasnjavam sam GDI vec njegovu primenu za modeliranje izgleda kontrola. Dakle ti vec treba da znas GDI+ jer to se objasnjava u svakoj knjizi, a ovo sto sam ja prikazao u tom tekstu govori o necemu sto se retko srece u knjigama( na nasem jeziku i nema uopste).

Dakle, nisam zeleo da objasnjavam osnovne stvari vec nesto sto se tesko moze naci u knjigama na nasem jeziku a vrlo je bitno. Doduse, eventi se sreću u svakoj knjizi ali sam ipak i njih objasnio( na insistiranje par prijatelja).

Citat:
Nigde nisam video recimo opisanu join naredbu.

Lepo si to zapazio, hvala ;). Prosiricu ove tekstove, pa ce se naci mesta i za join naredbu :).

A globalno, da li mislis da tekstovi mogu da koriste ili sam ipak džabe gubio vreme? Ja bih bio najsrecniji ako bi nekom koristilo bilo sta iz ovih tekstova :)
[ Pharos @ 16.05.2007. 19:44 ] @
Nije bilo zle namere u mojim komentarima.
Zašto mislim da su primeri iz knjige? Pa uglavnom kad se objašnjavaju delegati pominju se operacije sabiranje i oduzimanje, kad se objašnjavaju događaji pominje se klasa automobil i sl, nešto si i sam iskopirao...
Globalno tekstovi se mogu koristiti samo bi trebao da ih proširiš ali ne sa primerima koje možemo sretati u raznoranim knjigama već primere (probleme) s kojima se susreću početnici prilikom korišćenja nekih standardnih kontrola.

Recimo imaš zadatak da pomoću webclient kontrole iščitaš HTML kod neke stranice, da iščitaš taj string, uradiš neku operaciju nad tim stringom i vratiš neku vrednost. Ukoliko je sam HTML kod (bez slika, flash animacija...) težak 1 MB, a ti imaš dail-up vezu, dok ne pročitaš HTML kod date stranice (cca 4,5min) cela aplikacija će biti zamrznuta. Ukoliko operaciju čitanja realizuješ pomoću neke niti, moći ćeš da radiš sa svojom aplikacijom dok se u pozadini čita HTML kod.
Tako nešto. Možeš sam smisliti primere, samo da nisu oni klasični iz knjiga tipa 3 niti pišu ispisuju nešto na konzoli.