úterý, června 29, 2010

Přednáška o ASP.NET MVC 2

Ve čtvrtek 17.6 jsem měl v Technologickém Centru v Hradci Králové přednášku o ASP.NET MVC 2, organizovanou místní pobočkou WUG. Původně jsem zde chtěl zveřejnit její záznam, bohužel to ale nevyšlo. Když jsem chtěl na konci přednášky záznam uložit, Camtasia oznámila, že "resource allocation failed" a gůglováním jsem zjistil, že záznam nelze odnikud obnovit. Přednáška se nahrávala i na klasickou kameru, na ní ale není dobře vidět obrazovka kvůli vysokému kontrastu (záznam na kameru byl určen primárně pro mé vlastní zpětné hodnocení).

Chci vás proto alespoň odkázat na přednášku Scotta Gu na podobné téma (část 1, část 2), která má podobný rozsah a která mi byla inspirací.

Nabízím zde sice ke stažení prezentaci, ale jelikož byla většina zajímavých věcí předvedena přímo ve Visual Studiu, nemá příliš velkou cenu.

Tak snad někdy příště:-)

Prezentace: ASPNETMVC2.pps
Odkazy k přednášce a ASP.NET MVC: http://bit.ly/kolman-mvc

neděle, února 21, 2010

Innovator of the Year

Nedá mně to, musím nás pochlubit: Produkt, na kterém náš tým pracuje, vyhrál cenu "Innovator of the Year" kterou každoročně udílí Xplor International. Více úryvek z tiskové zprávy:


Xplor's Innovator of the Year Award recognizes individual, company or an organization that has conceived and developed an original concept leading to a significant advancement in the industry. The "Innovator" has advanced a new program, product or technology that notably enhances the capabilities of electronic document systems. This year, GMC's recently announced PortalBuilder software solution was recognized for its ability to simplify the process and open doors for marketing firms, print service providers and enterprises to implement timesaving, web-enabled storefronts for variable data documents and integrated personalized multi-channel campaigns. As a result, enterprises gain more flexibility and faster results by having easier access to all the variable components they need and users can enjoy centralized brand management and messaging as well as cost control with decentralized creation, order entry and output.


Je to celkem príma ocenění, před námi tuto cenu dostal např. Xerox, IBM nebo Adobe. Cena bude oficiálně prezentována na konferenci The 2010 Global Document Conference & Vendor Forum 17. března na Floridě, kdyby jste měl někdo náhodou cestu kolem;)

pondělí, února 01, 2010

Připojte se k nám

Náš tým hledá novou programátorskou posilu! Pokud umíte C#, baví vás dělat webové aplikace a chcete pracovat pro nejlepší IT firmu v Hradci Králové a okolí, neváhejte a pošlete nám životopis. Oficiální inzerát naleznete zde.

Nemá cenu abych opakoval dlouhý seznam benefitů, které náš chlebodárce poskytuje svým zaměstnancům. To si přečtete v inzerátu a určitě to ještě uslyšíte u přijímacího pohovoru. To hlavní totiž je, že práce u nás je hodně zajímavá. Používáme nové kůl technologie, děláme zajímavé aplikace a máme klienty po celém světě. Přesto, že jsme už celkem velká firma, ceníme si osobní invence, takže pokud přijdete s něčím novým a zajímavým, máte solidní šanci to prosadit.

Vytváříme převážně webové aplikace v ASP.NET MVC, ale máme v portfoliu i desktop klienty napsané ve WPF, služby komunikující pomocí WCF a další hračky. Kouzla na webu děláme pomocí jQuery a jako ORM vrstvu používáme NHibernate. Celé to pácháme ve Visual Studiu za vydatné pomoci ReSharperu a VisualSVN. Dáváme si záležet na architektuře, učíme se být test-driven a pomalu se zlepšujeme v praktikách Scrumu. Za samozřejmost považujeme kolektivní vlastnictví kódu v Subversion a průběžnou integraci s CruiseControl. Snažíme se navzájem učit pomocí párového programování a code review.

A hlavně, je s náma strašná sranda! Hlavně s Radkem. Ale to uvidíte sami na pravidelných týmových a firemních akcích, nebo když zapomenete zamknout klávesnici a odejdete z kanceláře.

středa, ledna 06, 2010

Spike aneb ověření, jestli to vůbec půjde

Po instalaci Linuxu jsem potřeboval vyzkoušet, zda fungují klíčové technologie, na které se bude můj projekt spoléhat. Při té příležitosti si také trochu ošahám MonoDevelop (a zjistím jestli je vůbec použitelné). V programátorštině se tomu řiká spike, neboli malý prográmek, který jako tenký hřebík projde všechny vrstvy aplikace a ověří, že navržené řešení není totální pitomost. Po dokončení se takový projekt nemilosrdně smaže, protože při jeho tvorbě nejsou uplatňovány principy trvale udržitelného programování.

Můj blog poběží na ASP.NET MVC a data chci ukládat do databáze. Mám totiž zaplacený hosting a nechce se mi ho měnit, navíc C# je jediný jazyk, který pořádně ovládám:-) Jako datovou vrstu chci použít Castle ActiveRecord, což je vlastně sugar-added vrstva nad NHibernate. Pro testování bych chtěl použít buď XUnit nebo NUnit.

Vytvořil jsem proto v MonoDevelop solution, do které jsem přidal tři projekty. Jeden bude obsahovat doménové objekty odvozené z ActiveRecordBase<T>, druhý NUnit testy pro ověření základních operací s databází, a třetí bude MVC projekt. V prvním projektu jsem založil dvě jednoduché třídy, Post a Comment. Díky ActiveRecord stačí jejich property okrášlit patřičnými atributy a ORM vrstva je hotová:



Pro ukládání dat budu potřebovat nějakou funkční databázi. Na mém hostingu mám zaplacenou MS SQL databázi, která se na Linuxu nedá použít. Budu proto používat MySQL. NHibernate by měl zajistit, že můj blog bude fungovat na obojím. Protože tomu nevěřím úplně na 100%, budu potřebovat sadu testů, které lze spustit jak na Linuxu, tak na Windows. Po dokončení nové featury na Linuxu spustím sadu testů na Windows a teprv poté publikuju novou verzi na svůj "produkční server".

Nainstaloval jsem proto MySQL, což je na Linuxu otázkou vteřin (záleží na rychlosti připojení) a nakonfiguroval z konzole podle návodu. Vytvořil jsem si pomocnou třídu, která inicializuje ActiveRecord podle konfiguračního souboru a nainstaluje prázdnou databázi:



V testovacím projektu jsem vytvořil jednoduchý test, který v [SetUp] metodě zavolá obě výše uvedené metody. Není to ideální ale pro účely spike to bohatě stačí. Dále jsem přidal app.config pro nastavení NHibernate:



Nevím jestli je to v MonoDevelop bug nebo featura, ale po přidání app.config do projektu není automaticky zajištěno, že se správně nakopíruje do výsledné složky. I když jsem vytvořil nový soubor pomocí šablony "Application Configuration File", bylo nutné ručně nastavit "Build action" na "Application definition" a "Copy to output directory" na "Copy if newer". OK, s tím jsem schopný žít.

Aby se NHibernate byl schopen připojit k MySQL, je potřeba stáhnout MySQL Connector, což je vlastně ADO.NET driver pro MySQL databázi. Zde se objevilo první problematické místo: Když se NHibernate pokoušel načíst assembly MySql.Data, došlo k výjimce. Mono nemohlo assembly najít, i když soubor existoval. Vzpomněl jsem si že názvy souborů v Linuxu jsou case-sensitive a stažený soubor se jmenuje mysql.data.dll, jenže správný název assembly je MySql.Data. Mono proto hledá MySql.Data.dll, které nenajde. Naštěstí stačilo tuto knihovnu přejmenovat a problém byl odstraněn.

Pak už vše jelo jak po másle: Vytvořil jsem několik testů, které vytvářejí Post, přidávají k němu Comment, listují Posty atd. Všechno co jsem zkoušel fungovalo tak jak má. Horší je to ale s vývojovým prostředím. Když jste zvyklí na Visual Studio s ReSharperem, budete v MonoDevelop postrádat online kontrolu chyb, formátování kódu (funguje částečně), přidávání using namespace a referencí pomocí klávesových zkratek, a doplňování vám bude připadat hloupé. Například když píšete attribut, nenabídne vám property která je definovaná v base třídě, takže např. u [HasMany] se nenabízí Lazy=true, protože tato property je definována ve třídě RelationAttribute, která je předkem HasManyAttribute. Nejvíc mně ale vadí spouštění unit testů. Aby jste mohli spustit jeden konkrétní unit test v debugu, musíte nejdřív spustit všechny testy, pak ho nalézt v okně Unit Tests a v kontextovém menu zvolit Run Test With - Mono Soft Debugger. Zatím jsem nepřišel na žádnou klávesovou zkratku, která by test spustila přímo.

Ještě zbývá zkusit napojení ASP.NET MVC na doménovou vrstvu a pak se už můžeme pustit do vývoje skutečné aplikace.