петак, 27. мај 2016.

Asinhrono, async i await višenitno programiranje

Dolaskom C# programskog jezika verzije 5, u C# programski jezik su uključene dve nove ključne reči async i await, dve komande koje ne idu jedna bez druge. Laički rečeno, tamo gde vidite da je metoda definisana sa async, u toj metodi trebate imati i ključnu reč await. Njihova magija je u tome što one omogućavaju višenitno programiranje ali bez direktnog formiranja niti. Sve do pojave asinhronog programiranja, svi vaši .Net programi bez dodatnog programiranja su sve operacije izvršavale sekvencijalno. To u prevodu znači da su se operacije izvršavale jedna po jedna i svaka operacija je morala čekati da se svaka prethodna operacija izvrši do kraja. Kad god napravite aplikaciju poput Windows Form, ona poseduje samo jednu nit; Main thread – glavnu ili UI nit; i sad zamislite da u toj niti koristite I/O operaciju. Vaš Windows će tada čekati dok vi pristupate nekom fajlu na hard disku ili mreži dok god se vaša operacija ne izvrši do kraja. Zbog toga Windows pauzira vašu nit tako da on ne koristi ni jedan CPU resurs ali na taj način zadržava memoriju.


( Asinhronizovano programiranje )

Asinhrono programiranje je jednostavno rešilo ovaj problem, jer asinhrono programiranje za razliku od sekvencijalnog ili sinhronog programiranja vam omogućava da vi pokrenete neku metodu i nastavljate da radite neki drugi posao dok se metoda ne završi. Inače sa sinhronim programiranjem pokrećete neku metodu; morate da čekate da se metoda izvrši do kraja; prosledi vam se neki rezultat i onda se nastavlja vaše izvršavanje programa. Danas se u programiranju koristi i jedna i druga varijanta u zavisnosti da li radite sa I/O operacijama ili jednostavno vam je potrebno više vremena da se izvrši neka metoda. Danas celi koncept Funkcionalnog programiranja je daleko bolji kad se radi preko asinhronizovani delegata, dok na primer UWP ili Phone aplikacija bez asinhroni metoda je nezamisliva jer svaka metoda koja radi duže od 2 sekunde je neprihvatljiva. Asinhrono programiranje se koristi kad imate kompleksne upite koje uzimaju dosta vremena, šaljete email-ove ili radite sa fajlovima. Nadam se da vam je sad jasno koliko je asinhrono programiranje bitno, ali takođe treba da znate da asinhronizovano programiranje nije lako jer se vi morate pobrinuti da ništa ne krene pogrešno, takođe je komplikovano debugovanje i održavanje istog. Ključnu reč async koristite da markirate metodu za asinhronizovanu operaciju. Na taj način vi samo dajete signal vašem kompajleru da će se nešto asinhronizovano desiti. Kompajler tada transformiše vašu kod u programersku C# paradigmu koju zovemo state machine. Znači pokreće sinhronično trenutnu nit, ali vam omogućava da vašu metodu razdvojite u više delova. Kad koristite await ključnu reč, kompajler će generisati kod koji će te videti bez obzira da li je vaša asinhronizovana operacija završena. Ako se vaša metoda samo sinhronizovano nastavlja, u prevodu nije završena; onda će state machine spojiti sa kontinuiranom metodom koja će se pokrenuti kada se task završi. Prepustiće kontrolu pozivajućoj niti i ta nit će se moći koristiti za drugi posao. Imajte u vidu da asinhronizovana metoda može da vrati rezultat samo kao void, Task i Task<T>.

Kako izgleda neki praktični primer asinhronog programiranja?


понедељак, 23. мај 2016.

Šta je to Moj Profit Sistem?

Sve dok učite, programirate iz hobija, bavite se kreativnošću i ne tražite nikakav novac za vaš trud i rad ili pak uspevate da i nešto naplatite kroz rad u nekoj kompaniji gde je vaš posao isključivo programiranje, dizajn, grafika, data, serveri, možda animacije i specijalni efekti; možda dobro prolazite i kao freelancer; možete reći sebi da poprilično uživate u poslu kog volite. Međutim, šta ako želite da isprogramirate neku vašu aplikaciju ili igricu; šta ako želite da napravite vaš proizvod ili uslugu koju će te prodavati drugima ili šta ako jednostavno želite pokrenuti vlastiti startup i vlastitu firmu? Tada morate ući u jedan sasvim drugi svet; svet preduzetništva, liderstva, istraživanja, marketinga, prodaje i radom sa klijentima. A gde su tu još druge veštine poput oratorskih sposobnosti i držanja govora pred masama ljudi? Sve to od vas zahteva ogroman napor, rizik, poznavanje poslovanja, izlazak iz komforne zone ali i ogromna materijalna sredstva.



Moj Profit Sistem je mesto gde će te naći pre svega stručnjake, agencije, vebinare, kurseve, konsultante i ljude različitih stručnih i poslovnih profila. Moj Profit Sistem bar za sada nije mesto gde učite kodiranje ali je definitivno mesto gde učite sve ostalo. Posebno je naklonjen ljudima koji rade za bilo koju MLM kompaniju ili se bave bilo kojom vrstom marketinga i prodajom. Moj Profit Sistem je sistem kakav dosad nije viđen u Srbiji i regionu ali vam je dostupan na srpskom jeziku. Često me ljudi koji čitaju moj blog pitaju gde mogu pronaći neki dobar kurs za Facebook, kako da koriste Snapchat, Google AdWards, Google Analytics, kako da naprave prodajnu stranu, email listu i mnoštvo drugih stvari. Odgovor je vrlo jednostavan, sve to možete pronaći na Moj Profit Sistemu. Tamo su ljudi i stručnjaci za takva pitanja, tamo su kursevi i tamo se možete konsultovati sa agencijama i stručnjacima koji se godinama bave sa takvim rešenjima i kome je to posao da znaju. Naravno, sve to ima svoju cenu ali ta cena nije ni približna koliko vas neznanje u poslu može da košta. Mi programeri jesmo ljudi specifičnog razmišljanja, volimo da znamo svaku klasu i metodu kako radi ali takođe znamo da neke stvari je bolje da nam neko drugi odradi ili pomogne. Ono što većina programera ne zna, ali znaju softver inženjeri na velikim projektima; da u jednom velikom projektu programiranje je samo 6% troškova kompanije dok bagovi i greške mogu da koštaju i do 65% sredstava celog projekta i pored dobro plasiranog proizvoda na tržište. U preduzetništvu greške su još rizičnije i brzo vas mogu dovesti do bankrota. Igrica za prodaju se ne pravi pre nego što se ne ispita tržište i verovatnoća prodaje iste. Na marketingu i prodaji se greške najviše plaćaju. Moj Profit Sistem vam neće rešiti sve probleme i troškove poslovanja; ali će vam definitivno olakšati i rešiti mnoge komplikacije i uštedeti i vreme i materijalna sredstva. Ja sam zahvaljujući odličnom stručnom timu ljudi u Moj Profit Sistemu i odličnim gostima na vebinarima toliko toga naučio za tako kratko vreme o poslovnom svetu i stvarima za koje nikad nisam ni pomislio niti čuo; da preporučujem svakom da se registruje ovde. Ulaganje pre svega u samog sebe, lični razvoj i edukaciju se uvek isplati.

Da li ja mogu da ponudim u Moj Profit Sistem okruženju moje usluge i ono čime se ja bavim?

недеља, 22. мај 2016.

Šta je IT-konekt?

Mnogi programeri su u konstantnom traženju edukacije, posla, projekata, klijenata ali i stalnog zaposlenja dok sa druge strane mnoge IT kompanije pored predstavljanja novih dostignuća, proizvoda i usluga, takođe imaju otvorene pozicije za mnoga programerska ali i druga radna mesta. Za dobru edukaciju je potrebna i dobra škola; tako da je IT-konekt dvodnevni događaj; mesto gde se pre svega možete odlično informisati, družiti sa mnogobrojnim timovima već zaposlenih u IT kompanijama, lično razgovarati sa osobama koje su na primer napravile najnoviju igricu i definitivno se malo zabaviti. Ove 2016 godine, IT-konekt se održavao 20 i 21 maja u hotelu Jugoslavija u Beogradu, ulaz je bio besplatan uz prijavu.


( IT-konekt, 20-21 maj 2016, Beograd )

Ne znam zašto se IT-konekt zove najvećim IT događajem i sajmom zapošljavanja, jer meni to sve nije izgledalo toliko veliko poput sajma knjiga u Beogradu; očigledno veličina nije bila u prostoru već u činjenici da su na IT-konekt-u, svoje štandove izložili preko 30 svetskih IT kompanija koji posluju u Srbiji; čak i iz Izraela. Beograd već godinama radi na tome da postane najveći centar i boravište mnogobrojnih svetskih IT kompanija, ali i drugi gradovi u Srbiji poput Novog Sada takođe intenzivno rade na tome; tako da sam siguran da za programere u Srbiji dolaze zanimljiva vremena, veliki projekti, mnogobrojne tehnološke inovacije i budućnost koju neko treba isprogramirati. Slobodnih radnih mesta u IT industriji već sad ima i više je pitanje gde ste vi u svemu tome i šta je vaš izbor. Zato i stalno napominjem developerima da treba više da komuniciraju, da se informišu i razmenjuju iskustva. Kad imate priliku da prisustvujete sajmovima zapošljavanja; a IT-konekt nije jedini; odvojite par sati svog vremena za sajmove zapošljavanja. Možda će te pronaći pravu adresu za vaš CV ili na primer lako možete završiti na praksi; besplatnoj dvonedeljnoj letnjoj školi programiranja Edit kompanije Cometrade, osvojiti neku nagradu ili jednostavno steći nove informacije i saznanja koje mogu promeniti vaše ideje i projekte o kojima trenutno razmišljate u nekom drugom smeru.

Koja si ti saznanja stekao na IT-konekt-u?

петак, 20. мај 2016.

Šta je to Hub?

Na ovo pitanje vam najbolje može odgovoriti tim Impact Hub Beograda, koji se nalazi u Makedonskoj 21 ulici u centru Beograda. Hub je inspirativno radno okruženje po principu fleksibilnog korišćenja coworking prostora i iznajmljivanja sala za konfrencije, radionice, male pozornice za nastupe ali i kancelarije za tim ljudi koji nameravaju da pokrenu startup ili jednostavno odličan prostor i za free-lancer-e. Hub je prvi put nastao još u Londonu 2005 godine i za deceniju je toliko napredovao da je postao ozbiljan preduslov uspeha velikog broja startup-ova. Postajanjem člana Impact Hub-a, vi automatski postajete umreženi sa svim Impact Hub-ovima u još 80 gradova u 49 država; zajedno sa još 11 000 članova. To takođe znači i ako ste član Impact Hub-a u Beogradu, vi sa vašom članarinom možete koristiti i prostorije Impact Hub-a; na primer u Beču.


( Impact Hub, Makedonska 21 Beograd )
                                           
Vas kao čitaoce mog bloga, znači većinom programeri; verovatno interesuje kakva je kompjuterska oprema i koliko je brz Internet u Hub-u. Međutim, Impact Hub nije programerski Hub, poput ICT HUB-a; koji pored radnog prostora pružaju i odgovarajući hardver i softver. Ali na žalost, posle moje prijave za ICT HUB, mene niko nije ni kontaktirao, dok su me u Impact Hub prijatno dočekali, skuvali kafu i porazgovarali sa mnom o svemu. Tako da vam o ICT HUB-u trenutno ne mogu reći ništa. Međutim, ukoliko posedujete i radite na vašem laptop prenosivom računaru; moji utisci su da je Impact Hub odlično mesto za rad, učenje i kreativnost. Nigde ne piše pravilo da morate biti okruženi samo programerima. Na primer, ako programirate igrice lepo bi bilo i da znate da dobro crtate. Jednostavno ste okruženi različitim tipovima poslovnih profila i članova koji mogu podeliti iskustva iz njihovih poslova. Pojedinjeni članovi Impact Hub-a su i stranci. Ukoliko ste deo nekog tima programera, onda u Impact Hub-u imate opciju da iznajmite vašu vlastitu kancelariju za celi tim i da je opremite kakvim god hoćete računarima i monitorima za vaš rad. Što se tiče interneta, brzi Internet vam je omogućen preko odlične Wi-Fi mreže. Takođe vam je na raspolaganju i štampač i mnoge druge usluge poput usluge profesionalnog fotografa koje naravno nisu uračunate u cenu boravka u Hub-u.

Koliko košta to zadovoljstvo?


петак, 13. мај 2016.

Kako da kreiram UWP i Phone aplikacije kad mi VS2015 ne radi?

Pronaći danas programera u Srbiji da se bavi programiranjem UWP – Universal Windows Platform aplikacija i Windows Phone aplikacija je komplikovano, ukoliko ne naletite na nekolicinu koji jesu Microsoft sertifikovani programeri i već zaposleni u stranim kompanijama. Razlog je pre svega što Windows Phone aplikacije u Srbiji koristi previše malo ljudi dok za programiranje UWP vam je neophodan Microsoft Windows 10 i Microsoft Visual Studio 2015. Međutim uvek postoje izuzeci, poput pojedinaca koji prate moj blog i koji naravno žele da uče i da napreduju. Programeri koji su uspeli da se Upgrade-tuju sa ranijih verzija Microsoft Windows-a na Microsoft Windows 10 operativni sistem; ili su kupili Microsoft Windows 10 operativni sistem i koriste Microsoft Visual Studio 2015 Community za učenje; su verovatno pokušali da na primer probaju da naprave UWP „Hello World“ aplikaciju i da je pokrenu i pogledaju kako njihova aplikacija izgleda na simulatoru raznih veličina tablet i mobilni uređaja. Takvi programeri su u većini slučajeva doživeli neprijatno iznenađenje, mnogobrojne greške i nemogućnost programiranja navedenih aplikacija.  


( UWP - Universal Window aplikacije, Visual Studio 2015 )

Kada prvi put koristite Microsoft Visual Studio 2015 Community i kliknete na Blank App (Windows Universal) od vas će se tražiti da instalirate sve što je neophodno da bi ste mogli programirati UWP aplikacije. I pored toga što je instalacija automatizovana i bukvalno na jedan klik instalira sve što vam je potrebno; vi lako možete doći u sitauciju da se instalacija ne može izvršiti zbog mnogobrojnih grešaka; ili i kad se izvrši instalacija; vi i dalje ne možete pokrenuti niti dizajner za UWP aplikacije. Jednostavno dobijete grešku poput „Cannot find suitable sdk“ ili da naknadno trebate da izvršite Microsoft Visual Studio Update 2 ili mnogobrojnih drugih grešaka čak do toga da vam navodno hardware ne podržava Hyper-V zahteve. Na kraju krajeva mnogi su pokušali sami da istražuju greške i pokušaju ih rešiti izolovanim instalacijama različiti paketa sa Microsoft sajtova ili pokretanjem Repair Microsoft Visual Studio 2015 ili prelaskom sa default verzije na instalaciju svega što se može instalirati u Microsoft Visual Studio 2015 i opet danima nisu rešili problem. Neki su čak i odustali da pronađu rešenje, što je po meni apsolutno apsurdno i neprihvatljivo. Microsoft tehnologije često i konstantno imaju nadogradnje, često prave greške ali rešenja uvek postoje. 

U čemu je onda problem i šta je rešenje?

недеља, 08. мај 2016.

Tarabica IT konferencija 2016

Petak, 6 maj 2016 godine oko 23h, već sam bio premoren ali izuzetno raspoložen i pomalo izgubljen u vremenu nakon mnogobrojnih praznika; uživanja u višesatnim video kursevima C# na stranicama Microsoft Virtual Academy, ali i gledanja korisnih i interesantnih vebinara izuzetnih marketara Dušana Markovića i Dimitrija Ostojića; zatim aktivnosti na društvenoj mreži Facebook; gde sam uspeo sam da uočim i post Stanka Nikolića, profesionalnog stručnjaka za Windows Phone projekte u kom poziva sve zainteresovane da se registruju za konferenciju Tarabica 2016. Tek posle 2 sata od registracije shvatio da sam uhvatio poslednji voz za prijavu i da konferencija počinje za 7 sati i da trebam da idem da spavam, što je za mene malo problematično jer moj programerski život ne spava po noći već po danu. Tako da sam uspeo sebe da nateram da odspavam makar 2 sata pre nego što je počela celodnevna zabava. Kako je Tarabica protekla prošle godine, možete pogledati ovde, ali ove godine mi je konferencija bila mnogo prijatnija.


( Manuel Radovanović, Tarabica IT Conference 2016 )

Ove godine, Tarabica je počela kasnije; jednostavno se pomerila iz meseca marta u mesec maj; pre svega radi boljeg vremena. I za razliku od prošle godine, u subotu, 7 maja 2016 godine je zaista bio lep i sunčan dan. Ispred univerziteta Singidunum, koji je poprilično udaljen od centra Beograd-a me je dovukao taksista, tako da sam stigao među prvima. I pre nego što je počela konferencija uspeo sam da upoznam nekoliko izuzetnih programera i naša međusobna programerska konverzacija je bilo toliko interesantna da sam bio oduševljen koliko su naši programeri inteligentni, šta sve uče i programiraju i koliko su upućeni u tehnologije; jednostavno sam imao osećaj kao da sam u nekom drugom svetu, kao da ne živimo u Srbiji. Ove godine; nešto je došlo manje ljudi na konferenciju, tek toliko da nije bilo gužve pa smo se kolege i ja brzo prijavili, dobili raspored i poklone i uspeli čak da popijemo kafu pre početka predavanja.

Šta je bilo novo i drugačije na konferenciji? 



среда, 04. мај 2016.

Rad sa taskovima u C# programskom jeziku


U prethodnom postu „Rad sa nitima u C# programskom jeziku“ je u najkraćim crtama sa čak 7 primera objašnjeno kako se radi sa nitima. Međutim, da bi ste razumeli niti i to je malo. Na internetu možete pronaći mnogo primera varijacija i upotrebe niti, dok možete i trebate eksperimentisati i sa vlastitim kombinacijama. Zato vam savetujem da mnogo samostalno eksperimentišete i testirate vaše vlastite metode pozivajući ih u nitima; u vašim vlastitim testovima i aplikacijama. To se isto odnosi i na taskove i na asinhronizovane metode i sve što učite. Takođe, morate da poznajete razliku i kad i šta treba da koristite. Na primer, pored upotrebe niti će te brzo shvatili da je mnogo bolje koristiti klasu ThreadPool nego klasu Threading pogotovo ako nameravate koristiti više niti sa dugotrajnim procesima ili kad više puta nameravate koristiti istu nit. Razlog je jednostavan, niti su expensive – skupi. Znači uzimaju mnogo memorije i vremena. Potrebno vam je 1MB za svaku nit koju koristite. Klasa Threading vam omogućava da kreirate niti na veoma niskom nivou, na nivou OS – Operativnog sistema. To znači da nad niti imate punu kontrolu, tj. možete da nit pokrenete, zaustavite ili prekinete.

 
( Taskovi su često mnogo bolje rešenje od upotrebe niti ) 

Za razliku od niti ThreadPool je delimično rešenje jer je mnogo jeftiniji; upamtite i da u ThreadPool-u svaka nit je uvek Background nit i da se niti u ThreadPool ne uništavaju kad se nit izvrši. Ali sa ThreadPool-om vi ne možete određivati prioritete izvršavanja niti, zato bi ste morali koristiti neke druge mehanizme; isto tako vi ne možete niti prekinuti u vreme izvršavanja. Kada koristite ThreadPool nemate kontrolu nad nitima kao sa klasom Threading jer ThreadPool radi na nivou CLR – Common Language Runtime-a. To znači i da broj niti koji možete izvršavati u ThreadPool-u zavisi od verzije .Net Framework-a kojeg koristite. Na primer ako koristite .NET Framework 4.0 onda možete koristiti 1 023 niti za 32-bit aplikacije ili 32 767 za 64-bit aplikacije. Međutim ako koristite .Net Framework 2.0 ograničeni ste na samo 25 niti prema procesoru. Isto tako vi faktički, najjednostavnije rečeno; samo pošaljete vaše zadatke u ThreadPool, kad se ThreadPool napuni vi samo trebate sačekati dok se ne oslobodi i nastavi sa izvršavanjem drugih zadataka. Vi čak možete i sami da odredite veličinu ThreadPool-a ali činjenica je da kontrolu nemate. Vi možete da pošaljete neki zadatak, ali ne možete sačekati da se završi ili da prihvatite neki rezultat. Zato postoji klasa Task koja rešava probleme i nedostatke i klase Threading i klase ThreadPool.

Kako da kreiramo taskove?