Úvodem

Kniha „C# 2005 – Velká kniha řešení“ Jürgena Bayera patří do kategorie knih, o jejichž nezbytnosti ve vaší knihovně rozhodne především to, jak kvalitně odvede autor svou práci. Toto samozřejmě platí o všech odborných knihách, ale o sbírkách příkladů, řešení či tipů a triků, jako je tato, to platí dvojnásob. Autor musí vybrat zajímavé problémy, správně a dostatečně elegantně je vyřešit a hlavně – přesvědčit vás, potenciální čtenáře, že to, co mu vznikne pod rukama, není jen pouhé vyrabování internetu a jiných dostupných materiálů. Taková kniha musí nabízet široký záběr zajímavých témat, pokud se samozřejmě nejedná o specificky zaměřenou monografii. Musí vše dostatečně vysvětlit a uvést na takových příkladech, které vám k něčemu budou. Samozřejmost? To bohužel ne.

Jak je tedy na tom právě recenzovaná kniha? Docela dobře. Je rozsáhlá, takže autor měl dostatek prostoru pro spoustu (konkrétně 322) řešených příkladů. Měl místo i na poměrně rozsáhlou teorii, kterou obohatil jednotlivá řešení, a myslím, že se mu povedl i výběr témat k řešení. Některé věci sice zařadit nemusel (viz například část Systém) a pár jiných bych naopak uvítal, ale celkově mám z této knihy dobrý dojem.

Přehled obsahu knihy

  • Úvod
  • Základy
  • Datum a čas
  • Aplikace, konfigurace aplikace, procesy a služby
  • Souborový systém
  • Textové, binární a komprimované soubory
  • XML<
  • Systém
  • Internet
  • Formuláře a ovládací prvky
  • Uživatelé, skupiny a zabezpečení
  • Multimédia
  • Zpracování obrázků
  • Kreslení pomocí rozhraní GDI+
  • Interoperabilita s Office pomocí COM
  • Reflexe a serializace
  • Podprocesy a asynchronní volání metod
  • Programování databází

Co mě v knize zaujalo v jednotlivých částech knihy

Dále se krátce zmíním o tom, co mě v té které části knihy zaujalo či nezaujalo.

Úvod

V úvodu se autor zabývá celkem běžnými věcmi, které obvykle najdete v úvodních kapitolách i jiných knih, ale přesto musím zmínit několik zajímavostí z této části knihy.

Velmi pěknou a málokde jinde tak rozsáhle pojatou kapitolou, kterou zmíním, je „Důležité webové stránky pro platformu .NET“. Nejen, že obsahuje odkazy na celou řadu světově uznávaných internetových stránek, ale dočtete se zde i, jak vyhledávat potřebné informace o platformě .NET ať už na stránkách Microsoftu, či na obecnějších webech, jako je například Google. Škoda jen, že český překlad nebyl doplněn alespoň o pár odkazů na některé z českých serverů zabývajících se programováním v .NET.

Pokud se bojíte, že v průběhu knihy narazíte na nějakou technologii, které nebudete rozumět, nebojte se! V Kapitole „Základy externích technologií použitých v knize“ se o těch nejdůležitějších dočtete a zbytek jistě najdete s pomocí výše zmíněné kapitoly.

Úvodní kapitoly mnoha knih bývají jen pouhou výplní volného místa, ale u této knihy se jedná o část, kterou byste rozhodně neměli přeskočit.

Základy

Část „Základy“ by se spíše měla jmenovat „Co se jinam nehodilo“. Neobsahuje tak úplně jen základní a jednoduché věci, jak hlásí její nadpis. Autor zde shromáždil řešení z různorodých oblastí, které si neodpustil zmínit, ale které by nevystačily na samostatnou část knihy.

Hledáte-li něco o formátování čísel, převodech mezi číselnými soustavami, o náhodných číslech, práci s řetězci a regulární výrazy a třeba i o třídění seznamů a polí, už víte, která část knihy je pro vás ta pravá.

Datum a čas

Práce s datem a časem je poměrně častá v mnoha aplikacích. Ne vždy je však jasné, jak s těmito entitami správně pracovat. Řadu tipů pro práci s datem a časem najdete právě v této části knihy. Autor se zde zabývá nejen tím, jak správně zobrazit datum či čas, ale zabíhá i do náročnějších operací, jako je například výpočet prvního a posledního dne týdne, do kterého spadá dané datum, výpočet čtvrtletí k danému datu atd.

Velmi se mi líbilo, že se do českého vydání této knihy dostalo i řešení ryze naší národní problematiky: výpočet českých svátků a jiných zvláštních dnů.

Aplikace, konfigurace aplikace, procesy a služby

Nemalé množství příkladů uvedených v této části knihy patří mezi velmi šikovné, leč nepříliš často používané. Zatímco argumenty příkazového řádku budete vyhodnocovat poměrně často a za globálně ošetřené výjimky vám vaši uživatelé rádi poděkují, tak s jednotlivými procesy či službami si příliš často hrát asi nebudete.

Co by vám mohlo pomoci v těžkých chvílích je kapitola o spotřebě paměti aplikacemi .NET a o jejím případném snížení. Zjistíte, že je poměrně snadné přijít na to, kolik paměti skutečně spotřebujete pro běh své aplikace, ale i to, co dělat, abyste jí nespotřebovali zas až tak moc. A když už dojde na lámání chleba (a paměti už není, ani co by se za nehet vešlo), tak jak paměť pokud možno uvolnit.

Velkou část zde zabírají kapitoly o ukládání a načítání nastavení aplikace a to jak z XML, tak i z Registrů. Dříve oblíbené a dnes již zastaralé INI soubory zde autor nezmiňuje, ale to snad ani nebude nikomu vadit.

Souborový systém

Nic překvapivého zde nečekejte. Na druhou stranu, ale budete asi jen těžko hledat nějaké téma, týkající se souborového systému, které zde autor neprobírá. Jediné, co mě napadá a co zde není zmíněno, je práce s NTFS oprávněními. Ale to už je asi příliš velká specialita pro obecně vzatou knihu, jako je tato. Na druhou stranu – nebyla by to jediná „specialita“, která by se v této knize vyskytla. Já osobně to tedy beru spíše, jako mínus.

Textové, binární a komprimované soubory

Po lehkém úvodu, během kterého se dozvíte několik základních informací o práci s textovými soubory, se autor postupně, přes binární soubory a kódování Base64, dostává až ke kompresi a dekompresi dat za pomoci algoritmů Deflate (Zip) a Gzip. U práce se soubory Zip za použití knihovny #ziplib pak zůstává až do konce této části knihy a poměrně zevrubně toto téma probírá hned v několika po sobě jdoucích kapitolách.

XML

XML se používá a nejen v rámci .NET téměř všude. Vynechat tuto tématiku si autor rozhodně nemohl dovolit a tak zde máme řadu pěkných příkladů toho, jak číst XML soubory (s i bez DOM), jak je validovat (DTD i schéma) a jak do nich zapisovat. Zmíněno je i použití Xpath pro cílený přístup k prvkům v dokumentu XML a čtení za pomoci objektů DataTable nebo DataSet. Autor neopomněl ani čtení a ukládání binárních dat z a do XML souborů a na samotný závěr si nechal i transformace dokumentů XML pomocí XSL.

Opět jedna z kapitol, která nepřekvapí svým obsahem, ale kdyby chyběla, poznali byste to. Mě osobně pomohla přesně ve chvíli, kdy jsem potřeboval rychle zjistit, jak načíst data z XML dokumentu, aniž bych musel dlouze studovat, jak na to. Chválím!

Systém

Příklady z této části knihy využije bezpochyby jen málokdo. Já osobně jí beru jen jako takový bonus navíc a klidně bych její místo obsadil užitečnějšími tématy z jiných kapitol. Neříkám, že jde o úplně zbytečnou část, jen si myslím, že využití jejího obsahu bude asi nejméně pravděpodobné z celé knihy.

Z probíraných témat zmíním jen několik: zjištění jména počítače či systémových cest, verze systému, rychlost procesoru, informace o operační paměti, ukončení a nové spuštění Windows a mnohé další.

Internet

V dnešní době je využívání internetu v aplikacích, například pro automatickou aktualizaci programu, celkem běžné. Autor zde uvádí nejen, jak zjistit, zda se lze připojit, ale i jak a ukazuje hned několik možností, jak na to. Ať již potřebujete zobrazit nějaké HTML stránky v rámci své aplikace (za pomoci ovládacího prvku WebBrowser), stáhnout, či odeslat soubor pomocí protokolů HTTP nebo FTP – část Internet je tu pro vás.

Líbí se mi poměrně rozsáhlý příklad na stahování souborů z WWW serveru, který dokáže automaticky navazovat spojení, pokud dojde k jeho rozpadu. Data pak se nezačnou stahovat znovu od začátku, ale až od místa, kde došlo k přerušení spojení. Bohužel autor prý už neměl čas ošetřit situaci, kdy se během přerušení spojení změní na serveru data, čímž se to, co stáhnete, stane zcela neužitečným. Jak toto ošetřit autor naštěstí alespoň velmi stručně uvádí, takže náprava je možná.

Neméně rozsáhlou kapitolou v této části je práce s FTP. Měli byste zde najít vše podstatné.

Formuláře a ovládací prvky

Jedna z nejužitečnějších kapitol. Okýnka, tlačítka, šoupátka a jiná klikátka už znáte, ale občas je potřeba udělat něco, co není úplně podle zaběhlých pravidel, nebo, co se neřeší dennodenně. Nechápejte mě špatně – kapitoly v této části knihy nejsou o programátorských „čuňárnách“! Spíš jsou to jednotlivé tipy a triky, jak udělat více či méně netypické věci, kterými obvykle jiné knihy nezabývají.

Uživatelé, skupiny a zabezpečení

Témata jednotlivých kapitol této části knihy nemusí, podobně, jako témata z části Systém, spadat do vašeho denního chleba, ale přesto se jedná o velice zajímavou kapitolu. Přál bych si, abych měl tuto knihu k dispozici v době, kdy jsem dělal pro svého zaměstnavatele webové rozhraní pro správu DHCP serveru. Tehdy jsem řešil, jak spustit program, který mi doloval data z DHCP, s právy jiného uživatele. Poradil jsem si, ale s touto knihou bych měl vše hotovo mnohem rychleji - jedna z kapitol této části knihy se totiž zabývá právě spouštěním programu pod určitým uživatelským účtem.

Kromě uživatelskými účty, skupinami a jejich zabezpečením se autor v této části knihy zabývá i symetrickým šifrováním a dešifrováním dat a šifrování dat hešováním.

Jen pro doplnění uvedu, že autor ve všech zde uvedených příkladech využívá rozhraní ADSI (Active Directory Service Interface). O WMI (Windows Management Instrumentation) se sice také zmiňuje, ale jen proto, aby vám sdělil, že se jím zabývat nebude.

Multimédia

Poměrně krátká část, ve které se dozvíte základní informace o přehrávání různých multimediálních souborů (Wave, MP3, Midi, AVI, MPEG atd.). Hlavním používaným rozhraním je zde MCI (Media Control Interface) a krátce je zmíněno i rozhraní DirectX.

Zpracování obrázků

Některé kapitoly z této části knihy by se asi lépe vyjímaly v nějaké, na grafiku orientované, knize (změna velikosti, či barevnosti obrázku, otočení, zrcadlení atd.), ale ani v této knize neurazí. Pochválit mohu zejména kapitolu 267 – Šetření paměti při manipulaci s obrázky. Hodí se a pokud k ní přistoupíte trošku obecněji, určitě najdete více příležitostí, jak uplatnit principy v ní uvedené i na jiné druhy objektů, než jsou obrázky. Paměti není nikdy dost...

Kreslení pomocí rozhraní GDI+

GDI (Graphic Device Interface) se používá dosti často například pro vizualizaci dat. Grafy, diagramy, ale i uživatelsky vykreslované ovládací prvky, patří mezi širokou škálu užití této knihovny. Autor v této části knihy neprobírá úplné začátky práce s GDI. Spíše se zaměřuje na ty zapeklitější, nebo neoprávněně opomíjené kousky. Mám-li pochválit, pak je to hned první kapitola - „Prevence problémů s GDI“. V té autor vysvětluje jednu z možných příčin podivného vykreslování grafiky u některých aplikací a uvádí i patřičné řešení.

Interoperabilita s Office pomocí COM

Několik krátkých kapitol o práci s COM a MS Office. Nečekejte žádnou velkou hloubku záběru, spíše takovou malou ukázku toho, co a jak lze udělat. Otevření dokumentu, vložení dat, uzavření dokumentu. Potřebujete-li získat nějaké kontakty z Outlooku, dozvíte se, jak.

Reflexe a serializace

Kromě reflexe (získávání informací o objektech za chodu) a serializace, čili v podstatě převodu objektů z a na data (XML dokument, binární data), se autor zmiňuje i o dynamickém spouštění kódu za běhu a dynamickém vytvoření a spuštění sestavení. Může se hodit.

Podprocesy a asynchronní volání metod

Velmi pěkná, leč poměrně krátká kapitola (jakoby autorovi už docházely stránky) o problematice, která se týká velkého procenta aplikací. Vytváření podprocesů, předávání parametrů podprocesům a řízení jejich běhu jsou hlavními tématy této části knihy. Autor předvádí podprocesy (vlákna) jednak pomocí metody Invoke (postup využívaný hlavně v .NET 1.x), ale především za pomoci komponenty BackgroundWorker. Celou tuto část uzavírá rozsáhlejší příklad implementující návrhový vzor asynchronní metoda s událostmi.

Programování databází

Na úplný závěr knihy si autor ponechal téma, které by si zasloužilo více prostoru, než nakonec dostalo – práce s databázemi. Naštěstí, pro nás čtenáře, si ale autor nejspíše uvědomil, že příklady na otevření a uzavření databáze a načtení a uložení dat nám stačit nebudou. Připravil si tudíž pro nás na těch pár zbývajících stránek poměrně zajímavé a především pro život jistě důležité kousky.

Takové zazálohování databáze pomocí SMO (SQL Server Management Objects), nebo zjištění dostupných SQL serverů, by vám mohlo přijít k duhu. A pokud ne, tak snad zjištění počtu záznamů jako výsledek dotazu v databázi, či vytvoření databáze přímo z programu a nebo takové zjištění automaticky vytvořeného identifikátoru nového datového záznamu, nalezne své uplatnění ve vaší praxi téměř určitě.

Doprovodné CD

Obsah doprovodného CD nepřekvapí – obsahuje veškeré zdrojové texty otištěné v knize a ostatní zmiňované knihovny a nástroje. Co ale potěší a co není u jiných CD u knih příliš obvyklé, je přítomnost přehledného HTML menu, které vám pomůže najít to, co hledáte, rychle a bezbolestně.

Hodnocení a závěr

Jak jsem již uvedl v úvodu, tato kniha se mi líbila. Dostatečně rozsáhlá, minimum zbytečností, respektive příkladů, na kterých se obvykle vyučuje ten který jazyk a které jste již určitě četli v některé ze svých referenčních příruček. Ne všechna témata využije úplně každý, ale snad žádné není úplně zbytečné. Alespoň zajímavé jsou všechna.

Knihu mohu s klidným svědomím doporučit všem, kteří si jí před koupí řádně prolistují, a najdou si v ní dostatek témat, která je zajímají. Jako doplňková kniha k referenčním manuálům, či jako kniha „pro inspiraci“, si myslím, že poslouží docela dobře.

autor recenze Přemysl Fára