Tales from under the Mountain

October 2008 - Posts

PDC2008 - Web apps & Live Mesh

Priča oko Mesh-a se ne završava samo na sinhronizaciji podataka, blob-ova, dokumenata, kako god da želite. Postoji još jedan aspekt čitave platforme, a to je sinhronizacija aplikacija. Da, dobro ste pročitali. Imamo dva osnona apsekta rada sa aplikacijama u Mesh-u. Prvi su aplikacije koje zaista rade u samom Mesh-u, i sinhonizuju se kao još jedan item iz Mesh-a, sa nekim specifičnostima. Drugi aspekt su web aplikacije koje rade sa Mesh-om, odnosno koriste podatke i sve ostalo što pojedinačni korisnik drži unutar svog Mesh-a.

Prva vrsta su uglanom SL aplikacije, koje se malo modifikuju određenim stvarima, kao što je Mesh Live Environment, i onda mogu da se smeste u Mesh. Kada se dodaju, korisnik može da odabere šta ta aplikacija sme da radi, i gde se sinka, i onda se ona automatski sinka sa svakim uređajem koji je u Mesh ringu!! Ovo je deployment snova, ja bih rekao. da, to podrazumeva i desktop mašine, i Mac-ove (u budućnosti), kao i mobilne uređaje (u budućnosti). Predavač je pokazao kako izgleda sinhronizacija između desktopa i cloud-a, odnsono desktop kompjutera i Live Desktopa koji je online negde u velikoj mašineriji Microsoft datacentra. Kada jednom dodate aplikaciju, ona se pojavi na Desktopu kao entintet, i na dekstopu kao ikonica, koju kada kliknete startuje se aplikacija. Ono što se omdah vidie je ste da i app poseduje Mesh sidebar, tako da je ona de facto još jedan Mesh entitet sa kojim možete da radite bilo šta što i sa drugim Mesh entiteta, da stavljate news iteme, da zovete druge ljude da koriste tu aplikaciju i slično.

Svaka aplikacija, samim tim što radi u Meshj okruženju, dobija neke funkcionalnosti automatski, kao recimo dedicated storage i sync odatle na Live Desktop. Ovo okruženje se zove Live Operating Environment (LOE). Naravno, Lilve servisi na koje se Mesh oslanja daju i neke druge konkretne stvari Mesh aplikacijama, kao što je autentifikacija i autorizacija korisnika preko Live ID-eva i sl.

Još jedna stvar koja ostaje da se pomene jeste da postoji i opcija da neka web aplikacija radi upite, de facto, u Mesh okruženje odrđenog korisnika. Onda može da se koristi podacima koje je korisnik pohranio u isti. Naravno, korisnik ima kompletnu kontrolu koji entitet želi da otvori kojoj aplikaciji, tako da ne postoji opcija da bilo koja aplikacija pristupa bilo čemu.

Toliko o ovome. Pošto su sesije već postavljene na sessions deo sajta, toplo preporučujem da odete na http://channel9.msdn.com/pdc2008/BB30/, to je sesija sa koje je ovo (zakasneli) izveštaj.

Out.

B.D.

PDC2008 - Anders i budućnost C#-a

OK, posle dva predavanja koja su bila OK ali ništa specijalno (napisaću jedan poveći post da ih skupim na jednom mestu), dolazimo na Andersa i to šta budućnost nosi za C# i šta će to postojati u C#-u 4.0. Pa da krenemo...

- Hm, 10-godišnjica jezika. I naravno, malo istorije, šta je bilo oko 1.0 i 2.0, i naravno 3.0, i naravno LINQ. Zanimljivo je da su generics bili planirani od samog početka. Naravno, sve se dešava zbog pomeranja ka jednom deklarativnom modelu, popularnosti dinamičkih jezika kao što su Python ili Ruby, i na kraju paralelizam. Super dijagram razlike između deklarativnog i imperativnog programiranja (razlika između "kako" i "šta"). Još jedna razlika, ovoga puta između dinamičkih i statičkih tipizacija. Naravno, ako ste ikada slušali Andersa, znate da on zauzima srednji stav, i jedno i drugo je dobro (Kao i erik Mejer (Eric Meyer) uostalom).

- VB i C# će naravno biti ko-evoluirane, odnosno trudiće se da se ide ka feature parity-ju. Naravno, neke stvari se neće dodavati, čuveni primer XML literala.

- I konačno, gde ide C# 4.0. I široko gledano, ide se ka dinamičnom programiranju, i to ne samo ka dinamičkim jezicima, većč i ka onim API-jima koji nemaju statičku šemu..

- Inovacije

-Dinamically Typed Objects‚

- Optional and Named Parameters

- Improved COM Interop

- Co and Contra-Variance

- Dinamically Typed Objects -> ideja da se postoji podrška koja nije Reflection, da se radi sa objektima koji nisu strogo tipizirani. Ključna reč dynamic, odredimo promenljivu kao ovaj tip. Još jedan način da se kaže System.Object. Iste ove imaju i runtime tip koji je onaj koji dodeljujemo. Aaaaa...dakle, sve se deferira u stvari u runtime. I sda je upravo pokazao demo sa javaScript-om. Dakle, jezik koji u sebi ima i statičko i dinamičko tipiziranje. Isto tako, u 4.0 :NET-u dolazi DLR OOB.

- Aha, mislim da je druga inovacija u stvari ideja koja postoji u VB.NET-u, a to je da ako su parametri opcionalni, onda ne moraj uda se navode u pozivu metoda. Po default-u će se staviti ili null ili nešto slično. Ovo pomaže kod treće stvari, COM Interop (pogotovo ako radite sa Office API-jem)

- Dodate su mnoge stvari da olakšaju rad sa COM-om. Recimo, automatsko mapiranje objeka na dinamički objekat, lakši deployment ("no PIA"), imenovani i opcioni parametri i tako dalje. Recimo, ako imamo dinamičke objekte, ne moramo da radimo downcast kada radimo sa Office objektima.

- Podržavaju safe co i contra-variance. Recimo, u IEnumerable<String>, niste mogli da String tretirate kao objekat, a sada možete. Ovo je malo veća tema od ovog pregleda (i malo boli glava) tako da očekujte posebni blog post na ovu temu.

- Šta je posle 4.0? Compiler as a service, ideja je da se kompajler otvori i da se da kao API programima i programerima da koriste. Recimo, iskoristimo taj API, prosledimo mu C# kod i on nam vrati ono što želimo (Expression trees, IL...). Okeeeeej...ovo je...moćno...to je slaba reč. Recimo, na demou je upravo napravio mali interaktivni prompt a-la pyhton (i IronPython), u koji možete da upišete kod koji želite, LINQ upite, kao i da dinamički kreirate WInForms aplikacije.

Anders, kao i uvek, nije razočarao. Jedna mala stvar sa Q&A sesije, za one koji vole dinamičke jezike ili funkcionalne jezike. U 4.0 verziji dolazi tuple u BCL kao tip.

Out.

B.D.

PDC2008 - Keynote 3

Treći po redu, i poslednji keynote na konferenciji. Dnaas nećemo imati Reja Ozija (šteta, čovej kako lepo i jasno priča), već će nam pričati Rik raših (Rik Rashid), Senior Vice President, Microsoft Research. Verovanto će biti jako zanimljivo. :)) Ne zaboravimo da je F#, recimo, potekao iz MSR-a a sada je podržan uVS-u i polako postaje jedan od mainstream jezika u .NET familiji.

- Poluprazna sala...baš me zanima zašto. Oh ne, upotrebio je reć sa više od 2 sloga!! :))

- Zanimljivo, 1990 je nastao MSR, tako što je Nejtan Mirvorld poslao memorandum Bl Gejtsu, što je čudno, MS tada nije bio velika kompanija. Tako je naš dragi Rašid i došao u MS. OK, ovo je lik koji je smislio termin NUMA (Non-Uniform Memory Access). Takođe je pisao deo koda za NeXT OS.

- Misija MSR-a je postavljena tada i nije se menjala (dakle oko 18 godina):

"Expand the state of the art in each of the areaser in which we do research."

"Rapidly transfer innnovative technoogies into MS products."

"Ensure that Microsoft products jave a future."

- MSR radi slično kao i odeljenje za CS na bilo kom velikom Univerzitetu u USA. POreko 4000 naučnih radova objavljenjih. Pored osnovnih centara, kao što je centar u Redmondu, postoji značajn broj centara širom sveta.

- MSR ima direktni uplivu product team, ono što se napravi u MSR-u se, saradnjom sa product timom, nađe konačno i u finalnom proizvodu. Tablet PC, recimo, ili Robotics studio...pomenuti F#. :))

- Čemu, pored gore navedenog, služi MSR? POdstiče agilnost, recimo.

- Trenutni porojekati u SE disciplini, kao što su CHESS, Code Contracts, Pex (automatsko generisanje testova) itd.

- DrydLINQ, distribuirani LINQ upiti na n nodova. Ovo je jako zanimljiv projekat.

- Sada nam dolazi Feng Zhao, Principal Researcher da nam priča malo o istraživanjima senzora i sličnih stvari.Trenutno pokazuje jedan senzor su napravili koji meri toplotu, vlažnost i još neke stvari po kojima može da se meri potrošnja energije. Trenutno pokazuje podatke koje su ovi senzori pokupili u Hali A (keynote hali). Da, svi pokazatelji idu vremenski. Cooool... :)) Preko 10 000 ovih senzora se trenutno nalazi u različitim MIcirosoft Data Centrima.

- Ne mogu da verujem postavili su ove senzore u divljinu u Švajcarskoj, na Alpe. I sada nam pokazuje kako izgleda maa tih senzora i podaci koji se skupljaju.

- Nazad do Rika Rašida. Trenutno priča o Zdravlju, odnosno o doprinosima tehnologije za ovu granu ljudkosg života. Sada trenutno imamo primer AIDS-a i mašinskog učenja. Ideja je se koristi mašinsko učenje da bi se istrenirala vakcina...uh, ovo je odlično. Skapirali su da HIV mutira rapodno, ali ne po slučajnom uzorku, već po tome kako ga imunitet napada. Ali HIV mutira i mamce, koji troše imunitet; sada je ideja da se vakcina trenira da traži mamce i izbegava ih i zatim nađe pravi virus!! OK, ovo je zaista...nestvarno.

- I konačno priča o robotima. MSR radi sa univerzitetima da napravi kurikulume za robotiku, pored toga što pravi i ceo toolkit za robotiku koji koristi Microsoft ethnologije.

- A sada...WorldWide Telescope...sjano!! Jednom rečju...sjajno!! Sa sve muzikom koja podseća na Star Trek. :))) WOW!!! Ovo treba videti!!! OK, ovakvi keynote-i su mi super, nema frke, nema dreke, samo fine stvari za Poslovično Sutra.

- Trenutno gledamo Boku, okruženje za programiranje za decu. Boku izgleda kao igirca, čak se i kontroliše preko XBOX kontrolera...da, koristi se isti za programiranje?? Koliko vidim okruženje je napravljeno da liči na neki igricu kao Black & White. Koristiti kontroler da biste postavili likove i zatim ih stavljavi u vezu. Recimo jedan lik može da ode da traži jabuke, i kada nađe jabuku, on treba da uradi nešto. Recimo, da je pojede. Sve se radi preko rule-ova, pravila koja se izvšavaju konkurenotno, tako da možemo da kažemo našem liku da ode da pojede jabuku i da dobije jedan poen, i onda da 6 poena, recimo, znači da treba da promeni boju.

- sada pkazuju Second Light, što je nastavak Sufrace projekta, da sada može da se koristi surface tehnologija iznad druge, odnosno na nezavisnom materijalu koji radi u saradnji sa primarnom. Dakle, imamo surface kao sto, koji prikazuje nešto, ali ako preko njega stavimo bilo šta drugo, recimo plastiku, onda će Second Light projektovati nezavisku sliku na taj drugi materijal.

Sve u svemu, zanimljiv keynote. Iako nie pričao o postojećim proizvodima, imao je određeni karakter koji je bio zaista odličan.

Out.

B.D.

PDC2008 - Sync Framework

OK, ovo je poslednje predavanje na kome sam bio danas (utorak). Iako sam pokušao da pišem, kao i keynote, kako se dešavalo, ali sma bio previše umoran od jet lag-a...koji nikako da prođe. Sledi kratak opis šta se pričalo.

Čitava ideja projekta "Huron" (za one koji ne znaju, to je pleme američkih domorodaca) jeste da omogući određeno iskustvo i korisnicima, ali prvestveno developerima koji rade sa distribuiranim bazama podataka. Te baze mogu biti SQL Server baze, Access baze, SQL Server Compact baze ili pak SQL Services (ex SSDS) baze. Ideja je da se omogući Desktop Database sharing, koji bi porkio ne samo scenarije više istovremenih izvora podataka, već i lako migriranje sa određenih desktop rešenja (recimo Access) na "veliku braću" kada potrebe prerastu mogućnosti tih baza. "Huron" omogućava razna scenarija za sinkanje, recimo čuveni scenario detekcije dostupnosti mreže, slično kao i Oultlook. U suštini, ako je suditi po onome što je predavač rekao, scenario Outlook-a, odnosno da postoji lokalna kopija podataka koja se transparentno sinka sa nekim izvorom koji je online (u "oblaku", cloud-u) kada postoji konekcija je eksplicitno tražen od njegovog tima da napravi.

Demo je bio prost, imamo jedan wizard koji pokrenemo, pita nas za "main principal" server, odakle će povući kredencijale, i zatim uskladišti ceo Access fajl u cloud, negde. Kada hoćemo nazad podatke, samo uradimo subscribe i to je to.

Slično se radi i konsolidacija podataka za "Huronom". Ideja je da postoji to neko sladište u oblaku, gde mi nemamo pojma gde je, ali koje možemo da koristimo kao centar, ili makar pomoćno sredstvo, za konsolidacije, migracije i sve ostalo. "Huron" nam pomaže u tome. Naravno, postoji granularna kontrola sigurnosti, koja se radi na nivou jedne tabele. Što više zaključavamo, doduše, to su mogućnosti manje, ali što manje zaključavamo to je "opasnost" veća, odnosn nivo sigurnosti manji.

"Ispod haube" ovaj projekat koristi Sync Framework. Ukratko, kao i svaki framework, ovaj rešeava jedan veliki problem ,a to je problem sinhronizacije podataka između dva izvora podataka. ta dva izvora podataka mogu biti bilo koje dve baze; naravno, OOB se podržavaju samo Microsoft platforme, ali postoji bogat provajder model koji omogućava da napišete provajder koji će raditi sa drugom bazom ili vašim izvorom podataka. Još uvek nisam stigao da proverim da li je mogiuće podmenuti mu, putem provajdera naravno, MOSS liste recimo, ili neki XML. Sync framework onda radi to što radi, sinhronizaciju, tako što se obraća provajderu koji radi sa izvorom podataka.

Čitava arhitektura je jako lepo slojevito urađena,  i postoje tačke na kojima se uključuje kod, uglavnom provajder za druge baze podataka.

Toliko o tome. Čini mi se da postoji veoma zanimljiva priča iza svega ovoga, koja bi mogla da bude jako fin teren za dobro kodiranje. :))

 

Out.

B.D.

PDC2008 - Live Framework & Mesh Lap Around

Još jedno predavanje, i ovom slučaju je u pitanju predavanje Ori Amige, Group Program Manager-a, o Live Mesh-u, Live servisima i sličnim stvarima. Kao i uvek, priča počinje sa poentom, a to je u ovom slučaju "Zen of Mesh".  Povezivanje enormne količine podataka, sa većom količinom uređaja, koje pokreću sve više i više aplikacija, koje koristi sve više i više ljudi. Demoe ne mogu da prepričam,m ali jedna od budućih UG-eva će biti svakako posvećena Meshu.

Osnova, pre nego što krenemo dalje, jeste da je Mesh platforma za sinhronizaciju podataka i ostalih stvari, među N uređaja. Za sada su to Windows klijenti (XP i Vista), ali uskoro dolazi i mobile Mesh i Mac verzija. Mesh radi tako što deli, preko HTTP-a, Atom feed-ove koji predstavljaju kolekcije objekata koje sadrži u sebi za sinhronizaciju.

Ali ovo je moćna stvar. Kada instalirate Mesh dobijate Live Desktop, to je kao Desktop in the cloud, u kojem možete da držite sve podatke koje imate u Meshu (ima oko 5GB prostora). Ono što je dobro, jeste da Desktop može da primi i aplikacije, napisane na određeni način. Kada se uradi sync, posle instlacije aplikacija (i podešavanja), ta aplikacija se nalazi na svim uređajima koji imaju Mesh (odnosno, na onima koje ste odabrali da se sinkaju), i rade u hostu. Dakle, sinhronizacije ne samo podataka već i aplikacija.

Lep opis.

"LIve Services are a set of building blocks for handling user data and application resources which can connect your application to hundreds of millions of users"

Demo sa kodom. Ovo je lepo. Osnovna stavka je LiveOperatingEnvironment klasa, koja predstavlja framework, radi u cloud-u, ali postoji i lokalno kada instalirate Mesh. Sve unutar Mesh-a je kolekcija unosa. Kada instanciramo gornju klasu, imamo na njoj članove koji nam omogućavaju da dođemo do informacija o njima. Osnova jedinica deljenja su Mesh Objects, recimo Live Folder. Mesh Object je kolekcija feed-ova. Iteracijom prikažemo sve, odnosno radimo nad njima kroz foreach, pa zatim možemo da odaberemo jedan poseban. LINQ za upite, naravno. Dodajemo opet preko listi. Svaki "dodatak" u feed-u je DataObject.

Slično je i sa drugim stvarima, kao što su News ili Posts. I oni su predstavljeni kao feed-ovi, vezani za određenoi objekat koji smo odredili za sinhronizaciju.

Iiii...dijagrami. Odlično. Imamo prvo LiveOperatingEnvironment, koji predstavlja osnovu i bavi se teškim stvarima kao što su sync i slične stvari. Zatim postoji Resource Model, i sada će da priča o njemu malo detaljnije. Ideja je da on mapira resurse na reprezentaciju.

I tako se rodila ideja da feed-ovi predstavljaju podatke, jer su zaključili da je šira zajednica odavno izglasala da je to dobar način za predstavljanje podataka. Osnova je DataEntry, koji zatim pravi kolekciju, odnosno feed DataEntry objekata, koji potom prave MeshObject, a više MeshObject-a prave Mesh, koji opet donosi sa sobom nekoliko korisnih kolekcija.

Tipovi aplikacija. Generalno, biće zasebna sesija o tome kako se prave web aplikacije, ali ideja je da Mesh služi kao host za aplikacije koje mogu dase napišu kao web sajtovi. Više posle te sesije koju je Ori pominjao.

Out.

B.D.

PDC2008 - Keynote 2

- Rej Ozi opet na bini prolazi kroz istoriju PC-a. Zašto je butno da shvatimo koliko je bitno što PC postoji. Koristimo samo jedan mali deo mogućnosti PC-a da bismo podigli korisničko iskustvo na webu. Prednost PC-a je to što je hardver tu, odmah, do korisnika. Grafičke kartice, više monitora...name it.  OK,

- Web, s druge strane je sveprisutan, daje nam mogućnost da poristupimo tonama resursa na klik. Stara priča, ali sa okretom...browser je univerzalni runtime, ali on nije ono što definiše web, nije alfa i omega svega na webu.

- Telefon je treća stvar. Iako trenutno možda najsiromašniji, on je uvek s nama, daje nam mogućnost da koristimo aplikacije uvek i stalno.

- Najbolja aplikacija je ona koja omogućava da se koriste sva tri ova resursa. Dakle, aplikacije koje će moći da koriste na sve tri vrste uređaja.

- OK, stiže Steven Sinofski, pokazaće LIve Wave 3 i Windows 7. Zatim idu Skot Gatri (The Gu Man) će pokazati platformu.

- OK, krećemo na demo:

- Uuu, novi taskbar. :)) takođe, doterali su preview iz Viste, sada daje preview i celog prozora. Doneli su neke stvari za upravljanje prozorima iz thumbnail pogleda, mogu da se zatvaraju. Alt-Tab na steroidima.  Rad sa prozorima je takođe poboljšan, koliko vidim.Imamo Jumplists, kao mini Programs meniji, samo što mogu da se grupišu po drugim kriterijumima. Sarch dijalog je malo sređen, sada ima keywords koje su commn odmah dostupne na klik.

- Izmene u Home Networking. Uveli su Home Group. Uuu, sve radi samo od sebe. Odredite šta ćete da šerujete, i kada se priključite sa Windows 7-com u tu grupu, on automatski sve pohvata. Takođe se šeruju i fajlovi, a search radi integrisano preko svih članova Home Group-a. Streaming je takođe ugrađen. Sada su upravo pokazali muzički fajl koji se pušta na liniju sa mrežne lokacije.

- Idemo na mobilne uređaje. Device center je prerađen, sada nam daje mogućnost pregleda svih uređaja. Super fora, ako dođem sa posla kući, mogu da se konektujem na Home Group iu da mi Windows 7 autmatsi kao default namesti Home Group štampač. Kada se vratim na posao, suprotno, defualt je poslovni štampač.

- Gadgets su sada "slobodni", odnosno nisu više deo sidebar-a već se mogu pomerati po desktopu. Systray je sada pod kompletnom korisnikovom kontrolom. Ikonice se pojavljuju samo ako ih stavite tamo.

- Touch. OK, dakle, komande miša na steroidima. Sve možete da radite pristima. :)) Ono štoi je dobro jeste da aplikacije ne moraju da se prepravljaju za ovo, dakle u pitanju je dodadatak koji sve aplikacije po default-u podrazumevaju. Pokazali su skrolovanje, zumiranje i sve osatalo. Paint takođe kapira ovo, dakle kao Wacom tablet. Dodali su ribbon iu većinu UI-a aplikacija za Windows.

- Software + Services. Naravno, imamo Live servise na Internetu, imamom takođe i Windows 7, recimo, da imamo bogato iskustvo u korišćenju tih servisa. Ne samo to, dolazi

- Tranzicija od Viste. Uglavnom šta je naučeno od RTM-a Viste naovoma. Stiv je poprilično otvoren oko stvari koje nisu radile kako treba u Visti ,recimo nepripremljenost ekosistema, zatim UAC i problemi koje je on doveo i tako dalje.

- Ribbon UI je sada dostupan kroz Windows svima. Jumplists i Libraries, prvi koji je u stvari ideja da se grupiše više stvari na jednom mestu za startovanje, a drugi koji je ideja da se grupišu pretrage i resursi

- Uuuu, dodali su native podršku za VHD format!!! Sada diskovi mogu da se mountuju/attach-uju VHD diskovi!! A može i da se butuje iz VHD-a!! Ovo je sjajno potpuno. Dakle, imamo jedan VHD na kome radimo razvoj, drugi koji je "normalan" i koji možemo da koristimo za svakodnevni rad. I onda radimo swap prilikom boot-a.

- Ha, odlična stvar za ljude koji drže prezentacije. Win+P kombinacija "šeta" između svih projektora, odnosno eksternih uređaja na koje je komp prikačen. Zabavno. Remote Desktop sada takođe podržava više monitora na ciljanom računaru.

- Toliko ot Stivena Sfinovskog. The Gu Man approaceth. :)) Prva priča, naravno, šta će Windows 7 da pordži od jezika i okruženja. velike stvari će se uraditi za C++ IDE ("10 is the next 6", kako je rekoa Don Box).

- OK, dodaje se Ribbon UI. Jedna direktiva u XAML kodu i imamo Ribbon, koji je kompletno skinnable kao i sve ostale WPF kontrole. Sada nam pokazuje kako da dodamo touch. Dodaće se novi tipovi evenata za touch na kontrole. Takođe mogu da se koriste i pixel shaderi novi, odnosno DirectX efekti koji su dodati u 3.5 SP1.

- Šta dolazi u .NET 4.0? WPF donosi Multi touch, Deep Zoom. Doneće mogućnost da različite verzije CLR-a rade in process, dakle zajedno.  Uključiće DLR, takođe.

- Visual Studio je sada napraljev na WPF-u!! Ne samo UI, već i source editor, recimo. Sada The Gu Man pokazuje šta je novo. Recimo, ekstenzibilnost. Napravio je jednu klasu, dodao nekoliko linija koda, i dobio je vizuelizaciju XML komentara u sors kodu. Sjajno, potpuno...

- U sledećoj verziji ASP.NET donosi nekoliko finih stvari, recimo višestruke config fajlove koji zavise od release-a. Bolja podrška za deployment, uključujući i deployment baze podataka iz projekta.

- DOlaz i Silverlighjt Toolkint koji će imati u sebi kontrole kao što su TreeView i tako dalje. OSS licenca ljudi, MSIPL.

PDC2008 - ASP.NET 4.0 Roadmap

OK, posle keynote-a i malo zezanja sa VSTS-om 2010 (o tome ćete možda više čitati kasnije), imao sam da biram između tri sesije. Prva je Anders koji priča o budućnost C#-a. Srećom, sesija se ponavlja u sredu, tako da sam imao da biram između sesije koja govori o razvoju aplikacija za Microsoft Surface i ASP.NET 4.0 Roadmap-a. Sada, Surface je zaista zanimljiva tema, ali nekako mi se čini da mnogo više ljudi u Srbiji radi sa ASP.NET-om nego što će raditi sa Surface-om. A, i, Surface treba videti, ne prepričavati. :))

Toliko o tome, sada krećemo polako sa ASP.NET 4.0 stvarima. Prezentuje Skot Hanter (Scott Hunter).

- Sa njim su i Phil Haack (ne umem da transkribujem) i Bertrand Le Roj (Berttrand Le Roy). Prvi je PM na MVC-u.

- Idemo kroz istoriju. Futures paket, zatim Extensions paket, i onda u Martu Beta za SP1 za 3.5. Takođe su izdanja počela da izlaze na CodePlexu-u. TO je "bleeding edge" tehnologija. Čini mi se da je CodePlex danas update-ovan...da proverimo....aaaa, novi logo. Čisto da vidite:

image

 

Novi preview je online, očigledno. Baš me zanima da vidim šta su to postavili, uveče (odnosno, pola noći po vremenu u Srbiji).

- VS10 će i dalje nastaviti da podržava multi-targeting, i za ASP.NET. Takođe će pokušati da održe maksimalnu moguću kompatibilnost. Naravno, izdanje 4.0 je side by side, što znači da će morati da postoji korak odabira verzije na serveru.

- Koje su "teme", lajtmotivi za 4.0 izdanje ASP.NET-a? POdržavanje standarada. Bolja podrška za LOB scenarija. Nove investicije u web forms infrastrukturu. gtakođe i u "core" infrastrukturu. MVC, naravno. Dynamic Data takođe. I imamo AJAX poboljšanja.

- Web forms: aaaa, ovo je dobilo aplauz. Web forms kontrole će biti kontrolisane koje ID emituju. Dakle, moći ćete da kontrolišete taj aspekt rada. Za CSS takođe, žele da uklone control adaptere i da samo kažete da web forms kontrola koristi CSS, i onda se uzima generalni CSS za stranu. URL routing, MVC to danas koristi, a 4.0 će isto doneti za web forms. ViewState će biti moguće iskljućiti na nivou strane, ali uključiti na nivou kontrole, ili pod-kontrole. Konačno, dolazimo do

- AJAX: ah, kolicno ruku da vole JS. Najboji, a najmanje razumeni jezik na svetu. Dakle, pokušaće da naprave "zlatnu sredinu" između ljudi koji vole da programiraju u JS-u i onih koji vole da rade sa stranama, odnosno klasičnim ASP.NET-om. jQuery 100% komentarisan da radi sa VS Intellisensom. AJAX Control Toolkit će biti uključen u ASP.NET od verzije 4.0. I sada demo za ASP.NET AJAX Templates. I, naravno, kao i uvek, prezneter nije podigao veličinu fonta u VS-u, tako da ništa ne vidim. Ideja je da u stvari da postoji podrška za deklarisanje binding-a za servise, odnosno bio kakav izvor JSON podataka.

- MVC: 'nuff said. Pričao sam, pisao sam, i pričaću opet. :)) Ali, nove stvari. Uvešće scaffolding, dakle pdometnete model baze i on vam napravi views i sve ostalo automatski (a-la Rails ili Django). Sada ćemo da vidimo kako izgleda partial rendering, odnosno ideja da možete da iz AJAX bilbioteke da pozovete metod na kontroleru i da se dobije JSON i da se koristi na klijentu.

- Dynamic Data: bolja podrška za MVC framework, dakle da se daju kontrole za MVC framework za laki prikaz podataka. Doneće podršlu za apstraktni data-layer, dakle da pomogne da se razdvoje i te dve stvari. Od novih stvari će doneti i podršku za Data Services, tako da Dynamic Data može da koristi sa tim servisom.

- ASP.NET "core": doneće se nove stvari u cahce engine, ako rcimo ekstenzibilnost, tako da možete da ubacite svoj provajder za keširanje, recimo Velocitiy ili tako nešto.

I to je to, što se tiče sesije. Idemo dalje...

 

Out.

B.D.

PDC2008 Keynote

OK, uspeo sam, čak ima i interneta, pa mogiu da radim ovo. Dakle, PDC2008 keynote, prvi po redu (biće ih i ostalih dana). Danas imamo Rej Ozija (Ray Ozze) i  Boba Mugliju (Bob Muglia), kao i još neke stvari. Pretpostavka: biće puno priče o sinhronizaciji i sličnim stvarima. :))

- OK, evo ga Rej, izaziva veliki aplauz kao i uvek. :)) Da, da, prekretnica za Microsoft, sada će javnost konačno saznati šta se radilo poslednjih nekoliko godina u Redmondu. Zanimljiva teorija: Microsoft pravi svoje ključne alikacije na svojoj platformi, te stoga možemo da pretpostavimo da je platforma OK ako rade aplikacije na njoj. Jedan od tri razloga zašto je Rej, kao developer, koristio MS tech.

- Oooo da, evo ga čuveni dijagram. Kompjuter, PC, zatim web i phone. Microsoft pravi proiuzvode koji se šire preko čitavog ovog spektra. Ali danas će da pokažu inovacije u platformi.Malo priče o virtuelizaciji, to je normalno, sa istorijom od početaka.

- OK, koji su izazovi današnjice u IT-u, gomila korisnika, preklapanje između onih koji rade održavanje (operations) i onih koji rade razvoj (development). A sve ovo u odgovor da li je cloud nešto drugačije, nešto novo (divlje?? :)) za ljude koji se bave razvojem. Za Reja, to je jedno DA!

- Pre nekog vremena, Microsoft se okrenuo analizi sopstvenih web-facing

- Neokliko nivoa computinga. Prvi je korisničko iskustvo, idnividua. Drugi je preduzeće, firma. Treći je web nivo/sloj, odnosno onaj sloj koji služi predstravljanju proizvoda ili prisustva firme na webu. On je veličine celog web-a, dakle granice su poprilično velike.

- OK; avo ga Windows Azure. Novi Windows offering, na web sloju. Windows in the cloud!! Nije softver koji se koristi in-house, već se koristi tako što je to servis koji se hostuje u Microsoft-u, na farmama i farmama. Danas je release u CTP formi...Microsoft će tkaođe koristit Azure za svoje servise u cloud-u.

- OK, Azure je osnova. Na njemu rade

- Live Services

- .NET Services (novi logo!!!!)

- SQL Services (SSDS preimenovan)

- MOSS services

- Dynamics CRM services

- Demoi, demoi, demoi!!!! :)) OK, pre toga, malo priče. Windows Azure pruža Scalable Hosting. Infrastruktura se zasnivca na Hyper-V-u, naravno. Takođe daje nivo apstrakcije nad čitavom distribuiranom infrastrukturom. Daje i alate za upravljanje, koji pružaju automatski menadžment servisa. Nešto što se zove Fabric Controller. On upravlja baš servisima, ne serverima. Dajete role vašim servisima. Modelujte servise. Kada radite sa Azure-om, jedna stvar je kod koji dajete, kod vašeg srevisa, drugo je model servisa da bi on mogao da upravlja istim, odnosno šta treba da se radi sa njim. Storage sistem automatski radi replikaciju da bi postigao HA scenarije.

- Ovo će sve biti dostupno na dekstopu ljudima koji rade razvoj!! Dakle, ceo cloud sistem će biti dostupan za testiranje za razvoj u okvirima pojedinačnog dekstpa. Azure radi i sa managed i unmanaged kodom.

- Steve Marx, sada će da pokaže nešto. OK, pokazuje mašinu koja ima instalira SDK za Aziure. Novi tempeljti za VS. Daje dva projekta, jedan je zaslužan za opis servisa. Drugi je prost ASP.NET web site.  OK, ovo je poprilično jasno. Udarimo F5 i pokrenemo okruženje koje emulira cloud servise. Publish opcija pravi paket, ode se na portal koji je UI za Azure servise. Napravi se novi projekat (ili se radi sa postojećim). Upradimo upload package-a za app, zatim konfiguracije.

- Sada imamo primer jednog novog servisa Bluehoo, koji radi na Azure-u. Odnosno, ovo je servis koji pomaže da oktrkijere ljude oko sebe preko bluettoth-a iu jedne jako simpatične SL aplikacije. Mobilni uređaj ima instlairanu Bluehoo aplikaciju, koja priča sa REST servisom i onda LS aplikacija to prikazuje. Ovo sve radi na Azure-u, napisano u C#-u koristeći VS2008. Oko Steve, čovek koji priča, pokazuje dinamičko kreiranje dodatnih node-ova. Promeni se XML konfiguracija (za sda ručno, dolazi UI) i to je to.

- OK, cela platforma je otvorena, na REST protokolima i XML fajl formatima, podržava managed i unmanaged code, kako sam već rekao.

- Sada dolazi Bob Muglija, Senior Vice President. Ovo će da bude poslovna priča. Malo istorije o tome kako smo došli do Azure platforme uopšte. OK, poslovna priča, mada mislim da je svima jasno zašto Azure može da pomogne. Dakle, neko drugi se brine o vašim serverima, samim tim gvožđe i operations postaju manji troškovi.

- Ovo je zanimljivo. Dakle, .NET Services, imamo Service bus, koristi se da poveže on-premises servise i cloud servise. Access control i Workflow Services. Azure donosi i novi identity provider pod šifrom "Geneva". SQL Services je upravo to, SQL Server in the cloud, sve što ima SQL ima i SQL Services.

- Još jedan live case study. Shawn Davison, Red Prairie.Pokazaće "one-click" rešenje za product recall.

- Idemo malo na priču o System Ceneter-u. Šifra "Atlanta", mali projekat sa svega par developera, koristi Azure servise. Zanimljiva priča. System Center koji kupi podakte od distribuiranih servera, pali i gasi po potrebi Azure virtuelne mašine, koristi SQL Services za obradu podataka. OK, Bob Muglia i nije najbolji čovek za tehničke demoe. :))

- Prešli smo na SQL Services reporting. Ideja je da se dopusti administratorima da prave izveštaje.

- Konačno, Bob nam daje pregled ideje. Ideja je da se ova dva svera, cloud i on-premises, povežu, da se mogućnosti prebacuju lz linije proizvoda u liniju prozvoda.

- Dave Tompson. Priča o Microsoft Online Services. Ideja je Microsoft priža usluu hostovanja svojih proizvoda. Imamo i podršku za federaciju identiteta. Dakle koristimo Azure servise u saradnji za hostovanim Microsoft poroizvodima, i da možemo da ih proširimo i sve ostalo.

- Demo: imamo aplkaciju koja se zove Microsoft Services Connector i koja može da napravi vezu između našeg AD-a i servisa koji želimo da koristimo. Onda lepo otvorimo CRM online, i identitet je autmatski prepoznat. Developer napravi novi timesheet. Manager odobri timesheet i to pokreće wokrflow koji je distribuiran. Zatim možemo da povežemo MOSS Services i da postujemo dokumente na njega.

- Sada imamo zaključak. Danas u podne, lokalno vreme (dakle sutra za Srbiju) CTP i SDK za Azure će biti dostupan. Biće jako puno menjan zbog feedback-a.

 

Gotovo!! Idemo dalje, javljam se sa sledećeg predavanja.

Petzold i WPF PDC pre-session

Imao sam tu...sreću da uspem da dobijem ulaz na 6 sati session-a o WPF-u kod nikoga drugoga do Čarlsa Pecolda (Chartles Petzold). Trenutno (10:15 AM po lokalnom vremenu), radi se uvod i priča oko toga gde spada XBAP, gde "loose XAML" a gde "traditional exe file".

- Zanilmljivo, koristi neki tool koji se zove "XAML cruncher", samo još da mi proradi internet ka nekom pretraživaču da mogu da pogledam gde to može (ako može) da se skine.  Aha, proradilo na foricu XAML Cruncher.

- OK, sada idu osnove koje pokazuje preko svog tool-a i objašnjava vezu između XAML-a i .NET klasa. Početnički kurs, donekle, što je sasvim OK za nas koji nismo plivali nikada previše duboko u WPF-u.

- Aha, veza između XML-a (koji je u stvari XAML) i .NET koda, i kako mogu da se deklarišu stvari dvosmerno.

- Dakle, čitava postavka je da ide od veze između XAML-a i .NET koda koji stoji iza. Recimo, u XAML-u je

   1: <Page.Content>
   2:     Hello, World!
   3: </Page.Content>

U stvari postavljanje property-ja "Content", koji postoji u svakoj klasi, na "Hello, World!" tekst. Možete da izostavite tagove, tako da se sve što se ne nalazi u tagovima automatski ide u "Content".

- Kao i u HTML-u, postoji redosled kako se primenju settings koje dodajemo na elemente u WPF-u (XAML-u). Dakle, postoji hijerarhija, što je logično jer je XAML XML-based.

- A sada imamo i pomen WPF "Visual tree", koje sadrži parents, children i siblings. kao i u HTML-u sa CSS-om, i ovde se nalazi osnova hijerarhije. Lep primer sa DNA-om. :)) Naime, border prihvata definiciju propertyja koje koje nema, ali ih prenosi dalje svojoj "deci" po stablu koja imaju.

- Sada prikazuje canvas, kao ultimativnu container kontrolu.

- Sada krećemo na XAML resources, način na koji se neki resursi, kao što su Brushes, mogu rabiti na više mesta.

Posle ručka

Ne, ručak nije bio ništa specijalno. Hrana u USA i nije nešto baš dobra, makar ne na konferencijama.

- Trenutno pravi jednu prostzu aplikaciju za računjanje da pokaže kako se sa XAML UI-em radi iz koda. Isto tako pokazuje event hendlere, kroz primere vlaidacije polja i onesposobljavanje.

-Sada idemo na XAML browser application (XBAP). Osnovna razlika između ove dve aplikacije je da XABP ima Page a EXE ima Window kao "root" objekat. XBAP ima pages i linkuju se međusobno, kao web sajt. Osim toga, koncept je sličan.

- Sada idemo na databinding u XAML-u. Dovoljno je da deklarišemo element <Binding>, da ukažemo na kontrolu/element koji nam služi kao izvor podataka i da damo putanju do njegovog proertz-ja koji nam služi kao vrednost. Isto je i obrnuto. Dakle, binding može da radi dvosmerno, s asource na target i sa target na source. Takođe, može da se definiše i da se binding desi samo jednom.

- Zatim idemo na templated kontrole, pa zatim databinding u njima.

 

Na kraju sam se od umora, izvinjavam se, već malo pogubio i nisam poslednjih 1h pazio šta priča, realno. Znam samo da je i dalje pričao o finim trikovima sa XAML-om. Jedini problem ovog 6-osatnog kursa jeste da ga nije baš lako prepričati, jer se strašno puno kretao u kodu. Ono što sam mogao da pokapiram jeste da je njegova osnovna teza da prvo treba naučiti XAML, onda kod, i na kraju koristiti i jedan i drugi da bi se postigle fine stvari i da bi se prevazišli neki nedostaci u obe tehnologije. Koliko sam pričao dok se sve to dešavalo sa Zmajčekom (koji je držao maratonska predavanja na Sinergiji i dalje o tome), nije loša postavka.

Moram priznati, s druge strane da mi je drago što sam slušao Petzolda kako priča. Dosta se može naučiti o tome kako izvesti nešto ovako od majstora, možda ne toliko priče koliko pisanja, ali svakako "maga" u svetu Windows programiranja. Ukoliko niste upućeni, pored sjajnih kompjuterskih knjiga (kao što su "Code + Markup = Applications", "3D Progrraming With WPF" i biblijske "Programming Windows Applications With C++"), Pecold je takođe napisao i dve knjige koje se tiču kompjutera, ali na jako posredan način. Prva je "Code: The Hidden Language of Computer Hardware and Software" a druga je "The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine". Prvu sam pročitao, i toplo je preporučujem, čak i ako se jako dugo bavite kompjuterima. Način na koji on opisuje i predstavlja same osnove kako kompjuter, kao sprava, radi, je magičan. Kao što je Džef Atvud rekao, za Pecolda je ova knjiga definitivno bila prizvod ljubavi.

Sada malo na spavanje. Jetlag sux. :((

Out.

B.D.

PDC2008, LA, o bogo...

Kratko "obraćanje javnosti". U subotu krećem na Microsoft Professional Developer's Conference u Los Anđelesu. Za one koji nisu upoznati, PDC je najveća Microsoft konferencija koja je posvećena isključivo razvojnoj platformi i tehnologijama. Održava se jednom u dve ili tri godine, i uglavnom je propraćena najavama velikih, vrlih novih stvari. Recimo, .NET Framework ili VS2005 i Team System. Mogu samo da zamislim šta će pokazati ove godine...

Ovaj prostor, ukoliko vas to zanima, će sledeće nedelje biti ispunjen postovima oko dešavanja iz Los Anđelesa, PDC-a, priča koje se tamo dešavaju itd. Ne znam još uvek da li ću uspeti da radim "live blogging", ali ću svakako makar jedan do dva posta dnevno kačiti da bih ispričao ovdašnjoj javnosti šta novo dolazi od Mudrih Sedih Glava iz Redmonda.

I, da, naravno, zahvaljući Zmajčekovoj sugestiji, serija će se zvati "LA Confidential"...a kako bi, zaista, drugačije? :)

Out.

B.D.

ASP.NET MVC Framework i REST - GET implementacija

Metodi kontrolera

Dakle, kako što smo rekli, MVC framework radi na principu jedne klase koja predstavlja kontroler, i metoda te klase koji predstavljaju akcije kontrolera. Naravno, nije svaki metod automatski akcija, samo metodi koji imaju public nivi pristupa (ovo vam omogućava da imate private metode za delove koda koje često koristite, itd.) U poslednjih nekoliko revizija framework-a, tim je dodavao dosta atributa koji nam daju veću kontrolu nad izvršavanjem tih akcija. Jedan od tih koji ćemo danas koristiti je AcceptVerbs atribut koji kao parametzra prima enumeraciju HttpVerbs ili običan string sa vrednošću nekog HTTP metoda. Kao što mu samo ime kaže, on služi da se odredi koji će se HTTP zahtev rutirati do akcije. Ako imamo HttpVerbs.Get vrednost prosleđenu kao parametar AcceptVerb atributu, akcija sa tim atributom će se izvršiti samo na GET HTTP zahtev, ali ne i na POST. Ukoliko nemamo ovaj atribut, onda će se akcija izvršiti na bilo koji HTTP zahtev.

Naravno, postojanje ovog atributa nam izuzetno pomaže kod pravljenja REST servisa sa MVC framework-om.

GET metod

U ovom postu ću pokazati jedan metod, GetCharacters() koji vraća kolekciju likova iiz anše baze Star Trek likova. Oba metoda će odgovarati samo na GET poziv. Jedan će vratiti XML reprezentaciju resursa (kolekcije), dok će drugi vratiti JSON reprezentaciju resursa.

Dakle, kod za sada izgleda veoma prosto:

   1: [AcceptVerbs(HttpVerbs.Get)]
   2: public ActionResult GetCharacters() {
   3:     var r = from c in _db.Characters
   4:             select c;
   5:     return View(r);
   6: }

Razlike

Osnovna razlika između rada sa WCF-om za REST servise i MVC framework-om postaje jasna odmah. WCF ima mehanizme za automatsku serijalizaciju tipova u XML i JSON, dok MVC ima samo JSON pomoću JsonResult tipa koji može da se vrati umesto ActionResult ili ViewResult tipa iz akcije/metoda. Za XML serijalizaciju ćemo morati sami da se "pomučimo".

Druga stvar su ULR-ovi. MVC framework je doneo ideju routing-a, kao što sam objasnio u prethodnom postu, što znači da putanje stavljamo u global.asax fajl, a ne definišemo za svaki metod ponaosob putanu kroz UriTemplate atribute kao kod WCF-a.

Reprezentacije

Kao što smo već rekli, imaćemo dve osnovne reprezentacije resursa. Prva je XML, i koristićemo format podataka koji je identičan onom koji smo već koristili za WCF servis. Ono što je potrebno da uradimo ručno, jeste serijalizacija naših obojekata u XML format. Drugi format reprezentacije će  biti JSON, JavaScript Serialized Object Notation. Ovaj format je idealan za konzumaciju putem AJAX klijenata.

Kao što se može primetiti iz gornjeg kratkog code snippet-a, svaki metod vraca po default-u tip ActionResult koji je uveden radi lakšeg testiranja. Postoji nekoliko vrsta result tipova, zavisno od toga šta želimo da uradimo u metodu. Samim tim, postoji nekoliko načina da prikažemo, odnosno vratimo podatke iz našeg kontrolera/metoda do klijenta.

Postoji nekoliko načina da se vrati rezultat. Prvi je da se vrati na uobičajen način view, ali da view ne bude aspx strana, već XML fajl u kojem ćemo generisati podatke kroz iteraciju nad našom LINQ kolekcijom. Drugi način je da vratimo samo XmlDocument ili XElement tip sa pravilno podešenim Content-Type header-om; MVC framework će automatski obaviti ovaj tip u ContentResult koji služi da se vrati ili čisti tekst ili bilo šta drugo što ne spada u ostale tipove rezultata. Više o rezultatima i njihovim tipovima možete da nađete na http://www.asp.net/learn/mvc/tutorial-03-cs.aspx. Treća opcija, koja je i "najčistija", je da nasledimo ActionResult klasu i da u našoj implementaciji obavimo serijalizaciju. Treći način možete da vidite podrobnije opisan na blogu Omara Al Zabira.

Nasleđivanje ActionResult klase je i jedini način da napravite samo jedan metod koji će na osnovu HTTP header-a da vraća određenu reprezentaciju. Omar koristi “Content-Type” header u svojoj result klasi da bi odlučio koju reprezentaciju da vrati (što baš i nije najbolji način, pravilnije je koristiti “Accept” header putem kojeg klijent obaveštava server koje sve MIME tipove može da obradi). Pošto me ovde interesuje samo da pokažem LO-REST scenarije uz korišćenje MVC framework-a, onda ću koristiti nekoliko metoda i, naravno, LINQ to XML.

 Reprezentacija – JSON

Prvo ćemo napraviti JSON reprezentaciju, pošto je lakša i jednostavnija. Gore dat metod ćemo preraditi na sledeći način:

 

   1: [AcceptVerbs(HttpVerbs.Get)]
   2: [ActionName("Characters")]
   3: public JsonResult GetCharacters() {
   4:     CharactersDataContext db = new CharactersDataContext();
   5:     var r = db.Characters.Select(c => new { c.ID, c.Name, c.Rank, c.Service }).ToList();
   6:     return Json(r);
   7: }

Dakle, kao što vidimo, umesto ActionResult vraćamo JsonResult. Pošto nam dati JSON serilizaer pravi problema sa “circular reference detected” exception-om, uradićemo malu projekciju u anonimni tip koji ima sve što nam je potrebno, i sve ćemo to zapakovati u listu. Potom ćemo istu proslediti Json() metodu. I kao jednu ispomoć, iskoristićemo atribut “ActionName”, da bismo dali bolje ime našoj metodi.

Ono što ćemo dobiti nazad je JSON objekat koji u sebi ima listu sa našim anonimnim tipom. Šta ćemo dalje raditi sa ovim ostaje mašti korisnika, kako bih rekao. jQuery ima veoma koristan .ajax() metod koji možete da koristite da biste pozvali ovaj metod, ili pak da to radite ručno preko eval() f-je u JavaScript-u. Kako god da se odlučite, ovo je način da vratite JSON reprezentaciju.

Reprezentacija – XML

Kako bi metod izgledao sa XML reprezentacijom?

   1: [AcceptVerbs(HttpVerbs.Get)]
   2: [ActionName("CharactersXml")]
   3: public XElement GetCharactersXml(){
   4:     CharactersDataContext db = new CharactersDataContext();
   5:     XElement r = new XElement("characters",
   6:                 from c in db.Characters
   7:                 select new XElement("character",new XElement("ID",c.ID),new XElement("Name",c.Name),
   8:                     new XElement("Rank",c.Rank),new XElement("Service",c.Service)));
   9:     this.ControllerContext.HttpContext.Response.ContentType = "application/xml";
  10:     return r;
  11: }

Nekoliko stvari se promenilo. Prvo, metod vraća XElement tip, koji predstavlja našu reprezentaciju. Drugo, kod za kreiranje reprezentacije je malo komplikovaniji jer koristimo kobimaciju LINQ to SQL i LINQ to XML API-ja. Poslednja promena je linija 9 u gornjem kodu, koja koristi, kao što i liči, HttpContext u kome se izvršava trenutni kontroler da bi postavila Content-Type. Ovo sam uradio samo da bih mogao da vidim XML kod lepo sređen u IE-u i FF-u, a ne kao tekst.

Dobijamo ovaj rezultat:

image

 

 Kratak zaključak

MVC framework nam omogućava da veoma lako i brzo napravimo LO-REST servise. Ideja URL Routing-a nam omogućava da dobijemo “čiste”  URL-ove koji pokazuju na naše resurse, dok nam ideja Action Result klasa daje mogućnost da vratimo različite reprezentacije.

U sledećem nastavku ćemo pogledati i ostale metode koji su nam potrebni (ako mi vreme provedeno sa REST starter kit-om ne bude oduzelo previše vremena i pameti, pa počnem o tome da pišem :)).

Out.

B.D.

Posted: Oct 22 2008, 12:06 AM by blackdwarf | with 4 comment(s)
Filed under: , ,
ASP.NET MVC Framework Beta i REST aplikacija - Uvod

Na REST predavanju koje sam držao na Sinergiji08 (u trenutku objavljivanja ovog posta, verovatno već davno završenoj), pomenuo sam nekoliko tehnologija koje dolaze iz MS kuhinje. Najviše akcenta sam stavio na WCF 3.5 ekstenzije za REST servise (možete da pogledate demoe i PPT ovde), ali sam pomenuo i ADO.NET Data Services kao i ASP.NET MVC Framework, Pva opcija je bila pokrivena i kratkim demoom i zasebnim predavanjem, ali druga je bila samo pomenuta.

Vreme je da se to promeni.

MVC je trenutno izašao u Beta 1 formi, te je vreme idealno za jednu test aplikaciju.

Malo podsećanje - razmena likova

REST servis koji hoću da izgradim će biti identičan po funkcionalnostima kao i WCF rešenje koje sam već napravio. Ukratko, imamo skromnu bazu sa svega tri tabele u kojima se nalazi nekoliko tipa informacija. Sve se vrte oko Star Trek-a, naravno. :) U jednoj tabeli, Characters, imamo skup likova iz svih serijala i filmova ovog SF ostvarenja. Zatim imamo jednu tabelu sa brodovima, odnosno stanicama i sličnim stvarima na/u kojima se likovi nalaze. Konačno, treća tabela predstavlja frakcije iz serije. Naravno, svi likovi iz tabele Characters su vezani za ove dve druge tabele. Dijagram baze, onda, izgleda ovako:

 

image

 

Dakle, jako prosta baza. Naš cilj je da dopustimo neograničenom broju anonimnih korisnika da ulaze u interakciju sa Charaters tabelom, bilo da dobiju listu likova koje imamo u bazi, detalje jednog lika, da dodaju novog ili da obrišu postojećeg. Sve ovo možemo da uradimo kroz skup web servisa baziranih na SOAP-u (da ne kažem "klasičnih" web servisa), ali pošto imamo posla sa velikom količinom anonimnih korisnika, odabrali smo REST princip kao osnovni da modelujemo naš servis.

 

Malo podsećanje - MVC patern i MVC Framework

 

MVC pattern spada u grupu najpoznatijih design pattern-a. Model View Controller, što je u stvari puno ime akronima, je nastao davnih godina prvenstveno za GUI aplikacije koje su došle na scenu nastankom jednog simpatičnog jezika/okruženja zvanog Smalltalk (kod ovog jezika, dinstinkcija između jezika i okruženja nije toliko snažna kao kod modernih alata). Pošto je u pitanju bila nova paradigma, bio je potreban i nov način na koji bi se modelovale aplikacije i korisnička interakcija sa njima. Dok je bio u poseti XEROX PARC-u, Trygve M. H. Reenskaug je sačinio ovaj obrazac. Ono što nam on daje je jasno razgraničenje između sfera interesovanja u našoj aplikaciji. Model je odgovoran za podatke i predstavlja osnovni prozor ka kolekciji podataka sa kojom radimo. View služi samo prikazu podataka, ili bilo čega, krajnjem korisniku. On sam ne zna ništa o podacima, niti treba da zna. Controller je spona između dva sveta, i on uzima podatke od Modela, prosleđuje ih određenom View-u, preuzima rezultat neke interakcije korisnika od View-a, prosleđuje ih Modelu koji potom nešto radi sa njima.

Kako radi ASP.NET MVC Framework? Prva stvar koju treba odmah objasniti (i koju sam objasnio u prethodnom postu), je da MVC sistem ne koristi tradicionalne načine rada na koje ste verovatno navikli u ASP.NET aplikacijama. Ne postoji koncept postback-a, ne postoji koncept ViewState-a. Nista ograničeni jednim formularom po strani. Iako i dalje možete da koristite web kontrole u svojim View stranama, generalno je preporučeno da se koristi "čist" HTML kod, što vam daje jednu prednost u odnosu na web server kontrole, a to je da možete kompletno, 100% da imate kontrolu nad HTML-om koji aplikacija generiše, čime se olakšava i rad sa JavaScript-om, odnosno manipulacija DOM-a/CSS-a, i rad sa CSS-om, odnosno stilizovanje aplikacije. Naravno, neke stvari nisu "ukinute", master strane i dalje mogu da se koriste (osnovni templejt koji dobijate kad instalirate ovaj framework čak i koristi master pages). Slično je i sa sistemima poput Membership-a. Još jedna prednost ovog sistema rada jeste da je olakšan unit testing web aplikacije, jer se testiraju metode u kontroleru, bez čitave ASP.NET mašinerije.

Kada stigne zahtev do web servera, prvo se radi rutiranje do određenog metoda koji je određen da obradi neki zahtev. Ukoliko do web servera stigne zahtev za URL-om http://localhost/CharacterExchange/Characters, MVC će pozvati onaj metod koji se ili zove "Characters" ili koji je označen putem atributa kao metod koji odgovara na ovaj deo URL-a. Slično je i ako dobijemo URL koji izgleda, recimo, kao http://localhost/CharacterExchange/Characters/34, onda će MVC naći metod koji se zove Characters i proslediti mu parametar "34". Slično je i sa ostalim parametrima. Kada jednom metod kontrolera krene sa izvršavanjem, on može (ali i ne mora, zavisno od toga koliko čvrsto želite da se držite obrasca) da "pita" Model za podatke, recimo da dobije listu likova ili jednog lika pod rednim brojem "34", zatim da prosledi te podatke view-u, koji će ih prikazati kako želimo. Slično je i sa obratnim smerom komunikacije.

Nažalost, ovaj post nije baš uvod u sam MVC framework, tako da neću trošiti više vremena da uputim verne čitaoce u osnove korišćenja. Ukoliko vas zanima da naučite više o ovome (toplo preporučujem, naravno), predlažem da posetite sledeće linkove:

Sada kratak opis REST demoa/servisa/aplikacije koji ćemo napraviti.

REST demo/servis/aplikacija

Dakle, kao što smo rekli, naš servis bi trebalo da pruži četiri osnovne mogućnosti korisnicima. Prva je da dobiju listu likova iz baze, druga je da promene podatke za bilo kog lika, treća je da dodaju novog lika i konačna je da mogu da obrišu bilo kog lika. Da bismo stvar držali relativno prostom, nećemo praviti sistem autentifikacije, iako bi realno bilo jako dobro da se isti napravi pre nego što se pruži mogućnost menjanja stanja podataka koji su uskladišteni u našoj bazi.

Pošto želimo da ovaj servis bude dostupan velikoj količini anonimnih korisnika preko Interneta, koristićemo nekoliko REST principa. Prvo, mapiraćemo naše 4 osnovne radnje na HTTP metode (GET, POST, PUT i DELETE), drugo koristićemo dva poznata formata da bismo predstavili naše resurse, XML i JSON i kao poslednje, bavićemo se reprezentacijama resurasa, a ne samim resursima. Konačno, sam MVC framework je, po nekima, REST pristup radu sa ASP.NET sajtovima. U toku ovog provg koraka, neću težiti da implementiram 100% HI REST servis; recimo, neću se truditi da iskoristim koncept hipermedije, odnosno linkovanja resursa do kraja. Servis će raditi sa reprezentacijama samo jednog resursa, likova.

U sledećem blog postu krećemo sa implementacijom metoda koji će podržavati prvi HTTP metod, GET.

Do tada,

Out.

B.D.

Posted: Oct 21 2008, 05:22 PM by blackdwarf | with 1 comment(s)
Filed under: , ,
ASP.NET MVC Framework Beta izašao!

Dakle, kratko, ASP.NET MVC Framework je (konačno) ušao u beta verziju! Koliko pišu razne mudre sede (i ne toliko sede) glave, MVC Frm. je skoro pa feature complete, i od ove verzije će se više akcenta staviti na stabilnost i performanse, a manje na "čiste" feature.

Adresa je http://www.asp.net/mvc odakle možete preuzeti fajl i pročitati dokumentaciju. Quickstarts se nalaze na zvaničnom ASP.NET sajtu takođe.

Nekoliko blog postova od istih tih mudrih sedih (i ne toliko sedih) glava:

Uskoro ću i sam krenuti sa primenom ovog izdanja da bih pokazao kako se MVC Framework može koristiti da se napravi REST API ka vašem sajtu/servisu/aplikaciji. Očekujte uskoro!

 

Out.

B.D.

Posted: Oct 20 2008, 10:58 AM by blackdwarf | with no comments
Filed under: , ,
Expression trees - kako i zašto

Na kraju prethodnog posta o lambda izrazima, spomenuo sam da postoje dva načina kako se mogu koristiti lambda izrazi. Nisam bio baš precizan. Tačnije bi bilo reći da postoje dva načina reprezentacije lambda izraza koje možete da koristite u vašem programu. U prošlom blog postu je pokazan jedan način, a to je "delegate način". Kao što je rečeno, lambda izraz je evolucija delegata i anonimnih delegata iz ranijih verzija .NET framework-a. Prva reprezentacija je dakle delegat.

Druga reprezentacija lambda izraza može da bude tzv. "Esxpression tree". Expression trees su implementacija koncepta poznatog kao "Abstract Syntax Tree (AST)"; oni su reprezentacija određenih izraza u obliku drveća. Jednom rečenicom, ovaj koncept predstavlja reprezentaciju sors koda u obliku

Odakle uopšte ova ideja i zašto se našla u C# verziji 3.0? Krenimo u blagu istorijsku priču...

Svi mi težimo LISP-u...manje ili više

Neretko ćete naći diljem interneta geslo da svi moderni jezici pokušavaju, na ovaj ili onaj način, da stignu neku funkcionalnost koju je LISP nudio pre 30 godina. Ponekad se desi da to bude preterivanje (pogotovo ako imate posla sa "smug lisp weenie"), ali u ovom konkretno slučaju se zadesilo da situacija bude baš takva.

LISP, odnosno Commin LISP i Scheme, dva najpoznatija dijalekta ovog jezika, su sa sobom donela koncept "quote-inga". Princip je relativno jednostavan, bilo da se radi o istoimenoj funkciji ili operatoru: kada odabere deo koda i uradio quote nad njim, interpreter ga ne izvršava, već ga tretira na sličan način kao da ste deklarisali promenljivu. Ukoliko želite da iskoristite taj deo koda, proledite ga kao parametar funkciji eval, koja dinamički re-interpretira taj deo koda i izvršava ga u tom trenutku.

U ovom slučaju, možemo da kažemo da smo tretirali naš kod kao podatke, ne kao kod, što nam je omogućilo da imamo veliku dinamičnost u trenutku runtime-a.

Malo manje ezoterije - JavaScript

Sličan mehanizam postoji u mnogim modernim dinamičkim jezicima. Perl, recimo, koristi eval na različite načina, i u dva osnovna oblika, kao što je već uobičajeno u Perlu[1], kao funkcija ili kao blok. Osnovna upotreba je identična kao gore opisana. Neki deo validnog perl koda se prosledi kao parametar i Perl interpreterga u tom trenutku obradi i izvrši. (Više o ovome, ako vas zanima, na adekvatnim perldoc stranama.)

Mnogo ponzatiji primer je JavaScript. eval() funkcija JavaScript-a je postala osnova novog formata, JSON-a, koji predstavlja okosnicu AJAX rešenja. Kada radite JSON-om,  vi prosto prosledite string, koji je u ovom slučaju, serjalizovana predstava JavaScript objekata, eval funkciji, i dobijete nazad graf objekata. Naravno, većina popularnih bilbioteka kao što su jQuery ili AJAX client library. ima dodatne mehanizme da bi povećali sigurnost, ali je suština ista i ta...dinamičnost JavaScript jezika je omogućila da nastane format kao što je JSON.

Ovakva dinamičnost je inspirisala tim koji je pravio C# 3.0 da doda mogućnost pravljenje expression trees direktno u jezik, ali je to urađeno sa jednom specifičnom namerom.

Čemu sve ovo?

Naravno, posle sve ove teorijske diskusija, moguće da vas, verne čitaoce, boli glava i da se formira jedno pitanje, "a čemu sve to"? Odgovor (osim čuvenih "geek poena") je, naravno, LINQ, odnosno, da budem precizniji, LINQ provajderi ka različitim izvorima podataka.

LINQ, kao što sigurno znate, predstavlja API koji je došao sa .NET Framework-om 3.5 i koji pruža jedinstveni skup metoda za upite i projekcije nad raznorodnim izvorima podataka. OOB dolaze tri osnovna provajdera, ka objektima, odnosno kolekcijama, ka SQL serveru i ka XML-u. Iako se izvori podataka razlikuju, sam API je isti, odnosno, radi se sa extension metodima koji kao parametre primaju lambda izraze.

Kao što smo videli u prošlom izdanju ovog bloga, lambda izrazi se mogu predstaviti na dva načina, kao skraćena sintaksa delegata ili kao expression trees. Prvi način je veoma doar kada se radi sa kolekcijama podataka u memoriji, jer se onda delegat prosto Invoke()-uje nad podacima. Međutim, kada govorimo o drugim izvorima podataka, delegati nisu najbolje rešenje, jer podaci možda ne stoje u memoriji, već se nalaze na udaljenim lokacijama.

LINQ to SQL je glavni primer i može da ilustruje ovo o čemu pričam. Podaci se nalze u SQL Serveru, ne u memoriji, Iako za male setove podataka bi možda bilo optimalno da se "dovuku" u memoriju, to nije uvek slučaj, a generički API kao što je LINQ mora da uključi podršku za sve slučajeve, što znači i za slučajeve setova podataka koji su veoma glomazni. U tom slučaju, preslikavanje podataka u memoriju bi predstavljalo veliki overhead, te LINQ to SQL ne radi tako. On rabi drugu formu u kojoj mogu da se predstsave lambda izrazi da bi kasnije mogao da ih parsira, sačini SQL upit i prosledi ga SQL Serveru. Taj "trenutak istine" je, kao što već znate, trenutak iteracije nad rezultatom.

Kako izgledaju i kako se koriste Expression trees?

Donji dijagram predstavlja grafićki prikaz jednog drveta.

Generalno, čak i da ne želite da pišete sopstvene LINQ provajdere, postoje trenuci kada vam expression trees mogu biti od koristi. Činjenica da bilo koji lambda izraz (dakle, ultimativno, bilo koji delegat), možemo da "ostavimo" po strani da izvršimo kasnije, sigurno je veoma moćna stvar.

Osim putem LINQ to SQL provajdera, možete i "ručno" praviti expression trees. Recimo, ukoliko imamo sledeći lambda izraz:

   1: x => x + 1

mi njega možemo da predstavimo kao expression tree koristeći klase iz System.Linq.Expressions namespace-a:

   1: using System.Linq.Exressions;
   2:  
   3: Expression<Func<int, int>> f = x => x + 1;
   4: Console.WriteLine(f);
   5: var fc = f.Compile();
   6: Console.WriteLine(fc(2));

Prvi output će biti ToString() reprezentacija lambda izraza, odnosno, njegovo telo (po default-u). Drugi izlaz će biti rezultat pozivanja funkcije. Primetite .Compile() metod na promenljivoj f. To je metod koji parsira expression tree i pretvara ga u IL, odnosno u nešto što može da se izvrši.

Dakle, expression tree možemo da kreiramo prosto tako što ćemo lambda izraz dodeliti tipu Expression, dok ćemo ga generički odrediti tipom delegata. Isto tako, možemo praviti expression trees  kroz kod, deo po deo, dok ne dobijemo konačan izraz. Gornji primer se može onda prepisati i kao:

   1: Expression leftParam = Expression.Parameter(typeof(int), "x");
   2: Expression rightParam = Expression.Constant(1);
   3: BinaryExpression AddIt = Expression.Add(leftParam, rightParam);
   4: var lambda = Expression.Lambda<Func<int,int>>(AddIt, new ParameterExpression[] { (ParameterExpression)leftParam });
   5: var fec = lambda.Compile();
   6: Console.WriteLine(fec(4));

Ovo je svakako trivijalan primer, ali nije potrebno da opeterećujem sa kompleksnijim, jer sam siguran da će pažljivi čitaoci videti veliku vrednost i iz ovako jednog trivijalnog primera. Expression trees dotiču pomalo metaprogramiranje, ali na jedan suptilan i polagan način, tako da možete da radite dinamičku generaciju koda bez da se petljate sa Reflection-om ili CodeDOM-om, koji su daleko komplikovaniji.

Out.

B.D.

[1] TIMTOWTDI, "timtoadi" kako se izgovara, je Perl akronim koji je srž čitave njegove filozofije, i glasi "There is more than one way to do it"

Posted: Oct 19 2008, 12:07 PM by blackdwarf | with no comments
Filed under: ,
Web Platform i Web Application instaleri

Ovo je jednostavno previše dobro da bi se propustilo. Nedavno, tim koji "drži" IIS u Microsoft-u je napravio instaler za web platformu. Ukratko, ovaj program pomaže da se kod korisnika podigne celokupno razvojno okruženje za razvoj web aplikacija. U sebe uključuje IIS7 (dakle, Windows XP nije podržan, samo Vista). Visual Studio Express Web Developer edition i još neke stvari. Kako sve to izgleda?

image

Ako odaberete "Your choice" opciju, dobijete kompletnu listu softvera koji je podržan:

image

Sama platforma, međutim, ne dostiže baš punu korist bez aplikacija koje se pokreću i hostuju na njoj, te stoga je isti tim nedavno izdao Web Application Installer, koji pomaže da se jednim klikom instaliraju i konfigurišu popularne .NET i PHP open source aplikacije. Da, dobro ste pročitali, open source aplikacije!!

Kako to sve tek izgleda?

image

Installer ima listu prethodnog softvera koji je potrebno instalirati za svaku stavku, i iako ne može (makar ne u ovoj verziji), da instalira dodanti softver, može da vas uputi do njega na drugom koraku. Zatim ostaje konfiguracija i to je to!

Out.

B.D.

More Posts Next page »