0 Comments

Par riječi o protekloj godini, da se podsjetimo što se sve desilo zanimljivog i novog. Bilo je tu dosta predavanja i konferencija - Windaysi u Umagu (želim natrag u Rovinj buhuhu), ATD, odlični Kulendaysi kao spoj kvalitetnih predavanja, posebno mi se svidio koncept chalk&talk, i team buildinga, gdje sam upoznao puno zanimljivih ljudi. Prezentirao sam i svoj mali projekt seocrawler.co na WebCampZagreb, konferenciji o raznim web tehnologijana, koja je posebno zanimljiva jer nema standardnih "prodajnih" predavanja o mogučnostima alata i frameworka, nego su predavanja uglavnom o iskustvima iz programerskih rovova, sa prve linije produkcijske bojišnice. Naravno, čim uzmognem probati ću napisati koji blog post o detaljima unutar seocrawler.co crawlera, jer će siguran sam biti zanimljivo bilo kojem .NET programeru (message queueing sa RabbitMq, upotreba Azure cloud servisa, itd)

Krajem drugog mjesca sam i prvi put posjetio Ameriku, točnije MVP Summit, vidio široke američke autoceste, prepune i prejeftine šoping centre (otišao sa jednom torbom, vratio se sa dvije i povećim dugom na kreditnoj), indijanske rezervate (šoping centri su unutar rezervata, radi poreza naravno), švrljao po Seattleu, vozio se monorailom, izgubio se negdje usput, ali srećom jedan djedica mi je odmah pomogao kada je vidim kako blesavo zurim u kartu. Ameri su ful ljubazni, ali ono, plaše me koliko su srdačni i komunikativni! Naše ugostiteljstvi bi svašta mogli naučiti od njih :/ Najviše vremena sam se zadržao u science&sci fi muzeju (http://www.empmuseum.org/), a žao mi je što nisam imao više vremena obići ulice Seattlea i doživjeti grad malo bolje. Na samom MVP summitu vidio i upoznao razne njuške iz Microsofta, odnosno ASP.NET odjela (Scott Hansleman, Glenn Block, Mads Kirstensens, Damien Edwards, David Fawler, ...), to je bilo baš fora.

Čak i za nekoga tko aktivno prati zbivanja u microsoftovom razvojnom web ekosistemu, brzinom kojoj se izdaju nove stvari, poput WebAPI, OWIN komponenti, toolinga u novom VS2013, često je teško pratiti sve to, pogotovo isprobati i uči dublje u svaki od tih frameworka i biblioteka. Ali rekao bi da smo trenutno na većoj prekretnici, "resetiranju" razvojog sustava, jer od 2001 kada je izašao ASP.NET, framework u podlozi se nije posebno mjenjao. OWIN middleware bi mogao donesti novi i svježi ASP.NET, a nadam se da će zajednica prihvatiti to, i na tim temeljima razvijati nove zanimljive (open source) komponente.

Moram spomenuti i SPA koncept, gdje je, zanimljivo, sam ASP.NET razvojni tim rekao nešto poput: "uzmite JS framework koji želite, i mi ćemo vam dati framework za REST servise. Ili uzmite svoj REST framework, ionako je sve to .NET". Meni je drago što ne forsiraju određeni framework, iako se Knockoutnuget paket nalazi unutar projekt predloška, ali pričajući sa drugim programerima, mnogi očekuju da im MS kaže "koristite točno ovaj framework koji smo mi napravili", jer kao time se dobije kvaliteta i sigurnost. Apsolutno razumijem i takav stav, ali nadam se da će knockout i Angular dokazati da ne treba Microsoft baš sve razviti sam, da možeo uzet i jedan open source projekt i koristiti ga u svakodnevnom korporativnom .net okruženju. Ja znam samo da se bacam na savladavanje Angulara, kako ne bi nepripremljen zatekao zahtejve budućeg projekta! Preporučujem Pluralsight tutoriale za brzo i efikasno proširiti postojeća znanja.

2 Comments

Potaknut Ayendeovim blog postovima vezanim za arhitekturu, DDD, i projektiranje strukture aplikacije, nekako osjećam potrebu napisati par riječi.

Poruka koja se proteže kroz gotovo sve Ayendeove postove je uvijek ista, a govori o jednostavnim rješenjima za jednostavne probleme, i kompleksnim za kompleksne probleme. Bilo kakva drugačija kombinacija nije dobra, naravno, i logično!

Northwind starter kit je samo jedan u nizu primjera kako rješenje za 2+2 napisati u obliku SIN(4)^2 + COS(4) ^2 + SQRT(9). Svako toliko kada tražim primjer za neki problem, pattern, funkciju, skinem projekt sa codeplexa ili nekog drugog repozitorija, otvorim ga u Visual Studio, i čudim se kako su uspjeli napisati toliko linija koda za izvući jedan redak iz baze, ubaciti toliko layera apstrakcije i interfaceova. Takvi primjeri, koji su pretpostavljam namijenjeni za učenje, davanje savjeta i dobrih praksi, vjerujem da samo u manjem dijelu i zadovoljavaju tu svoju svrhu, ali u većem dijelu čine kontra-efekt, i udaljavaju "čitatelja" od dobivanja korisnih znanja.

Iz vlastitog iskustva mogu opisati kako sam godinama samo tražio priliku za ubaciti dodatne klase u projekt koje bu služile kao repozitorij, service layer, application layer, pa još neki kvazi-BLL layer, zamjenjivi ORM framework, pa sve to odvojiti u posebne projekte, i neka komuniciraju preko web servisa i SOAP protokola, jer tko zna kakva će biti produkcijska infrastruktura. A radi se o aplikaciji za spremanje brojeva telefona, ili evidencije radnog vremena. U stručnoj literaturi znano kao najobičnija CRUD aplikacija. Ali trebalo je isprobati sve patterne od Martin Fawlera (PoEAA) i Eric Evansa (DDD)!

Kvaliteta koda se prvo očituje u njegovoj jednostavnosti da riješi zadani problem. Odmah poslije toga bi postavio pridržavanje SOLID principa, jer su oni direktno vezani za dobar objektni dizajn - što u prijevodu govori u lakšem održavanju, izmijeni i testiranju. A sve to iziskuje puno rada, truda, učenja, ali i mijenjanja i preispitivanja vlastitih sudova. Mislim da ću si odmah napisati na stick-it notes "jednostavno i solid-no", i zalijepiti ga na monitor, da ne zalutam previše:)

12 Comments

windows_open_source_Nedavno sam dobio upit da napravim jednostavnu aplikaciju za potrebe jedne udruge. Radi se o aplikaciji zapraćenje zahtjeva, koja vodi evidenciju tko je predao zahtjev, tko ga provodi, evidentiraju se zabilješke, i na kraju se zahtjev zatvori. Uz to, bitno je da aplikacija prilikom otvaranja novog zahtjeva pokuša pronaći u bazi dali je slični zahtjev bio već riješen, te ponudi njegovo rješenje. Aplikacija mora imati i različite izvještaje.

Sve u svemu, radi se ospoju CRMa i Issue Trackera, a specifičnost bi bila jednostavnost korištenja i izrade, "pametni" sustav traženja postojećeg rješenja i izrada izvještaja.

Da stvar bude zanimljivija, odlučio sam aplikaciju raditi kao Open Source projekt, i putem opisivati kako sam neke stvari realizirao, zašto i slično. Tehnologije koje planiram koristiti isto nisu nešto što koristim u svakodnevnom radu, te je ovo prilika za proširenje znanja.

Za sada sam se odlučio za tehnologije:

-Silverligh 4
-ASP.NET i WCF web servisi
-RavenDb baza podataka (SQL Server sa EF Code First je backup rješenje, ako se RavenDb iz nekog razloga naljuti na mene i odbije poslušnost!)

Cilj je također koristiti tehnike i alate:

1.planiranje, projektiranje i izrada document baze. Imam iskustva samo sa relacijskim modelom podataka, i ovo će biti odlična prilika za uhvatiti se u koštac sa NoSQL problematikom! Koliko me ovo veseli, toliko me i plaši (Key/Value store, Map/Reduce funkcije, kreiranje indexa, ...)!
2.Caliburn.Micro za MVVM framework. Do sada sam koristio MVVMLight, koji odlično služi svrsi, ali opinioned pristup sa mnoštvo ugrađenih konvencija me jako privlači
3.CQS pattern: kao u predhodnom postu, htio bi:
- enkapsulirati upite, da ih mogu ponovno upotrebljavati
- slati one-way commande koje izvršavaju zapisivanje i/ili poslovnu logiku
 Do sada sam koristio CQS pattern isključivo u MVC web aplikacijama, te još nisam 100% siguran kako ovo izvesti u Silverligh klijent/server modelu, i to zbog:
- dali upite izvršavati u Silverlightu, preko RavenDb REST sučelja, ili ih slati na server i tamo izvršavati? Nikako ne želim imati standardne RPC SOAP web servise, nego više nešto nalik RESTu.
- dali komande izvršavati na serveru ili klijentu?
- kako serijalizirati querye i komande prilikom slanja preko WCFa, ako se uopće šalju?
Inspirirano prezentacijom “Dr. CQRS or: How I Learned to Stop CRUDing and Love the Domain Model” sa NDC 2011 konferencije.
4.reporting u Silverlight, još trebam odlučiti kako. Savjeti?
5.Aplikacija se mora pokretati na shared hosting okruženju, u Full Trust načinu rada

Sljedeće je plan izrade User Storya, i popisa funkcionalnosti koje aplikacija mora implementirati. Izvorni kod će biti objavljen na BitBucketu kroz tjedan-dva, čim postavim projekte i solution.

Kako je ovo jedan proces učenja novih tehnologija, očekujem puno primjedbi, komentara i sugestija! Zaželite mi puno sreće u mojem prvom Open Source projektu!