sobota 9. prosince 2017

Jak se vyhnout chybě CA1303: Do not pass literals as localized parameters

 Pokud je zapnuta analýza kódu a nastavena většina pravidel, stane se při zavedení nové metody, která používá jako parameter string a jejím volání, že kompilace kódu skončí chybou.

Ono je to technicky vzato varování, ale lze si v projeku nastavit, že tato varování budou považovány za chybu.

pondělí 7. srpna 2017

Vývoj na VM v Azure - má to smysl a nebo ne?

Při hledání možností, jak usnadnit práci novým kolegům na našem projektu byla jednou ze zvažovaných možností i použití virtuálního počítače v Azure. Nápad byl asi takový, že si uděláme předlohu, tedy ideální pracovní stroj, kde již budou nainstalovány všechny používané aplikace. Tedy mimo samozřejmého Visual Studia i všechny další nástroje pro práci s kódem, všechny potřebné SDK, testovací nástroje a další.
 Nováček by si tak jen na pár kliků na Azure portálu vytvořil svoji instanci, nastavil potřebné přihlašovací údaje a mohl tak prakticky ihned začít pracovat. 

středa 19. července 2017

StreamReader nebo ReadAll

Výsledek obrázku pro performanceV miniseriálu o funkcionálním programování jsem se zabýval zpracováním CSV souboru. Soubor, tedy textový dokument, jakým je CSV, můžeme v zásadě zpracovávat dvěma způsoby: vše načíst do paměti a nebo využít stream.

neděle 16. července 2017

Funkcionální programování potřetí

Výsledný kód programu, využívajícího funkcionální přístup ke zpracování CSV souboru v předešlém příspěvku, byl trochu kostrbatý a špatně čitelný. Obsahoval příliš mnoho podmínek if.


Těm se lze vyhnout, pokud použijeme takzvaný railway přístup k zápisu kódu. Při tomto přístupu se na funkci díváme jako na kus kolejiště s výhybkou a na spuštěný kód jako na vláček, který po sestaveném kolejišti jede.

čtvrtek 22. června 2017

Funkcionální programování podruhé


Jak implementovat funkcionální přístup ukážu na jednoduchém validátoru CSV souboru. Je to poměrně jednoduchá úloha s těmito třemi zásadními operacemi:

  • z prvního řádku je nutné získat seznam sloupců
  • z následujících pak
    • získat seznam hodnot název sloupce - hodnota
    • jeden ze sloupců obsahuje primární klíč, duplicitní řádky tedy musíme vyloučit

úterý 20. června 2017

Zmatky v práci s AD

Active Directory je Microsoftí implementace adresářových služeb LDAP. A jak je MS dobrým zvykem, pokud chce programátor s touto službou spolupracovat, může si vybrat hned z několika možností.
Ty se navíc liší výkonem a možnostmi, takže je zkrátka asi nejlepší vědět a znát všechny - vždy mne překvapuje, jak i firma velikosti MS nedokáže dotáhnout některé věci k použitelnému stavu.


sobota 17. června 2017

Funkcionální programování

V poslední době jsem začal více využívat ve svém kódu principy funkcionálního programování. Zčásti to začalo použitím vzoru Maybe, ale rozvinul jsem to dále a zkušenost to byla tak dobrá, že se o ní podělím.

Hned na začátek pro ty, co mají přístup ke kurzům na pluralsight, uvádím odkaz na dobrý kurz, který vše pěkně dopodrobna vysvětluje - Applying Functional Principles in C# od Vladimira Khorikova.

Tento pán má i své vlastní stránky a dostupná je i knihovna s níže popsanými třídami

neděle 25. září 2016

Konfigurace metody

Postupy zmíněné v článcích o konfiguračních souborech - zde a zde - jsem využil a udělal jsem si knihovnu pro vytvoření objektu a jeho naplnění hodnotami z konfigurace. Nicméně při sepisování požadavků jsem narazil na problém, že předání všech možných kombinací nastavení do objektu, respektive metody) by vedlo k mnoha přetížením dané  metody a celkově obtížnější orientaci v kódu (používám Code Analysis a tedy nejde jen tak použít nepovinné parametry, metoda se musí přetížit). 

čtvrtek 15. září 2016

Pár tipů pro práci s Visual Studiem - Cops and Resources

Pokud píšete kód a používáte pro jeho kontrolu jak Code Analysis (aka FxCop), tak i StyleCop, tak vás jejich hlášky, samozřejmě v závislosti na zapnutých pravidlech, dokáží někdy dovést k šílenství, či alespoň k jeho okraji. Zejména pokud neprochází i vygenerovaný kód, a to i v případech, že se o něj postaraly knihovny a nástroje od firmy Microsoft.

úterý 9. srpna 2016

Načtení objektu z konfiguračního souboru - 2

Nedávno jsem zde popsal způsob, jak snadno  načíst hodnoty z konfiguračního souboru do objektu v případě, že se použije appSettings a název klíče odpovídá názvu vlastnosti třídy. Někdy ale existuje požadavek vyjádřit konfiguraci více klasicky, tedy pomocí xml. I když :NET framework poskytuje způsob, jak xml z konfiguračního souboru převést na objekt, je tato možnost dle mého názoru krkolomná a lze to i jednodušeji.

neděle 31. července 2016

Poznámky z code review - čekací smyčky

Někdy je potřeba provést operaci, která může déle trvat. Navíc v případě, že se tato operace provádí delší než maximálně očekávanou dobu, je pak obvykle nutné provést nějakou další operaci - například prodloužit "zámek" nad vzkazem ve frontě apod. Obvykle se tedy spustí čekací smyčka, která hlídá nepřekročení časového limitu a je zrušena po úspěšném provedení hlavní operace.

pondělí 20. června 2016

Načtení objektu z konfiguračního souboru

V poslední době jsem narazil na pár projektů, kde jsou konfigurační hodnoty zapsány ve formátu, kterému pracovně říkám "flat".  Programátor nepoužil některou z obvyklých technik, ale místo toho v klíči  elementu v appSettings zachycuje částečně strukturu objektu a třídy a  poté určuje její hodnotu v atributu value.

středa 15. června 2016

Unit testy bez mockování


Při testování lze občas narazit na situace, kdy je napsání unit testů běžně zažitým způsobem nemožné a nejde použít ani mockování. Například proto, že v kódu je použita uzavřená (sealed) třída, která ani neimplementuje žádné rozhraní. To je například případ některých tříd pro přístup k datům na Azure, ale i mnoho dalších. I přesto se dá ale unit test napsat.

pondělí 11. dubna 2016

Linq a pracovní pohovor


Zjišťovat znalosti Linqu u pracovního pohovoru může být obtížné - s Linqem se asi setkal každý C# programátor, ale vždy záleží, do jaké hloubky se s touto technologií seznámil a jestli je si vědom některých záludností - a to nemusí být až tak snadné zjistit. 

pátek 8. dubna 2016

Linq - k čemu použít Aggregate

K jednomu z předchozích článků, ve kterém jsem dal k dispozici cheatsheet pro Linq, se mne jeden známý zeptal, k čemu že je dobrý Aggregate - vždy si zatím vystačil například se Sum, Count či Average.

Nejlépe se vysvětluje na příkladě a zabrousím do oblasti hudebních alb: máme řetězec obsahující seznam délek jednotlivých skladeb a chceme získate celkový čas alba. 

středa 16. března 2016

Příklad na pohovor s programátorem - hotovost v pokladně

Na blogu jsem uveřejnil několik příkladů z pohovorů s uchazeči o místo programátora. Dovolím si tedy uveřejnit jeden z dalších možných příkladů, se kterým se lze setkat - na předešlé příspěvky jsem dostal emailem poměrně dost reakcí a překvapilo mne, že poměrně hodně lidí považuje příklady za jednoduché. Těžko to soudit, ale z mých několikaletých zkušeností ze zadávání podobných úkolů zvládne zadání implentovat méně než třetina kandidátů - a  zcela uspokojivých jsou pak tak jedno až dvě řešení z deseti.  Ono v poklidu u pracovního stolu vše vypadá jinak.

středa 10. února 2016

Vícevláknové zabíjení draků

Jeden z nejlepších průvodců základy vícevláknového programování pro mne byl a vlastně pořád je web od Josepha Albahari na adrese http://www.albahari.com/threading/.

Stručný a jasný popis, navíc ke stažení jako pdf, i když napsaný před mnoha lety, tak pořád aktuální.  A může být něco ještě lepšího?


pondělí 8. února 2016

LINQ - cheat sheet

Ve třech příspěvcích v poslední době jsem zmínil použití LINQu - byl to příspěvek jak vytvořit xml vstup pro SQL server, pak popis distinctu pěktrát jinak a nakonec byl LINQ použit i v řešení úlohy z pohovoru v článku Uspěli byste na pohovoru? Podruhé
LINQ je na jednu stranu jednoduchý prostředek pro práci s kolekcemi, na druhou stranu je velmi mocný a dovoluje jednoduše vyjádřit operace, které by jinak vyžadovali složitější zápis ve smyčkách. Nehledě na možnosti, které přináší při práci s data v databázích a datových souborech.

pátek 5. února 2016

Uspěli byste na pohovoru? Podruhé...

Jednou za čas přibíráme do týmu nové lidi - což znamená hodně pohovorů s uchazeči.  Jak jsem už napsal tady, tak spíše upřednostňuji rozhovor nad kouskem kódu - přitom se nejedná o žádné záludnosti. Uchazeč dostává také za úkol něco malého naprogramovat - jen je trochu potíž najít to správné zadání. Úkol by neměl být úplně triviální, ale zase nemůže být těžký. Většina lidí je navíc nervozní, ať již více čí méně a i to je třeba zohlednit.  Takže následující úloha se může v případě, že si ji čtete doma, v klidu, jevit jako velmi jednoduchá, možná až primitivní.

Monitor pro vývojáře

Nedávno jsem si vybral laptop, nyní jsem si chtěl dopřát i lepší externí monitor - obrazovka laptopu je malá a pohodlí práce před velkým monitorem je k nezaplacení. U výběru pracovního monitoru ale mám jasno - už dlouho používám jen monitory značky Dell a řady Ultrasharp. Poměr cena a užitná hodnota mi u nich přišel vždy nejlepší, navíc polohovatelný stojan je pro práci příjemný, stejně jako možnost natočit si třeba druhý monitor "na výšku".