Vítejte na blog.vyvojar.cz Přihlásit | Registrovat | Pomoc
Titulní Blogy Fotky Soubory

Tomášův blog ..

((.)$(.)) The owl has type (a->b ->c)->a->(a1->b)->a1->c

  • Prezentace z DevCon a dema z DevDays 2009

    V listopadu se z akcemi pro .NET vývojáře tento rok nějak roztrhl pytel. Minulý týden pořádal Gopas svojí vývojářskou konferenci DevCon 2009, tento týden probíhaly Microsoft DevDays a aby toho nebylo málo, tak tento víkend ještě k tomu pořádáme na MFF UK pravidelnou akci MS FEST (Stále ještě můžete na konferenci dorazit - v sobotu i v neděli se chystá fůra zajímavých přednášek!). Na všech třech akcích se nějakým způsobem podílím, takže mi snad odpustíte mojí neschopnost dávat dema a slidy z konferencí na web v rozumném čase...

    Na Gopas DevCon 2009 jsem měl jednu přednášku na téma "Co je nového v .NET 4.0 a ve Visual Studiu 2010" a zaměříl jsem se na novinky v jazyce C# 4.0 (dynamic, pojmenované parametry, výchozí hodnoty atd...), code contracts (a nástroje pro jejich ověřování) a paralelizaci (Parallel LINQ a knihovnu Tasks). Slidy z konference a dema která jsem ukazoval si můžete stáhnout zde:

    Na Microsoft DevDays 2009 jsem měl pouze dvě krátká dema - za prvé jsem ukázal jak můžete pěkně pracovat s XML dokumenty pomocí dynamického typování v C# 4.0 a za druhé jsem ukazoval programovací jazyk F# (práce s fyzikálními jednotkami a skládání animací z jednoduchých primitiv):

    Tak, a teď jdu už konečně chystat přednášky na zítra na MS Fest :-).

  • Prezentace z přednášek o LINQu a PHP v Silverlightu

    V poslední době jsem měl dvě přednášky - nejprve o Silverlightu vývoji Silverlight aplikací v PHP pomocí projektu Phalanger a nedávno o novinkách v .NET 3.5 se zaměřením na C# 3.0, LINQ a také LINQ to SQL a LINQ to XML. Zde jsou tedy slíbené příklady a prezentace.

    Phalanger a PHP v Silverlightu

    Co se týká Phalangeru a Silverlightu, tak bych ještě rád upozornil na článek z mého anglicky psaného blogu Writing Silverlight applications in PHP [^], který se tomuto tématu věnuje - článek vysvětluje základní záležitosti jako práce s XAML, provázání PHP kódu s objekty v XAML a psaní jednoduchých event handlerů, tedy kódu reagujícího na nějakou událost v aplikaci. Z přednášky bohužel nemám pořízený záznam, ale to je pouze motivací pro to, abych jí někdy v budoucnu vylepšil a zopakoval (jakékoliv náměty jsou vítané!). Termín zatím přesně nevím, ale předpokládám, že to bude jak by řekli v Microsoftu "Q1 2008", tedy únor, nejpozději březen (až po zkouškovém období :-) lambda kalkulu zdar!).

    LINQ a C# 3.0

    Přednáška o LINQu proběhla ve spolupráci s počítačovou školou Gopas. Mimochodem, pokud vás toto téma zajímá do větší hloubky, tak se můžete přihlásit na můj dvoudenní kurz o LINQu [^], který připravujeme opět s Gopasem - termíny zatím připravujeme, ale pokud máte zájem můžete Gopas kontaktovat a na termínu se dohodnout. Témata budou v podstatě odpovídat obsahu přednášky, ale bude čas podívat se na vše mnohem více prakticky (a také na upozornění, co vše nelze udělat tak snadno a s jakými problémy se v praxi můžete setkat).

    Mimochodem, na Bratislavské přednášce jsme diskutovali o výkonu technologie LINQ to SQL - všem, které to zajímá doporučuji sérii článků DLinq (Linq to SQL) Performance [^]. Druhé zajímavé téma na které nám nezbyl bohužel čas je výkon při práci s daty v paměti. Ten je samozřejmě o něco menší než například při procházení pole pomocí foreach, ale i pokud vám jde o výkon, není rozhodnutí tak jednoznačné. Díky technologii PLINQ můžete totiž nechat LINQ aby spustil kód na více vláknech (a tedy i více procesorech) a tím na moderních počítačích získáte výkon, který je zejména pro větší objem dat lepší než kód napsaný vlastnoručně (a pro malé objemy dat je to zase jedno). K tomuto tématu doporučuji článek Running Queries On Multi-Core Processors [^].

  • PHP v Silverlightu již zítra!

    Ty z vás kteří nesledují chystané .NET akce v kalendáři na Altairisu, bych rád upozornil na zítřejší (pondělí 26. 11.) akci na téma Vývoj Silverlight aplikací v PHP [^]. O Silverlightu i o PHP a projektu Phalanger jste možná již slyšeli, takže pouze pro připomenutí - Silverlight je poměrně nový projekt Microsoftu, který umožňuje (jak by řeklo marketingové oddělení) oživit webové stránky interaktivními a graficky bohatými komponentami. Pro programátory to znamená, že i ve webovém prohlížeči (a to dokonce i na Macu, který je podporován přímo MS a Linuxu, díky Mono platformě) mohou použít některé z vlastností WPF. Ve verzi 1.0 je možné Silverlight aplikaci programovat pouze v JavaScriptu, nicméně ve verzi 1.1 je podporována (poměrně rozsáhlá) podmnožina .NETu i na klientovi a to znamená, že lze komponenty programovat i v C#, VB.Net a nově i dynamických jazycích (IronPython, IronRuby, ...).

    Teď příchází na řadu Phalanger - jedná se o kompilátor jazyka PHP pro .NET, který ve své druhé verzi umožňuje i úzkou spolupráci s .NET knihovnami, to znamená, že díky několika rozšířením jazyka PHP lze přímo volat .NET objekty. Aby bylo možné používat Phalanger i pro vývoj Silverlight aplikací, bylo nutné upravit jeho části, které jsou v Silverlightu potřeba tak, aby používaly pouze funkcionalitu dostupnou na klientovi a právě na tuto verzi Phalangeru se podíváme blíže na zítřejší přednášce. Mám jako obvykle připravené zajímavé ukázkz, nicméně odkaz na ně doplním až později. Ty z vás, kteří se ještě nerozhodli zda přijít doufám naláká následující screenshot jedné z ukázkových aplikací a to fotogalerie v Silverlightu napsané pomocí PHP. Uznávám, že bohaté animace bohužel na obrázku nejsou tak dobře vidět:

    Jako programátory vás jistě zajímá, jak vypadá PHP kód, který ovládá Silverlight komponentu. Samozřejmě se nebudu snažit stávající .NET programátory přesvědčit k přechodu na PHP, ale je docela zajímavé, co vše lze v dynamických jazycích napsat snáze než (například) v C#. Ostatně toto je pravděpodobně důvod proč se Microsoft zajímá o dynamické jazyky (jako je Python a Ruby). Jedna ukázka za všechny - kód který nalezne objekt "photo" a nastaví jeho pozici v komponentě vypadá v C# takto:

    // C#: Posunout objekt 'photo' o 10 pixelů vpravo
    Image
    img = this.FindName("photo") as Image;
    img.SetValue(Canvas.LeftProperty, ((int)img.GetValue(Canvas.LeftProperty)) + 10);

    // PHP: Posunout objekt 'photo' o 10 pixelů vpravo
    $this->photo->{ "Canvas.Left" } += 10;

    Tato jednoduchá ukázka demonstruje dvě zajímavé vlastnosti - jednak to, že lze přistupovat přirozenějším způsobem k objektům, které se v C# musí vyhledávat explicitně pomocí volání metod jako je například "FindName". Druhá zajímavá vlastnost je snadná práce s takzvanými "attached properties" (což je například "Canvas.Left"). Tu lze v PHP nastavovat přímo jako vlastnost objektu, díky tomu, že lze vlastnost zadávat jako textový řetězec (ve složených závorkách) a lze tak ve jménu vlastnosti určit i objekt, ze kterého vlastnost přichází. To, že vlastnost, kterou zde nastavujeme existuje pouze pokud je objekt vložen v objektu "Canvas" také pro PHP není problém. Doufám tedy, že krátké demo naznačuje, že PHP se díky Phalangeru může stát "first-class" jazykem pro vývoj Silverlight aplikací a vracím se k připravování dalších poutavých ukázek na zítřejší přednášku :-).

  • F# bude ve Visual Studiu a pozvánka na MS Fest

    F# bude ve Visual Studiu 

    Možná jste v posledních pár dnech zaznamenali, že se na internetu hodně píše o mém oblíbeném programovacím jazyku, tedy o F#. Je to proto, že Somasegar, který v Microsoftu vede Developer Division (část Microsoftu kde dělají Visual Studio a související) oficiálně na svém blogu oznámil, že Developer Division začíná spolupracovat s Donem Symem z Microsoft Research na plné integraci F# jako dalšího jazyku do Visual Studia. Pro ty kteří si o tom chtějí přečíst více doporučuji následujících několik odkazů:

    Pokud se chcete o F# dozvědět více, tak ještě nezavírejte váš prohlížeč :-) na MS Festu o kterém píšu dále bude o F# také přednáška!

    MS Fest 2007

    Pozvánku na letošní MS Fest zde již posílal Spigi, takže pouze krátce zopakuji to důležité - MS Fest probíhá tento víkend na MFF UK v Praze v budově na Malostranském náměstí (vchod je od tramvaje přímo přes parkoviště) oba víkendvé dny od 10:00 do 16:30. Více o akci naleznete na studentském portálu http://msfest.netstudent.cz/, kde je také registrace na akci. Na MS Festu bude množství přednášek o všech možných Microsoftích technologiích, které jsou teď nové, či připravované a tak stojí za to dozvědět se o nich více. Mimo jiné bude řeč o Windows Server 2008 a novém IIS, PowerShellu, Expression nástrojích, několika novinkách ve Visual Studiu 2008 ("Orcas") o Silverlightu a o F#.

    Já budu mít na MS Festu dvě přednášky v neděli a to nejdříve (dopoledne!) o C# 3.0 a projektu LINQ a odpoledne o F#. O C# 3.0 jste pravděpodobně již slyšeli a možná jste i četli seriál, který o něm psal Michael Juřek, ale na MS Festu bduete mít šanci vidět všechny novinky použité v praxi, a vzhledem k tomu, že Orcas již klepe na dveře, tak je nejvyšší čas přijít se podívat. O F# jsem přibližně před rokem přednášel na DNG, ale od té doby se mnohé změnilo a tak se změní i obsah mojí přednášky. Na přednášce se podíváme na 3 ukázkové aplikace, které demonstrují jak se programování v F# odlišuje od psaní kódu v jiných .NET jazycích a proč se máte na plně integrované F# ve Visual Studiu těšit :-). Na přednášce nebudu zabíhat do zbyečných detailů, ale zaměřím se a vysvětlení důležitých principů.

    Věřím, že nejlepší způsob jak váhající čtenáře nalákat je poslat pár hezkých screenshotů aplikací které v C# 3.0 a F# během přednášek předvedu, takže zde jsou:

    V C# se samozřejmě také podíváme na práci s databázemi pomocí dotazů integrovaných v jazyce, nicméně chtěl jsem ukázat, že to není jediné co nová verze jazyka umožňuje. Obě tyto dvě ukázky mají společné to, že ukazují jak napsat program (který by samozřejmě šel napsat i v čemkoliv jiném) tak aby byl více deklarativní a tedy aby se při přepsání myšlenky do kódu neztratila ona původní myšlenka - tím samozřejmě získáte mnohem čitelnější a snadněji udržovatelný kód.  

  • OT příspěvek na téma "co je u mě nového"...

    Poslední dobou jsem svůj zdejší blog trošku (hodně) zanedbával a to hlavně ve prospěch jeho anglického bratříčka (http://tomasp.net/blog [^]). To hlavně proto, že se poslední dobou věnuji hlavně věcem o kterých nejsou v angličtině již tucty stránek a tak se moje psaní úplně neztrácí v tunách podobných příspěvků. Pro ty co můj paralelní blog nesledují přidávám odkazy na poslední dva článečky, abyste to mohli napravit :-):

    Další důvod proč se k blogu teď moc nedostanu je, že jsem před týdnem odjel na internship do Microsoft Research v Cambridge. Internship je Microsoftí program pro studenty (podobné nabídky mají samozřejmě i jiné firmy), díky kterému mohou studenti (typicky) na tři měsíce jít pracovat do společnosti, která je pozve. V Microsoftu je to ještě trošku komplikovanější, protože mají jednak internshipy v "komerční" části Microsoftu (pokud vím tak pouze v Redmondu a pouze přes léto) a za druhé internshipy v Microsoft Research (ve všech pobočkách MSR), kam je možné odjet kdykoliv.

    Jak funguje přijímací procedura úplně přesně nevím. Já jsem se k internshipu dostal tak, že jsem zhruba před rokem byl v Cambridge na MVP Summitu a potkal člověka jménem Don Syme [^] (opravdu netuším jak by se to jméno mělo česky skloňovat), který v Cambridge pracuje na jazyce F# a podílel se také na návrhu a vývoji .NET 2.0 generics a který mě do Cambridge pozval (poté co jsem se ho mailem usilovně vyptával na různé zádrhele, které jsem potkával při hraní s F# :-)).

    Protože jsem svůj výlet do Cambridge poměrně špatně tajil (kdo by taky takovou informaci tajil, že ano..), tak by se mě pravděpodobně v brzké době docela dost lidí ptalo jak se mi daří a proto jsem se rozhodl zneužít místní blog k jednomu naprosto netechnickému příspěvku a přidávám i pár fotek z místa činu. Takže daří se mi dobře, v práci se sice většinou zaseknu od rána (néé úplně od rána samozřejmě... ale na můj vkus dost od rána ;-)) do večera, ale je to tím, že se tu dělají samé zajímavé věci (o tom pravděpodobně napíšu až bude něco na čem jsem se podílel stažitelné z webu MSR). No a jak vypadá Cambridge a místo kde budu bydlet zbývající (skoro celé) 3 měsíce ukazují následující fotky:s

    Cambridge (1. Cambridge vypadá opravdu takhle; 2. The Round Church (nejstarší zdejší budova); 3. Trošku typické architektury a typických dopravních prostředků)

    Churchill's college (1. Koleje, kde jsem trávil první týden; 2. Møller Centre)

    A po prvním týdnu na kolejích jsem si našel podnájem v takovémhle úžasném anglickém domě (můj podnájem je samostatný malý byt v zadní části domu - druhá fotka je výhled z okna v kuchyňce):

  • C++/CLI: Stack semantics - šikovný detail

    Na úvod

    O jazyce C++/CLI tu už psal trojici článků Petr Lazecký, takže pokud jste je ještě nečetli tak zde jsou odkazy, ať to můžete napravit:

    Já osobně jsem sice v C++ také nějakou dobu programoval, ale za "céčkaře" se rozhodně nepovažuju. Teď jsem se k C++/CLI dostal hlavně kvůli škole, kde musím vytvořit něco v C++ (ač se předmět jmenuje Objektově orientované programování) a podařilo se mi získat povolení alespoň na jazyk C++/CLI.

    C++/CLI je podle mého názoru zajímavé hlavně možností mixovat nativní a managed kód (na to se bez debat hodí lépe než cokoliv jíného co v rodině .NET jazyků naleznete). Dále je v C++/CLI možné psát programy, které jsou čistě managed (tedy totéž by šlo napsat v C#) a tady se právě otevírá prostor pro "vášnivé diskuze" zda má tento mód v C++/CLI smysl - vždyť totéž napíšu v C# (a to bez zbytečných stříšek).

    Stack semantics

    Jak jsem již zmiňoval, v C++/CLI se docela hojně používají stříšky a to k zápisu managed reference. Jednoduchá ukázka by mohla vypadat například takto:

    ref class SomeClass {
      int _num;
      String^ _str;
    public:
      SomeClass(int n, String^ str) { _num = n; _str = str; }
      void Foo(int n) { 
        Console::WriteLine("A::Foo - {0}, '{1}', {2}", 
          _num, _str, n);
      }
    }
    

    Práce s touto třídou pomocí managed referencí vypadá takto:

    SomeClass^ sc = gcnew SomeClass(1,"Hello");
    sc->Foo(2);
    
    // Vypíše: A::Foo - 1, 'Hello', 2
    

    Zajímavé ale je, že občas lze použít ještě jinou variantu, která je obdobou alokace objektu na zásobníku, což je možné v (unmanaged) C++ kódu a je to poměrně hojně využívané. Takto alokovaná třída má v C++ za kompilace známý typ a není možné typ přiřazením změnit, takže se vše může i velmi efektivně zkompilovat. Pokud chceme používat dědičnost a virtuální metody tak samozřejmě potřebujeme pracovat s ukazatelem na třídu. Zpět ale k C++/CLI a .NETu - pokud budu tedy pracovat se stejnou třídou jako v předcházejícím příkladě, mohu napsat toto:

    SomeClass sc(1,"Hello");
    sc.Foo(2);
    
    // Vypíše: A::Foo - 1, 'Hello', 2
    

    V .NETu (alespoň tedy v současné verzi) se samozřejmě třída nenalokuje na zásobníku, ale vytvoří se objekt v managed heap a standardní reference. Čím toto může být zajímavé? Podobně jako v nativním C++ končí životní cyklus třídy při opuštění metody ve které je takto na zásobníku alkovoaná a na konci metody se tedy zavolá destruktor - a to je právě zajímavé i v případě managed objektů. Destruktor v C++/CLI totiž odpovídá IDisposable patternu, takže v případě, že třída SomeClass obsahuje destruktor (metodu Dispose), bude tato metoda automaticky zavolána na konci metody kde je naalokovaná:

    ref class DisposableClass {
      int _num;
    public:
      DisposableClass(int n) { _num = n; }
      // destruktor - implementuje IDisposable.Dispose
      ~DisposableClass() { 
        Console::WriteLine("Disposing A({0})", _num);
      }
    };
    

    A ještě použití této třídy..

    void foo() {
      DisposableClass dc(1);
      // ... 
    }
    // Volání foo() vypíše: Disposing A(1)
    

    Kompilace

    Jen ještě jedna menší odbočka - díky tomu, že mám typ vytvořený jakoby na zásobníku a do (skryté) reference ani není možné přiřadit tak by podle mě kompilátor měl při volání metody vědět, na jaké třídě se metoda volá a měl by tedy podle mě použít instrukci pro volání call místo instrukce pro volání virtuální metody callvirt, takže kód by měl být efektivnější. Podle Reflectoru se ale zdá, že tomu tak v současné době není :-(. Na to se tedy ještě poptám a když něco zjistím, dám vědět.

    Na závěr

    Stack semantics má praktické využití hlavně v místech, kde člověk v C# musí volat metodu Dispose (a nebo lépe používá klíčové slovo using). Ne že by psaní using bylo tak náročné, ale musím říct že toto je docela zajímavá možnost jazyka C++/CLI, která ještě skvěle demonstruje jak autoři jazyka C++/CLI přirozeně rozšířili logiku známou z C++ i na managed typy. Rozhodně to samo o sobě není důvod kvůli kterému bych opouštěl C#, ale musím říct, že se mi návrh jazyka C++/CLI díky vlastnostem jako je tato zdá hodně dobře udělaný (a podobných "vychytávek" je tam docela dost). Právě díky tomu, že je jazyk rozšířený tak aby to nebylo "C# se stříškami", ale plnohodnotné pokračování C++ myslím, že i pro psaní čistě managed aplikací C++/CLI smysl má.

  • Umí toto váš programovací jazyk?

    Nehodlám se pouštět do debat na téma můj programovací jazyk je lepší než tvůj (ostatně ani nevím který bych vlastně měl hájit, protože favoritů mám více :-)). Jen mě při práci na Phalangeru, tedy kompilátoru jazyka PHP do .NETu občas PHP něčím překvapí. PHP je dynamický jazyk - tedy jazyk kde typová kontrola probíhá za běhu a tedy i při volání funkcí se funkce hledají až za běhu podle jména. Je tedy v mnoha ohledech bližší například JavaScriptu než C#. Dynamičnost má samozřejmě výhody i nevýhody, o tom také nemá smysl debatovat, ale některé možnosti které jsou dané právě tím, že PHP je dynamické jsou ve světě .NETu opravdu zajímavé.

    Co mám tedy teď konkrétně na mysli? Jeden zajímavý problém, který se poslední dobou řeší velmi aktivně a to vytváření objektů a nastavování jejich vlastností. To je problém, který řeší XAML tím, že pomocí deklarativního popisu zapíšete jaké objekty se mají vytvořit a jaké se jim mají nastavit vlastnosti a poté takto popsaný objektový strom jednou funkcí načtete. Mimo XAML stejný problém řeší i C# 3.0 (tedy až bude hotové) - tam je pro změnu upravený jazyk tak, aby bylo možné při vytváření objektu určit i hodnoty vlastností. A ještě jeden příklad - JSON (tedy JavaScript Object Notation) také není nic jiného než jednoduchý zápis jak vytvořit objekt i s nastavením vlastností.

    A co na to PHP? Tam je to až překvapivě jednoduché - na podobně jednoduchý zápis jaký nabízí JSON nebo C# 3.0 dokonce není ani potřeba upravovat jazyk - stačí napsat úplně normální funkci. V některých ohledech se tedy flexibilita dynamických jazyků může hodit. Nejprve ukázka jak lze takovou funkci používat:

    // Vytvorime TextBox ..
    $txt = createObj("TextBox", array(
      "Left" => 10, "Top" => 10, "Width" => 700, "Height" => 22, 
      "Anchor" => (AnchorStyles::Right | AnchorStyles::Top | AnchorStyles::Left) ));
    $this->Controls->Add($txt);
      
    // .. a jeste Button
    $btn = createObj("Button", array(
      "Left" => 720, "Top" => 10, "Width" => 70, "Height" => 22, "Text" => "Go!",
      "Anchor" => (AnchorStyles::Right | AnchorStyles::Top) ));
    $this->Controls->Add($btn);
    

    Samotná funkce createObj vypadá v PHP takto:

    function createObj($name, $props)
    {
      // vytvoreni objektu podle jmena
      $ctl = new $name;
      // nastaveni vlastnosti - take podle jmena
      foreach(array_keys($props) as $prop)
        $ctl->$prop = $props[$prop];
      return $ctl;
    }
    

    Vzhled kódu je tedy velmi podobný JSON a pro ruční psaní je to řekl bych dokonce jednodušší než psaní XAML. Na druhou stranu nemáte zde typovou kontrolu (tj. případné překlepy se objeví až při běhu), ale to je obecná vlastnost PHP. Flexibilita jazyka, který takto snadno umožní "sledovat módní trendy" aniž by bylo potřeba měnit jazyk samotný je ale podle mě hodně zajímavá vlastnost (Cimrmanovská neschopnost udržet myšlenku a neschopnost myšlenky se vzdát by mě zavedla k dlouhé odbočce na téma LISP a Smalltalk, ale myslím že to dneska nebude nutné :-)).

    Pokud vás tedy příklad zaujal a ještě nejste rozhodnuti vydat se na mojí dnešní přednášku o Phalangeru, tak se zaregistrujte na webu http://akce.altairis.cz/ a těším se večer nashledanou :-).

  • Programátorské večery na MFF UK a přednáška o ASP.NET

    Programátorksé večery (mimochodem ten název jsme si "půjčili" od přednášek, které se kdysi konaly ČVUT) u nás probíhají tento semestr pravidelně a většinou o nich na blogu ani nepíšu, protože všechny aktuální informace o nich jsou k dispozici na MFF webu na .NetStudentovi [^], tentokrát ale udělám vyjímku, protože jsme se rozhodli "píchnout do vosího hnízda" a udělat přednášku o ASP.NET. Přednášet budu já a pokusím se využít všechny mé znalosti, které jsem o ASP.NET získal včetně mého působení v Atlas.cz, kde vzniká jeden z největších (a nejlépe udělaných) ASP.NET webů v čechách.

    A co se pokusím na přednášce ukázat? Především to, že v ASP.NET můžete snadno a rychle udělat web, který nejen že vznikne snadno a rychle ale bude i splňovat všechny nároky, které se na dnešní weby kladou - tedy přístupný, validní web, který se snadno zaindexuje do vyhledávačů.

    Kdy a kde to bude?

    Pokud jsem vás nalákal, tak přijďte ve čtvrtek 7.12. od 19:00 do posluchárny S9 (první patro) na Malostranském náměstí 25 (od tramvajové zastávky je to přesně naproti přes parkoviště).

    Videozáznamy z večerů

    Když už jsem u toho - musím ještě upozornit na web, který se nám podařilo na MFF UK vytvořit a hlavně tedy na to co na něm naleznete. Začali jsme tento semestr některé přednášky nahrávat a přes menší technické obtíže způsobené hlavně nedostatkem elektrické energie (v baterii) a rychlostí mého HDD v notebooku (obzvláště když se po něm chtějí dvě věci naráz) už máme několik nahrávek k dispozici:

  • Záznam F# přednášky, projekt Phalanger (a pár dalších věcí)

    Nějak nemam sílu psát na blog pokaždé když bych rád na něco upozornil, nebo když mě něco zaujme a tak z toho vždycky vznikne příspěvek typu "Něco, něco úplně jiného a pár dálších nesouvisejících věcí". Inu, už to tak je a asi to tak zůstane, jedině že bych se přestěhoval do nějaké časoprostorové bubliny s pomalejším, eh rychlejším, eh nafukovacím časem (pokud víte o nějakém pěkném místě a chcete mě mít za souseda tak dejte vědět :-)).

    Přednášky

    Tak začnu tím, co je v titulku ještě rozepsané a to záznamem z F# přednášky [^]. Díky Altairovi jednak za půjčení mikrofonu a druhak za hostování záznamu. Na zmiňované adrese naleznete kromě videa i prezentaci a příklady. Mimochodem, ze záznamu jsem odmazal ty trapné chvíle kdy jsem se snažil počítač přesvědčit aby fungoval zatímco se záznam ukládal a na C:\ pomalu ale jistě mizely poslední byty volného místa (poučení pro příště :-)).

    Co se týká přednášek na akademické půdě, tak už jsou na internetu záznamy z MS FESTU [^], který proběhl nedávno na ČVUT. Kromě mojí přednášky o WinFX [^] (tedy vlastně .NET 3.0), bych doporučil ke shlédnutí ještě Altairovu přednášku na téma "Jak si neroztřihvězdičkovat počítač za týden." [^] (mimochodem, hru Blockout 3D jsem hrál taky a s radostí na to vzpomínám :-)). Přednášky pořádáme samozřejmě i na MFF UK, ale o tom naleznete většinu informací na portálu .NetStudent. Aktuální informace hledejte v sekci Kluby - MFF UK a prezentace z přednášek naleznete v Download zóně.

    Projekt Phalanger

    Pokud jste ještě neslyšeli o projektu Phalanger [^] tak se na něj rozhodně podívejte :-). Jedná se o kompilátor aplikací napsaných v PHP do .NETu, který původně vznikl jako projekt na MFF UK, ale nyní už je to reálně použitelná aplikace (a podle testů dokonce v některých ohledech lépe než standardní PHP interpret). Proč o Phalangeru píšu? Dva původní autoři kteří se Phalangeru nejaktivněji a nejdéle věnovali, tedy Tomáš Matoušek a Láďa Prošek totiž nedávno odešli do Redmondu a mají již na práci jiné věci, takže jsem se o Phalanger začal starat já (každého pomocníka bereme všema deseti :-)).

    Jedna z věcí, které bych rád s Phalangerem provedl, je ukázat ho více lidem, protože je to projekt, který opravdu má smysl reálně používat (ostatně ve spolupráci se Skilldrive poskytujeme i podporu pro komerční projekty). Pokud vás tedy Phalanger zaujal tak přijďte na přednášku, kterou pořádáme 12.12. (od 18:00) v Microsoftu v "akvárku".

    Článek o C# 3.0

    Poslední věc na kterou bych dnes rád upozornil je můj článek, který se snaží vysvětlit odkud se vzaly některé vlastnosti v návrhu jazyka C# 3.0 a LINQ projektu. Článek jsem začal psát jako práci na jeden školní předmět, takže je to trošku akademické, ale myslím, že to může být zajímavé i pro "normální" lidi. Přijde mi totiž velmi zajímavé, že většina věcí které se v C# 3.0 (asi) objeví se už dříve v nějakých jazycích používaly a některá omezení která naleznete v C# 3.0 tam neplatí, takže je i vidět co přijde návrhářům v Microsoftu důležité a možná i jaké věci bychom mohli očekávat do budoucnosti. Článek naleznete na CodeProjectu: Concepts behind the C# 3.0 language [^]

  • Co chystáme na Matfyzu za přednášky?

    Minulý rok jsme* na Matfyzu začali s pořádáním přednášek na různá zajímavá témata, převážně související s .NETem a dalšími Microsoftími technologiemi. V této tradici samozřejmě hodláme pokračovat i v zimním semestru roku 2006/2007. Tentokrát je možné přednášky navštěvovat dokonce i jako volitelný předmět, takže studenti z MFF UK mohou získat i dva kredity :-). Každopádně ale rádi uvidíme na našich přednáškách i někoho z nestudentů a proto budu pravidelně o chystaných přednáškách informovat na svém blogu.

    Mimochodem, napadlo mě, že pokud sháníte nějaké studenty - brigádníky, možná by nebylo od věci zkusit se zeptat na našem semináři kam chodí hodně lidí, kteří .NETu dobře rozumí. Myslím, že bychom takovým nabídkám mohli na semináři pár minut věnovat, takže pokud máte o tuto možnost zájem, dejte mi vědět (buď formulářem na blogu, nebo mailem na tomas@tomasp.net).

    Přednáška o Visual Studiu Team System

    Tak, teď zpět k chystaným přednáškám. Protože máme na MFF nově nainstalované Visual Studio Team System, začínáme přednáškou o správě a vedení projeků pomocí tohoto skvělého nástroje. Přednášet bude Dalibor Kačmář (z Microsoftu) a já. Kromě VSTS a o tom jak mohou studenti MFF tento nástroj využít pro své projekty bude řeč i o akcích, které Microsoft chystá pro studenty (jako například soutěž ImagineCup).

    Kdy a kde? Přednáška se koná 19.10. od 17:20 v posluchárně S9 v budově MFF UK na Malostranském náměstí 29.


    Tím "my" myslím sebe, Štefana Šimona, který mi od minulého semestru vydatně pomáhá (jako Microsoft Student Partner) a pana doktora Vojtěcha Jákla z Matfyzu, který nás všemožně podporuje.
  • Žil jsem, žiju a žít budu (snad)!

    Ač to tak podle aktivity na mém blogu nevypadá, stále ještě jsem mezi živými (přežil jsem úspěšně dokonce i výlet s Microsoftem a některými českými MVPs do Ruska o kterém psal Martin Pavlis). Než se pustím do obvyklých techinckých článků, pozvánenk na přednášky a vůbec všeho na co jste si na tomto blogu zvykli (doufám :-)), tak trošku zrekapituluju co jsem dělal a co mě čeká do budoucna.

    Co jsem dělal poslední dobou?

    Za prvé jsem v září dodělával zkoušky, které mi zbyly z léta. Jediná opravdu těžká byla Logika - člověk by si řekl že pro jedince vybaveného logickým myšlením to bude jednoduché, ale právě naopak. Když se v logice něco dokazuje, tak je důkaz založený na tom, že se napíše hodně šípiček (implikací), nějaká velká písmenka, pár endítek (konjunkce) a kupa notítek (negace). Pokud by člověk zkoušel nad věcí logicky přemýšlet a napsal že je to přeci jasné, tak to důkaz není (jelikož důkaz úporným tvrzením se na Matfyzu většinou neuznává - přitom je obvykle velmi elegantní a snadno pochopitelný).

    Mimo to jsem se věnoval své programátorské úchylce jménem F# (aneb experimentální jazyk vyvinutý v Microsoft Research, který si bere to nejlepší z funkcionálního a objektového programování, ale také ze skriptovacích jazyků a jazyků používaných v matematických softwarech).

    Odbočka: pozvánka na přednášku

    Mimochodem, už jsem si dohodl přednášku o F# v Microsoftím "akvárku", takže pokud chcete vědět proč je F# tak zajímavý, rozhodně se přijďte podívat! Přednáška se koná 2.11.2006 od 18:00. Pro registraci a další informace se podívejte na web přednášky: Úvod do jazyka F#.

    Kromě F# jsem se snažil pochopit některé další projekty z Microsoft Research (některé věci co tam vznikají jsou opravdu úžasné, jen asi chvíli potrvá než bude možné je uvést do praxe). Také jsem nějaký čas věnoval C# 3 a projektu LINQ. O F# a LINQu jsem napsal pár věcí v angličtině do mého paralelního "světáckého" blogu:

    .. a co mě čeká do budoucna?

    Tak v neposlední řadě mě čeká moctý semestr na Matfyzu (v zimě - to jako od zítřka - pokud se nepletu pátý). Stále ještě máme různé předměty, které silně zavánějí matematickými šílenostmi - už jsem si na to ale asi zvyknul. Kromě Algebry, kde se pokud vím počítá s věcma které rozhodně na ulici nepotkáte (což je docela štěstí!) mě čeká Pravděpodobnost a statistika - to je zase ta věda co tvrdí, že když se přistěhuje do města milionář, tak se rázem všem obyvatelům daří mnohem lépe.

    Abych tu školu trošku zútulnil, tak budu opět pořádat přednášky o různých (převážně) Microsoftích technologiích (o tom ale ještě napíšu). Minulý rok se tato pozice jmenovala Microsoft Student Consultant, koncem léta jsme se s kolegy z dalších univerzit vydali na meeting (a úspěšně, většina i ve zdraví, dobyli Lysou horu), dostali několik kousků oblečení s nápisem Microsoft Student Consultant a druhý den jsme se dozvěděli, že program se od nynějška bude jmenovat Microsoft Student Partner :-). Tak to byla jen odbočka aby byl pořádek v titulech.

    A ještě jedna zajímavá věc do které jsem se zapojil - nebo (možná?) přesněji řečeno byl zapojen. Jedná se o celkem rozsáhlý projekt jménem Phalanger [^]. Jedná se o kompilátor jazyka PHP pro .NET - to ve zkratce znamená že vezmete projekt v PHP, přidáte k němu web.config a voila běží to po .NETem a rychle. A když se vám zachce dělat nějaké další úpravy tak můžete jako .NET programátor používat známé .NETové třídy, případně mixovat .NET a PHP dle libosti. Projekt vznikl u nás na Matfyzu a jsou za něj (z největší části) zodpovědní Tomáš Matoušek a Láďa Prošek. V současné době je téměř hotová verze 2.0, ale protože dynamické jazyky (PHP, Python, Ruby) jsou teď docela v módě tak určitě bude na čem pracovat. Krom toho je v Phalangeru z části implementovaný LINQ a tam je také ještě hodně co vylepšovat.

  • C# - Delegáty, covariance & contravariance a generics

    V C# 2 je kromě velmi dobře známých nových vlastností (jako jsou generics, enumerátory, anonymní metody a partial třídy) i jedna nová vlastnost o které se pokud vím příliš nepsalo. Jedná se ale o vlastnost zajímavou a užitečnou, takže o ní něco napíšu. A krom je podobná vlastnost v trošku jiném smyslu dostupná v Jave (1.5) a v Microsoft Research už vymýšlejí jak by mohla být někdy v budoucnu zobecněna i v C#, takže je určitě dobré vědět oč jde...

    Delegáty v C# 2

    Takže nejprve k delegátům C# 2. Novinka spočívá v tom, že za určitých okolností nemusí metoda kterou přiřazujete delegátu mít přesně stejnou signaturu jako delegát. V prvním případě (covariance) se liší signatury v typu který metoda/delegát vrací a to tak, že metoda vrací třídu, která je potomkem třídy kterou vrací podle signatury delegát. Příklad by tedy mohl vypadat takto:

    // Delegate vraci libovolny objekt
    public delegate object GetSomethingDelegate();
    // Metoda ktera vraci nejakou tridu (potomka tridy object) public SomeClass Foo() { return new SomeClass(); }
    // Diky covariance lze napsat... GetSomethingDelegate d = Foo; // .. toto volani je vzdy v poradku object o = d();

    To, že se tímto přiřazením nepokazí typová bezpečnost je poměrně logické, protože metoda Foo vrací vždy objekt odvozený od třídy object (dokonce od třídy SomeClass) a proto ji lze přiřadit delegátu. Toto je tedy první varianta při které se signatura liší v návratovém typu. A jak je to když se signatury liší v typu parametru?

    Pokud bychom měli delegát, který očekává parametr typu Control a metodu která očekává parametr typu TextBox, tak bychom pochopitelně nemohli tuto metodu přiřadit delegátu (poté by někdo zavolal delegát s parametrem typu Button a došlo by k typové chybě - metoda by totiž očekávala TextBox). Je tedy patrné, že v případě parametrů je situace přesně opačná (proto také název contravariance):

    // Vlastni EventHandler (MyEventArgs je potomkem EventArgs)
    public delegate void MyEventHandler(object sender, MyEventArgs e);


    // Metoda ktera bere jako druhy parametr EventArgs (a potomky)
    public void Foo(object sender, EventArgs e) { }
    // Diky contravariance lze napsat... MyEventHandler d = Foo; // .. toto volani je vzdy v poradku d(this, new MyEventArgs());

    Více informací k tomuto tématu naleznete v MSDN (viz [1]). Mimochodem, tuto vlastnost ve Visual Basicu nehledejte, protože tam není.

    A jak to souvisí s generics?

    Delegát je pouze zkratka za deklaraci třídy s jednou metodou, takže by mělo jít uplatnit podobný princip i na třídy. Podívejme se na jednoduchý příklad:

    // Jednoduche rozhrani ktere umi vrait prvek podle indexu
    interface ISimpleList<T> {
      T Get(int index);
    }
    // SimpleList implementuje toto rozhrani ISimpleList<Control> controlList = new SimpleList<Control>();
    // TOTO ALE NELZE NAPSAT! ISimpleList<object> objectList = controlList;

    Poslední řádek, nelze zkompilovat (chybová hláška jasně říká, že neexistuje typová konverze mezi oběma typy. Vadilo by ale, kdyby toto přiřazení bylo možné provést? V tomto případě ne! Typ ISimpleList<Control> by totiž mohl být potomkem typu ISimpleList<object> (v tom smyslu, že tam kde se používá druhý typ, by se klidně mohla předat instance prvního typu (metodám, které berou jako parametr typ s metodou Get vracející object by nemohlo vadit, že metoda bude vracet objekt odvozené od typu Control. Toto je přesně stejný případ jako v prvním příkladě s delegáty (tedy covariance).

    V předcházejícím případě jsme, stejně jako v prvním příkladě s delegáty měnili návratový typ jedné metody. Obdobně by mohlo být možné přiřazovat typy které se liší v typech parametrů. Například proměnné typu IComparer<TextBox> by klidně mohla být přiřazená instance typu IComparer<Control>, protože ta funguje na parametry typu Control a tak by nevadilo, kdyby dostávala jako parametry pouze potomky odvozené od třídy TextBox.

    To je samozřejmě pouze lehký nástin celkem složitého problému. Zajímavé pojednání na toto téma naleznete na webu Microsoft Research (viz [2]).

    A co nás čeká do budoucna?

    V Microsoft Research vzniklo již hodně nápadů, které se později uchytili i v "komerční" verzi produktů, takže je možné, že i nápady zmíněné v dokumentu [2] se někdy v budoucnu v C# objeví (je to ale čistě moje spekulace :-)). Celkem by mě ale zajímalo co si o tom myslíte? Podle mě by se jednalo o celkem užitečné vylepšení, až na to, že by se tím zase zvyšovala složitost jazyka (což je saozřejmě problém). Myslím ale že v tomto případě by ještě výhody převýšily nevýhody...

    Odkazy

    PS: Díky Tomášovi Matouškovi za jeho skvělý seminář o .NETu na MFF. Nebýt jedné hodiny věnované Generics, trvalo by mi asi mnohem déle než bych z toho Microsoft Research dokumentu něco pochopil :-).

  • Random Thoughts: Roboti od Microsoftu a Concurrency&Coordination Runtime

    Jednou s novinek se kterou Microsoft v nedávné době přišel je SDK na dělání robotů [1]. Mnozí vtipálci z "nepřátelské" komunity se obávají, že svět brzo ovládnou zlí roboti od Microsoftu a spásou bude až modrá obrazovka. Neviděl bych to tak tragicky, protože SDK slouží spíše ke koordinaci jednotlivých komponent a zpracování dat od senzorů, než jako umělá inteligence ohrožující lidstvo. Měl jsem pocit, že projekty ohledně robotů se dělají spíš na akademické půdě (různé fotbaly a podobně), ale zdá se, že je to oblast ve které se mohou udát docela zajímavé věci a SDK od Microsoftu může přijít vhod nejen společnosti LEGO, ale i firmám které dělají různé elektronické pařáty montující auta a všemožné další technické vymoženosti (více informací viz video na Chennel 9 [2] nebo blog [3]).

    Pokud se zrovna nezabýváte roboty, bude vás pravděpodobně více zajímat Concurrency and Coordination Runtime [5] (odkaz vede na dokumet Microsoft Research popisující tuto knihovnu), což je zajímavá knihovna usnadňující vytváření "vícevláknových" aplikací. Slovo vícevláknových je v závorce úmyslně, protože to se knihovna snaží částečně zakrýt. Pro více informací se můžete podívat na video z Channel 9 [4]

    Odkazy

  • Volání funkcí v LINQ dotazech

    Dovolím si opět odkazovat na jeden článek, který jsem napsal v angličtině. Tentokrát se nejedná o F# :-), ale o něco prakticky užitečnějšího a to projekt LINQ [^] a C# 3. Předpokládám, že o C# 3 již většina čtenářů Vývojáře něco četla, takže nebudu psát o tom co C# 3 přináší nového, ale budu psát rovnou o jedné věci, která mi tam chybí (a podle některých dotazů na diskuzních fórech Microsoftu nejsem sám).

    Pokud píšete aplikaci v C# 3 a chcete používat pro přístup k databázi LINQ, tak budete pravděpodobně mít nějakou třídu, která obsahuje LINQ dotazy přistupující k databázi. Problém ovšem nastane, pokud budete potřebovat nějakou část dotazu použít ve více různých LINQ dotazech (a zároveň se chcete vyhnout kopírování kódu). Například byste mohli chtít napsat něco jako je následující ukázka (kde je výpočet, který se provádí na více místech umístěn ve funkci):

    // funkce pro vypocet ceny
    static float CalcPrice(Nwind.Product p) { return p.UnitPrice * 1.19m; }
    // dotaz pouzivajici CalcPrice funkci
    var q = from p in db.Products where CalcPrice(p) > 30m select p

    Problém je, že takto dotaz zapsat NELZE! Je to logické, protože při přístupu do databáze (pomocí LINQ to SQL - dříve pojmenované DLINQ) se dotaz překládá do jazyka T-SQL a za běhu není možné zjistit co dělá funkce CalcPrice, která se v LINQ dotazu volá. Tento dotaz by bylo možné spustit pouze nad daty v paměti, ale to je přesně to, čemu se LINQ snaží vyhnout.

    Od nové verze LINQ projektu (May CTP), je již možné psát vlastní providery, které spouštějí LINQ dotazy a díky tomu se mi také podařilo dát dohromady celkem použitelné řešení tohoto problému. Po dopsání několika funkcí a objektů lze předcházející dotaz zapsat takto:

    // Lambda vyraz pocitajici cenu
    Expression<Func<Nwind.Product, decimal?>> calcPrice = 
      (p) => p.UnitPrice * 1.19m;
    
    // Dotaz ktery vybira drahe produkty
    var q = from p in db.Products.ToExpandable()
    where calcPrice.Invoke(p) > 30.0m select p;

    A tento dotaz je již možné převést do T-SQL, takže při spuštění se kompletní dotaz provede na straně SQL serveru. Pokud vás zajímá jak to celé funguje a nebo se chcete dozvědět jak lze zpracovávat LINQ dotazy, tak si můžete přečíst celý článek v angličtině...

  • .Net Framework 3.0 a Robert Scoble (dvě "prasklé žárovky")

    Znáte ten vtip o tom jak blogeři vyměňují žárovky? Jestli ne, tak si ho rozhodně přečtěte, protože přesně takové dvě prasklé žárovky se chystám nyní okomentovat. Otázka zní: Kolik je potřeba blogerů k výměně žárovky?

    1112. Jeden, který napíše, že mu praskla žárovka. Deset, kteří obratem tento příspěvek blognou s poznámkou, že žárovku je třeba vyměnit. Sto, kteří blognou tyto příspěvky společně s linky na všechny weby o žárovkách, elektřině, stránky servisů a příruček Oprav si sám. Tisíc dalších, kteří zablogují i tyto příspěvky; polovina si přidá předchozí blogy mezi oblíbené, druhá polovina oznámí, že je z oblíbených maže, protože píšou o samých hovadinách. Žárovku přijde vyměnit Nielsen, neboť potmě není použitelná klávesnice.

    WinFX = .NET Framework 3.0

    Takže první informace, která podle mě způsobila nárůst velikosti internetu aspoň o pár promile... To co se dříve označovalo jako WinFX se bude nyní jmenovat .NET Framework 3.0 (píše Somasegar, tedy člověk který vede v Microsoftu Developer Division [^]). Technicky ovšem zůstává .NET 3.0 stále .NET 2.0 (pokud tedy mluvíme o CLR (tedy virtuálním stroji, který zařizuje běh .NET aplikací). Také se nebude měnit BCL (tedy knihovna základních tříd). Jediné čím se .NET 3.0 bude lišit od .NET 2.0 je, že bude navíc obsahovat knihovny pro vývoj toho, co se dříve označovalo jako WinFX aplikace. Konkrétně Windows Presentation Foundation (aka "Avalon"), Windows Communication Foundation (aka "Indigo") a Workflow Foundation. Nový .NET Framework bude tedy logicky uvolněný ve stejné době jako Windows Vista.

    Zajímavější otázka je, jak to bude s projektem LINQ a C# 3.0 (a abych nediskriminoval tak také s VB 9). Odpověď naleznete v diskuzním fóru o projektu LINQ [^] na MSDN. Zde se do hry dostává ještě nová verze Visual Studia (codename "Orcas"), která bude k dispozici až nějakou dobu po Windows Vista (tipoval bych tak půl roku až rok). Projekt LINQ (a související) bude uvolněn až s novým Visual Studiem, tedy později než .NET 3.0 a Windows Vista. Zdá se tedy, že bude nějaká další verze s mírnými updaty (pravděpodobně .NET 3.1). Zajímavé ovšem je, že ani tato verze nebude dost možná obsahovat žádné změny v CLR, protže LINQ v současné době pracuje nad .NET 2.0 a autoři se celkem brání jakýmkoliv zásahům do CLR.

    Robert Scoble odchází z MS

    Druhá informace, která se internetem šíří jako lavina, je informace že Robert Scoble [^] odchází z Microsoftu (více informací zde [^]). Robert Scoble je člověk, který z větší části stojí za portálem Channel 9 [^], na kterém naleznete všemožná videa o Microsoftích technologiích. Nejedná se o nic až tak převratného a fungování Channel 9 to rozhodně neohrozí, ale Robert Scoble se stal živoucí legendou všech Microsoftích blogerů, takže to rozhodně stojí za povšimnutí.

Více článků Další stránka »
Powered by Community Server (Personal Edition), by Telligent Systems
Vyvojar.cz na prodej!