Asinhroni C# (async / await)

Multi-core processorRazvojni tim je dobio zahtev za doradu aplikacije koja automatizuje zaprimanje robe i štampu deklaracija u magacinu. Posle inicijalnih podešavanja, aplikacija dobija ulaz sa bar kod čitača, a kao izlaz, osim što u bazi označava da je artikal zaprimljen, šalje deklaraciju artikla na štampu. Ideja je da po jedan bar kod skener i štampač budu vezani na jedan računar. Inicijalno je projekat bio složeniji, ali je promenom poslovnih procesa, ostala potreba samo za ovim delom funkcionalnosti. Uzeli smo parče koda sa serverskog dela, c# .net web servisa, koji je komunicirao sa bazom i štampačima, dodali u klijentsku Winforms aplikaciju kao biblioteku i to je proradilo.

Dobili smo desktop aplikaciju koja je imala svu logiku na klijentu, instaliranje softvera smo sveli na copy/paste i instalaciju drajvera za štampače, sve je idealno. Postavili smo test verziju, i dobili odgovor od korisnika da aplikacija funkcioniše ali je spora i koči. Gde je greška? Pri migraciji koda za štampu sa servisa na lokalni računar pozivi ka štampaču su postali sinhroni, što znači da aplikacija nije prihvatala ulaz sa bar kod čitača sve dok traje štampa. U praksi, ako imate četiri artikla jedan ispod drugog i pročitate sva četiri bar koda u nekoliko sekundi štampač će za to vreme stići da izbaci jednu ili dve deklaracije i samo će ti artikli biti zaprimljeni. Pored samih asinhronih poziva potrebno je vratiti i prikazati rezultat na korisničkom interfejsu.
dalje…

Scrum & Jim

Red pill vs blue pullU organizaciji Scrum alliance i domaćeg Puzzle Software, Jim Coplien je održao dvodnevni Scrum Master trening u Beogradu 18. i 19. maja. Posle nekoliko godina rada u Scrum timu kao developer, a kasnije i kao Scrum master, koristim priliku da pored utisaka sa treninga zapišem i svoje viđenje metode i zajednice uopšte. Pre nego što položim test i zvanično postanem član Scrum alijanse :)

Znate da je Scrum agilna metoda za upravljanje (softverskim) projektima, koja je sve popularnija. Pri upoznavanju sa agilnim metodama i scrum-om primetio da ima puno različitih tumačenje samog scrum-a. Ove razlike su, delom, nastale i zbog toga jer je metoda sa razlogom zamišljena dovoljno opšte, više u smislu skupa preporuka i dobre prakse, nego kao metodologija koja bi davala gotove odgovore na postavljena pitanja.

dalje…

Polimorfizam ili Switch?

U poslovnim aplikacijama često se javlja potreba za sličnom funkcionalnošću nad entitetima različite vrste u sistemu. Na primer, u trgovini postoje različiti tipovi dokumenata, kalkulacije (ulaz robe), transferi (izlaz robe), nivelacije (promena cena), koji su po podacima koje sadrže vrlo slični. Nad ovim dokumentima se izvršavaju i istoimene akcije: import, eksport, knjiženje, posledice akcija zavise od tipa dokumenta. Kada se knjiži ulaz robe, pored kreiranja odgovarajućeg dokumenta, menjaju se količine robe na stanju, kada se knjiži promena cena, jasno je da se ne menjaju količine robe, ali se zato ažurira cenovnik. Verovatno u glavi već imate primer iz industrije kojom se trenutno bavite.

Cilj je rešenje poslovnog problema ovog tipa, ali i kôd organizovan tako tako da bude što lakši za održavanje i proširivanje. Idealno je rešenje koje dozvoljava da se doda novi slučaj, tj. u našem primeru novi tip dokumenta, ali i nova akcija, na primer izvoz u excel, bez ili sa što manje izmena na postojećem izvornom kôdu. Ovaj problem je poznat i dovoljno čest da je dobio i ime The Expression Problem.

Prikazaću primer rešenja u strukturnom, uz pomoć jedne klase i switch strukture, i objektno orijentisanom pristupu, koristeći polimorfizam i neku vrstu naivnog factory pattern-a. Da bi kôd bio jednostavniji neću koristiti inicijalni primer iz trgovine, već standardne kuce i mace. Dakle, pravimo softverski model koji ce opisati životinje, dovoljne su nam dve vrste Cat i Dog, koje imaju ime Name, i dve funkcije Walk i Talk.

Ukoliko želite da pratite priču kroz kôd, solution sa primerima u C# možete skinuti ovdesadrži četiri projekta, svaki je samostalna konzolna aplikacija sa primerom. Potrebno je da na računaru imate instaliran Visual Studio 2010. 
dalje…

Hakeri, blogeri i srećna nova 2012

Početkom ove, 2011 godine, krenuo sam sa pisanjem. Nakupilo se 10 tekstova, uglavnom na stručne teme. Ideja ima na pretek, pa ukoliko imate volje i umeća javite se, konkurs je uvek otvoren :)

Tri najčitanija posta u 2011 su, redom:

Pomalo neočekivano na listi nema .NET Stringova, a najposećenija stranica na blogu je about stranica, očigledno vas zanima ko stoji iza Bug-a, nisam siguran da li je to pozitivno ili negativno :)

Ono što je obleležilo 2011 na Bug.Rs, nije ogromna popularnost mojih postova ;), već hakerski napad. Tačnije neko je iskoristio sql inject propust u wordpress-u da izmeni administratorsku lozinku, zatim je zamenio naslovnu stranu nekom svojom porukum, tj. uradio je tzv. deface sajta.
dalje…

Sign .NET Assembly with Strong Name

Znate da .NET omogućava da digitalno potpišete svoj kôd?

Zašto potpisujemo dll-ove?

Želimo da onemogućimo izmenu asemblija, npr. izmenu naziva ili verzije, ili izmeni samog kôda.

U nekim slučajevima je bitno da identifikujemo da je dll koji koristimo baš taj koji očekujemo. Ukoliko je biblioteka koja proverava da li je validna licenca našeg softvera u posebnom dll-u, relativno je lako podmetnuti drugi dll sa istim potpisom (klasama, metodama…) koji bi uvek vraćao da je licenca validna.

Digitalni potpis

Ideja digitalnog potpisa je da omogući primaocu proveru integriteta podataka koji potiču od pošiljaoca. Pošiljaoc, koji je i potpisnik podataka, ima par kriptografskih ključeva, javni ključ i privatni ključ. Primaocu je dostupan samo javni ključ, što je dovoljno da potvrdi da je poruku, tj. podatke koje je poslao pošiljaoc primio u izvornom obliku. Postoje različiti načini da se implementira digitalno potpisivanje, implementacija Strong name .NET Framwork-a se oslanja na RSA algoritam za enkripciju/dekripciju i SHA-1 heš funkciju.

dalje…