Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Povídání o ASP.NET na WebExpu

19.38 - 4. září 2008 | Webdesign

Je to už pár měsíců, co mě oslovil Vašek Stoupa, zda bych nechtěl přednášet na WebExpuASP.NET MVC. WebExpo 2008 Zprvu jsem váhal, protože nemám žádné prezentační zkušenosti a tak jsem to chtěl celé hodit na Borka. Jenže pak jsem si vzpomněl na skvělé přednášky z MIXu, kde nebyl pouze jeden přednášející, ale tandem. Slovo dalo slovo, Vašek i Borek souhlasili a my jsme zapsaní v programu konference. :) Protože ASP.NET MVC ještě není ve stabilní formě API (ta by měla být více méně stabilní v betafázi, která se blíží), domluvili jsme se na tom, že probereme více věcí.

Doufám, že se Borek nebude zlobit, když prozradím naši předběžnou osnovu. Můžete se k ní vyjádřit v komentářích a my ji můžete případně vylepšit. :)

  1. WebForms – povídání o tom, kde je vhodné použít klasické WebForms a novinkách ve verzi 3.5
  2. AJAX – povíme si, jak je integrována podpora AJAXu v ASP.NET
  3. ADO.NET Data Service – bližší seznámení s REST službami postavenými nad ADO.NET a ukázka ve spojení s AJAXem
  4. Dynamic Data – povídání a ukázka dynamicky vytvářených administračních rozhraní ze schématu databáze.
  5. MVC – povídání a ukázka MVC frameworku, jak se liší od WebForms a možná i spojení s Dynamic Data, to jak zbyde čas.

Pokud vás tato témata zajímají, přijďte se na nás podívat, pokud nezajímají, přijďte se podívat na koktajícího rarouše… ;) Každopádně tam bude spousta jiných zajímavých přednášek, třeba Davidův evergreen o Nette Frameworku.

Autor: Aleš Roubíček | 4x komentováno | del.icio.us | Linkuj!

Závidí nám vimaři a emacsové build na dvě kliknutí?

10.58 - 30. srpna 2008 | ASP.NET 2.0

Často se v diskusích/flamech o vývoji v Atlasu dočítám, že jsme byli blbý klikači, co se neobejdou bez wizárdů a podobných věcí. Jak je to tedy?

Pravdou je, že jsem velice poholdný až líný a nemám rád zbytečnej oser s příkazovou řádkou. Ne že bych jí nepoužíval, hodně úkolů se dá rychle zvládnout právě z ní, ale přece jen kompilace z Visual Studia na dvě kliknutí nebo spouštění build scriptu z příkazovky je dost o něčem jiném.

Nejen že na dvě kliknutí provedu build ale provedou se mi unit testy nebo vzdálený předtestovaný build a případě úspěchu i commit do repository. Upřímně písmenkáři, kdo z vás to má?

PS. Vím, že jde buildit i na jedno kliknutí nebo přes klávesovou zkratku, ale já mám rád kontextovou nabídku ;)

Autor: Aleš Roubíček | 7x komentováno | del.icio.us | Linkuj!

Binsor – síla konfigurace

15.18 - 25. srpna 2008 | ASP.NET 2.0

Pokud se dostanete do stádia, kdy potřebujete takovou architekturu, kde je potřeba používat plug-iny třetí strany, kde je potřeba snadno vyměnit komponentu za jinou, přichází ke slovu nějaký druh konfigurace.

Velice často se můžeme setkat s konfigurací komponent v XML. Ať už je to Provider pattern známý z ASP.NET, či vlastní konfigurační sekce, nebo konfigurace Windsor kontejneru, pořád tu máme XML. Jeho ohromnou výhodou je, že se dají systémové komponenty snadno překonfigurovat bez nutnosti celý systém překompilovat. Stačí pouhý restart aplikace. Navíc nástrojů na editaci a validaci XML máme nepočítaně, takže změnu konfigurace zvládne téměř každý.

Velkou nevýhodou XML, je jeho omezené výrazivo. Špatně se v něm píše foreach nebo if. Prostě na složitější konstrukce je potřeba programovací jazyk. A nebo skriptovací!

Boo na scénu

Boo je staticky typovaný objektový jazyk nad CLI (dot net) inspirovaný syntaxí Pythonu. Jeho hlavní silou je metaprogramování. Na úrovni kompilátoru se snadno dají psát makra. Takových maker lze využít k tvorbě přehledných DSL a jednou z takových je i Binsor.

Windsor + Boo = Binsor

Windsor je IoC kontejner na platformě dot net a je součástí opensource projektu Castle. Windsor má v základu dvě možnosti jak konfigurovat komponenty.

  1. Programově na úrovni mikrokernelu.
  2. XML konfigurací.

XML konfigurace je nejčastěji užívanou možností, kvůli výše popsaným výhodám. V trunku se nedávnou objevila i konfigurace pomocí DSL na principu fluent interface přímo v C#. Taková konfigurace je velice pěkná, ale je tu pořád nutnost při každé změně znova celý projekt kompilovat. Proto je tu Binsor, který si bere sílu programovacího jazyka, efektnost XML konfigurace a navíc jednoduchost a přímočarost syntaxe.

Konfigurace komponent

Nejčastější aktivitou s Binsorem nejspíš bude registrace komponent. :)

component 'my_component', IServiceContract, ServiceImplementation:
    # nastavime parametr konstruktoru
    constructorParameter = 10
    # nastavime vlastnost sluzby
    SomeProperty = "Hello Word!"

Kód je v celku jednoduchý. Na prvním řádku začínamé klíčovým slovem component, které říká, že registrujeme komponentu. Prvním parametrem je název komponenty, přes který se na ní můžeme odkazovat. Druhý parametr je rozhranní služby a třetí je konkrétní implementace, která bude při rozpoznání kontejnerem vrácena, např. IoC.Container.Resolve<IServiceContract>(). Za dvojtečkou pokračuje výčet nastavovaných vlastností a parametrů. Můžeme takto nastavovat i speciální vlastnost ovlivňující životnost objektu.

component HttpRequest:
    lifestyle Singleton

Všimněte si, že se ani nemusí při registraci uvádět referenční název nebo abstraktní typ. Může se klidně rovnou registrovat typ konkrétní, který se bude v tomto případě chovat jako singleton. Takovéto ukázky jsou fešné, ale nic, co bychom nezvládli pomocí XML. Pojďme trochu dál.

for type in AllTypesBased of Controller("MyApplication.Web"):
    component type

Tento kód zaregistruje všechny controllery (třídy, které jsou potomky třídy Controller) z assembly MyApplication.Web. Krom generické metody AllTypesBased, je tu ještě generická metoda AllTypesWithAttribute a negenerická AllTypes. Všechny mají jako parametr název assembly, jejíž typy procházejí.

Facility

Neméně důležitou součástí konfigurace jsou facility, které dodávají kontejneru nové možnosti a zapouzdřují větší sady komponent do logických jednotek. Pro ukázku konfigurace ActiveRecord komponent pomocí Binsoru:

facility ActiveRecordFacility:
    configuration:
        @isWeb = true, isDebug = true
        assemblies = [ Assembly.Load("MyApplication.Entities") ]
        config(keyvalues, item: add):
            show_sql = true
            command_timeout = 5000
            cache.foo.use_query_cache = false
            dialect = 'NHibernate.Dialect.MsSql2005Dialect'
            connection.provider = 'NHibernate.Connection.DriverConnectionProvider'
            connection.driver_class = 'NHibernate.Driver.SqlClientDriver'
            connection.connection_string = 'connectionString1'

Shrnutí

Osobně se mi možnosti konfigurace přes Binsor velice líbí, ale je celkem možné, že ne každému tu může vyhovovat. Pokud ale používáte Windsor a přijde vám XML konfigurace nepřehledná, je toto možná cesta, jak z toho ven. Pokud chcete nějaké lepší příklady, doporučuju si stáhnout SVN repository https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-commons a projít si testy. Jako editor se mi osvědčil SharpDevelop, který má podporu pro Boo přímo v základu, nebo doinstalovat BooLang Studio do Visual Studia.

Autor: Aleš Roubíček | 2x komentováno | del.icio.us | Linkuj!

Alessio Busta - Face To My Face

23.00 - 20. srpna 2008 | Muzika

  1. Dirty South & Axwell – Open Your Heart (Original Mix)
  2. Ne-Yo – Closer (Stonebridge Club Remix)
  3. Ryan Murgatroyd feat. Tasha Baxte – Moving On (Ian Carey Remix)
  4. Roger Sanchez & Traslantic Soul – Release Yo' Self (D.O.N.S & DNB Remix)
  5. Adele – Hometown Glory (Axwell Remix)
  6. Antoine Clamaran feat. Lulu Hughes – Give Some Love (Richard Earnshaw Classic House Remix)
  7. Jon Fitz & Mike Anthony – Hesitate (Stonebridge Mix)
  8. TV Rock feat. Rudy – Been A Long Time (Original Mix)
  9. Axwell & Bob Sinclar feat. Ron Carroll – W.W.W. (Original Mix)

Ke stažení dj set Alessio Busta – Face To My Face (MP3 128 kbps; 44,5 MiB)

Autor: alessio busta | Zatím bez komentáře | del.icio.us | Linkuj!

NForms na Codeplexu

13.59 - 16. srpna 2008 | ASP.NET 2.0

Na Codeplexu se objevil nový opensource projekt a není to nic menšího než NForms. Zatím jste se o nich mohli jen dočíst u mě na blogu a prakticky vyzkoušet taktéž tady – přidávání komentářů frčí na NForms. Nyní však máte jedinečnou možnost stáhnout si zdrojáky, poučit se z nich, nahlásit chyby nebo diskutovat náměty na vylepšení, zkompilovat, spustit testy a konečně nasadit a používat ve vlastních projektech.

No není to skvělé?

K čemu je to dobré?

NForm jsem napsal jako programátorské cvičení. Líbila se mi Davidova myšlenka, chtěl jsem napsat něco v C# 3.0… Jenže je to taky docela užitečná věc. Daj se pomocí toho snadno vytvářet znovupoužitelné formuláře nezávislé na infrastruktuře. Můžete je používat jak v klasickém ASP.NET modelu (můžete použít více než jeden formulář na stránce), tak v MVC nebo MVP modelu.

Další vývoj

Aktuálně připravuju podrobnější dokumentaci na wiki, ale pro začátek jistě bude stačit pár mých spotíků tady na blogu, příklady užití najdete v Unit Testech, popřípadě další moudra najdete v nedokonalých XML komentářích v samotném kódu.

Při psaní wiki jsem už našel nějaké možnosti pro vylepšení, tak až bude připraveno, hodím je zase na Codeplex. Stay tuned…

Časem bych chtěl přidat podporu validace na straně klienta. Zatím se generují jen některé třídy, na které lze napojit vlastní implementace v JavaScriptu, ale není to nic pro složitější validaci…

Credits

Musím poděkovat Davidovi za inspiraci, NForms jsou značně obšlehnuté od Nette::Forms (dříve známé jako NForms), trochu inspirace jsem pobral i u New Forms z djanga, některé zajímavé nápady, jak využít novinky C# 3.0 pro změnu z ASP.NET MVC. Takže díky!

Autor: Aleš Roubíček | 2x komentováno | del.icio.us | Linkuj!

Testování HttpContextu

13.56 - 25. července 2008 | ASP.NET 2.0

Píšu nějaké podpůrné třídy pro naše nové projekty a zrovna jsem u utilitek pro webové aplikace. Teď jsem se dostal k jedné třídě, která volá HttpContext.Current ve statických metodách. Chci na to napsat testy, jenže jak mám podstrčit HttpContext?

Řešení je nakonec jednodušší než jsem čekal…

public static void CreateContext() {
  CallContext.HostContext = new HttpContext(
    new HttpRequest("default.aspx", "http://rarous.net/", "test1=test"),
    new HttpResponse(new StringWriter())
  );
}

Stačí zavolat tuto metodu, kterou se do threadu nastaví podvržený kontext a můžete směle testovat. :)

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!

Důvěryhodná síťová cesta

14.00 - 23. července 2008 | ASP.NET 2.0

Společné knihovny v našich projektech linkujeme z jednoho síťového místa. Při spouštění testů z Visuál Studia se v tomto případě může objevit chybová hláška, že knihovna není v důvěryhodném umístění a testy se nepodaří spustit.

Microsoft.VisualStudio.TestTools.TestManagement.ExecutionException: Test Run deployment issue: The location of the file or directory ‘\\server\path\library.dll’ is not trusted.

Existuje na to celkem snadné řešení, ale je poměrně těžko dohledatelné… Je potřeba toto umístění přidat mezi důvěryhodná uložiště assembly .net Frameworku. Nejsnažší cesta je nastavit CAS Policy asi přes příkazovou řádku:

cd %SystemRoot%\Microsoft.NET\Framework\v2.0.50727
caspol -m -ag 1.2 -url \\Server\path\* FullTrust

Snad se bude hodit.

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!

Konec dobrý, všechno dobré!

11.13 - 27. června 2008 | Jen tak

Je tomu téměř 28 měsíců, co jsem nastoupil do Atlasu. Tuto událost jsem oznámil tady na blogu spotem Rarouš v Atlasu. Atlas byl mé první zaměstnání, nastupoval jsem do něj přímo za školy. Tímto chci Pájovi a Renému poděkovat za důvěru a šanci, kterou mi dali.

Za ty více než dva roky jsem poznal spoustu skvělých lidí, kteří byli více než kolegy z práce. Atlas byl něco jako rodina. Ne vždy to bylo růžové, ale takový je život. V průběhu svého působení jsem vystřídal několik produktů. Začínal jsem odblešováním Pokecu. V tomto období se mě Honza rozhodl přidat mezi zdroje W3Blogy.cz, podotýkám, že proti mé vůli :D. Dalším úkolem bylo napsat importovací rozhraní pro Atlasí redakci. Následovala neslavná úprava Registrace, dovolená na Krétě, první Teambuilding a hektická příprava Atlas Checku.

Atlas.Opus

V té době (listopad 2006) se už vymýšlel koncept Opusu, já jsem vždycky přisedával poblíž a poslouchal, o co jde. Nakonec jsem se dostal do týmu interních systémů a katalogu, ve kterém jsem byl dosud. Opus mělo být řešení, které nahradí několik interních systémů, které už byly těžko udržovatelné a málo kdo do nich viděl. V podstatě to byla je stromová atributová databáze s definovatelnými typy vč. dědičnosti a tzv. rozhraní. Velice zajímavý projekt, na kterém jsem získal spoustu zkušeností.

Mým hlavním úkolem bylo vytvořit nad Opusem katalogy. Prvním projektem byla registrace do Atlasu Firem, tak trošku marketingově uspěchaná věc, která díky špatným rozhodnutím ztratila svůj efekt. Ta se spouštěla, tuším, někdy v březnu 2007. V červenci se pak pustili „malé katalogy“ Obchody a Sex. V září se spouštěla první verze velkého katalogu, která ještě z části tahala data ze staré databáze (placené zápisy) a z části z nové (bezplatné). Dalším krokem v migraci, bylo napsat administrační rozhraní pro obchodníky, aby mohli v Opusu prodávat a zbavili jsme se tak Firmátoru.

Ke konci roku jsme měli připravené rozhraní pro testování a v březnu jsme migrovali poslední placené zápisy do nového systému. V plánu byl další rozvoj, částečné přebírání některé funkcionality SalesModulu, který měl být nahrazen CRM řešením, a další zajímavé služby. Ale pak přišlo spojeno.cz…

Odpojeni.cz

Nastala doba chaosu, různých jednání a tak. Postupem času se ukazovalo, že v takovéto firmě už dál pracovat nechci. Podobného názoru jsem nebyl sám a tak vzniklo Odpojeni.cz. Spoustu odborných komentářů k této události si jistě dokážete dohledat na Lupě a Živě sami. :) Je až k nevíře, jak se nám to všechno pěkně podařilo na těch woknech naklikat. :)

Pomalu jsem se tedy proklikal k závěru. Co napsat? Za posledních pár měsíců se ze mě stal téměř alkoholik, profesionální hráč Call of Duty, filtr Centráckého spamu (ty lidi si na mejlech fakt ujížděj), sabotér, rebelant a já nevím co ještě – jo vlastně, jo měl jsem i víc času blogovat… Určitě to všechno byly zkušenosti k nezaplacení a já už se těším na ty nové, v příštím zaměstnání, kam nastupuju v úterý společně s většinou Atlasího vývoje a slečnou Veronikou. :P Držte mi palce.

Ich komme!

Autor: Aleš Roubíček | 8x komentováno | del.icio.us | Linkuj!

Připravte se na výřezy

15.00 - 25. června 2008 | Webdesign

Včera jsme se podívali na mikroformáty v Texy! Dnes si představíme novinku, kterou přináší Internet Explorer ve verzi 8. Tou novinkou jsou WebSlices – webové výřezy.

Praktické využítí

Výřezy umožňují, aby uživatel mohl sledovat změny části webové stránky. Podobně jako u RSS nebo Atom jde o syndikaci obsahu malé části webové stránky. Prakticky to může vypadat třeba následovně.

U svých článků často přidávám odkazy na související články. Jenže je všechny nezadám při publikaci článku, ale spíš postupně přidávám a třeba když narazím na nějaký pěkný článek k tématu, tak ho přidám. Jenže to už spousta lidí má dočteno a třeba se už nevrátí, nedozví se, že přibyly zajímavé odkazy na dané téma. S WebSlice, můžu označit tento kousek článku k odběru a pokud má čitatel zájem, přidá si ho. Potom když přidám nějaký zajímavý odkaz, čtenář o tom bude vědět.

Jiný příklad, který mě napadá. Stránky nějakého hudebního festivalu obsahují informace o ceně a množství volných vstupenek. Tyto informace se v čase mění – čím je fesťák blíž, tím cena roste a počet vstupenek klesá. Na takovou informaci je celkem zbytečné vytvářet RSS feed. Stačí ji prostě označit jako výřez. Já třeba ještě nejsem rozhodnutý, jestli půjdu, nebo chci vědět, kolik aktuálně vstupenka stojí a kolik jich zbývá, aby se mnou mohli jít i kamarádi. Tak se přihlásím k odběru takové informace.

Uplatnění vidím i jinde.

Technické zpracování

Výřezy jsou části stránky označené třídou hslice a nějakým id a obsahující elementy s třídou entry-title a entry-content z mikroformátu hAtom. Živý příklad ze včerejšího článku je lepší než tisíc slov:

/--div .[#related hslice]
== Související .[entry-title]
.[entry-content]
* [clanek(282)]
* [clanek(267)]
* [clanek(256)]
* [microformats-cz]
\--div

Když uživatel najede nad tento kus článku, objeví se tlačítko pro subskripci:

zvýrazněný výřez stránky

Po jeho odsouhlasení se stránka přidá do oblíbených a do feedů. Po rozkliknutí se objeví náhledové okno s aktuálním výřezem:

náhled výřezu stránky

Další možnosti

U výřezů funguje automatické nalezení podobně jako u RSS a Atom feedů, vlastně jsou ve stejné nabídce, ale jsou odlišeny fialovou ikonkou výřezu. Automaticky se vybere první nalezený výřez. Pokud ale chcete nabídnout k přihlášení jako první jiný výřez, lze to ovlivnit vložením meta tagu do hlavičky:

<link rel="default-slice" type="application/x-hatom" href="#related" />

Mění se pouze obsah atributu href v němž je cesta k výřezu. Jak jsem již říkal, ten musí být označen atributem id tudíž je přes jeho hodnotu odkazovatelný.

Dále je možné omezit platnost výřezu pomocí date-patternu s třídou endtime nebo periodu aktualizace za pomocí třídy ttl:

<p>Úryvek se aktualizuje jednou za <span class="ttl">60</span> minut.</p>

Lze i definovat vzhled výřezu a pracovat s nimi na úrovni JS API, ale to už je mimo rámec tohoto článku.

Formát hAtom

Jak jsem již psal výše, výřezy jsou z části postavené na mikroformátu hAtom. Ten slouží k definování něčeho jako Atom feed ve stránce. Dají se jím celkem trefně popsat blogové zápisky, protože obsahuje téměř všechny třídy, které se můžou k popisu blogového zápisku hodit. Proto když budete dělat novou šablonu pro svůj blog, zkuste se u tohoto mikroformátu inspirovat.

Tagy: , ,

Autor: Aleš Roubíček | 3x komentováno | del.icio.us | Linkuj!

Zapisujeme mikroformáty pomocí Texy!

08.49 - 24. června 2008 | Webdesign

Mým oblíbeným značkovacím jazykem je Texy! Léta jsme na ní zvyklý, ostatně používám ji i tady na blogu. Mikroformáty jsou téma, které mě zajímá v poslední době. Pojďme si přiblížit jejich užití v Texy!

O tom, co jsou mikrofomáty se třeba dočtete na Microformats.cz. Pokud se vám to nechce dohledávat, tak vězte, že jde o kusy (X)HTML kódu, které mají vyšší sémantiku. Začněme tedy s jednoduchými ukázkami.

rel-design-pattern

Jedním z nejjednodušších vzorů je užití atributu rel u odkazů. Tento atribut se používá k označení vztahu k odkazovanému dokumentu. Odkazy se dají v Texy zapsat několika způsoby, já s oblibou využívám reference, které vypisuju na konci dokumentu. Pro mne je to pak mnohem přehlednější, mít všechny odkazy na jednom místě.

[rarous]: http://rarous.net/#kontakt Aleš Roubíček .{rel:me}
[david]: http://davidgrudl.com/ David Grudl .{rel:friend met}
[tag microformats]: http://technorati.com/tag/microformats Microformats .{rel:tag}
[clanek(282)]: /weblog/282-mikroformaty-v-hledani-yahoo.aspx Mikroformáty v hledání Yahoo .{rel:bookmark}

V předchozí ukázce jsem použil vzor rel při definici mikroformátů XFN, rel-tag a permalink z HTML4.

vizitky hCard

O něco pokročilejším mikroformátem je hCard.

/--div .[vcard]
==Aleš Roubíček .[fn]
vývojář webových aplikací .[job]

Web:
  - [rarous]
E-mail:
  - [email]
Telefon:
  - +420737461283 .[tel]
\--div

[rarous]: http://rarous.net/ .[url]{rel:me}
[email]: ales@roubicek.name .[email]

Takto nějak může být v Texy zapsaná vizitka – kontaktní informace. Je to zkrácená verze, toho co mám v kontaktu na titulce.

tracklisty hAudio

Dalším mikroformátem, který se může hodit je hAudio, sloužící k popisu hudebních děl.

/--div .[haudio]
1. "Dubfire .[contributor]"  - "Emissions .[title]"  .[item]
2. "Steve Angello .[contributor]"  - "Trix .[title]"  .[item]
3. "Delete .[contributor]"  - "Flight Schedule .[title]"  .[item]
4. "Gui Borato .[contributor]"  - "The Rivington .[title]"  .[item]
5. "Lutzenkirchen .[contributor]"  - "Kobalt .[title]"  .[item]
6. "Solaris Heights .[contributor]"  - "No Trance .[title]"  (Popof Remix) .[item]
7. "System 7 .[contributor]"  - "Space Bird .[title]"  (Dubfire Remix) .[item]

Ke stažení "dj set .[category]" [download] (MP3 128 kbps; 36,4 MiB)
\--div

[download]: http://rarousmusic.com/mp3/alessio_busta_-_seven-rm.mp3 "Alessio Busta .[contributor]" - "Seven .[title]" .{rel:enclosure}

Tohle je například živá ukázka ze včerejšího vydání setu Seven.

Závěr

Doufám, že jsem předvedl pár praktických ukázek užití mikroformátů v Texy! Nejsem si jistý, zda lze syntaxí Texy pokrýt všechny možné nuance mikroformátu, ale ona k tomu ani není přímo určena. Každopádně mnohé lze užívat bez problémů. Zajímavým cvičením dnes pro mne bylo, jak v Texy zapisovat Texy :)

Tagy: ,

Autor: Aleš Roubíček | Zatím bez komentáře | del.icio.us | Linkuj!