Author Archives: Robert Haken

avatar Neznámé

About Robert Haken

Software Architect, Founder at HAVIT, Microsoft MVP - ASP.NET/IIS

Programátorská hádanka: Exceptions

Co bude výstupem?

try
{
  try
  {
    throw new Exception("A");
  }
  catch
  {
    throw new Exception("B");
  }
  finally
  {
    throw new Exception("C");
  }
}
catch (Exception ex)
{
  Console.Write(ex.Message);
}

Výsledek: https://dotnetfiddle.net/6SWPqL

Quartz.NET, Castle Windsor – LifeStyle Per Job (Scoped)

Pokud používáte Quartz.NET (známá knihovna pro job-scheduling) s Castle Windsor (IoC/DI container), možná jste narazili na potřebu registrovat komponentu s životním cyklem „per job“ (LifestylePerJob). Na internetu najdete několik možností, které mají jedno společné – nefungují:

  • LifestylePerThread – neresetuje thread mezi joby, komponenta se použije pro více jobů
  • BoundTo<Job>() – nepodporuje typed factories, pokud si z nich vyžádáte službu v jobu
  • BoundTo<object>() – nepodporuje typed factories, pokud si z nich vyžádáte službu v jobu
  • Quartz.IJobFactory + LifestyleScoped – nepodporuje typed factories, pokud si z nich vyžádáte službu v jobu (scope odstartovaný v JobFactory se nezpropaguje do jobu!)

Naštěstí existuje „jednoduché“ řešení. Můžete použít LifestyleScoped, ale je potřeba scope začít/ukončit uvnitř jobu.

Pokud použijete samotný job jenom jako plumbing class kde práce samotná je zapouzdřena do samostatné služby (a měli byste to tak mít tak jako tak), pak stačí do jobu nainjectovat factory k takové službě a kernel pro ovládání scope:

public class MyJob : IJob
{
    private readonly IServiceFactory&lt;myservice&gt; myServiceFactory;
    private readonly IKernel kernel;

    public MyJob(IServiceFactory&lt;myservice&gt; myServiceFactory, IKernel kernel)
    {
        this.myServiceFactory = myServiceFactory;
        this.kernel = kernel;
    }

    public void Execute()
    {
        using (var scope = kernel.BeginScope())
        {
            // use your way to work with factories ;-)
            using (var myService = myServiceFactory.Create())
            {
                myService.DoWork();
            }
            // BTW: we have an extension method
            myServiceFactory.ExecuteAction(service =&amp;gt; service.DoWork());
        }
    }
}

…třída MyService class má všechny dependencies, které potřebuje a při použítí přes factory tím získáte nový pseudo-resolution-root. Svádí to samozřejmě použít rovnou kernel.Resolve+Release, ale nedělejte to… ;-)

References

Tip: Microsoft LogParser [Studio] – rychlé SQL dotazování do textových log-souborů

LogParser (download) je command-line utilita od Microsoftu, kterou můžete použít pro SQL-styl dotazování do libovolného textového log-souboru, resp. i mnoha souborů zároveň. Základní sada podporovaných formátů je úctyhodná: IISW3C, NCSA, IIS, IISODBC, BIN, IISMSID, HTTPERR, URLSCAN, CSV, TSV, W3C, XML, EVT, ETW, NETMON, REG, ADS, TEXTLINE, TEXTWORD, FS a COM.

Já ho používám obvykle pro dotazování IIS Logů a musím říct, že je neuskutečně rychlý.  Na mém notebooku Lenovo X1 i7/16GB/SSD je schopen vyřešit následující dotaz do  8.97GB logů za 2min 12sec!

SELECT
    Date,
    TO_INT(COALESCE(EXTRACT_VALUE(cs-uri-query, 'id'), EXTRACT_VALUE(cs-uri-query, 'SouborSablonyID'))) AS SouborID,
    COUNT(*) AS Total
FROM '[LOGFILEPATH]'
WHERE (cs-uri-stem = '/business/sablony/soubor-partner.aspx') OR (cs-uri-stem = '/business/sablony/soubor.aspx')
GROUP BY Date, SouborID
ORDER BY Total DESC

Výstup do databáze

LogParser umí nejenom vyhodnocovat dotazy, ale můžete jeho výsledky nasměrovat i do databáze či mnoha dalších výstupních formátů (CSV, XML, …), např.

C:\Program Files (x86)\Log Parser 2.2>logparser "SELECT * INTO iisLogs FROM c:\temp\logs\*.log" -i:iisw3c -o:SQL -server:localhost -database:MyLogs -username:sa -password:sa -createTable: ON

Poznámka: Pokud chcete čistý import logů do DB (bez filtrování, projekce či agregací) zvažte použití Import Flat File… wizarda z SQL Management Studia, který může být ještě rychlejší. Pokud použijete LogParser, mrkněte na volbu transactionRowCount k seskupení uploadovaných dat do menšího množství transakcí (např. -transactionRowCount:-1 pro jedinou transakci).

Uživatelské rozhraní?

LogParser sám je command-line utilita. Nabízí dále COM API, které můžete volat ze svých aplikací (asi ne). Nicméně právě toto API bylo využito autory několika uživatelských rozhraní, které vám při občasném využití LogParseru usnadní život:

  • Microsoft LogParser Studio (download) je přímo od Microsoftu a kromě GUI přináší i mnoho (181) připravených šablon dotazů pro různé typy logů.
    2017-11-28_2-46-39
  • Log Parser Lizard GUI je bezplatná varianta (s placenou Pro edicí) vytvořená mimo Microsoft, která vypadá celkem schopně. Nezkoušel jsem, ale pokud byste to potřebovali dennodenně, asi to může být zajímavé.

Reference

Následující odkazy se mohou při seznamování LogParserem hodit:

 

Microservices a Docker [Michal Augustýn, HAVIT Vzdělávací okénko 7.12.2017]

Záznam z interního vzdělávacího okénka HAVIT ze 7.12.2017 je publikován na našem HAVIT YouTube Channel. Téma prezentoval Michal Augustýn, Lead Software Developer @ AVAST, MVP Reconnect]:

Dotčená témata:

  • Microservices – výhody, nevýhody, výzvy
  • Docker Basics – architektura
    • container
    • image
    • Docker Client
    • Docker Daemon
    • Docker Registry
    • interaktivní režim
    • mapování portů, filesystemu
    • parametrizace
    • Dockerfile
  • Využití Dockeru
    • replikovatelný build
    • izolace a replikace testování
    • produkce
  • Docker Orchestration
    • Docker Swarm
    • Kubernetes
    • Marathon (on Meos)

Bohužel nemáme posledních 5 minut audiozáznamu, kdy Augi mluvil o Dockeru na Windows. Zkusíme to dotočit, ale neslibujeme… ;-)

React a Redux – záznam [Martin Havel, Lukáš Rada, HAVIT Objevitelský den 28.11.2017]

Záznam z úvodního brífingu pro náš HAVIT Objevitelský den (28.11.2017), kdy se snažíme na jeden den odpojit od práce a věnovat ho sebevzdělávání např. formou hrátek s libovolnou technologií. Kdo neměl vybráno téma vlastní, mohl se tentokrát připojit k objevování Reactu a Reduxu.

Záznam je publikován na našem HAVIT YouTube Channel.

React

První část – React – prezentoval Martin Havel:

Redux

Druhou část – Redux – prezentoval Lukáš Rada:

 

Serverless Computing [Miroslav Holec, Microsoft DevTest a DevOps 2017]

Záznam z našeho příspěvku na Microsoft DevTest a DevOps Day (15.11.2017), který jsme spolupořádali. Je publikován na našem HAVIT YouTube Channel. Téma prezentoval Miroslav Holec:

Dotčená témata:

  • Azure Logic Apps
  • Azure Functions
  • Azure Event Grid

 

Monitoring aplikaci v cloudu i on-premise [Miroslav Holec, Microsoft DevTest a DevOps 2017]

Záznam z našeho příspěvku na Microsoft DevTest a DevOps Day (15.11.2017), který jsme spolupořádali. Je publikován na našem HAVIT YouTube Channel. Téma prezentoval Miroslav Holec:

Dotčená témata:

  • Log Analytics
  • Azure Monitor
  • Application Insights

 

IoC jak a proč – záznam [Jiří Činčura, HAVIT Vzdělávací okénko 23.11.2017]

Záznam z interního vzdělávacího okénka HAVIT z 23.11.2017 je publikován na našem HAVIT YouTube Channel. Téma prezentoval Jiří Činčura a záznam zahrnuje i větší část následné diskuze (omluvte sníženou kvalitu zvuku v této části):

Záměrem tohoto setkání bylo shrnutí a designová rozprava nad smysluplností používání IoC/DI pro line-of-business aplikace a custom-development. V HAVITu se snažíme dávat přednost odbornému porozumění a hledání konsensu před silovým uplatňováním standardů. Setkání nám pomohlo utřídit myšlenky, prostor dostal i alternativní pohled na věc.

(Počáteční narážka na performance statických metod viz předcházející Twitter diskuze a z ní indukované srovnání výkonu statických a instančních volání metod od Jirky Činčury.)

 

Shrnutí mého #NoResharper challenge s Visual Studio 2017

Jak přišlo na začátku roku Visual Studio 2017, rozhodl jsem se jako obvykle zkusit svůj #NoResharper challenge. S každou novou major-verzí VS zkouším, jestli by se dala používat bez Resharperu. Obecně mám rád mnoho z funkcí Resharperu, ale cena, kterou za to mám zaplatit ztrátou výkonu a stability je velkým protivníkem. Štve mě taky, že R# není v podstatě rozšířením, ale znásilní VS tak, že překryje dost podstatnou část jeho funkcí zcela vlastní implementací. Snažím se proto opakovaně najít light-weight setup bez Resharperu, kde bych si vystačil jen s čistým VS a pár lehkými doplňky do něj.

Resharper jsem v minulosti používal intenzivně. V dobách Visual Studio .NET a Visual Studio .NET 2003 to byla nezbytnost. VS2005 přišlo s prvními refaktoringy, tehdy mi to stačilo a fungoval jsem bez R# až zhruba do VS2013, kdy jsem se nechal přesvědčit dát R# další šanci. Resharper mi tehdy výborně posloužil pro nové výzvy spojené s moderními vývojářskými technikami (IoC/DI, unit-testing, …), protože pro mnoho jeho funkcí nebyla rozumná „lehká“ alternativa (dosud nepřekonané T-navigace, Go to definition, Introduce and initialize a field from constructor parameter, Adjust namespaces, atp.).

S příchodem Visual Studia 2017 se poměr sil opět změnil. VS2017 se svojí vylepšenou T-navigací (Go to…), s pomocí Roslyn-based refactorings (e.g. Roslynator) a updaty přinášejícími stále nové vylepšení produktivity mě nejenom zlákalo pro další #NoResharper challenge, ale po zhruba deseti měsících mohu konstatovat, že mi Resharper vůbec nechybí.

Moje aktuální Visual Studio je:

Když tak koukám na ten seznam, vypadá to, že bych vlastně mohl fungovat s úplně čistým VS2017 bez větších kompromisů. Největší překvapení pro mě bylo zjištění, že mám Roslynator vypnutý a ani jsem si toho nevšiml. (Vypnul jsem ho s příchodem VS2017 15.3 update, kdy jsem chtěl vyzkoušet novinky v něm.)

(Roslynator Refactorings jsem si zase zapnul, protože mi nepřinášel žádné komplikace, jen drobné příjemné pomůcky pro kódování. Nicméně se ukázalo, že kdyby se mělo sebemenší zaváhání objevit, klidně se obejdu bez něj.)

UPDATE: Pokud postrádáte CamelHumps, zkuste Subword Navigation extension.

 

 

 

 

Connect(); 2017 – přehled oznámených novinek

Od 15. do 17. listopadu proběhla online vývojářská konference Microsoft Connect(); 2017, která přinesla řadu zásadních oznámení a novinek. Pro základní orientaci přináším přehled těch nejdůležitějších. Záznamy jednotlivých session si můžete stále přehrát.

Visual Studio & Developer Productivity

https://blogs.msdn.microsoft.com/visualstudio/2017/11/15/the-latest-in-developer-productivity-and-app-experiences/

Team Foundation Server / Visual Studio Team Services

https://blogs.msdn.microsoft.com/bharry/2017/11/15/connect-announcements/

  • Team Foundation Server 2018 – final release. Přináší pro on-premise funkčnost, kterou již známe z onlinového VSTS:
    • Mobile work item experience – responsivní podoba TFS webu
    • Wiki – jednoduchá Wiki založená na GIT-repository s Markdown soubory (ála GitHub)
    • Git Forks – forking ála GitHub
    • GVFS – viz dále
    • Graphical release definition editor
    • Deployment groups
  • GVFS – Git Virtual File System – umožní efektivní práci s obrovskými repository (ála Windows source codes), kdy jsou na pracovní stanici staženy pouze minimální potřebné soubory a zbytek zůstává „virtuální“ a je stahován dle potřeby
  • Azure DevOps Projects – zjednodušeně řečeno onboarding wizzard pro Azure a VSTS, který pro různé typy projektů (.NET, Java, Node.js, Python, …) založí šablonu aplikace, GIT repo, CI/CD pipeline, atd.
  • YAML – Pipeline as code (public preview) – podpora YAML pro VSTS buildy – víceméně textová podoba vytváření build definic do VSTS.
  • Release management gates – možnost vytváření podmínek pro posun release do dalšího deployment prostředí, např. „žádné nové bugy“ (obecně libovolné Work Item Query), stav Azure Monitoru, či dle výsledku volání libovolného REST API či Azure Function.
  • VSTS Symbol Server (public preview)  – TFS (resp. zatím VSTS) se konečně stává symbol-serverem pro uchovávání a publikování PDB souborů. S každým buildem lze PDB symboly uchovat a následně je získávat do Visual Studia, Windows Debuggeru či jakoukoliv další potřebu.
  • Hosted MacOS Build Agents – ve VSTS se objevila možnost poslat build na Hosted MacOS agenta. Mimochodem je tam nově i Hosted Linux.
  • TFS data import service (general availability) – finální release služby pro import on-premise databáze TFS do online VSTS
  • VSTS CLI (public preview) – command-line tools pro VSTS a TFS, git-like commands, atp.

Data

  • Microsoft SQL Operations Studio (Preview) – odlehčená multiplatformní podoba SQL Server Management Studia
  • Azure Databricks (Preview) – Apache-Spark jako služba na Azure
  • Apache Cassandra API for Azure Cosmos DB (Preview) – jako další možnost připojení na Cosmos DB přibylo API dle Apache Cassandra.
  • Microsoft is joining the MariaDB Foundation – MariaDB – fork MySQL od jejího původního autora, získává podporu Microsoftu coby platinum sponzora tohoto open-source projektu. (Mimochodem věděli jste, že se obě tyto databáze vlastně jmenují po dceři jejich autora? MySQL není „moje“, ale švédská Maruška.)

Xamarin

https://blog.xamarin.com/xamarin-announcements-microsoft-connect-2017/

  • .NET Embedding
  • Xamarin.Forms 2.5
    • Xamarin.Forms Native Forms
    • Xamarin.Forms Layout Compression
    • Xamarin.Forms & XAML Standard
  • Xamarin Live Player
  • Xamarin Workbooks open-sourced

AI – Artificial Intelligence

Zaznělo mnoho dalších drobností a náznaků, spousta produktů releasovalo drobnější updates. Směřující myšlenky se točily rozhodně kolem AI.