[1 svi 2012 | 0 Comments]

imageSvako toliko naiđem na neki videocast/podcast, koji si bookmarkiram pod nadom da ću ga pogledati kada stignem. To se rijetko desi, naravno, što mi je žao jer propuštam neke stvarno pametne ljude koji pričaju neke stvaro zanimljive teme, koje mogu promjeniti ustaljena gledišta i uzdrmati naučena vjerovanja (naprimjer, svaka aplikacija mora biti troslojna!). Danas sam uspio naći sat vremena i pogledati prezentaciju Get Younga (jedan od idejnih začetnika CQRS arhitekture) naziva “Simple is better”, koja prikazuje neke korisne tehnike strukturiranja koda prema jednostavnosti. Skills Matter je odličan izvor ovakvih prezentacija, vezanih za open source, SOA, arhitekturu, DDD, TDD, F# i slično. Iako im je web blago rečeno grozan (ali ono stvarno, samo fale animirani gifovi!), uz pomoć Googlea možemo pogledati sve objavljene prezentacije ako u search polje upišemo site:skillsmatter.com/podcast/open-source-dot-net . Eto, zato sljedeći put umjesto gledanja reprize serije na televiziji, pogledajte neku prezentaciju i prokomentirajte kako vas se svidjela!

Web Dev »

[1 vlj 2012 | 0 Comments]

sqlmigrationJedna od čestih tehnika rada sa bazom, obavezna u ozbiljnijim firmama sa programerskim timovima, ali i popularizirana u Ruby on Railsu, je izrada migracijskih skripti. Radi se o kontinuiranoj izradi skripti koje upravljaju sa shemom baze. Drugim riječima, ne smije direktno mijenjati baza, jer se time izgube informacije tko je, kada i što promijenio, nego se rade kratke skripte, i svaka se nazove ili notira datumom (timestamp-om). Da bi se baza kreirala, dovoljno je pokrenuti sve skripte.

Jedan način izrade migracijskih skripti je pisanje SQL-a unutar običnih textualnih (.sql) fajlova, koje je moguće izvršiti u SQL Management Studio, ili nekom drugom alatu. Da bi automatizirali to, pratili u kojoj je “verziji” naša baza (koja je zadnja skripta izvršena), trebati će nam neki alat. U .NET svijetu ih ima nekoliko. Svi oni rade na slični princip, stoga opisana procedura ovdje vrijedi i za ostale alate. Pokazati ću rad sa FluentMigratorom, kojega ja upotrebljavam u svojim web projektima.

Ovaj alat je C# apstrakcija nad generiranjem SQL skripti i baze podataka, što znači da se koristi fluent API za kreiranje skripti, i željeni database provider ovisno o bazi (MS SQL, MySQL, SQLite, Jet, Oracle, Postgres). Sastoji se od DLL biblioteke koja sadrži fluent API klase, i runnera, .EXE izvršne datoteke koja pokreće skripte. Runner se može pokrenuti po želji, i on će izvršiti samo skripte koje nedostaju, odnosno od zadnjeg pokretanja, jer u bazi postoji podatak o trenutnoj verziji. Također, runner je pogodan za pokretanje u sklopu build procesa.Više...

quick thoughts »

[4 sij 2012 | 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:)

Trice i kučine »

[1 sij 2012 | 3 Comments]

mvp_horizontal_fullcolorPrvi dan nove godine je počeo sa mail-om od Microsofta, i naslovom “Congratulations 2012 Microsoft MVP”, odnosno obavijesti i čestitkom za dobivanje prestižne MVP nagrade! MVP se dodijeljuje pojedincima za njihov doprinost zajednici, a netko je izgleda procijenio da sam ju zaslužio, i to za područje ASP.NET/IIS-a! Vrlo sam zahvalan i počašćen, ali i motiviran da se još više trudim u svom angažmanu u lokalnoj i on-line zajednici korisnika Microsoft web tehnologija, što se nadam da ću opravdati u narednoj godini. To znači prvenstveno češće bloganje, angažman u regionalnim okvirima (Istra, primorje i Gorski kotar), suradnje sa poduzećima i obrazovnim ustanovama, i prezentacije na konferencijama. Kako je ova nagrada isključivo vezana za angažman u zajednici, stojim na raspolaganju za sve savjete i upite koji bi mogli doprinjeti tom cilju. Ali neću odbiti niti poziv na kavu i ugodno druženje;)

bizz »

[29 ruj 2011 | 0 Comments]

imageSlegla se prašina oko posljednje Microsoft konferencije Build, i prema reakcijama blogera još se broje mrtvi i ranjeni. Bujica novosti je zapljusnula cijelu IT zajednicu, ali čini mi se nekako da imam više pitanja nego prije te konferencije .

Za one koji su živjeli ispod staklenog zvona i nisu upoznati sa glavnim novostima, ukratko: predstavljen je Windows 8 Technology Preview, i koncept programiranja aplikacija za njega. U novim Windowsima su sada dva operativna sustava: jedan namijenjen prvenstveno za tablet (slate) računala, zvan Metro, i drugi za standardno (classic kako to sada MS zove) desktop okruženje - uredsko okruženje, power desktop korisnici, i uglavnom desktop/laptop računala. Za touchscreen uređaje, Metro koncept UIa je već poznat sa WP7 uređaja, i sada taj koncept seli i na "pune" Windowse.

Tehnički gledano, radi se o dva poprilično odvojena okruženja za izvršavanje aplikacija:

Desktop App (classic): tu se priča ne mijenja puno (ako uopće?) u odnosu na trenutni model razvoja na Windows 7 sa .NET-om, Win32 API i dr. Aplikacije se ne vrte u Metro okruženju, ne koriste novi WinRT. 

Metro Apps: korisničko sučelje predstavljeno tile-ovima, inspirirano znakovima po kolodvorima (od tuda i naziv Metro, jelte), čime se naglašava informacija i funkcionalnost bez skretanja pažnje raznim nepotrebnim uljepšanjima (gradijenti, sjene, 3D efekti gumba, prozori, ...). imageAplikacija je prikazana jednim tile-om, ili nakon pokretanja fullscreen načinom (zanimljivo, ovime se gubi i windows iz Windowsa), ne postoji pogled gdje imamo n prozora na ekranu, znači nešto nalik radu na iPadu ili smartphoneima. Izvršava se u svom sandboxu, ne može prtljat po OSu, nema modal popup prozora, ima ograničenu funkcionalnost u odnosu na classic aplikacije, koja je definirana WinRT API-jem.
Programira se u jednom od ova dva okruženja:

- HTML5/JS: trend rasta Javascripta u "ozbiljnim" web aplikacijama zahvaljujući JS kompajlerima i buka oko HTML-a 5 ipak nije bila za ignorirati, i zašto ne pokušat privući te developere?

- c#/VB/f#/c++ + XAML: puno bliže Silverlight i WP7 runtime-u nego WPFu, Metro aplikacije mogu jednostavno razvijati i postojeći Silverlight/WPF programeri.

WinRT je nastao spajanjem Windows i Developer divizije unutar Microsofta (pola XAML tima je razmješteno u Windows diviziju, a pola je otišlo za Windows Phone. Ako netko zna tko će sada razvijati WPF neka mi šapne). Osim što implementira novi Metro UI, možda zanimljivo za spomenuti je poklapanje sa novostima koje donosi .NET, odnosno C# 5, asinkroni model rada. Naprimjer, Microsoft želi da sve operacije koje traju duže od 50ms bude odrađeno asinkrono da bi se dobila potrebna brzina i fluidnost sučelja. Nove c# naredbe async i await upravo to i omogućuju i olakšavaju, a dobiva se uredan i čitak kod (za razliku od Node.JSa gdje se asinkroni algoritam mora organizirati closuerima, gomilom funkcija unutar funkcija).Više...