Category Archives: Development Tools

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… ;-)

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.

TFS – Work Item Queries – záznam [Jiří Kanda, HAVIT Vzdělávací okénko 9.11.2017]

Záznam z interního vzdělávacího okénka HAVIT z 9.11.2017 je publikován na našem HAVIT YouTube Channel. Téma prezentoval Jiří Kanda:

Dotčená témata:

  • Search work items
  • Queries Editor
  • @Me, @Today, @CurrentIteration
  • operátor Was Ever
  • Charts
  • Type of Queries – Flat List, Tree of Work Items, …

WinDbg: SOSEX Help – Command Reference

SOSEX je jedno z mála rozšíření Windows Debuggeru pro .NET (managed code). Přidává pár užitečných příkazů k základnímu SOS, není však snadné seznam podporovaných příkazů online najít.
Seznam příkazů se dá získat přes !sosex.help. Výstup se může hodit, pokud hledáte, která extension bude pro váš scénář diagnostiky nejpříhodnější.

0:000> !sosex.help
SOSEX - Copyright 2007-2015 by Steve Johnson - http://www.stevestechspot.com/
To report bugs or offer feedback about SOSEX, please email sjjohnson@pobox.com
Quick Ref:
--------------------------------------------------
bhi       [filename]                                     BuildHeapIndex - Builds an index file for heap objects.
bpsc      (Deprecated.  Use !mbp instead)
chi                                                      ClearHeapIndex - Frees all resources used by the heap index and removes it from memory.
dlk       [-d]                                           Displays deadlocks between SyncBlocks and/or ReaderWriterLocks
dumpfd    <FieldAddr>                                    Dumps the properties of a FieldDef structure
dumpgen   <GenNum> [-free] [-stat] [-type <TYPE_NAME>]   Dumps the contents of the specified generation
                   [-nostrings] [-live] [-dead] [-short]
finq      [GenNum] [-stat]                               Displays objects in the finalization queue
frq       [-stat]                                        Displays objects in the Freachable queue
gcgen     <ObjectAddr>                                   Displays the GC generation of the specified object
gch       [HandleType]... [-stat]                        Lists all GCHandles, optionally filtered by specified handle types
help      [CommandName]                                  Display this screen or details about the specified command
lhi       [filename]                                     LoadHeapIndex - load the heap index into memory.
mbc       <SOSEX breakpoint ID | *>                      Clears the specified or all managed breakpoints
mbd       <SOSEX breakpoint ID | *>                      Disables the specified or all managed breakpoints
mbe       <SOSEX breakpoint ID | *>                      Enables the specified or all managed breakpoints
mbl       [SOSEX breakpoint ID]                          Prints the specified or all managed breakpoints
mbm       <Type/MethodFilter> [ILOffset] [Options]       Sets a managed breakpoint on methods matching the specified filter
mbp       <SourceFile> <nLineNum> [ColNum] [Options]     Sets a managed breakpoint at the specified source code location
mdso      [Options]                                      Dumps object references on the stack and in CPU registers in the current context
mdt       [TypeName | VarName | MT] [ADDR] [Options]     Displays the fields of an object or type, optionally recursively
mdv       [nFrameNum]                                    Displays arguments and locals for a managed frame
mfrag     [-stat] [-mt:<MT>]                             Reports free blocks, the type of object following the free block, and fragmentation statistics
mframe    [nFrameNum]                                    Displays or sets the current managed frame for the !mdt and !mdv commands
mgu       // TODO: Document
mk        [FrameCount] [-l] [-p] [-a]                    Prints a stack trace of managed and unmanaged frames
mln       [expression]                                   Displays the type of managed data located at the specified address or the current instruction pointer
mlocks    [-d]                                           Lists all managed lock objects and CriticalSections and their owning threads
mroot     <ObjectAddr> [-all]                            Displays GC roots for the specified object
mt        (no parameters)                                Steps into the managed method at the current position
mu        [address] [-s] [-il] [-n]                      Displays a disassembly around the current instruction with interleaved source, IL and asm code
muf       [MD Address | Code Address] [-s] [-il] [-n]    Displays a disassembly with interleaved source, IL and asm code
mwaits    [-d | LockAddr]                                Lists all waiting threads and, if known, the locks they are waiting on
mx        <Filter String>                                Displays managed type/field/method names matching the specified filter string
rcw       [Object or SyncBlock Addr]                     Displays Runtime Callable Wrapper (RCW) COM interop data.
refs      <ObjectAddr> [-target|-source]                 Displays all references from and to the specified object
rwlock    [ObjectAddr | -d]                              Displays all RWLocks or, if provided a RWLock address, details of the specified lock
sosexhelp [CommandName]                                  Display this screen or details about the specified command
strings   [ModuleAddress] [Options]                      Search the managed heap or a module for strings matching the specified criteria

ListGcHandles - See gch

Use !help <command> or !sosexhelp <command> for more details about each command.
You can also use the /? (or -?) option on any command to get help for that command.

Visual Studio: Klávesové zkratky pro navigaci na další/předchozí metodu v kódu

V Resharperu jsou známé klávesové zkratky pro navigaci na dalšího (Alt+Down) resp. předchozího (Alt+Up) membera v kódu. Málo se ale ví, že i čisté Visual Studio toto nyní umí.

Ve Visual Studiu (minimálně ve verzi 2017, ale nejspíš to umí i starší verze) můžete tyto klávesové zkratky získat namapováním příkazů Edit.NextMethodEdit.PreviousMethod (přestože mluvíme o metodách, ve skutečnosti se skáče po memberech). Tyto commandy bývaly funkční pouze pro Visual Basic, jak se teď ale vývoj pro všechny jazyky sjednocuje, fungují i v C#:

2017-09-26_10-12-19

…já asi zvolím klávesové zkratky Ctrl+UpCtrl+Down, protože mi to nějak lépe jde pod ruce a to výchozí skrolování, co tam je, je stejně k ničemu. Mimochodem Alt+Up/Down používám pro posun řádku/selection o řádek výš/níž.