HAVIT Knowledge Base

Vývoj webových aplikací, .NET, SQL, návrh
Welcome to HAVIT Knowledge Base Sign in | Join | Help
-
Home Články Forums Obrázky Soubory

  • Hledáme nového kolegu na pozici ASP.NET Developer (C#)

    Do našeho týmu hledáme dalšího kolegu na pozici "ASP.NET developer".

    Požadujeme:

    • znalost C#, ASP.NET (WebForms), HTML, CSS, webových technologií,
    • dobrou orientaci v objektovém programování,
    • dobrou orientaci v databázové problematice (MSSQL, T-SQL),
    • důležité jsou osobnostní kvality a schopnost učit se novým věcem,
    • znalost ASP.NET MVC může být výhodou, není však podmínkou (drtivá většina našich projektů jsou WebForms),
    • občas se může hodit znalost WinForm, Silverlight, WPF, Flash atp., nicméně není to požadavek,
    • orientace v jQuery potěší.

    Nabízíme:

    • přátelské prostředí menší pracovní skupiny, kde se jeden spoléhá na druhého a společně se snažíme dělat dobré produkty,
    • pohodový pracovní režim, kde Vám neprudí 3x denně u stolu obchodník, že zrovna tohle musí být okamžitě hotové, nejpozději hned,
    • relativně volnou pracovní dobu, kde jsou přesčasy naprostou výjimkou a je potřeba podržet kolegu, který domluvil něco, co neměl,
    • práci na zajímavých projektech (zakázkový vývoj webových aplikací, vlastní projekty Goran a business.center.cz), neděláme moc webové prezentace,
    • příjemnou vývojářskou práci na vícevrstvých aplikacích, s nejnovějším vybavením (VS2010, SQL2008R2, NET3.5/4, Win7, SSD, 2xLCD, ...), s využitím našich knihoven a generátorů kódu, kdy se budete moci věnovat opravdu tvorbě aplikace nad vygenerovaným objektovým modelem, a nebudete trávit dny datlováním stále stejných věcí dokola (přístupů do DB, atp. atp.),
    • odborný rozvoj v kolektivu MVP, MCT, MCPD, MCP kolegů ;-)
    • každý rok týdenní teambuilding na námořní plachetnici nebo obdobný (snad to znovu vyjde) ;-)
    • nadstandardní lékařská péče pro všechny naše pracovníky
    • volitelné konverzace angličtiny jednou nebo dvakrát týdně

    Nejraději plný úvazek, minimálně 30 hodin týdně (3/4 úvazek). Na právní formě spolupráce nám nezáleží, věcně však bude režim "zaměstnanecký" (vč. dovolených atp.). Sedíme kousek od Budějovické. Nástup možný ihned, pokud nás však zaujmete, jsme ochotní i počkat po výpovědní dobu dosavadního zaměstnání.

    Nekuřácké pracoviště, nekuřák podmínkou.

    Zájemci mě kontaktujte s profesními informacemi o sobě na haken_zavinac_havit.cz. Navrhněte nejdraději rovnou dva nebo tři termíny v nejbližších dnech, kdy byste se mohli dostavit k osobnímu setkání.

    Dokud je zde zveřejněno, náš zájem trvá. Žádná formální kola výběrového řízení neorganizujeme, prostě dokud nenajdeme vhodného kandidáta, tak hledáme a vybíráme. Čím dříve se ozvete, tím menší je pravděpodobnost, že už bude pozdě... ;-)

    Nevylučujeme, že pokud nás zaujme více uchazečů, přijemem rovnou více pracovníků.

  • Konvence, postupy a zásady z vývojářské praxe - materiály z prezentace WUG Praha

    Konvence a zásady z vývojářské praxe k zajištění kvality a efektivity tvorby aplikací - materiály z mé včerejší prezentace pro WUG Praha najde v sekci soubory.
  • Pozvánka na WUG Praha: Konvence a zásady z vývojářské praxe k zajištění kvality a efektivity tvorby aplikací

    Chcete, aby Váš softwarový projekt přežil práci více než jednoho vývojáře? Abyste se v něm vyznali i po několika letech? Aby se dal efektivně rozšiřovat a udržovat? Zajímají Vás postupy, jak předcházet chybám či jak usnadnit jejich nalezení, pokud se již vyskytnou? Přijďte se 21.7. podívat, jaké praktické postupy Vám mohou usnadnit život, jak využít konvence a pravidla pro zajištění kvality a efektivity tvorby aplikací v prostředí .NET Framework a Visual Studia. Projdeme konkrétní pravidla, kodérské konvence a vývojářské postupy z mé vlastní praxe a budeme diskutovat jejich praktické dopady, výhody a nevýhody.
    Základní agenda:
    - Coding Standards
    - Source Code Management
    - Issue Tracking
    - Dokumentace
    - Continuous Integration
    - Testing
  • Internet Explorer 8 vydán - ke stažení

    Pokud by to přecijenom někdo nezaznamenal, tak byl právě vydán Internet Explorer 8, už je ke stažení, včetně CZ verze.

    http://www.microsoft.com/windows/internet-explorer/default.aspx

    Verze je momentálně označena jako RTW - Release to Web.

  • TechEd Barcelona 2008 - Day 5 - Pátek (incl. Novinky C# 4.0)

    TLA311 The Future of C#

    Hlavním tématem nové verze C# je DLR (Dynamic Language Runtime):

    • DLR je nadstavba (library) nad CLR, není to náhrada CLR, ani snad jeho přímá součást,
    • myšlenka je mít společné jádro pro dynamické features všech jazyků, klasická myšlenka .NET o language nezávislosti,
    • do C# se dynamičnost projeví zejména v podobě nového compile-time typu dynamic, ten se v praxi projeví tím, že při použití tohoto typu se veškerá typová vyhodnocení, lookupy odpovídajících memberů a všeho souvisejícího odloží až do run-time, kde následně proběhnou úplně stejně, jako by tomu bylo u nedynamického typu v compile-time fázi.
    • použití může vypadat třeba takto:

    dynamic Add(dynamic a, dynamic b)
    {
        return a + b;
    }

    void Main()
    {
        string x = Add("Ahoj", "Nazdar");
        int sum = Add(10, 15);
        DateTime day = Add(DateTime.Today, TimeSpan.FromDays(5));
    }

    ...prostě až za běhu se řeší, jestli existuje operátor + mezi parametry metody Add a operace se provede. Návratovým typem je výstup operátoru +, nicméně ten v compile-time neznáme, takže dynamic.

    • jsou scénáře, kde se to může hodit (a musím i přes svou značnou skepsi k dynamickým jazykům uznat, že tam, kde dosud stejně člověk statické typování neměl, tak je to příjemná syntaxe), např. interakce Silverlightu s JScriptem stránky

    // dosud
    myHtmlWindow.Invoke("myJavaScriptFunction", param1, param2);
    myHtmlDocument.SetProperty("Title", "Titulek");

    // C# 4.0
    myHtmlWindow.myJavaScriptFunction(param1, param2);
    myHtmlDocument.Title = "Titulek";

    ...hodí se to prostě tam, kde se stejně musela použít reflexe, nebo jiná podobná netypovaná obstrukce.

    • jsou scénáře, kde čistá podobnost interface nabádá k dynamickému použití a těchto scénářů se popravdě řečeno v praxi docela bojím. Kolikrát jste třeba přemýšleli nad tím, že SqlDataReader a DataRow mají oba string-indexer s návratovým typem object, ale nemají žádný společný interface, který by umožňoval vytahovat data z obou stejným způsobem?

    void PopData(dynamic readerOrRow)
    {
      this.ID = Convert.ToInt32(readerOrRow["ID"]);
      this.FirstName = readerOrRow["FirstName"].ToString();
    }

    // ono se v podstatě můžeme dočkat i podoby (viz níže o rozhraní IDynamicObject)
    void PopData(dynamic readerOrRow)
    {
      this.ID = readerOrRow.ID;
      this.FirstName = readerOrRow.FirstName;
    }

    • dokonce i "signatura" (spíš vnější interpretace) objektu samotného může být dynamická, pomocí implementace rozhraní IDynamicObject, popř. děděním z abstraktního předka DynamicObject můžeme pomocí definice několika metod (ála SetMember, GetMember, atp., přesná jména si už nepamatuji) zajistit zcela dynamické chování objektu (např. ála expando)

     

    Další novinkou C# 4.0 budou optional parameters u metod:

    void DoSomething(string path, bool createIfNotExist = true, MyMode mode = MyMode.Super)
    {
    ...
    }

    void Main()
    {
      DoSomething("C:\\test");
      DoSomething("C:\\test", false);
      DoSomething("C:\\test", mode: MyMode.FailProof); // named parameters!!
      DoSomething(mode: MyMode.Xy, path: "D:\\", createIfNotExist: false); // na pořadí nezáleží
    }

    Společně s optional parameters přichází i named parameters, které mohou v mnoha případech výrazně zpřehlednit kód (např. metodu Cache.Add() a podobné už nebudu muset popisovat komentáři, co který null/true vůbec znamená). Na pořadí named parameters nezáleží, nicméně vyhodnocují se v pořadí jejich zápisu (to kdyby je nedejbože někdo ještě během předávání i modifikoval).

    Pro C# vývojáře API, kteří byli dosud naivně přesvědčeni, že na názvu parametrů zas tak moc nezáleží, a mohou si je přejmenovat, to znamená, že už konečně i oni si uvědomí, že by neměli (a neměli ani dosud, protože jiné jazyky named parameters už znají).

    Dynamické fetures, optional/named parameters jsou obzvláště užitečné při COM Interop, kde výrazně vyčistí dosavadní mess-kód plný Type.Missing, atp. COM Interop ale není naštěstí moje běžná potřeba a mohu jen litovat ty, kdo se tím musí zabývat.

     

    Další novinkou C# 4.0 bude generická variance - covariance nebo contravariance.

    Ve zkratce jde o možnost použít instanci MyClassOrInterface<DerivedClass> tam, kde se očekává MyClassOrInterface<BaseClass>, tj. covariance a opačným směrem, tj. contravariance. Dosud to nešlo (invariance), protože třeba do List<string> nemůžete přidávat metodou Add() hodnoty typu object, tam, kde se pracuje s List<object>. C# 4.0 to řeší striktním určením kontraktu na invariantní/covariantní/contravariantní, např. interface IEnumerable<T> bude v C# 4.0 definováno covariantně (protože IEnumerable neumožňuje přidávat prvky):

    public interface IEnumerable<out T> : IEnumerable
    {
        IEnumerator<T> GetEnumerator();
    }

    ...podstatné je klíčové slovo out pro covarianci, popř. in pro contravarianci. Contravariance je použitelná třeba u rozhraní IComparer<in T>, pokud mám totiž IComparer<object>, mohu ho použít i tam, kde se očekává IComparer<string>.

     

    Poslední prezentovanou novinkou bylo Compiler Services API. V podstatě jde o to, že compiler C# (i VB.NET) budou mít klasické .NET API, pomocí kterého bude možné dělat spoustu věcí, namátkou:

    • dělat si třeba custom-highlighting,
    • pracovat s metadaty a objektovou reprezentací kódu a dělat tak snadno např. vlastní refactoring,
    • možno snadné práce s procesem kompilace, např. rozšíření o Aspect-Oriented Programming, atp.
    • no a asi hlavní a dnes prezentovanou možností byla kompilace a vyhodnocování kódu za běhu programu, což může být například využitelné v aplikacích přímo pro zadávání výrazů v C#, pro LINQ dotazování, apod. Bohužel byla tato věc i takto předváděna (zhruba něco jako myCompilerHelper.Eval(MyTextBox.Text)), což pokud s tím bude Microsoft tímto stylem prezentace pokračovat, bez jediné zmínky o security, brzy přejdeme z SQL-injection epochy do věku C#-injection... :-(((

    Každopádně se máme v C# 4.0 na co těšit. Přináší nové možnosti, které v dobrých rukou mohou dobře sloužit, bohužel však očekávám, že se v praxi budeme častěji setkávat ještě s mnohem většími prasárnami v kódu, než bylo možné dosud vůbec realizovat. Hodně teď bude záležet na tom, jak Microsoft pojme své prezentace novinek a jestli do nich konečně zapojí i best-practices, nebo zůstane jen u svého osvědčeného wow-efektu.

     

    TLA05-IS Debugging Performance Issues, Memory Issues and Crashes in .net Applications

    Interactive-session pokračování středeční breakout session WUX405. 

    • nové Visual Studio bude umožňovat "dump debugging" (úplnou analýzu memory dumpů, nyní se dělá ve windbg)
    • základními nástroji produkčního ladění jsou nyní adplus (konfiguračními soubory řízená utilita pro získání dumpu) a windbg (Windows GUI Symbolic Debugger), lze použít nadstavby pro lepší GUI (Debug Diag, SOS Assist, atp.)
    • získání memory dumpu:

    adplus -hang -pn w3wp.exe

    adplus -crash -pn w3wp.exe

    adplus -pn w3wp.exe -c configFile.cfg (ukázky configů jsou na http://blogs.msdn.com/tess)

    • analýza windbg

    .cmdtree C:\sos-cmdtree.txt (načtení command-tree pro lepší ovládání)

    .loadby sos mscorwks  (načtení sos.dll pro podporu .NET; sos.dll se liší dle verze .NET, je i verze pro Silverlight)

    ~* e !clrstack   (zobrazí call-stack všech threadů)

    !ip2md <ip>  (převod z instruction pointeru na "md")

    !dumpil <md> (disassembly kódu z <md> do MSIL)

    !u

    !syncblk

    ~<thread_id> S (přepnutí do kontextu threadu X, po crashi je context v dumpu přednastavený na thread, který crash způsobil) 

    !dso (Dump Stack Objects - všechny objekty v paměti)

    !do <addr> (Dump Object - watch objektu)

    • nejdůležitější performance countery pro běžné ladění 
      • # Loaded Asemblies
      • # Bytes in all heaps
      • # Gen 0, 1, 2 Collections
      • % Time in GC
      • Allocated Bytes/s
      • Large Object Heap Size
      • # Exceptions Thrown
      • % Process Time 
      • Virtual Bytes ~ memory reservation
      • Private Bytes ~ skutečně použitá paměť
    • unhandled exception v jiném, než request-threadu ASP.NET nám kompletně shodí aplikaci, request-thread má výchozí handling (žluitá page, popř. customErrors)
    • exception code z eventu id 1000 (Application Error) je googlovatelný, obvykle něco jako Stack Overflow

     

    WUX03-IS Microsoft Visual Studio 10: Easing ASP.NET Web Deployment

    Interactive-session podrobněji o nových možnostech Web Deploymentu ve Visual Studiu 2010 - zejména o transformacích web.configů a o MSDeploy packagingu.

    Nebudu podrobně rozvádět, ale protože jsem se na přípravě této funkcionality svou troškou do mlýna prostřednictvím Web Deployment Advisory Councilu taky zapojil (a zejména k web.config transformacím mám velmi kladný vztah, protože se tam hodně mých myšlenek opravdu projevilo), pokusím se uspořádat na toto téma přednášku.

     

    TLA324 The Joy of Writing Code in Visual Studio 2010

    Wrap-up session, kde už byly jenom shrnuty novinky source-code-editove VS2010, které už jsem převážně jinde popisoval. Tedy jen v bodech:

    • Quick-Search (inteligentní vyhledávání v názvech tříd, metod, souborů, atp.)
    • Highlight References (zvyraznění všech použití jednoho symbolu)
    • podpora Consume-First kódování (TDD) - zejména speciální režim Intelli-Sense, vylepšené generátory kódu (Generate Stub), ato.
    • zvýrazňování compile-time chyb už během psaní kódu (červené podtržení, nyní známo již ve VB, v C# se objevuje až po kompilaci),
    • Call Hiearchy - analýza vzájemných volání metod ála Reflector,
    • Debug History - rozšířený debuging s historií ála tracing, zaznamenávání událostí, průběhu hodnot v minulosti, atp. (+ možnost uložení na disk třeba pro nahlášení bugu do issue-management systému)
    • editor bude vytvořen ve WPF - což umožní snadnou rozšiřitelnost a určité nové grafické možnosti (plynulé zoomování, atp.)
    • ...a další

     

    Závěr

    TechEd Barcelona 2008 dnes skončil a osobně ho hodnotím jako poměrně zdařilou akci. Zejména díky období mnoha novinek Microsoftu pro vývojáře bylo co prezentovat a na co koukat. Klasicky se projevilo, že nemá smysl chodit na sessions, kde o tématu člověk předem víceméně něco zná (byť by byly session označeny deep-dive, level 400, hardcore, či jakkoliv jinak), ale naopak jsou užitečné session, kde dají člověku první rychlou představu o něčem novém a pomůžou mu se zorientovat, co má smysl dále studovat, a co nestojí za námahu. Ne vždy se mi podařilo takové session trefit a někdy jsem naopak litoval překryvu, každopádně se těším na videa ze všech session a podívám ještě na pár věcí, které jsem minul. 

  • TechEd Barcelona 2008 - Day 4 - Čtvrtek (incl. Novinky .NET 4.0!)

    OFC401 Developing Open XML Solutions Using the Open XML SDK

    Tak trochu omyl (hodně). Session označená jako "level 400" byla o Open XML asi jen posledních 7 minut, zatímco celé zbývající "intro" bylo o "C# new features" (extension metody, lambdy, anonymní metody, linq). Prezentované to bylo hezky - Pro někoho, kdo nezná ani po více než roce tyto novinky, určitě přínosné - Ale proč se ta session proboha jmenovala Open XML, to nechápu.

    WUX308 Advanced Cross-browser layout with IE8

    Převážně netechnická session o myšlenkách kolem rendering-enginů v IE8 a motivacích při jejich vývoji.
    Poznámky:
    - IE8 se zaměřuje primárně na splnění úplné CSS2.1 specifikace
    - nová JScript property document.documentMode, která říká v jakém režimu IE běží
    - již notoricky známé přepínání režimů vývojářem pomocí meta tagu nebo HTTP headeru
    - režim IE7 je "IE7 Standard", zatímco EmulateIE7 je "Quirks nebo IE7 Standard" (klasicky rozhodne IE)
    - JScript engine v IE8 je stejný i pro IE7 režim, jen díky jinému DOM modelu nejsou některé věci dostupné

    PDC307 Microsoft Visual Studio 10: Web Development Futures

    Již známé věci (i když tuším teprve od nedávna bez NDA):

    • Snippets i v markup kódu
    • Vylepšený design-view (CSS2.1 podpora, multi-select, atp.) - Mimochodem na otázku kolik lidí používá design-view zvedlo ruku asi 5 z 300. Tak nevím, jestli jsou všichni tak osvícení (;-) u nás design-view taky nepoužíváme), nebo jestli jen auditorium spalo. Každopádně byl-li to relevantní feedback (v což bohužel spíš nevěřím), asi by se měl MS zamyslet nad budoucností design-view víc.
    • vylepšené Intellisense funkčně i výkonově (zejména pro JScript, např. v tomtéž souboru) - mimochodem dodnes nechápu, proč po tolika verzích nejsou schopni do IS doplnit suggesty pro atributy jako ControlToValidate, AssociateControlID, TargetID, atp. (prostě odkazy na jiné controly).
    • web.config transformace pro různé typy buildů prostřednictvím transformačních (rozdílových) souborů (notace XML-transform)
    • Deployment webů samotných včetně SQL (nový Publish, MSDeploy packages, nasazení prostřednictvím služby přímo na server)

    Svou troškou do mlýna jsem se jako člen Web Deployment Advisory Councilu podílel na podobě posledních dvou novinek, zejména transformací web.configu. V oblasti deploymentu se určitě ještě máme na co těšit, podrobnosti bohužel nemohu (NDA).

    PDC305 Overview of .NET Framework 4.0

    Stručný a výstižný přehled očekávaný novinek v .NET Frameworku 4.0. Rekapituloval bych zhruba takto:

    • .NET 4.0 bude kompletní release včetně nového CLR
    • C# (VB s prominutím pomíjím, ale v zásadě to samé co C# + dohnání chybějících věcí, co už v C# jsou)
      • nepovinné (optional) parametry metod
      • named parameters, např. volání DoSomething(x: 10, param2: "Cosi")
      • dynamic typing :-(( - osobně jsem k tomuto směru skeptický, zejména s ohledem na prasárny, které to umožní a na zběsilosti, které to líným programátorům nabídne (navíc MS to zřejmě jako obvykle bude prezentovat právě prostřednictvím příkladů, za které by lepší bylo programátorům ruce urazit)
      • generic variance
    • Entity Framework
      • mapování na vlastní plain-CLR objekty (bez nutnosti dědění z Entity-předka, či atributování)
      • lazy loading (bez nutnosti explicitního určování, co se má kdy načíst)
      • vylepšené nástroje ve VS2010
    • ADO.NET Data Services
      • offline local store + synchronizace (scénář ála cached mode Outlooku vůči Exchange)
      • možnost ovlivnit výstupní Atom-XML (mapování, atp.)
      • server-side paging
    • "Velocity" = distributed caching server
    • ASP.NET
      • extensibilita cachingu, např. možnost nasměrovat cache do Velocity, atp.
      • explicitně nastavitelné ClientID (RealID)
      • lepší podpora CSS
      • ViewState režim "vypnutý v aplikaci s možností opt-in jednotlivých controlů"
    • ASP.NET Dynamic Data
      • filtrování
      • podpora ASP.NET MVC
      • přímá možnost napojení na vlastní business-objekty IQueryable
    • ASP.NET AJAX 4.0
      • templating + binding (např. client-control DataView jako obdoba Repeateru, obousměrný binding ála WPF, atp.)
      • observing (přihlášení k odběru změn + reakce na změny)
    • WPF
      • Client Profile
      • business-focused-controls - Grid atp.
    • Parallel Computing
      • Task Parallel Library (TPL) - higher-level knihovny než System.Thread
      • PLINQ - podpora paralelního dotazování LINQ
      • CDS - Coordination Data Structures
    • Managed Extensibility Framework (MEF)
      • toolkit pro snadné vytváření modulárních aplikací (plug-ins, add-ons)
    • WCF + WF improvements + lepší WF designer ve VS2010
  • TechEd Barcelona 2008 - Day 3 - Středa

    TLA317 Creating Custom LINQ Providers - LINQ to Anything

    Zajímavá technická session s úvodem do tvorby vlastních LINQ providerů (Queryable). Z přednášky určitě stojí za probádání vzorový kód implementace LINQ to LDAP providera včetně parsování lambda-výrazů a sestavování dotazu LDAP. Pokud by se někdo pokoušel o vlastního providera, velká část kódu je do značné míry Copy-Paste, resp. velmi dobrým studijním materiálem.

    WUX317 Nerdvana Annihilation: Improving Silverlight UX without out-of-the-box controls

    Z půlky povídání o návrhu UI, které se vzdáleně blížilo včerejší session "Why software sucks", zbytek ukázka Silverlightu použitého na webu způsobem, který bych označil přinejmenším za předčasný (nahrazení DHTML při prezentaci pouhých textů). Session mě moc nezaujala.

    TLA01-LNC IronRuby in Action

    Odlehčené intro do projektu IronRuby, což je Microsoftí implementace jazyka Ruby s možnostmi integrace s .NET frameworkem postavené na dynamickém CLR. Řekněme, že to je to podle mě akademický výplod mizivého praktického uplatnění, který je prezentován jako "možnost pro programátory v Ruby, jak zůstat u svého jazyka a používat při tom .NET". Mohu-li programátorům Ruby doporučit, tak ať třetinu času, kterou by potřebovali na fungování s IronRubym věnují učení klasického C#, a ušetří si tím spoustu problémů (i když tím příjdou o svou výsadu minoritního jazyka a zařadí se do póvl-mainstreemu).

    Jinak to považuji za research větev, z které se třeba něčeho dočkáme i v mainstreemech. Např. "monkey-patching" tříd, kdy se dodatečně doplňují membery (zejména metody) již existujících tříd je opravdu zajímavý mess a doufám, že v CLR zůstane jen u extension metod. 

    DAT307 An in-depth look at the ADO.NET Entity Framework

    Uff, tohle nemohl za "in-depth look" považovat snad ani někdo, kdo Entity Framework v životě neviděl. Řekl bych "introduction" a po pár minutách jsem přešel na OFC206 (kde jsem zbytek session litoval, že jsem tam nebyl od začátku).

    OFC206 Open XML SDK Version 2 Overview and Architecture

    Bohužel jsem tedy v naivní víře v DAT307 přišel o začátek, nicméně tím spíše mohu zaznamenat, že tato session rozhodně stojí za shlédnutí a budu hledat její video. Ve zkratce:

    • Open XML SDK v2 je strong-typed .NET API pro práci s Open XML dokumenty (v2 momentálně CTP bez produkční licence, verze 1 je poměrně o ničem, pokud jsem správně pochopil)
    • API nemá smysl popisovat, je obrovské asi jako OpenXML standard, nicméně za zmínku strojí následující nástroje (nejspíš stáhnutelné pod názvem Open XML Power Tools,´nebo součástí SDK - jak jsem přišel pozdě, tak nevím přesně):
      • Document Reflector - vezme OpenXML dokument a vygeneruje k němu C# kód, jak by se býval byl daný dokument vytvořil pomocí OpenXML SDK, skvělý nástroj - když nevím jak něco udělat, udělám si to ve Wordu/Excelu a podívám se, jaký kód mi to pro danou operaci vygeneruje.
      • OpenXML Diff - vezme dva OpenXML dokumenty a porovná je - vizuálně zobrazí jejich rozdíly. Opět dobré, pokud něco nevím, udělám změnu a podívám se, jak se to projevilo.
      • Class Explorer - hiearchický browser v třídách Open XML SDK s odkazy do dokumentace, atp.
    • Součástí session byly zajímavá dema, jejich zdrojáky se mohou hodit, např.:
      • vytahování dat z Excelových tabulek pomocí LINQ
      • manipulace Open XML dokumentů z PowerShellu
    • zaznělo, že na CodePlex existuje XSLT šablona pro převod OpenXML dokumentů na "nearly the same" HTML podobu - může se hodit, ještě nevím na co :-))

     

    WUX315 Developing High Performance JavaScript, AJAX for Microsoft Internet Explorer 8

    Zajímavá session o performance recomendations pro JavaScript, za připomenutí stojí:

    • symbols resolution - názvy se vyhodnocují v pořadí scopů 1. local, 2. global, 3. DOM, 4. expando (pořadí dle rychlosti vyhodnocení), abychom u nějaké proměnné dosáhli lokálního efektu, musí být explicitně deklarována,
    • DOM access - extrémně drahou operací jsou přístupy do DOM, pokud chceme například sestavovat kus HTML stránky, pak je efektivnější ho sestavit do lokální proměnné a následně přiřadit jedním DOM accessem do innerHTML, než ho skládat přímo v innerHTML; stejnětak pokud potřebujeme procházet nějakou kolekci elementů a zpracovávat ji, může být efektivnější vykopírpvat prvky z DOM do lokálního pole a zpracovávat dále z něj
    • built-in metody pro přístup do DOM (getDocumentById, nextSibling, ...) jsou obvykle mnohem rychlejší než vlastní alternativa (procházení kolekcí, ...)
    • v IE do verze 7 je drahé skládání textových řetězců (funguje jako v .NET) a je vhodnější použít Array, složky skládat pomocí push() a následně vše spojit jediným join()
    • statement switch je interpretován jako řetězec if-else, není tedy tak efektivní jako hash algoritmy běžných kompilerů (C#, ...), někdy může být efektivnější nahradit switch hash-tabulkou, nebo obdobnou alternativou,
    • pro rychlé vykreslení stránky by měly být všechny JScript odkazy na konci HTML kódu (pokud IE narazí na script, musí ho nejprve stáhnout a zjistit, jestli v něm není document.write()) a styly naopak na začátku HTML (styl by měl být definován vždy dřív, než je použit, jinak je přerušen progressive-rendering, aby se zabránilo probliknutí neformátované verze); IE8 se snaží problém se skripty trochu pokrýt spekulativními preloady.

    Video ze session určitě stojí za shlédnutí, poučná doporučení.

    WUX405 Common ASP.NET production issues and how to troubleshoot them with windbg

    Zajímavé povídání o ladění problémů na produkčních webových serverech

    • http://blogs.msdn.com/tess - blog přednášející, mraky materiálů na toto téma, podklady z prezentace 
    • snímek problému na serveru si pořídíme ve formě memory-dumpu pomocí nástroje adplus - řídí se pomocí konfiguračních souborů a umožňuje snímat dumpy za různých podmínek (on-demand, on-crash, sběr .NET výjimek, atp.)
    • memory-dump následně analyzujeme pomocí Windows GUI symbolic debuggeru (windbg), přičemž je to nástroj, který umí krásné věci (např. zobrazit .NET callstack všech threadů našeho procesu, obsah paměti až do úrovně jednotlivých objektů a hodnot, sync-zámky atp.), ale ovládá se poměrně příšerně ála příkazová řádka; příkazy na blogu Tess, co jsem si tak v rychlosti stihl zapsat:
      • .loadby sos mscorwks (načtení sos.dll pro podporu .NET analýz)
      • .cmdtree c:\file.txt
      • !sos.help
      • !dso

    ...výborná ukázka, ze které nebylo možné si pamatovat podrobnosti, ale jen princip ladění a odkaz na blog, kde jsou detaily. 

  • TechEd 2008 Barcelona - Day 2 - Úterý

    ARC206 Why Software Sucks

    Velice expresivní netechnická session, o tom, že vývojáři by měli přemýšlet nad potřebami svých uživatelů, a uvědomit si, že koncový uživatel nejsou oni, ale úplně někdo jiný, bez znalostí vnitřního fungování aplikace, s jiným způsobem myšlení, někdo, kdo nechce mít kontrolu nad vším možným a tisíc možností nastavení, ale někdo, kdo chce pomocí naší aplikace vyřešit svůj úkol.

    Těžko dále popisovat obsah této session, nicméně pokud se dostanete k její video-podobě, určitě doporučuji ke shlédnutí. Osobně mě přivedla dokonce k zakoupení stejnojmenné knihy speakera, protože i v našem týmu (včetně sebe) pociťuji nedostatky v tomto smyslu a určitě bude vhodné se zastavit a přemýšlet nad způsobem vytváření aplikací a nad požadavky jednolivých uživatelů, které nám mnohdy přijdou prapodivné.

    WUX311 Developing Data-Centric Web Applications

    Převážně o ASP.NET DynamicData - první prezentace na toto téma, kterou jsem potkal, kde byly DynamicData prezentovány jinak než "vytvořme kompletní CRUD aplikaci na 10 kliknutí a jeden řádek kódu". Pár poznámek k dalšímu bádání:

    • ASP.NET DynamicData je především sada nových controlů, které jsou založeny na adaptaci UI na základě metadat získaných k datovému modelu aplikace.
    • Věčně demonstrovaná RAD 5+1 prezentace je jen jedním z možných použití založeném na připravené project-template ve VS.
    • DynamicDataControl je control pro zobrazení/editaci atributu entity (property třídy), přičemž jeho podoba se řídí templaty pro jednotlivé datové typy (atributy UIHints), které lze dále adaptovat z metadat (validace, atp.)
    • DynamicDataField je field, který dokáže totéž v Gridu/FormView,
    • DynamicDataManager je nevizuální control do stránky (něco jako ScriptManager), kterým lze existujícím controlům přidat další funkcionalitu na základě metadat datového modelu (např. generuje sám do Gridu sloupce DynamicDataField na základě dat bindovaných na grid, aniž bychom sloupce explicitně definovali, či měli zapnuto AutoGenerateColumns).  
    • ASP.NET DynamicData je ve verzi V1, stále v rozvoji, podstatné funkce budou dále přibývat, klasika.
    • Napojení na metadata datového modelu je založeno na providerech, v současné době existují providery na Entity Framework a LINQ to SQL (též chodí tuším obojí přes ADO.NET DataServices). Metadata lze v nich doplňovat pomocí atributů doplňovaných na stejnojmenné property nested třídy XyMetadata (nested do partial třídy k entitě samotné). Každopádně toto je věcí metadata-providera, odkud metadata bere a implementace pomocí atributů je jen jedna z možných. Napsat vlastního providera by neměl být problém (který bude brát metadata třeba z UML modelu, nebo odjinud). 

    WUX303 Introducing ASP.NET MVC

    Na této přednášce jsem se utvrdil, ASP.NET MVC má do praxe hodně daleko (přinejmenším zatím) a scénáře, kdy by byl vhodnější nad současným ASP.NET WebForms není snadné nalézt (a myslím ani v budoucnu nebude). Osobně to zatím hodnotím jako akademický projekt, kdy tým lidí v MS předvádí, že nad ASP.NET core lze napsat i úplně jiný koncept (Model-View-Controller) a bohužel to na některých necitlivých prezentacích vyznívá jako „zapomeňte na WebForms, MVC je budoucnost“ (podtrženo marketingovou silou Microsoftu, který je schopen přesvědčit rybáře, že nejvíc uloví puškou a jinak se ryby chytat nebudou – každý přeci vidí, že cool ryby lítaj).

    Dema na této session se hemžila spagetti-kódem, speaker pravil „image step back“ a na otázku o praktickém využití a scénářích nedal dohromady nic jiného než testability (A přiznejme si, že ač testování je nyní buzzword, a kdo netestuje 100% pokrytí pomocí XyTestingFrameworku, není cool ani happy, přesto nehodlám obětovat 80% efektivity implementace za 20% lepší testovatelnost.)

     OFC202 MOSS 2007 as Web Content Management for Internet-Facing Web Sites

    Svojí skepsí vůči přehnanému používání MOSS ve scénářích, kde nemá co dělat, se netajím. Nicméně zákazník je náš pán a Microsoft MOSS umí prodávat, takže se každou chvíli objeví zakázka implementovat cosi na MOSS (typicky něco, co s MOSS nemá nic společného, jenom je potřeba splnit zadání „…my to chceme do Sharepointu…“). Bohužel se poslední dobou množí i scénáře, kdy se někdo snaží MOSS použít jako CMS pro firemní prezentace.

    Session mě nezklamala, pro použití SharePoint pro internetovou prezentaci stačí opravdu jen předělat MasterPage s asi 30ti ContentPlaceHoldery, předělat kompletně CSS styly, které se odkazují na tisíce sharepointích css-tříd, překopat dalších tisíc věcí, a to všechno deployovat na farmu minimálně 4 serverů, aby to utáhlo osobní stránku s návštěvností 10 lidí denně. Víc než měsíc na to jistě není potřeba, používá se při tom úžasný ContentQueryWebPart a implementuje+ladí se to převážně tak, že se WebPart vždy exportuje  do XML, to se upraví v Notepadu a následně zpět importuje do MOSS. Cool na tom je, že není potřeba žádný kód, všechno se dá uhnojit v tom XML a XSLT (Speaker, MOSS MVP, potřeboval na úpravu jenom tři pokusy, než se mu podařilo XML+XSLT upravit importovat bez překlepů).

     TLA309 Microsoft Visual C# IDE Tips and Tricks

    Session o ničem, z které jsem odešel na WUX306.

     WUX306 Silverlight 2 Security End-to-End

    Nic moc nového nezaznělo, za zopakování stojí jen zmínka, že

    • pro cross-domain access je potřeba na cílovém serveru mít v rootu policy soubor clientaccesspolicy.xml, v které se definují client-access pravidla. Pokud se soubor nenajde, hledá se Flashový bratříček crossdomain.xml.
    • Silverlight nemá přístup k disku klientského počítače. Ukládat lze jen přes IsolatedStorage (výchozí quota 1MB, lze vyžádat zvýšení), číst jen přes open-dialog.

     

  • TechEd 2008 Barcelona - Day 1 - Pondělí

    Po MVP Summitu v Redmondu, MCT Summitu v Berlíně (mimochodem 2009 má být v Praze) a dalších akcích jsem zjistil, že mi do sbírky chybí klasika - TechEd v Barceloně. Rozhodl jsem se tedy letos TechEd navštívit a níže přináším pár poznámek z přednášek, které jsem navštívil (a protože TechEd není pod NDA, dávám tyto své poznámky k dispozici). Jsou to spíše mé notes v surové podobě, co kde zajímavého zaznělo a co stojí za další podrobnější seznámení.

    Day 1 - Pondělí

    Úvodní masovou keynote jsem po zkušenostech z podobných akcí vynechal, i když kolegové říkali, že letos to bylo sledovatelné. Po kratším hledání neznačené lokace TechEdu (vyrazil jsem na lehko a moje paměť, Google-maps i víra pořadatelů v nepřehlédnutelnost selhaly, takže jsem asi půl hodiny hledal TechEd a celou dobu jsem nebyl víc než 300m daleko) jsem shlédnul dvě přednášky:

    WUX201 - Lap Around the .NET Framework 3.5 SP1 Enhancements for Web Developers

    Souhrnná session, kde zazněly novinky v .NET frameworku 3.5 SP1 pro webaře, a ze kterých mě zaujalo k podrobnějšímu zkoumání:

    ASP.NET Routing - nová extended podoba URL rewritingu, která pokrývá nejenom odbavování "hezkých" adres, ale i jejich správu, tedy vytváření odkazů na základě definovaných pravidel. V současné době se používá už v ASP.NET DynamicData a v ASP.NET MVC. Scénář do klasických WebForms je zatím asi slabší, ale za probádání to stojí.

    ScriptCombining - feature, která umožní zkombinovat (spojit) několik oddělených JScript souborů do jednoho requestu a odbavit je společně. Jednoduchý nápad, který ušetří režii HTTP requestů.

    ADO.NET DataServices - Jednoduchá "alternativa" publikování datových zdrojů prostřednictvím HTTP protokolu, kdy jsou requesty přijímány v podobě HTTP/GET (např. http://www.myweb.com/MyDataService.svc/Orders) a výsledek je předáván v parsovatelných formátech Atom (XML), CSV, atp. Na straně serveru jednoduše použitelné s datovými zdroji IQueryable<T>, nicméně využitelnost se projeví zřejmě zejména ve spojení s klientskými komponentami, které komunikaci se serverovou částí zprostředkují (např. do Silverlight projektu).

    ASP.NET DynamicData - Zajímavá sada nových controlů založená na myšlence jejich templatování a adaptace na základě metadat z datového modelu aplikace. Bohužel, jak už tak u MS bývá, je všude prezentováno jako RAD nástroj pomocí související Project-Template ve Visual Studiu, aneb jak vytvořit CRUD aplikace na 5 kliknutí. (Všiměte si, že každá nová verze Visual Studia nebo frameworku přináší nový způsob CRUD rapid-developmentu, který se dá tak krásně prezentovat).  

    DAT01-IS T-SQL: Tips and Tricks Sharing Fest!

    Od session tohoto typu vždy očekávám, že bych se tam mohl dozvědět nějaký příjemný tip z praxe, nějakou perličku, něco zajímavého. Obvykle jsem zklamán, že se nedozvím nic nového, ale přesto to zkouším stále dokola, jestli se někde něco neobjeví. Ani tentokrát mě session nezklamala - nic nového jsem se nedozvěděl.

    Mluvilo se povrchně o existenci CTE, o možnosti XQuery namísto klientského processingu XML, o eliminaci kurzorů a o statementu MERGE.

    Welcome Reception

    No comment. Nečekám, že bude někdo na akci tohoto typu pořádat banket pro několik tisíc lidí (10?), nicméně pojmem "reception" bych toto opravdu nenazval. Při troše fantazie spíše "welcome drink" a v pojetí některých účastníků dost možná "T-shirts hunt" po stáncích partnerů. 

  • Získejte Visual Studio 2008 Team Suite (MSDN Premium) zdarma

    Záměrně lákavý nadpis, nicméně pravdivý.

    Za své aktivity (zejm. feedback z testování) v době, kdy Microsoft připravoval .NET Framework 3.5 a Visual Studio 2008, mi nedávno jako pozornost od MS Developers Division přišly tři plné licence "MSDN Premium one-year subscription (includes MS Visual Studio Team System 2008 Team Suite)". Sám mám licencí tři ... (hodně), takže jsem se rozhodl je postupně udat v "komunitě". Na řadu přichází první z nich.

    Pomocí první akce bych rád získal náměty pro své přednášky. Poměrně úspěšná byla poslední má přednáška o SQL mýtech, proto bych rád sesbíral další mýty z programátorského světa.

    Tedy, chcete-li získat první z tří licencí VS2008 Team Suite:

    • napište mi mailem (haken_zavinac_havit_cz), nebo sem do diskuze pod článek

    programátorský mýtus ze světa .NET nebo MSSQL

    • k tomu mi napište kontakt na sebe
    • udělejte to nejpozději do 25.9.2008 16:00
    • každý smysluplný mýtus (byť nebude použitelný do přednášek) zařadím do slosování o první licenci VS2008 Team Suite,
    • pokud pošlete mýtů více, dám Vás do osudí vícekrát (maximálně 5x), budete mít větší šanci vyhrát,
    • zasláním mýtů do soutěže souhlasíte s jeho použitím mou osobou (ať už v přednášce, v článku, nebo jinak),
    • neposílejte romány, jen minimum, abych pochopil, co máte na mysli, např. bohatě stačí "Mýtus: Pokud neuvedu ORDER BY, výsledky budou v pořadí, jak jsou uloženy. Pravda: Pořadí záleží na execution planu a bez klauzule ORDER BY není předem definováno."
    • slosování proběhne nejpozději do konce září, výherce bude zveřejněn na těchto stránkách (+ vyrozuměn mailem) a odměna mu bude zaslána poštou,
    • získanou licenci nelze dále převádět.
  • Český Internet Explorer 7 ke stažení

  • Windows Vista jdou do výroby (RTM)

    Microsoft právě (před několika hodinami) odeslal do výroby nové Windows Vista (RTM - Release to Manufacturing).

  • Internet Explorer 7 oficiálně vydán a ke stažení!

    Každý to asi ví, nicméně přecijenom připomínám, že dnes byl oficiálně vydán a je k dispozici ke stažení Internet Explorer 7 !!!